SOURCE_FILE@0..146
  FN@0..145
    FN_KW@0..2 "fn"
    WHITESPACE@2..3 " "
    NAME@3..7
      IDENT@3..7 "main"
    PARAM_LIST@7..9
      L_PAREN@7..8 "("
      R_PAREN@8..9 ")"
    WHITESPACE@9..10 " "
    BLOCK_EXPR@10..145
      L_CURLY@10..11 "{"
      WHITESPACE@11..16 "\n    "
      LET_STMT@16..27
        LET_KW@16..19 "let"
        WHITESPACE@19..20 " "
        IDENT_PAT@20..21
          NAME@20..21
            IDENT@20..21 "a"
        WHITESPACE@21..22 " "
        EQ@22..23 "="
        WHITESPACE@23..24 " "
        TUPLE_EXPR@24..26
          L_PAREN@24..25 "("
          R_PAREN@25..26 ")"
        SEMICOLON@26..27 ";"
      WHITESPACE@27..32 "\n    "
      LET_STMT@32..47
        LET_KW@32..35 "let"
        WHITESPACE@35..36 " "
        IDENT_PAT@36..41
          MUT_KW@36..39 "mut"
          WHITESPACE@39..40 " "
          NAME@40..41
            IDENT@40..41 "b"
        WHITESPACE@41..42 " "
        EQ@42..43 "="
        WHITESPACE@43..44 " "
        TUPLE_EXPR@44..46
          L_PAREN@44..45 "("
          R_PAREN@45..46 ")"
        SEMICOLON@46..47 ";"
      WHITESPACE@47..52 "\n    "
      LET_STMT@52..67
        LET_KW@52..55 "let"
        WHITESPACE@55..56 " "
        IDENT_PAT@56..61
          REF_KW@56..59 "ref"
          WHITESPACE@59..60 " "
          NAME@60..61
            IDENT@60..61 "c"
        WHITESPACE@61..62 " "
        EQ@62..63 "="
        WHITESPACE@63..64 " "
        TUPLE_EXPR@64..66
          L_PAREN@64..65 "("
          R_PAREN@65..66 ")"
        SEMICOLON@66..67 ";"
      WHITESPACE@67..72 "\n    "
      LET_STMT@72..91
        LET_KW@72..75 "let"
        WHITESPACE@75..76 " "
        IDENT_PAT@76..85
          REF_KW@76..79 "ref"
          WHITESPACE@79..80 " "
          MUT_KW@80..83 "mut"
          WHITESPACE@83..84 " "
          NAME@84..85
            IDENT@84..85 "d"
        WHITESPACE@85..86 " "
        EQ@86..87 "="
        WHITESPACE@87..88 " "
        TUPLE_EXPR@88..90
          L_PAREN@88..89 "("
          R_PAREN@89..90 ")"
        SEMICOLON@90..91 ";"
      WHITESPACE@91..96 "\n    "
      LET_STMT@96..111
        LET_KW@96..99 "let"
        WHITESPACE@99..100 " "
        IDENT_PAT@100..105
          NAME@100..101
            IDENT@100..101 "e"
          WHITESPACE@101..102 " "
          AT@102..103 "@"
          WHITESPACE@103..104 " "
          WILDCARD_PAT@104..105
            UNDERSCORE@104..105 "_"
        WHITESPACE@105..106 " "
        EQ@106..107 "="
        WHITESPACE@107..108 " "
        TUPLE_EXPR@108..110
          L_PAREN@108..109 "("
          R_PAREN@109..110 ")"
        SEMICOLON@110..111 ";"
      WHITESPACE@111..116 "\n    "
      LET_STMT@116..143
        LET_KW@116..119 "let"
        WHITESPACE@119..120 " "
        IDENT_PAT@120..137
          REF_KW@120..123 "ref"
          WHITESPACE@123..124 " "
          MUT_KW@124..127 "mut"
          WHITESPACE@127..128 " "
          NAME@128..129
            IDENT@128..129 "f"
          WHITESPACE@129..130 " "
          AT@130..131 "@"
          WHITESPACE@131..132 " "
          IDENT_PAT@132..137
            NAME@132..133
              IDENT@132..133 "g"
            WHITESPACE@133..134 " "
            AT@134..135 "@"
            WHITESPACE@135..136 " "
            WILDCARD_PAT@136..137
              UNDERSCORE@136..137 "_"
        WHITESPACE@137..138 " "
        EQ@138..139 "="
        WHITESPACE@139..140 " "
        TUPLE_EXPR@140..142
          L_PAREN@140..141 "("
          R_PAREN@141..142 ")"
        SEMICOLON@142..143 ";"
      WHITESPACE@143..144 "\n"
      R_CURLY@144..145 "}"
  WHITESPACE@145..146 "\n"
