// File: exrd[P]neteruhsp/neteruhsp/neteruhsp.cc
// Function: neteruhsp::generate_and_append_code(neteruhsp::execute_environment_t*, neteruhsp::list_t*)::_::walk(neteruhsp::execute_environment_t*, neteruhsp::ast_node_t const*, neteruhsp::generate_and_append_code(neteruhsp::execute_environment_t*, neteruhsp::list_t*)::generate_context_t*)
static void walk( execute_environment_t* e, const ast_node_t* n, generate_context_t* c )
			{
				switch( n->tag_ )
				{
					case NODE_EMPTY:
						break;

					case NODE_LABEL:
					{
						const auto label_name = n->token_->content_;
						const auto label = search_label( e, label_name );
						assert( label != nullptr );
						label->position_ = static_cast<int>( e->execute_code_->code_size_ );

						code_write( e, OPERATOR_LABEL );
						break;
					}

					case NODE_BLOCK_STATEMENTS:
						if ( n->left_ )
						{ walk( e, n->left_, c ); }
						if ( n->right_ )
						{ walk( e, n->right_, c ); }
						break;

					case NODE_COMMAND:
					{
						assert( n->token_->tag_ == TOKEN_IDENTIFIER );
						const auto command_name = n->token_->content_;

						const auto command = query_command( command_name );
						if ( command == -1 )
						{
							raise_error( "コマンドが見つかりません：%s", command_name );
						}

						const auto top = c->stack_;
						if ( n->left_ != nullptr )
						{
							walk( e, n->left_, c );
						}
						const auto arg_num = c->stack_ -top;

						code_write( e, OPERATOR_COMMAND );
						code_write( e, command );
						code_write( e, arg_num );

						c->stack_ = top;
						break;
					}
					case NODE_ARGUMENTS:
					{
						if ( n->left_ != nullptr )
						{ walk( e, n->left_, c ); }
						if ( n->right_ != nullptr )
						{ walk( e, n->right_, c ); }
						break;
					}

					case NODE_ASSIGN:
					case NODE_ADD_ASSIGN:
					case NODE_SUB_ASSIGN:
					case NODE_MUL_ASSIGN:
					case NODE_DIV_ASSIGN:
					case NODE_MOD_ASSIGN:
					case NODE_BOR_ASSIGN:
					case NODE_BAND_ASSIGN:
					case NODE_BXOR_ASSIGN:
					{
						walk( e, n->left_, c );
						walk( e, n->right_, c );
						switch( n->tag_ )
						{
						case NODE_ASSIGN:		code_write( e, OPERATOR_ASSIGN ); break;
						case NODE_ADD_ASSIGN:	code_write( e, OPERATOR_ADD_ASSIGN ); break;
						case NODE_SUB_ASSIGN:	code_write( e, OPERATOR_SUB_ASSIGN ); break;
						case NODE_MUL_ASSIGN:	code_write( e, OPERATOR_MUL_ASSIGN ); break;
						case NODE_DIV_ASSIGN:	code_write( e, OPERATOR_DIV_ASSIGN ); break;
						case NODE_MOD_ASSIGN:	code_write( e, OPERATOR_MOD_ASSIGN ); break;
						case NODE_BOR_ASSIGN:	code_write( e, OPERATOR_BOR_ASSIGN ); break;
						case NODE_BAND_ASSIGN:	code_write( e, OPERATOR_BAND_ASSIGN ); break;
						case NODE_BXOR_ASSIGN:	code_write( e, OPERATOR_BXOR_ASSIGN ); break;
						default: assert( false ); break;
						}
						c->stack_ -= 2; 
						break;
					}
					case NODE_VARIABLE:
					{
						auto idx_node = n->left_;
						if ( idx_node )
						{
							walk( e, idx_node, c );
						}
						else
						{
							code_write( e, OPERATOR_PUSH_INT );
							code_write( e, 0 );
						}

						const auto var_name = n->token_->content_;
						const auto var = search_variable( e->variable_table_, var_name );
						assert( var != nullptr );

						code_write( e, OPERATOR_PUSH_VARIABLE );
						code_write( e, var );
						++c->stack_;
						break;
					}

					case NODE_EXPRESSION:
						assert( n->left_ != nullptr );
						walk( e, n->left_, c );
						break;

					case NODE_BOR:
					case NODE_BAND:
					case NODE_BXOR:
					case NODE_EQ:
					case NODE_NEQ:
					case NODE_GT:
					case NODE_GTOE:
					case NODE_LT:
					case NODE_LTOE:
					case NODE_ADD:
					case NODE_SUB:
					case NODE_MUL:
					case NODE_DIV:
					case NODE_MOD:
					{
						assert( n->left_ != nullptr );
						walk( e, n->left_, c );
						assert( n->right_ != nullptr );
						walk( e, n->right_, c );

						switch( n->tag_ )
						{
							case NODE_BOR:		code_write( e, OPERATOR_BOR ); break;
							case NODE_BAND:		code_write( e, OPERATOR_BAND ); break;
							case NODE_BXOR:		code_write( e, OPERATOR_BXOR ); break;
							case NODE_EQ:		code_write( e, OPERATOR_EQ ); break;
							case NODE_NEQ:		code_write( e, OPERATOR_NEQ ); break;
							case NODE_GT:		code_write( e, OPERATOR_GT ); break;
							case NODE_GTOE:		code_write( e, OPERATOR_GTOE ); break;
							case NODE_LT:		code_write( e, OPERATOR_LT ); break;
							case NODE_LTOE:		code_write( e, OPERATOR_LTOE ); break;
							case NODE_ADD:		code_write( e, OPERATOR_ADD ); break;
							case NODE_SUB:		code_write( e, OPERATOR_SUB ); break;
							case NODE_MUL:		code_write( e, OPERATOR_MUL ); break;
							case NODE_DIV:		code_write( e, OPERATOR_DIV ); break;
							case NODE_MOD:		code_write( e, OPERATOR_MOD ); break;
							default: assert( false ); break;
						}

						--c->stack_;
						break;
					}

					case NODE_UNARY_MINUS:
					{
						assert( n->left_ != nullptr );
						walk( e, n->left_, c );
						code_write( e, OPERATOR_UNARY_MINUS );
						break;
					}

					case NODE_PRIMITIVE_VALUE:
					{
						switch( n->token_->tag_ )
						{
							case TOKEN_INTEGER:	code_write( e, OPERATOR_PUSH_INT ); code_write( e, atoi( n->token_->content_ ) ); break;
							case TOKEN_REAL:	code_write( e, OPERATOR_PUSH_DOUBLE ); code_write_block( e, atof( n->token_->content_ ) ); break;
							case TOKEN_STRING:	code_write( e, OPERATOR_PUSH_STRING ); code_write( e, n->token_->content_ ); break;
							default: assert( false ); break;
						}
						++c->stack_;
						break;
					}
					case NODE_IDENTIFIER_EXPR:
					{
						assert( n->token_->tag_ == TOKEN_IDENTIFIER );
						const auto ident = n->token_->content_;

						const auto top = c->stack_;
						if ( n->left_ != nullptr )
						{
							walk( e, n->left_, c );
						}
						const auto arg_num = c->stack_ -top;

						const auto function = query_function( ident );
						if ( function >= 0 )
						{
							code_write( e, OPERATOR_FUNCTION );
							code_write( e, function );
							code_write( e, arg_num );
						}
						else
						{
							// システム変数
							const auto sysvar = query_sysvar( ident );
							if ( sysvar >= 0 )
							{
								if ( arg_num > 0 )
								{
									raise_error( "システム変数に添え字はありません : %s", ident );
								}

								code_write( e, OPERATOR_PUSH_SYSVAR );
								code_write( e, sysvar );
							}
							else
							{
								// 配列変数
								if ( arg_num > 1 )
								{
									raise_error( "関数がみつかりません、配列変数の添え字は1次元までです@@ %s", ident );
								}

								const auto var = search_variable( e->variable_table_, ident );
								assert( var != nullptr );

								if ( arg_num == 0 )
								{
									code_write( e, OPERATOR_PUSH_INT );
									code_write( e, 0 );
								}

								code_write( e, OPERATOR_PUSH_VARIABLE );
								code_write( e, var );
							}
						}

						c->stack_ = top +1;
						break;
					}

					case NODE_END:
						code_write( e, OPERATOR_END );
						break;

					case NODE_RETURN:
					{
						if ( n->left_ )
						{
							walk( e, n->left_, c );
							--c->stack_;
						}
						code_write( e, OPERATOR_RETURN );
						code_write( e, n->left_==nullptr ? 0 : 1 );
						break;
					}

					case NODE_GOTO:
					{
						const auto label_node = n->left_;
						assert( label_node != nullptr );
						assert( label_node->tag_ == NODE_LABEL );

						const auto label_name = label_node->token_->content_;
						const auto label = search_label( e, label_name );
						if ( label == nullptr )
						{
							raise_error( "goto：ラベルがみつかりません@@ %s", label_name );
						}

						code_write( e, OPERATOR_GOTO );
						code_write( e, label );
						break;
					}
					case NODE_GOSUB:
					{
						const auto label_node = n->left_;
						assert( label_node != nullptr );
						assert( label_node->tag_ == NODE_LABEL );

						const auto label_name = label_node->token_->content_;
						const auto label = search_label( e, label_name );
						if ( label == nullptr )
						{
							raise_error( "gosub：ラベルがみつかりません@@ %s", label_name );
						}

						code_write( e, OPERATOR_GOSUB );
						code_write( e, label );
						break;
					}

					case NODE_REPEAT:
					{
						if ( n->left_ )
						{
							walk( e, n->left_, c );
							--c->stack_;
						}
						else
						{
							code_write( e, OPERATOR_PUSH_INT );
							code_write( e, -1 );
						}
						const auto pos_head = e->execute_code_->code_size_;
						code_write( e, OPERATOR_REPEAT );
						code_write( e, 0 );// dummy TAIL

						if ( c->repeat_depth_ >= sizeof(c->repeat_head_) /sizeof(*c->repeat_head_) )
						{
							raise_error( "repeat-loop: ソースコード上でネストが深すぎます@@ %d行目", n->token_->appear_line_ );
						}
						c->repeat_head_[c->repeat_depth_] = static_cast<int>( pos_head );
						++c->repeat_depth_;

						code_write( e, OPERATOR_REPEAT_CHECK );
						break;
					}
					case NODE_LOOP:
					{
						if ( c->repeat_depth_ <= 0 )
						{
							raise_error( "repeat-loop: repeatがないのにloopを検出しました@@ %d行目", n->token_->appear_line_ );
						}

						const auto loop_head = e->execute_code_->code_size_;
						code_write( e, OPERATOR_LOOP );

						const auto write_offset = c->repeat_head_[c->repeat_depth_ -1] +1;
						e->execute_code_->code_[ write_offset ] = static_cast<int>( loop_head );
						--c->repeat_depth_;
						break;
					}
					case NODE_CONTINUE:		code_write( e, OPERATOR_CONTINUE ); break;
					case NODE_BREAK:		code_write( e, OPERATOR_BREAK ); break;

					case NODE_IF:
					{
						assert( n->left_ != nullptr );
						walk( e, n->left_, c );

						assert( n->right_ != nullptr );
						const auto dispatcher = n->right_;
						assert( dispatcher->tag_ == NODE_IF_DISPATCHER );

						const auto pos_root = e->execute_code_->code_size_;
						code_write( e, OPERATOR_IF );
						code_write( e, 0 );// dummy FALSE

						walk( e, dispatcher->left_, c );
						const auto pos_true_tail = e->execute_code_->code_size_;
						code_write( e, OPERATOR_JUMP_RELATIVE );
						code_write( e, 0 );// dummy TAIL

						const auto pos_false_head = e->execute_code_->code_size_;
						if ( dispatcher->right_ )
						{
							walk( e, dispatcher->right_, c );
						}

						const auto pos_tail = e->execute_code_->code_size_;
						e->execute_code_->code_[ pos_root +1 ] = static_cast<int>( pos_false_head - pos_root );
						e->execute_code_->code_[ pos_true_tail +1 ] = static_cast<int>( pos_tail - pos_true_tail );
						break;
					}
					case NODE_IF_DISPATCHER:
						assert( false );
						break;

					default: assert( false ); break;
				}
			}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x120, %rsp            # imm = 0x120
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rax
movl (%rax), %eax
movq %rax, -0xf0(%rbp)
subq $0x2a, %rax
ja 0xe626
movq -0xf0(%rbp), %rax
leaq 0x4fa8(%rip), %rcx      # 0x12794
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0xe645
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x112f0
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0xd824
jmp 0xd843
leaq 0x83c7(%rip), %rdi      # 0x15bf2
leaq 0x521f(%rip), %rsi      # 0x12a51
movl $0x15dd, %edx           # imm = 0x15DD
leaq 0x87c0(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rax
movl %eax, %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x8(%rbp), %rdi
movl $0x24, %esi
callq 0xe650
jmp 0xe645
movq -0x10(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xd88b
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
movq -0x10(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0xd8ab
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
jmp 0xe645
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x23, (%rax)
jne 0xd8bf
jmp 0xd8de
leaq 0x87d7(%rip), %rdi      # 0x1609d
leaq 0x5184(%rip), %rsi      # 0x12a51
movl $0x15ed, %edx           # imm = 0x15ED
leaq 0x8725(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rdi
callq 0xebb0
movl %eax, -0x34(%rbp)
cmpl $-0x1, -0x34(%rbp)
jne 0xd912
movq -0x30(%rbp), %rsi
leaq 0x87b6(%rip), %rdi      # 0x160c1
movb $0x0, %al
callq 0x4cd0
movq -0x18(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x38(%rbp)
movq -0x10(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xd93b
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
movq -0x18(%rbp), %rax
movl (%rax), %eax
subl -0x38(%rbp), %eax
movl %eax, -0x3c(%rbp)
movq -0x8(%rbp), %rdi
movl $0x27, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
movl -0x34(%rbp), %esi
callq 0xe650
movq -0x8(%rbp), %rdi
movl -0x3c(%rbp), %esi
callq 0xe650
movl -0x38(%rbp), %ecx
movq -0x18(%rbp), %rax
movl %ecx, (%rax)
jmp 0xe645
movq -0x10(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xd99b
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
movq -0x10(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0xd9bb
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
jmp 0xe645
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
movq -0x10(%rbp), %rax
movl (%rax), %eax
addl $-0x5, %eax
movl %eax, %ecx
movq %rcx, -0xf8(%rbp)
subl $0x8, %eax
ja 0xdab2
movq -0xf8(%rbp), %rax
leaq 0x4e65(%rip), %rcx      # 0x12878
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x8(%rbp), %rdi
movl $0x6, %esi
callq 0xe650
jmp 0xdad1
movq -0x8(%rbp), %rdi
movl $0x7, %esi
callq 0xe650
jmp 0xdad1
movq -0x8(%rbp), %rdi
movl $0x8, %esi
callq 0xe650
jmp 0xdad1
movq -0x8(%rbp), %rdi
movl $0x9, %esi
callq 0xe650
jmp 0xdad1
movq -0x8(%rbp), %rdi
movl $0xa, %esi
callq 0xe650
jmp 0xdad1
movq -0x8(%rbp), %rdi
movl $0xb, %esi
callq 0xe650
jmp 0xdad1
movq -0x8(%rbp), %rdi
movl $0xc, %esi
callq 0xe650
jmp 0xdad1
movq -0x8(%rbp), %rdi
movl $0xd, %esi
callq 0xe650
jmp 0xdad1
movq -0x8(%rbp), %rdi
movl $0xe, %esi
callq 0xe650
jmp 0xdad1
leaq 0x5eb6(%rip), %rdi      # 0x1396f
leaq 0x4f91(%rip), %rsi      # 0x12a51
movl $0x1624, %edx           # imm = 0x1624
leaq 0x8532(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x18(%rbp), %rax
movl (%rax), %ecx
subl $0x2, %ecx
movl %ecx, (%rax)
jmp 0xe645
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
je 0xdb07
movq -0x8(%rbp), %rdi
movq -0x48(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
jmp 0xdb20
movq -0x8(%rbp), %rdi
movl $0x1, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
xorl %esi, %esi
callq 0xe650
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x50(%rbp), %rsi
callq 0x9420
movq %rax, -0x58(%rbp)
cmpq $0x0, -0x58(%rbp)
je 0xdb4e
jmp 0xdb6d
leaq 0x6b85(%rip), %rdi      # 0x146da
leaq 0x4ef5(%rip), %rsi      # 0x12a51
movl $0x1638, %edx           # imm = 0x1638
leaq 0x8496(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x8(%rbp), %rdi
movl $0x4, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x11370
movq -0x18(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0xe645
movq -0x10(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xdba5
jmp 0xdbc4
leaq 0x817f(%rip), %rdi      # 0x15d2b
leaq 0x4e9e(%rip), %rsi      # 0x12a51
movl $0x1641, %edx           # imm = 0x1641
leaq 0x843f(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
jmp 0xe645
movq -0x10(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xdbeb
jmp 0xdc0a
leaq 0x8139(%rip), %rdi      # 0x15d2b
leaq 0x4e58(%rip), %rsi      # 0x12a51
movl $0x1654, %edx           # imm = 0x1654
leaq 0x83f9(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
movq -0x10(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0xdc2c
jmp 0xdc4b
leaq 0x814d(%rip), %rdi      # 0x15d80
leaq 0x4e17(%rip), %rsi      # 0x12a51
movl $0x1656, %edx           # imm = 0x1656
leaq 0x83b8(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
movq -0x10(%rbp), %rax
movl (%rax), %eax
addl $-0x10, %eax
movl %eax, %ecx
movq %rcx, -0x100(%rbp)
subl $0xd, %eax
ja 0xdd87
movq -0x100(%rbp), %rax
leaq 0x4bb7(%rip), %rcx      # 0x12840
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x8(%rbp), %rdi
movl $0xf, %esi
callq 0xe650
jmp 0xdda6
movq -0x8(%rbp), %rdi
movl $0x10, %esi
callq 0xe650
jmp 0xdda6
movq -0x8(%rbp), %rdi
movl $0x11, %esi
callq 0xe650
jmp 0xdda6
movq -0x8(%rbp), %rdi
movl $0x12, %esi
callq 0xe650
jmp 0xdda6
movq -0x8(%rbp), %rdi
movl $0x13, %esi
callq 0xe650
jmp 0xdda6
movq -0x8(%rbp), %rdi
movl $0x14, %esi
callq 0xe650
jmp 0xdda6
movq -0x8(%rbp), %rdi
movl $0x15, %esi
callq 0xe650
jmp 0xdda6
movq -0x8(%rbp), %rdi
movl $0x16, %esi
callq 0xe650
jmp 0xdda6
movq -0x8(%rbp), %rdi
movl $0x17, %esi
callq 0xe650
jmp 0xdda6
movq -0x8(%rbp), %rdi
movl $0x18, %esi
callq 0xe650
jmp 0xdda6
movq -0x8(%rbp), %rdi
movl $0x19, %esi
callq 0xe650
jmp 0xdda6
movq -0x8(%rbp), %rdi
movl $0x1a, %esi
callq 0xe650
jmp 0xdda6
movq -0x8(%rbp), %rdi
movl $0x1b, %esi
callq 0xe650
jmp 0xdda6
movq -0x8(%rbp), %rdi
movl $0x1c, %esi
callq 0xe650
jmp 0xdda6
leaq 0x5be1(%rip), %rdi      # 0x1396f
leaq 0x4cbc(%rip), %rsi      # 0x12a51
movl $0x1669, %edx           # imm = 0x1669
leaq 0x825d(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x18(%rbp), %rax
movl (%rax), %ecx
addl $-0x1, %ecx
movl %ecx, (%rax)
jmp 0xe645
movq -0x10(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xddc3
jmp 0xdde2
leaq 0x7f61(%rip), %rdi      # 0x15d2b
leaq 0x4c80(%rip), %rsi      # 0x12a51
movl $0x1672, %edx           # imm = 0x1672
leaq 0x8221(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
movq -0x8(%rbp), %rdi
movl $0x1d, %esi
callq 0xe650
jmp 0xe645
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movl (%rax), %eax
movl %eax, -0x104(%rbp)
subl $0x9, %eax
je 0xde3e
jmp 0xde21
movl -0x104(%rbp), %eax
subl $0xa, %eax
je 0xde78
jmp 0xde2e
movl -0x104(%rbp), %eax
subl $0xb, %eax
je 0xdeb0
jmp 0xded5
movq -0x8(%rbp), %rdi
movl $0x1, %esi
callq 0xe650
movq -0x8(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rdi
callq 0x3230
movq -0x110(%rbp), %rdi
movl %eax, %esi
callq 0xe650
jmp 0xdef4
movq -0x8(%rbp), %rdi
movl $0x2, %esi
callq 0xe650
movq -0x8(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rdi
callq 0x31c0
movq -0x118(%rbp), %rdi
callq 0x113a0
jmp 0xdef4
movq -0x8(%rbp), %rdi
movl $0x3, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rsi
callq 0x11370
jmp 0xdef4
leaq 0x5a93(%rip), %rdi      # 0x1396f
leaq 0x4b6e(%rip), %rsi      # 0x12a51
movl $0x167f, %edx           # imm = 0x167F
leaq 0x810f(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x18(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0xe645
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x23, (%rax)
jne 0xdf13
jmp 0xdf32
leaq 0x8183(%rip), %rdi      # 0x1609d
leaq 0x4b30(%rip), %rsi      # 0x12a51
movl $0x1686, %edx           # imm = 0x1686
leaq 0x80d1(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x18(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x64(%rbp)
movq -0x10(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xdf6b
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
movq -0x18(%rbp), %rax
movl (%rax), %eax
subl -0x64(%rbp), %eax
movl %eax, -0x68(%rbp)
movq -0x60(%rbp), %rdi
callq 0xf6e0
movl %eax, -0x6c(%rbp)
cmpl $0x0, -0x6c(%rbp)
jl 0xdfb4
movq -0x8(%rbp), %rdi
movl $0x28, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
movl -0x6c(%rbp), %esi
callq 0xe650
movq -0x8(%rbp), %rdi
movl -0x68(%rbp), %esi
callq 0xe650
jmp 0xe08e
movq -0x60(%rbp), %rdi
callq 0xbd30
movl %eax, -0x70(%rbp)
cmpl $0x0, -0x70(%rbp)
jl 0xdffd
cmpl $0x0, -0x68(%rbp)
jle 0xdfde
movq -0x60(%rbp), %rsi
leaq 0x8114(%rip), %rdi      # 0x160eb
movb $0x0, %al
callq 0x4cd0
movq -0x8(%rbp), %rdi
movl $0x5, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
movl -0x70(%rbp), %esi
callq 0xe650
jmp 0xe08c
cmpl $0x1, -0x68(%rbp)
jle 0xe015
movq -0x60(%rbp), %rsi
leaq 0x8113(%rip), %rdi      # 0x16121
movb $0x0, %al
callq 0x4cd0
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x60(%rbp), %rsi
callq 0x9420
movq %rax, -0x78(%rbp)
cmpq $0x0, -0x78(%rbp)
je 0xe033
jmp 0xe052
leaq 0x66a0(%rip), %rdi      # 0x146da
leaq 0x4a10(%rip), %rsi      # 0x12a51
movl $0x16ae, %edx           # imm = 0x16AE
leaq 0x7fb1(%rip), %rcx      # 0x15ffe
callq 0x30f0
cmpl $0x0, -0x68(%rbp)
jne 0xe071
movq -0x8(%rbp), %rdi
movl $0x1, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
xorl %esi, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
movl $0x4, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
movq -0x78(%rbp), %rsi
callq 0x11370
jmp 0xe08e
movl -0x64(%rbp), %ecx
addl $0x1, %ecx
movq -0x18(%rbp), %rax
movl %ecx, (%rax)
jmp 0xe645
movq -0x8(%rbp), %rdi
movl $0x2c, %esi
callq 0xe650
jmp 0xe645
movq -0x10(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xe0dd
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
movq -0x18(%rbp), %rax
movl (%rax), %ecx
addl $-0x1, %ecx
movl %ecx, (%rax)
movq -0x8(%rbp), %rdi
movl $0x2b, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rcx
movl $0x1, %esi
xorl %eax, %eax
cmpq $0x0, %rcx
cmovel %eax, %esi
callq 0xe650
jmp 0xe645
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x80(%rbp)
cmpq $0x0, -0x80(%rbp)
je 0xe124
jmp 0xe143
leaq 0x804b(%rip), %rdi      # 0x16176
leaq 0x491f(%rip), %rsi      # 0x12a51
movl $0x16d2, %edx           # imm = 0x16D2
leaq 0x7ec0(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x80(%rbp), %rax
cmpl $0x1, (%rax)
jne 0xe14e
jmp 0xe16d
leaq 0x8037(%rip), %rdi      # 0x1618c
leaq 0x48f5(%rip), %rsi      # 0x12a51
movl $0x16d3, %edx           # imm = 0x16D3
leaq 0x7e96(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x80(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x88(%rbp)
movq -0x8(%rbp), %rdi
movq -0x88(%rbp), %rsi
callq 0x112f0
movq %rax, -0x90(%rbp)
cmpq $0x0, -0x90(%rbp)
jne 0xe1b6
movq -0x88(%rbp), %rsi
leaq 0x7ffc(%rip), %rdi      # 0x161ab
movb $0x0, %al
callq 0x4cd0
movq -0x8(%rbp), %rdi
movl $0x26, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
movq -0x90(%rbp), %rsi
callq 0x11370
jmp 0xe645
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x98(%rbp)
cmpq $0x0, -0x98(%rbp)
je 0xe1f4
jmp 0xe213
leaq 0x7f7b(%rip), %rdi      # 0x16176
leaq 0x484f(%rip), %rsi      # 0x12a51
movl $0x16e3, %edx           # imm = 0x16E3
leaq 0x7df0(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x98(%rbp), %rax
cmpl $0x1, (%rax)
jne 0xe221
jmp 0xe240
leaq 0x7f64(%rip), %rdi      # 0x1618c
leaq 0x4822(%rip), %rsi      # 0x12a51
movl $0x16e4, %edx           # imm = 0x16E4
leaq 0x7dc3(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x98(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0xa0(%rbp)
movq -0x8(%rbp), %rdi
movq -0xa0(%rbp), %rsi
callq 0x112f0
movq %rax, -0xa8(%rbp)
cmpq $0x0, -0xa8(%rbp)
jne 0xe28c
movq -0xa0(%rbp), %rsi
leaq 0x7f54(%rip), %rdi      # 0x161d9
movb $0x0, %al
callq 0x4cd0
movq -0x8(%rbp), %rdi
movl $0x25, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
movq -0xa8(%rbp), %rsi
callq 0x11370
jmp 0xe645
movq -0x10(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xe2dc
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
movq -0x18(%rbp), %rax
movl (%rax), %ecx
addl $-0x1, %ecx
movl %ecx, (%rax)
jmp 0xe2f8
movq -0x8(%rbp), %rdi
movl $0x1, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0xe650
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0xb0(%rbp)
movq -0x8(%rbp), %rdi
movl $0x1f, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
xorl %esi, %esi
callq 0xe650
movq -0x18(%rbp), %rax
movslq 0x84(%rax), %rax
cmpq $0x20, %rax
jb 0xe34e
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x18(%rax), %esi
leaq 0x7ec1(%rip), %rdi      # 0x16208
movb $0x0, %al
callq 0x4cd0
movq -0xb0(%rbp), %rax
movl %eax, %edx
movq -0x18(%rbp), %rax
movq -0x18(%rbp), %rcx
movslq 0x84(%rcx), %rcx
movl %edx, 0x4(%rax,%rcx,4)
movq -0x18(%rbp), %rax
movl 0x84(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x84(%rax)
movq -0x8(%rbp), %rdi
movl $0x20, %esi
callq 0xe650
jmp 0xe645
movq -0x18(%rbp), %rax
cmpl $0x0, 0x84(%rax)
jg 0xe3b6
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x18(%rax), %esi
leaq 0x7ea5(%rip), %rdi      # 0x16254
movb $0x0, %al
callq 0x4cd0
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0xb8(%rbp)
movq -0x8(%rbp), %rdi
movl $0x21, %esi
callq 0xe650
movq -0x18(%rbp), %rax
movq -0x18(%rbp), %rcx
movl 0x84(%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movl 0x4(%rax,%rcx,4), %eax
addl $0x1, %eax
movl %eax, -0xbc(%rbp)
movq -0xb8(%rbp), %rax
movl %eax, %edx
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq (%rax), %rax
movslq -0xbc(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x18(%rbp), %rax
movl 0x84(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x84(%rax)
jmp 0xe645
movq -0x8(%rbp), %rdi
movl $0x22, %esi
callq 0xe650
jmp 0xe645
movq -0x8(%rbp), %rdi
movl $0x23, %esi
callq 0xe650
jmp 0xe645
movq -0x10(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xe461
jmp 0xe480
leaq 0x78c3(%rip), %rdi      # 0x15d2b
leaq 0x45e2(%rip), %rsi      # 0x12a51
movl $0x1720, %edx           # imm = 0x1720
leaq 0x7b83(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
movq -0x10(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0xe4a2
jmp 0xe4c1
leaq 0x78d7(%rip), %rdi      # 0x15d80
leaq 0x45a1(%rip), %rsi      # 0x12a51
movl $0x1723, %edx           # imm = 0x1723
leaq 0x7b42(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
cmpl $0x2a, (%rax)
jne 0xe4de
jmp 0xe4fd
leaq 0x7db6(%rip), %rdi      # 0x1629b
leaq 0x4565(%rip), %rsi      # 0x12a51
movl $0x1725, %edx           # imm = 0x1725
leaq 0x7b06(%rip), %rcx      # 0x15ffe
callq 0x30f0
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0xd0(%rbp)
movq -0x8(%rbp), %rdi
movl $0x1e, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
xorl %esi, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
movq -0xc8(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0xd8(%rbp)
movq -0x8(%rbp), %rdi
movl $0x2a, %esi
callq 0xe650
movq -0x8(%rbp), %rdi
xorl %esi, %esi
callq 0xe650
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0xe0(%rbp)
movq -0xc8(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0xe5a6
movq -0x8(%rbp), %rdi
movq -0xc8(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0xd7b0
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0xe8(%rbp)
movq -0xe0(%rbp), %rax
subq -0xd0(%rbp), %rax
movl %eax, %edx
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq (%rax), %rax
movq -0xd0(%rbp), %rcx
movl %edx, 0x4(%rax,%rcx,4)
movq -0xe8(%rbp), %rax
subq -0xd8(%rbp), %rax
movl %eax, %edx
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq (%rax), %rax
movq -0xd8(%rbp), %rcx
movl %edx, 0x4(%rax,%rcx,4)
jmp 0xe645
leaq 0x5361(%rip), %rdi      # 0x1396f
leaq 0x443c(%rip), %rsi      # 0x12a51
movl $0x173c, %edx           # imm = 0x173C
leaq 0x79dd(%rip), %rcx      # 0x15ffe
callq 0x30f0
leaq 0x5342(%rip), %rdi      # 0x1396f
leaq 0x441d(%rip), %rsi      # 0x12a51
movl $0x173f, %edx           # imm = 0x173F
leaq 0x79be(%rip), %rcx      # 0x15ffe
callq 0x30f0
addq $0x120, %rsp            # imm = 0x120
popq %rbp
retq
nop