// File: /workspace/github_cpp_makefile_star2_O2/ArashPartow[P]exprtk-extras/exprtk_maze_generator.cpp
// Function: void maze_generator<double>()
void maze_generator()
{
   typedef exprtk::symbol_table<T>         symbol_table_t;
   typedef exprtk::expression<T>           expression_t;
   typedef exprtk::parser<T>               parser_t;
   typedef exprtk::function_compositor<T>  compositor_t;
   typedef typename compositor_t::function function_t;

   const T width  = T(40);
   const T height = T(30);

   const T N = T(1);
   const T E = T(2);
   const T S = T(3);
   const T W = T(4);

   std::vector<T> board           (static_cast<std::size_t>(width * height), T(0));
   std::vector<T> north_wall_board(static_cast<std::size_t>(width * height), T(0));
   std::vector<T> west_wall_board (static_cast<std::size_t>(width * height), T(0));

   shuffle<T> shuffle;

   exprtk::rtl::io::package<T> io_package;

   symbol_table_t symbol_table;

   symbol_table.add_constant( "width"            , width           );
   symbol_table.add_constant( "height"           , height          );
   symbol_table.add_constant( "N"                , N               );
   symbol_table.add_constant( "E"                , E               );
   symbol_table.add_constant( "S"                , S               );
   symbol_table.add_constant( "W"                , W               );

   symbol_table.add_vector  ( "board"            , board           );
   symbol_table.add_vector  ( "north_wall_board" , north_wall_board);
   symbol_table.add_vector  ( "west_wall_board"  , west_wall_board );

   symbol_table.add_function( "shuffle"          , shuffle         );
   symbol_table.add_function( "print_digit"      ,
                             [](T v) ->T
                             { printf(" %d ",static_cast<int>(v)); return 0; });

   symbol_table.add_package (io_package);

   compositor_t compositor(symbol_table);

   compositor.load_variables(true);
   compositor.load_vectors  (true);

   compositor.add(
      function_t("get_board")
      .vars("x", "y")
      .expression
      ( " board[y * width + x]; " ));

   compositor.add(
      function_t("set_board")
      .vars("x", "y", "value")
      .expression
      ( " board[y * width + x] := value; " ));

   compositor.add(
      function_t("get_nwall_board")
      .vars("x", "y")
      .expression
      ( " north_wall_board[y * width + x]; " ));

   compositor.add(
      function_t("get_wwall_board")
      .vars("x", "y")
      .expression
      ( " west_wall_board[y * width + x]; " ));

   compositor.add(
      function_t("set_nwall_board")
      .vars("x", "y", "value")
      .expression
      ( " north_wall_board[y * width + x] := value; " ));

   compositor.add(
      function_t("set_wwall_board")
      .vars("x", "y", "value")
      .expression
      ( " west_wall_board[y * width + x] := value; " ));

   compositor.add(
      function_t("display_maze")
      .expression
      (
         " for (var x := 0; x < width; x += 1)                               "
         " {                                                                 "
         "    print('+---');                                                 "
         " };                                                                "
         "                                                                   "
         " println('+');                                                     "
         "                                                                   "
         " for (var y := 0; y < height; y += 1)                              "
         " {                                                                 "
         "    for (var x := 0; x < width; x += 1)                            "
         "    {                                                              "
         "       var segment := get_wwall_board(x,y) == W ? '    ' : '|   '; "
         "       print(segment);                                             "
         "    };                                                             "
         "                                                                   "
         "    println('|');                                                  "
         "                                                                   "
         "    for (var x := 0; x < width; x += 1)                            "
         "    {                                                              "
         "       var segment := get_nwall_board(x,y) == N ? '+   ' : '+---'; "
         "       print(segment);                                             "
         "    };                                                             "
         "                                                                   "
         "    println('+');                                                  "
         " };                                                                "
         "                                                                   "
         " println();                                                        "
      ));

   compositor.add(
      function_t("generate_maze")
      .vars("x","y")
      .expression
      (
         " set_board(x, y, 1);                                                  "
         "                                                                      "
         " var x_move [4] := { -1,  0, +1,  0 };                                "
         " var y_move [4] := {  0, +1,  0, -1 };                                "
         " var heading[4] := {  W,  N,  E,  S };                                "
         " var moves  [4] := {  0,  1,  2,  3 };                                "
         "                                                                      "
         " shuffle(moves);                                                      "
         "                                                                      "
         " for (var i := 0; i < moves[]; i += 1)                                "
         " {                                                                    "
         "    var move  := moves[i];                                            "
         "    var new_x := x + x_move[move];                                    "
         "    var new_y := y + y_move[move];                                    "
         "                                                                      "
         "    if ((new_x < 0     ) or (new_y < 0      )) continue;              "
         "    if ((new_x >= width) or (new_y >= height)) continue;              "
         "                                                                      "
         "    if (get_board(new_x, new_y) == 0)                                 "
         "    {                                                                 "
         "       if (heading[move] == N) { set_nwall_board(x, y, N); };         "
         "       if (heading[move] == W) { set_wwall_board(x, y, W); };         "
         "                                                                      "
         "       if (heading[move] == S) { set_nwall_board(new_x, new_y, N); }; "
         "       if (heading[move] == E) { set_wwall_board(new_x, new_y, W); }; "
         "                                                                      "
         "       generate_maze(new_x,new_y);                                    "
         "    }                                                                 "
         " };                                                                   "
      ));

   const std::string maze_generator_program =
      " generate_maze(0, 0); "
      " display_maze();      ";

   expression_t expression;
   expression.register_symbol_table(symbol_table);

   parser_t parser;
   parser.compile(maze_generator_program,expression);

   expression.value();
}

// Assembly:
pushq %rbx
subq $0x2a20, %rsp           # imm = 0x2A20
movabsq $0x4044000000000000, %rax # imm = 0x4044000000000000
movq %rax, 0xc0(%rsp)
movabsq $0x403e000000000000, %rax # imm = 0x403E000000000000
movq %rax, 0xb8(%rsp)
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, 0xb0(%rsp)
movabsq $0x4000000000000000, %rax # imm = 0x4000000000000000
movq %rax, 0xa8(%rsp)
movabsq $0x4008000000000000, %rax # imm = 0x4008000000000000
movq %rax, 0xa0(%rsp)
movabsq $0x4010000000000000, %rax # imm = 0x4010000000000000
movq %rax, 0x98(%rsp)
leaq 0x1640(%rsp), %rbx
andq $0x0, (%rbx)
leaq 0xf8(%rsp), %rdi
leaq 0x260(%rsp), %rcx
movl $0x4b0, %esi            # imm = 0x4B0
movq %rbx, %rdx
callq 0x114264
andq $0x0, (%rbx)
leaq 0xe0(%rsp), %rdi
leaq 0x1640(%rsp), %rdx
leaq 0x260(%rsp), %rcx
movl $0x4b0, %esi            # imm = 0x4B0
callq 0x114264
leaq 0x1640(%rsp), %rdx
andq $0x0, (%rdx)
leaq 0xc8(%rsp), %rdi
leaq 0x260(%rsp), %rcx
movl $0x4b0, %esi            # imm = 0x4B0
callq 0x114264
leaq 0x1640(%rsp), %rdi
callq 0x1142ba
leaq 0x1570(%rsp), %rdi
callq 0x1143e0
leaq 0x10(%rsp), %rdi
pushq $0x1
popq %rsi
callq 0x114484
leaq 0x132cc3(%rip), %rsi    # 0x24611d
leaq 0x260(%rsp), %rdi
leaq 0xc48(%rsp), %rdx
callq 0x113308
leaq 0x10(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0xc0(%rsp), %rdx
callq 0x1144a8
leaq 0x260(%rsp), %rdi
callq 0x111608
leaq 0x132c86(%rip), %rsi    # 0x246123
leaq 0x260(%rsp), %rdi
leaq 0xc48(%rsp), %rdx
callq 0x113308
leaq 0x10(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0xb8(%rsp), %rdx
callq 0x1144a8
leaq 0x260(%rsp), %rdi
callq 0x111608
leaq 0x134488(%rip), %rsi    # 0x247968
leaq 0x260(%rsp), %rdi
leaq 0xc48(%rsp), %rdx
callq 0x113308
leaq 0x10(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0xb0(%rsp), %rdx
callq 0x1144a8
leaq 0x260(%rsp), %rdi
callq 0x111608
leaq 0x134b85(%rip), %rsi    # 0x2480a8
leaq 0x260(%rsp), %rdi
leaq 0xc48(%rsp), %rdx
callq 0x113308
leaq 0x10(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0xa8(%rsp), %rdx
callq 0x1144a8
leaq 0x260(%rsp), %rdi
callq 0x111608
leaq 0x132bc4(%rip), %rsi    # 0x24612a
leaq 0x260(%rsp), %rdi
leaq 0xc48(%rsp), %rdx
callq 0x113308
leaq 0x10(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0xa0(%rsp), %rdx
callq 0x1144a8
leaq 0x260(%rsp), %rdi
callq 0x111608
leaq 0x132b83(%rip), %rsi    # 0x24612c
leaq 0x260(%rsp), %rdi
leaq 0xc48(%rsp), %rdx
callq 0x113308
leaq 0x10(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0x98(%rsp), %rdx
callq 0x1144a8
leaq 0x260(%rsp), %rdi
callq 0x111608
leaq 0x132b4d(%rip), %rsi    # 0x246139
leaq 0x260(%rsp), %rdi
leaq 0xc48(%rsp), %rdx
callq 0x113308
leaq 0x10(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0xf8(%rsp), %rdx
callq 0x114524
leaq 0x260(%rsp), %rdi
callq 0x111608
leaq 0x132aff(%rip), %rsi    # 0x24612e
leaq 0x260(%rsp), %rdi
leaq 0xc48(%rsp), %rdx
callq 0x113308
leaq 0x10(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0xe0(%rsp), %rdx
callq 0x114524
leaq 0x260(%rsp), %rdi
callq 0x111608
leaq 0x132acd(%rip), %rsi    # 0x24613f
leaq 0x260(%rsp), %rdi
leaq 0xc48(%rsp), %rdx
callq 0x113308
leaq 0x10(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0xc8(%rsp), %rdx
callq 0x114524
leaq 0x260(%rsp), %rdi
callq 0x111608
leaq 0x132a9a(%rip), %rsi    # 0x24614f
leaq 0x260(%rsp), %rdi
leaq 0xc48(%rsp), %rdx
callq 0x113308
leaq 0x10(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0x1640(%rsp), %rdx
callq 0x11458e
leaq 0x260(%rsp), %rdi
callq 0x111608
leaq 0x132a5f(%rip), %rsi    # 0x246157
leaq 0x260(%rsp), %rdi
leaq 0xc48(%rsp), %rdx
callq 0x113308
leaq 0x589c(%rip), %rdx      # 0x118fb0
leaq 0x10(%rsp), %rdi
leaq 0x260(%rsp), %rsi
callq 0x114656
leaq 0x260(%rsp), %rdi
callq 0x111608
leaq 0x1570(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x118fd8
leaq 0x260(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x11470a
movw $0x101, 0xc40(%rsp)     # imm = 0x101
leaq 0x1329fb(%rip), %rsi    # 0x246163
leaq 0x110(%rsp), %rdi
leaq 0x78(%rsp), %rdx
callq 0x113308
leaq 0xc48(%rsp), %rdi
leaq 0x110(%rsp), %rsi
callq 0x114828
leaq 0x1328df(%rip), %rsi    # 0x246075
leaq 0x18(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x113308
leaq 0x133c10(%rip), %rsi    # 0x2473bc
leaq 0x38(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x113308
leaq 0xc48(%rsp), %rdi
leaq 0x18(%rsp), %rsi
leaq 0x38(%rsp), %rdx
callq 0x114874
movq %rax, %rbx
leaq 0x132991(%rip), %rsi    # 0x24616d
leaq 0x58(%rsp), %rdi
leaq 0xb(%rsp), %rdx
callq 0x113308
leaq 0x20(%rbx), %rdi
leaq 0x58(%rsp), %rsi
callq 0x111580
leaq 0x260(%rsp), %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x114818
leaq 0x58(%rsp), %rdi
callq 0x111608
leaq 0x38(%rsp), %rdi
callq 0x111608
leaq 0x18(%rsp), %rdi
callq 0x111608
leaq 0xc48(%rsp), %rdi
callq 0x1148a0
leaq 0x110(%rsp), %rdi
callq 0x111608
leaq 0x13293b(%rip), %rsi    # 0x246185
leaq 0x110(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x113308
leaq 0xc48(%rsp), %rdi
leaq 0x110(%rsp), %rsi
callq 0x114828
leaq 0x1327fd(%rip), %rsi    # 0x246075
leaq 0x18(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x113308
leaq 0x133b2e(%rip), %rsi    # 0x2473bc
leaq 0x38(%rsp), %rdi
leaq 0xb(%rsp), %rdx
callq 0x113308
leaq 0x133b02(%rip), %rsi    # 0x2473a6
leaq 0x58(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x113308
leaq 0xc48(%rsp), %rdi
leaq 0x18(%rsp), %rsi
leaq 0x38(%rsp), %rdx
leaq 0x58(%rsp), %rcx
callq 0x1148c0
movq %rax, %rbx
leaq 0x1328b6(%rip), %rsi    # 0x24618f
leaq 0x78(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x113308
leaq 0x20(%rbx), %rdi
leaq 0x78(%rsp), %rsi
callq 0x111580
leaq 0x260(%rsp), %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x114818
leaq 0x78(%rsp), %rdi
callq 0x111608
leaq 0x58(%rsp), %rdi
callq 0x111608
leaq 0x38(%rsp), %rdi
callq 0x111608
leaq 0x18(%rsp), %rdi
callq 0x111608
leaq 0xc48(%rsp), %rdi
callq 0x1148a0
leaq 0x110(%rsp), %rdi
callq 0x111608
leaq 0x13285f(%rip), %rsi    # 0x2461b0
leaq 0x110(%rsp), %rdi
leaq 0x78(%rsp), %rdx
callq 0x113308
leaq 0xc48(%rsp), %rdi
leaq 0x110(%rsp), %rsi
callq 0x114828
leaq 0x1326f6(%rip), %rsi    # 0x246075
leaq 0x18(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x113308
leaq 0x133a27(%rip), %rsi    # 0x2473bc
leaq 0x38(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x113308
leaq 0xc48(%rsp), %rdi
leaq 0x18(%rsp), %rsi
leaq 0x38(%rsp), %rdx
callq 0x114874
movq %rax, %rbx
leaq 0x1327fb(%rip), %rsi    # 0x2461c0
leaq 0x58(%rsp), %rdi
leaq 0xb(%rsp), %rdx
callq 0x113308
leaq 0x20(%rbx), %rdi
leaq 0x58(%rsp), %rsi
callq 0x111580
leaq 0x260(%rsp), %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x114818
leaq 0x58(%rsp), %rdi
callq 0x111608
leaq 0x38(%rsp), %rdi
callq 0x111608
leaq 0x18(%rsp), %rdi
callq 0x111608
leaq 0xc48(%rsp), %rdi
callq 0x1148a0
leaq 0x110(%rsp), %rdi
callq 0x111608
leaq 0x1327b0(%rip), %rsi    # 0x2461e3
leaq 0x110(%rsp), %rdi
leaq 0x78(%rsp), %rdx
callq 0x113308
leaq 0xc48(%rsp), %rdi
leaq 0x110(%rsp), %rsi
callq 0x114828
leaq 0x132614(%rip), %rsi    # 0x246075
leaq 0x18(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x113308
leaq 0x133945(%rip), %rsi    # 0x2473bc
leaq 0x38(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x113308
leaq 0xc48(%rsp), %rdi
leaq 0x18(%rsp), %rsi
leaq 0x38(%rsp), %rdx
callq 0x114874
movq %rax, %rbx
leaq 0x13274c(%rip), %rsi    # 0x2461f3
leaq 0x58(%rsp), %rdi
leaq 0xb(%rsp), %rdx
callq 0x113308
leaq 0x20(%rbx), %rdi
leaq 0x58(%rsp), %rsi
callq 0x111580
leaq 0x260(%rsp), %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x114818
leaq 0x58(%rsp), %rdi
callq 0x111608
leaq 0x38(%rsp), %rdi
callq 0x111608
leaq 0x18(%rsp), %rdi
callq 0x111608
leaq 0xc48(%rsp), %rdi
callq 0x1148a0
leaq 0x110(%rsp), %rdi
callq 0x111608
leaq 0x132700(%rip), %rsi    # 0x246215
leaq 0x110(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x113308
leaq 0xc48(%rsp), %rdi
leaq 0x110(%rsp), %rsi
callq 0x114828
leaq 0x132532(%rip), %rsi    # 0x246075
leaq 0x18(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x113308
leaq 0x133863(%rip), %rsi    # 0x2473bc
leaq 0x38(%rsp), %rdi
leaq 0xb(%rsp), %rdx
callq 0x113308
leaq 0x133837(%rip), %rsi    # 0x2473a6
leaq 0x58(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x113308
leaq 0xc48(%rsp), %rdi
leaq 0x18(%rsp), %rsi
leaq 0x38(%rsp), %rdx
leaq 0x58(%rsp), %rcx
callq 0x1148c0
movq %rax, %rbx
leaq 0x132681(%rip), %rsi    # 0x246225
leaq 0x78(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x113308
leaq 0x20(%rbx), %rdi
leaq 0x78(%rsp), %rsi
callq 0x111580
leaq 0x260(%rsp), %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x114818
leaq 0x78(%rsp), %rdi
callq 0x111608
leaq 0x58(%rsp), %rdi
callq 0x111608
leaq 0x38(%rsp), %rdi
callq 0x111608
leaq 0x18(%rsp), %rdi
callq 0x111608
leaq 0xc48(%rsp), %rdi
callq 0x1148a0
leaq 0x110(%rsp), %rdi
callq 0x111608
leaq 0x132635(%rip), %rsi    # 0x246251
leaq 0x110(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x113308
leaq 0xc48(%rsp), %rdi
leaq 0x110(%rsp), %rsi
callq 0x114828
leaq 0x13242b(%rip), %rsi    # 0x246075
leaq 0x18(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x113308
leaq 0x13375c(%rip), %rsi    # 0x2473bc
leaq 0x38(%rsp), %rdi
leaq 0xb(%rsp), %rdx
callq 0x113308
leaq 0x133730(%rip), %rsi    # 0x2473a6
leaq 0x58(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x113308
leaq 0xc48(%rsp), %rdi
leaq 0x18(%rsp), %rsi
leaq 0x38(%rsp), %rdx
leaq 0x58(%rsp), %rcx
callq 0x1148c0
movq %rax, %rbx
leaq 0x1325b6(%rip), %rsi    # 0x246261
leaq 0x78(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x113308
leaq 0x20(%rbx), %rdi
leaq 0x78(%rsp), %rsi
callq 0x111580
leaq 0x260(%rsp), %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x114818
leaq 0x78(%rsp), %rdi
callq 0x111608
leaq 0x58(%rsp), %rdi
callq 0x111608
leaq 0x38(%rsp), %rdi
callq 0x111608
leaq 0x18(%rsp), %rdi
callq 0x111608
leaq 0xc48(%rsp), %rdi
callq 0x1148a0
leaq 0x110(%rsp), %rdi
callq 0x111608
leaq 0x132569(%rip), %rsi    # 0x24628c
leaq 0x110(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x113308
leaq 0xc48(%rsp), %rdi
leaq 0x110(%rsp), %rsi
callq 0x114828
leaq 0x132548(%rip), %rsi    # 0x246299
leaq 0x18(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x113308
leaq 0xc68(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x111580
leaq 0x260(%rsp), %rdi
leaq 0xc48(%rsp), %rsi
xorl %edx, %edx
callq 0x114818
leaq 0x18(%rsp), %rdi
callq 0x111608
leaq 0xc48(%rsp), %rdi
callq 0x1148a0
leaq 0x110(%rsp), %rdi
callq 0x111608
leaq 0x132bf7(%rip), %rsi    # 0x2469ab
leaq 0x110(%rsp), %rdi
leaq 0x78(%rsp), %rdx
callq 0x113308
leaq 0xc48(%rsp), %rdi
leaq 0x110(%rsp), %rsi
callq 0x114828
leaq 0x132293(%rip), %rsi    # 0x246075
leaq 0x18(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x113308
leaq 0x1335c4(%rip), %rsi    # 0x2473bc
leaq 0x38(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x113308
leaq 0xc48(%rsp), %rdi
leaq 0x18(%rsp), %rsi
leaq 0x38(%rsp), %rdx
callq 0x114874
movq %rax, %rbx
leaq 0x132b91(%rip), %rsi    # 0x2469b9
leaq 0x58(%rsp), %rdi
leaq 0xb(%rsp), %rdx
callq 0x113308
leaq 0x20(%rbx), %rdi
leaq 0x58(%rsp), %rsi
callq 0x111580
leaq 0x260(%rsp), %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x114818
leaq 0x58(%rsp), %rdi
callq 0x111608
leaq 0x38(%rsp), %rdi
callq 0x111608
leaq 0x18(%rsp), %rdi
callq 0x111608
leaq 0xc48(%rsp), %rdi
callq 0x1148a0
leaq 0x110(%rsp), %rdi
callq 0x111608
leaq 0x133312(%rip), %rsi    # 0x2471a8
leaq 0x18(%rsp), %rdi
leaq 0xc48(%rsp), %rdx
callq 0x113308
leaq 0x38(%rsp), %rdi
callq 0x114902
leaq 0x38(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x114962
leaq 0x110(%rsp), %rdi
pushq $0x7f
popq %rsi
callq 0x1149be
leaq 0xc48(%rsp), %rdi
leaq 0x110(%rsp), %rsi
callq 0x114ace
leaq 0x110(%rsp), %rdi
callq 0x1150e6
leaq 0xc48(%rsp), %rdi
leaq 0x18(%rsp), %rsi
leaq 0x38(%rsp), %rdx
callq 0x11512e
movq 0x38(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
leaq 0xc48(%rsp), %rdi
callq 0x1155b0
leaq 0x38(%rsp), %rdi
callq 0x1156ea
leaq 0x18(%rsp), %rdi
callq 0x111608
leaq 0x260(%rsp), %rdi
callq 0x115700
leaq 0x10(%rsp), %rdi
callq 0x115754
leaq 0x1570(%rsp), %rdi
callq 0x115796
leaq 0x1640(%rsp), %rdi
callq 0x1157ac
leaq 0xc8(%rsp), %rdi
callq 0x1157ec
leaq 0xe0(%rsp), %rdi
callq 0x1157ec
leaq 0xf8(%rsp), %rdi
callq 0x1157ec
addq $0x2a20, %rsp           # imm = 0x2A20
popq %rbx
retq
movq %rax, %rbx
leaq 0x110(%rsp), %rdi
callq 0x1150e6
jmp 0x1140f9
jmp 0x113fb2
movq %rax, %rbx
jmp 0x1140f9
movq %rax, %rbx
jmp 0x114103
jmp 0x114070
jmp 0x114053
jmp 0x114053
jmp 0x11410c
jmp 0x114060
jmp 0x114068
jmp 0x114070
jmp 0x114060
jmp 0x114068
jmp 0x114070
jmp 0x114128
jmp 0x114128
jmp 0x114053
jmp 0x11410c
jmp 0x114060
jmp 0x114068
jmp 0x114070
jmp 0x114128
jmp 0x114128
jmp 0x114053
jmp 0x11410c
jmp 0x114060
jmp 0x114068
jmp 0x114070
jmp 0x114053
jmp 0x114053
jmp 0x11410c
jmp 0x114060
jmp 0x114068
jmp 0x114070
jmp 0x114053
jmp 0x114053
jmp 0x11410c
jmp 0x114060
jmp 0x114068
jmp 0x114070
jmp 0x114128
jmp 0x114128
jmp 0x114053
jmp 0x11410c
jmp 0x114060
jmp 0x114068
jmp 0x114070
jmp 0x114053
movq %rax, %rbx
jmp 0x114135
jmp 0x11410c
movq %rax, %rbx
jmp 0x114149
movq %rax, %rbx
jmp 0x114156
movq %rax, %rbx
jmp 0x114163
jmp 0x1140b9
jmp 0x1140b9
jmp 0x1140a4
jmp 0x1140b9
jmp 0x1140a4
jmp 0x1140b9
jmp 0x1140a4
jmp 0x1140b9
jmp 0x1140a4
jmp 0x1140b9
jmp 0x1140a4
jmp 0x1140b9
jmp 0x1140a4
jmp 0x1140b9
jmp 0x1140a4
jmp 0x1140b9
jmp 0x1140a4
jmp 0x1140b9
jmp 0x1140a4
jmp 0x1140b9
jmp 0x1140a4
jmp 0x1140b9
movq %rax, %rbx
leaq 0x260(%rsp), %rdi
callq 0x111608
jmp 0x114170
movq %rax, %rbx
jmp 0x114170
movq %rax, %rbx
jmp 0x11417a
movq %rax, %rbx
jmp 0x114187
movq %rax, %rbx
jmp 0x114194
movq %rax, %rbx
jmp 0x1141a1
movq %rax, %rbx
jmp 0x1141ae
movq %rax, %rbx
leaq 0xc48(%rsp), %rdi
callq 0x1155b0
leaq 0x38(%rsp), %rdi
callq 0x1156ea
leaq 0x18(%rsp), %rdi
jmp 0x11415e
jmp 0x114128
movq %rax, %rbx
jmp 0x11413f
jmp 0x114119
jmp 0x114119
jmp 0x114128
jmp 0x114128
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x111608
jmp 0x11412b
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x111608
leaq 0x38(%rsp), %rdi
callq 0x111608
leaq 0x18(%rsp), %rdi
callq 0x111608
leaq 0xc48(%rsp), %rdi
callq 0x1148a0
leaq 0x110(%rsp), %rdi
callq 0x111608
leaq 0x260(%rsp), %rdi
callq 0x115700
leaq 0x10(%rsp), %rdi
callq 0x115754
leaq 0x1570(%rsp), %rdi
callq 0x115796
leaq 0x1640(%rsp), %rdi
callq 0x1157ac
leaq 0xc8(%rsp), %rdi
callq 0x1157ec
leaq 0xe0(%rsp), %rdi
callq 0x1157ec
leaq 0xf8(%rsp), %rdi
callq 0x1157ec
movq %rbx, %rdi
callq 0x111330