// File: rossy[P]crossc/SPIRV-Cross/spirv_msl.cpp
// Function: spirv_cross::CompilerMSL::add_interface_block(spv::StorageClass)
uint32_t CompilerMSL::add_interface_block(StorageClass storage)
{
	// Accumulate the variables that should appear in the interface struct
	vector<SPIRVariable *> vars;
	bool incl_builtins = (storage == StorageClassOutput);
	for (auto &id : ir.ids)
	{
		if (id.get_type() == TypeVariable)
		{
			auto &var = id.get<SPIRVariable>();
			auto &type = get<SPIRType>(var.basetype);
			if (var.storage == storage && interface_variable_exists_in_entry_point(var.self) &&
			    !is_hidden_variable(var, incl_builtins) && type.pointer)
			{
				vars.push_back(&var);
			}
		}
	}

	// If no variables qualify, leave
	if (vars.empty())
		return 0;

	// Add a new typed variable for this interface structure.
	// The initializer expression is allocated here, but populated when the function
	// declaraion is emitted, because it is cleared after each compilation pass.
	uint32_t next_id = ir.increase_bound_by(3);
	uint32_t ib_type_id = next_id++;
	auto &ib_type = set<SPIRType>(ib_type_id);
	ib_type.basetype = SPIRType::Struct;
	ib_type.storage = storage;
	set_decoration(ib_type_id, DecorationBlock);

	uint32_t ib_var_id = next_id++;
	auto &var = set<SPIRVariable>(ib_var_id, ib_type_id, storage, 0);
	var.initializer = next_id++;

	string ib_var_ref;
	switch (storage)
	{
	case StorageClassInput:
		ib_var_ref = stage_in_var_name;
		break;

	case StorageClassOutput:
	{
		ib_var_ref = stage_out_var_name;

		// Add the output interface struct as a local variable to the entry function.
		// If the entry point should return the output struct, set the entry function
		// to return the output interface struct, otherwise to return nothing.
		// Indicate the output var requires early initialization.
		bool ep_should_return_output = !get_is_rasterization_disabled();
		uint32_t rtn_id = ep_should_return_output ? ib_var_id : 0;
		auto &entry_func = get<SPIRFunction>(ir.default_entry_point);
		entry_func.add_local_variable(ib_var_id);
		for (auto &blk_id : entry_func.blocks)
		{
			auto &blk = get<SPIRBlock>(blk_id);
			if (blk.terminator == SPIRBlock::Return)
				blk.return_value = rtn_id;
		}
		vars_needing_early_declaration.push_back(ib_var_id);
		break;
	}

	default:
		break;
	}

	set_name(ib_type_id, to_name(ir.default_entry_point) + "_" + ib_var_ref);
	set_name(ib_var_id, ib_var_ref);

	auto &entry_func = get<SPIRFunction>(ir.default_entry_point);

	for (auto p_var : vars)
	{
		uint32_t type_id = p_var->basetype;
		auto &type = get<SPIRType>(type_id);

		if (type.basetype == SPIRType::Struct)
		{
			if (!is_builtin_type(type))
			{
				// For I/O blocks or structs, we will need to pass the block itself around
				// to functions if they are used globally in leaf functions.
				// Rather than passing down member by member,
				// we unflatten I/O blocks while running the shader,
				// and pass the actual struct type down to leaf functions.
				// We then unflatten inputs, and flatten outputs in the "fixup" stages.
				entry_func.add_local_variable(p_var->self);
				vars_needing_early_declaration.push_back(p_var->self);
			}

			// Flatten the struct members into the interface struct
			uint32_t mbr_idx = 0;
			for (auto &mbr_type_id : type.member_types)
			{
				BuiltIn builtin;
				bool is_builtin = is_member_builtin(type, mbr_idx, &builtin);
				bool is_flat = has_member_decoration(type.self, mbr_idx, DecorationFlat) ||
				               has_decoration(p_var->self, DecorationFlat);
				bool is_noperspective = has_member_decoration(type.self, mbr_idx, DecorationNoPerspective) ||
				                        has_decoration(p_var->self, DecorationNoPerspective);
				bool is_centroid = has_member_decoration(type.self, mbr_idx, DecorationCentroid) ||
				                   has_decoration(p_var->self, DecorationCentroid);
				bool is_sample = has_member_decoration(type.self, mbr_idx, DecorationSample) ||
				                 has_decoration(p_var->self, DecorationSample);

				if (!is_builtin || has_active_builtin(builtin, storage))
				{
					// Add a reference to the member to the interface struct.
					uint32_t ib_mbr_idx = uint32_t(ib_type.member_types.size());
					mbr_type_id = ensure_correct_builtin_type(mbr_type_id, builtin);
					type.member_types[mbr_idx] = mbr_type_id;
					ib_type.member_types.push_back(mbr_type_id);

					// Give the member a name
					string mbr_name = ensure_valid_name(to_qualified_member_name(type, mbr_idx), "m");
					set_member_name(ib_type_id, ib_mbr_idx, mbr_name);

					// Update the original variable reference to include the structure reference
					string qual_var_name = ib_var_ref + "." + mbr_name;

					if (is_builtin)
					{
						// For the builtin gl_PerVertex, we cannot treat it as a block anyways,
						// so redirect to qualified name.
						set_member_qualified_name(type_id, mbr_idx, qual_var_name);
					}
					else
					{
						// Unflatten or flatten from [[stage_in]] or [[stage_out]] as appropriate.
						switch (storage)
						{
						case StorageClassInput:
							entry_func.fixup_hooks_in.push_back([=]() {
								statement(to_name(p_var->self), ".", to_member_name(type, mbr_idx), " = ",
								          qual_var_name, ";");
							});
							break;

						case StorageClassOutput:
							entry_func.fixup_hooks_out.push_back([=]() {
								statement(qual_var_name, " = ", to_name(p_var->self), ".",
								          to_member_name(type, mbr_idx), ";");
							});
							break;

						default:
							break;
						}
					}

					// Copy the variable location from the original variable to the member
					if (has_member_decoration(type_id, mbr_idx, DecorationLocation))
					{
						uint32_t locn = get_member_decoration(type_id, mbr_idx, DecorationLocation);
						set_member_decoration(ib_type_id, ib_mbr_idx, DecorationLocation, locn);
						mark_location_as_used_by_shader(locn, storage);
					}
					else if (has_decoration(p_var->self, DecorationLocation))
					{
						// The block itself might have a location and in this case, all members of the block
						// receive incrementing locations.
						uint32_t locn = get_decoration(p_var->self, DecorationLocation) + mbr_idx;
						set_member_decoration(ib_type_id, ib_mbr_idx, DecorationLocation, locn);
						mark_location_as_used_by_shader(locn, storage);
					}

					// Copy the component location, if present.
					if (has_member_decoration(type_id, mbr_idx, DecorationComponent))
					{
						uint32_t comp = get_member_decoration(type_id, mbr_idx, DecorationComponent);
						set_member_decoration(ib_type_id, ib_mbr_idx, DecorationComponent, comp);
					}

					// Mark the member as builtin if needed
					if (is_builtin)
					{
						set_member_decoration(ib_type_id, ib_mbr_idx, DecorationBuiltIn, builtin);
						if (builtin == BuiltInPosition)
							qual_pos_var_name = qual_var_name;
					}

					// Copy interpolation decorations if needed
					if (is_flat)
						set_member_decoration(ib_type_id, ib_mbr_idx, DecorationFlat);
					if (is_noperspective)
						set_member_decoration(ib_type_id, ib_mbr_idx, DecorationNoPerspective);
					if (is_centroid)
						set_member_decoration(ib_type_id, ib_mbr_idx, DecorationCentroid);
					if (is_sample)
						set_member_decoration(ib_type_id, ib_mbr_idx, DecorationSample);
				}
				mbr_idx++;
			}
		}
		else if (type.basetype == SPIRType::Boolean || type.basetype == SPIRType::Char ||
		         type.basetype == SPIRType::Int || type.basetype == SPIRType::UInt ||
		         type.basetype == SPIRType::Int64 || type.basetype == SPIRType::UInt64 ||
		         type_is_floating_point(type) || type.basetype == SPIRType::Boolean)
		{
			bool is_builtin = is_builtin_variable(*p_var);
			BuiltIn builtin = BuiltIn(get_decoration(p_var->self, DecorationBuiltIn));
			bool is_flat = has_decoration(p_var->self, DecorationFlat);
			bool is_noperspective = has_decoration(p_var->self, DecorationNoPerspective);
			bool is_centroid = has_decoration(p_var->self, DecorationCentroid);
			bool is_sample = has_decoration(p_var->self, DecorationSample);

			if (!is_builtin || has_active_builtin(builtin, storage))
			{
				// MSL does not allow matrices or arrays in input or output variables, so need to handle it specially.
				if (!is_builtin && (storage == StorageClassInput || storage == StorageClassOutput) &&
				    (is_matrix(type) || is_array(type)))
				{
					uint32_t elem_cnt = 0;

					if (is_matrix(type))
					{
						if (is_array(type))
							SPIRV_CROSS_THROW("MSL cannot emit arrays-of-matrices in input and output variables.");

						elem_cnt = type.columns;
					}
					else if (is_array(type))
					{
						if (type.array.size() != 1)
							SPIRV_CROSS_THROW("MSL cannot emit arrays-of-arrays in input and output variables.");

						elem_cnt = type.array_size_literal.back() ? type.array.back() :
						                                            get<SPIRConstant>(type.array.back()).scalar();
					}

					auto *usable_type = &type;
					while (is_array(*usable_type) || is_matrix(*usable_type))
						usable_type = &get<SPIRType>(usable_type->parent_type);

					entry_func.add_local_variable(p_var->self);

					// We need to declare the variable early and at entry-point scope.
					vars_needing_early_declaration.push_back(p_var->self);

					for (uint32_t i = 0; i < elem_cnt; i++)
					{
						// Add a reference to the variable type to the interface struct.
						uint32_t ib_mbr_idx = uint32_t(ib_type.member_types.size());
						ib_type.member_types.push_back(usable_type->self);

						// Give the member a name
						string mbr_name = ensure_valid_name(join(to_expression(p_var->self), "_", i), "m");
						set_member_name(ib_type_id, ib_mbr_idx, mbr_name);

						// There is no qualified alias since we need to flatten the internal array on return.
						if (get_decoration_bitset(p_var->self).get(DecorationLocation))
						{
							uint32_t locn = get_decoration(p_var->self, DecorationLocation) + i;
							set_member_decoration(ib_type_id, ib_mbr_idx, DecorationLocation, locn);
							mark_location_as_used_by_shader(locn, storage);
						}

						if (get_decoration_bitset(p_var->self).get(DecorationIndex))
						{
							uint32_t index = get_decoration(p_var->self, DecorationIndex);
							set_member_decoration(ib_type_id, ib_mbr_idx, DecorationIndex, index);
						}

						// Copy interpolation decorations if needed
						if (is_flat)
							set_member_decoration(ib_type_id, ib_mbr_idx, DecorationFlat);
						if (is_noperspective)
							set_member_decoration(ib_type_id, ib_mbr_idx, DecorationNoPerspective);
						if (is_centroid)
							set_member_decoration(ib_type_id, ib_mbr_idx, DecorationCentroid);
						if (is_sample)
							set_member_decoration(ib_type_id, ib_mbr_idx, DecorationSample);

						switch (storage)
						{
						case StorageClassInput:
							entry_func.fixup_hooks_in.push_back([=]() {
								statement(to_name(p_var->self), "[", i, "] = ", ib_var_ref, ".", mbr_name, ";");
							});
							break;

						case StorageClassOutput:
							entry_func.fixup_hooks_out.push_back([=]() {
								statement(ib_var_ref, ".", mbr_name, " = ", to_name(p_var->self), "[", i, "];");
							});
							break;

						default:
							break;
						}
					}
				}
				else
				{
					// Add a reference to the variable type to the interface struct.
					uint32_t ib_mbr_idx = uint32_t(ib_type.member_types.size());
					type_id = ensure_correct_builtin_type(type_id, builtin);
					p_var->basetype = type_id;
					ib_type.member_types.push_back(type_id);

					// Give the member a name
					string mbr_name = ensure_valid_name(to_expression(p_var->self), "m");
					set_member_name(ib_type_id, ib_mbr_idx, mbr_name);

					// Update the original variable reference to include the structure reference
					string qual_var_name = ib_var_ref + "." + mbr_name;
					ir.meta[p_var->self].decoration.qualified_alias = qual_var_name;

					// Copy the variable location from the original variable to the member
					if (get_decoration_bitset(p_var->self).get(DecorationLocation))
					{
						uint32_t locn = get_decoration(p_var->self, DecorationLocation);
						set_member_decoration(ib_type_id, ib_mbr_idx, DecorationLocation, locn);
						mark_location_as_used_by_shader(locn, storage);
					}

					if (get_decoration_bitset(p_var->self).get(DecorationComponent))
					{
						uint32_t comp = get_decoration(p_var->self, DecorationComponent);
						set_member_decoration(ib_type_id, ib_mbr_idx, DecorationComponent, comp);
					}

					if (get_decoration_bitset(p_var->self).get(DecorationIndex))
					{
						uint32_t index = get_decoration(p_var->self, DecorationIndex);
						set_member_decoration(ib_type_id, ib_mbr_idx, DecorationIndex, index);
					}

					// Mark the member as builtin if needed
					if (is_builtin)
					{
						set_member_decoration(ib_type_id, ib_mbr_idx, DecorationBuiltIn, builtin);
						if (builtin == BuiltInPosition)
							qual_pos_var_name = qual_var_name;
					}

					// Copy interpolation decorations if needed
					if (is_flat)
						set_member_decoration(ib_type_id, ib_mbr_idx, DecorationFlat);
					if (is_noperspective)
						set_member_decoration(ib_type_id, ib_mbr_idx, DecorationNoPerspective);
					if (is_centroid)
						set_member_decoration(ib_type_id, ib_mbr_idx, DecorationCentroid);
					if (is_sample)
						set_member_decoration(ib_type_id, ib_mbr_idx, DecorationSample);
				}
			}
		}
	}

	// Sort the members of the structure by their locations.
	MemberSorter member_sorter(ib_type, ir.meta[ib_type_id], MemberSorter::Location);
	member_sorter.sort();

	return ib_var_id;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x9a0, %rsp            # imm = 0x9A0
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x7d0(%rbp)
leaq -0x30(%rbp), %rdi
callq 0xd7f20
movq -0x7d0(%rbp), %rax
cmpl $0x3, -0x14(%rbp)
sete %cl
andb $0x1, %cl
movb %cl, -0x31(%rbp)
addq $0x8, %rax
addq $0x18, %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rdi
callq 0xf940
movq %rax, -0x48(%rbp)
movq -0x40(%rbp), %rdi
callq 0xf970
movq %rax, -0x50(%rbp)
leaq -0x48(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0xf9a0
testb $0x1, %al
jne 0xf4236
jmp 0xf434f
leaq -0x48(%rbp), %rdi
callq 0xf9e0
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rdi
callq 0xfa00
movl %eax, -0x7d4(%rbp)
jmp 0xf4254
movl -0x7d4(%rbp), %eax
cmpl $0x2, %eax
jne 0xf433f
movq -0x58(%rbp), %rdi
callq 0xfd10
movq %rax, -0x7e0(%rbp)
jmp 0xf4275
movq -0x7d0(%rbp), %rdi
movq -0x7e0(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movl 0xc(%rax), %esi
callq 0xea90
movq %rax, -0x7e8(%rbp)
jmp 0xf429c
movq -0x7e8(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x70(%rbp), %rax
movl 0x10(%rax), %eax
cmpl -0x14(%rbp), %eax
jne 0xf433d
movq -0x7d0(%rbp), %rdi
movq -0x70(%rbp), %rax
movl 0x8(%rax), %esi
callq 0x21c10
movb %al, -0x7e9(%rbp)
jmp 0xf42d2
movb -0x7e9(%rbp), %al
testb $0x1, %al
jne 0xf42de
jmp 0xf433d
movq -0x7d0(%rbp), %rdi
movq -0x70(%rbp), %rsi
movzbl -0x31(%rbp), %edx
andl $0x1, %edx
callq 0x20460
movb %al, -0x7ea(%rbp)
jmp 0xf42fd
movb -0x7ea(%rbp), %al
testb $0x1, %al
jne 0xf433d
jmp 0xf4309
movq -0x78(%rbp), %rax
testb $0x1, 0x60(%rax)
je 0xf433d
movq -0x70(%rbp), %rax
movq %rax, -0x80(%rbp)
leaq -0x30(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0xd7f40
jmp 0xf432a
jmp 0xf433d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf6582
jmp 0xf433f
jmp 0xf4341
leaq -0x48(%rbp), %rdi
callq 0xfbd0
jmp 0xf4220
leaq -0x30(%rbp), %rdi
callq 0xd7f70
testb $0x1, %al
jne 0xf435e
jmp 0xf4374
movl $0x0, -0x4(%rbp)
movl $0x1, -0x84(%rbp)
jmp 0xf656d
movq -0x7d0(%rbp), %rdi
addq $0x8, %rdi
movl $0x3, %esi
callq 0x55780
movl %eax, -0x7f0(%rbp)
jmp 0xf4391
movq -0x7d0(%rbp), %rdi
movl -0x7f0(%rbp), %eax
movl %eax, -0x88(%rbp)
movl -0x88(%rbp), %eax
movl %eax, %ecx
incl %ecx
movl %ecx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
movl -0x8c(%rbp), %esi
callq 0x30cb0
movq %rax, -0x7f8(%rbp)
jmp 0xf43ce
movq -0x7d0(%rbp), %rdi
movq -0x7f8(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
movl $0xc, 0xc(%rax)
movl -0x14(%rbp), %ecx
movq -0x98(%rbp), %rax
movl %ecx, 0x64(%rax)
movl -0x8c(%rbp), %esi
movl $0x2, %edx
xorl %ecx, %ecx
callq 0x232d0
jmp 0xf4412
movq -0x7d0(%rbp), %rdi
movl -0x88(%rbp), %eax
movl %eax, %ecx
incl %ecx
movl %ecx, -0x88(%rbp)
movl %eax, -0x9c(%rbp)
movl -0x9c(%rbp), %esi
movl $0x0, -0xac(%rbp)
leaq -0x8c(%rbp), %rdx
leaq -0x14(%rbp), %rcx
leaq -0xac(%rbp), %r8
callq 0x113f10
movq %rax, -0x800(%rbp)
jmp 0xf445f
movq -0x800(%rbp), %rax
movq %rax, -0xa8(%rbp)
movl -0x88(%rbp), %ecx
movl %ecx, %eax
incl %eax
movl %eax, -0x88(%rbp)
movq -0xa8(%rbp), %rax
movl %ecx, 0x18(%rax)
leaq -0xd0(%rbp), %rdi
callq 0x7530
movl -0x14(%rbp), %eax
movl %eax, -0x804(%rbp)
subl $0x1, %eax
je 0xf44b3
jmp 0xf44a3
movl -0x804(%rbp), %eax
subl $0x3, %eax
je 0xf44e5
jmp 0xf466d
movq -0x7d0(%rbp), %rsi
addq $0x960, %rsi            # imm = 0x960
leaq -0xd0(%rbp), %rdi
callq 0x7050
jmp 0xf44cf
jmp 0xf466f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf655f
movq -0x7d0(%rbp), %rsi
addq $0x980, %rsi            # imm = 0x980
leaq -0xd0(%rbp), %rdi
callq 0x7050
jmp 0xf4501
movq -0x7d0(%rbp), %rdi
callq 0x113f70
movb %al, -0x805(%rbp)
jmp 0xf4515
movb -0x805(%rbp), %al
xorb $-0x1, %al
andb $0x1, %al
movb %al, -0xd1(%rbp)
testb $0x1, -0xd1(%rbp)
je 0xf453c
movl -0x9c(%rbp), %eax
movl %eax, -0x80c(%rbp)
jmp 0xf4546
xorl %eax, %eax
movl %eax, -0x80c(%rbp)
jmp 0xf4546
movq -0x7d0(%rbp), %rdi
movl -0x80c(%rbp), %eax
movl %eax, -0xd8(%rbp)
movl 0x108(%rdi), %esi
callq 0x106d0
movq %rax, -0x818(%rbp)
jmp 0xf456d
movq -0x818(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0xe0(%rbp), %rdi
movl -0x9c(%rbp), %esi
callq 0x113b50
jmp 0xf458f
movq -0xe0(%rbp), %rax
addq $0x68, %rax
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rdi
callq 0x86d0
movq %rax, -0xf0(%rbp)
movq -0xe8(%rbp), %rdi
callq 0x8700
movq %rax, -0xf8(%rbp)
leaq -0xf0(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x8730
testb $0x1, %al
jne 0xf45e0
jmp 0xf464f
leaq -0xf0(%rbp), %rdi
callq 0x8770
movq -0x7d0(%rbp), %rdi
movq %rax, -0x100(%rbp)
movq -0x100(%rbp), %rax
movl (%rax), %esi
callq 0x87d0
movq %rax, -0x820(%rbp)
jmp 0xf4611
movq -0x820(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x108(%rbp), %rax
cmpl $0x4, 0xc(%rax)
jne 0xf463c
movl -0xd8(%rbp), %ecx
movq -0x108(%rbp), %rax
movl %ecx, 0x24(%rax)
jmp 0xf463e
leaq -0xf0(%rbp), %rdi
callq 0x8790
jmp 0xf45c7
movq -0x7d0(%rbp), %rdi
addq $0x8e0, %rdi            # imm = 0x8E0
leaq -0x9c(%rbp), %rsi
callq 0x88f0
jmp 0xf466b
jmp 0xf466f
jmp 0xf466f
movq -0x7d0(%rbp), %rsi
movl -0x8c(%rbp), %eax
movl %eax, -0x824(%rbp)
movl 0x108(%rsi), %edx
movq (%rsi), %rax
movq 0x38(%rax), %rax
leaq -0x168(%rbp), %rdi
movl $0x1, %ecx
callq *%rax
jmp 0xf469f
leaq 0x53e78(%rip), %rdx     # 0x14851e
leaq -0x148(%rbp), %rdi
leaq -0x168(%rbp), %rsi
callq 0x11910
jmp 0xf46bb
leaq -0x128(%rbp), %rdi
leaq -0x148(%rbp), %rsi
leaq -0xd0(%rbp), %rdx
callq 0xa1530
jmp 0xf46d7
movl -0x824(%rbp), %esi
movq -0x7d0(%rbp), %rdi
leaq -0x128(%rbp), %rdx
callq 0x22cd0
jmp 0xf46f2
leaq -0x128(%rbp), %rdi
callq 0x7708
leaq -0x148(%rbp), %rdi
callq 0x7708
leaq -0x168(%rbp), %rdi
callq 0x7708
movq -0x7d0(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq -0xd0(%rbp), %rdx
callq 0x22cd0
jmp 0xf4731
movq -0x7d0(%rbp), %rdi
movl 0x108(%rdi), %esi
callq 0x106d0
movq %rax, -0x830(%rbp)
jmp 0xf474c
movq -0x830(%rbp), %rax
movq %rax, -0x170(%rbp)
leaq -0x30(%rbp), %rax
movq %rax, -0x178(%rbp)
movq -0x178(%rbp), %rdi
callq 0xd7fb0
movq %rax, -0x180(%rbp)
movq -0x178(%rbp), %rdi
callq 0xd7fe0
movq %rax, -0x188(%rbp)
leaq -0x180(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0xd8010
testb $0x1, %al
jne 0xf47a7
jmp 0xf64f0
leaq -0x180(%rbp), %rdi
callq 0xd8050
movq -0x7d0(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x190(%rbp)
movq -0x190(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x194(%rbp)
movl -0x194(%rbp), %esi
callq 0xea90
movq %rax, -0x838(%rbp)
jmp 0xf47e8
movq -0x838(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movq -0x1a0(%rbp), %rax
cmpl $0xc, 0xc(%rax)
jne 0xf5343
movq -0x7d0(%rbp), %rdi
movq -0x1a0(%rbp), %rsi
callq 0x206c0
movb %al, -0x839(%rbp)
jmp 0xf4822
movb -0x839(%rbp), %al
testb $0x1, %al
jne 0xf48bd
jmp 0xf4832
movq -0x170(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
callq 0x113b50
jmp 0xf484a
movq -0x7d0(%rbp), %rdi
addq $0x8e0, %rdi            # imm = 0x8E0
movq -0x190(%rbp), %rsi
addq $0x8, %rsi
callq 0x88f0
jmp 0xf486a
jmp 0xf48bd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf48ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf48a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x7708
leaq -0x148(%rbp), %rdi
callq 0x7708
leaq -0x168(%rbp), %rdi
callq 0x7708
jmp 0xf655f
movl $0x0, -0x1a4(%rbp)
movq -0x1a0(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x1b0(%rbp)
movq -0x1b0(%rbp), %rdi
callq 0x86d0
movq %rax, -0x1b8(%rbp)
movq -0x1b0(%rbp), %rdi
callq 0x8700
movq %rax, -0x1c0(%rbp)
leaq -0x1b8(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x8730
testb $0x1, %al
jne 0xf491b
jmp 0xf533e
leaq -0x1b8(%rbp), %rdi
callq 0x8770
movq -0x7d0(%rbp), %rdi
movq %rax, -0x1c8(%rbp)
movq -0x1a0(%rbp), %rsi
movl -0x1a4(%rbp), %edx
leaq -0x1cc(%rbp), %rcx
callq 0x20760
movb %al, -0x83a(%rbp)
jmp 0xf4956
movq -0x7d0(%rbp), %rdi
movb -0x83a(%rbp), %al
andb $0x1, %al
movb %al, -0x1cd(%rbp)
movq -0x1a0(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1a4(%rbp), %edx
movl $0xe, %ecx
callq 0x21f90
movb %al, -0x83b(%rbp)
jmp 0xf498d
movb -0x83b(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x83c(%rbp)
jne 0xf49d3
jmp 0xf49a2
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
movl $0xe, %edx
callq 0x1f560
movb %al, -0x83d(%rbp)
jmp 0xf49c5
movb -0x83d(%rbp), %al
movb %al, -0x83c(%rbp)
jmp 0xf49d3
movq -0x7d0(%rbp), %rdi
movb -0x83c(%rbp), %al
andb $0x1, %al
movb %al, -0x1ce(%rbp)
movq -0x1a0(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1a4(%rbp), %edx
movl $0xd, %ecx
callq 0x21f90
movb %al, -0x83e(%rbp)
jmp 0xf4a0a
movb -0x83e(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x83f(%rbp)
jne 0xf4a50
jmp 0xf4a1f
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
movl $0xd, %edx
callq 0x1f560
movb %al, -0x840(%rbp)
jmp 0xf4a42
movb -0x840(%rbp), %al
movb %al, -0x83f(%rbp)
jmp 0xf4a50
movq -0x7d0(%rbp), %rdi
movb -0x83f(%rbp), %al
andb $0x1, %al
movb %al, -0x1cf(%rbp)
movq -0x1a0(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1a4(%rbp), %edx
movl $0x10, %ecx
callq 0x21f90
movb %al, -0x841(%rbp)
jmp 0xf4a87
movb -0x841(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x842(%rbp)
jne 0xf4acd
jmp 0xf4a9c
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
movl $0x10, %edx
callq 0x1f560
movb %al, -0x843(%rbp)
jmp 0xf4abf
movb -0x843(%rbp), %al
movb %al, -0x842(%rbp)
jmp 0xf4acd
movq -0x7d0(%rbp), %rdi
movb -0x842(%rbp), %al
andb $0x1, %al
movb %al, -0x1d0(%rbp)
movq -0x1a0(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1a4(%rbp), %edx
movl $0x11, %ecx
callq 0x21f90
movb %al, -0x844(%rbp)
jmp 0xf4b04
movb -0x844(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x845(%rbp)
jne 0xf4b4a
jmp 0xf4b19
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
movl $0x11, %edx
callq 0x1f560
movb %al, -0x846(%rbp)
jmp 0xf4b3c
movb -0x846(%rbp), %al
movb %al, -0x845(%rbp)
jmp 0xf4b4a
movb -0x845(%rbp), %al
andb $0x1, %al
movb %al, -0x1d1(%rbp)
testb $0x1, -0x1cd(%rbp)
je 0xf4b8d
movq -0x7d0(%rbp), %rdi
movl -0x1cc(%rbp), %esi
movl -0x14(%rbp), %edx
callq 0x2b1b0
movb %al, -0x847(%rbp)
jmp 0xf4b7e
movb -0x847(%rbp), %al
testb $0x1, %al
jne 0xf4b8d
jmp 0xf531e
movq -0x98(%rbp), %rdi
addq $0x68, %rdi
callq 0x8650
movq -0x7d0(%rbp), %rdi
movl %eax, -0x1d8(%rbp)
movq -0x1c8(%rbp), %rax
movl (%rax), %esi
movl -0x1cc(%rbp), %edx
callq 0xf9fd0
movl %eax, -0x84c(%rbp)
jmp 0xf4bc6
movl -0x84c(%rbp), %ecx
movq -0x1c8(%rbp), %rax
movl %ecx, (%rax)
movq -0x1c8(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x850(%rbp)
movq -0x1a0(%rbp), %rdi
addq $0x68, %rdi
movl -0x1a4(%rbp), %eax
movl %eax, %esi
callq 0x8630
movl -0x850(%rbp), %ecx
movl %ecx, (%rax)
movq -0x98(%rbp), %rdi
addq $0x68, %rdi
movq -0x1c8(%rbp), %rsi
callq 0x88f0
jmp 0xf4c1d
movq -0x7d0(%rbp), %rsi
movq -0x1a0(%rbp), %rdx
movl -0x1a4(%rbp), %ecx
leaq -0x218(%rbp), %rdi
callq 0xfa100
jmp 0xf4c3f
leaq -0x239(%rbp), %rdi
movq %rdi, -0x858(%rbp)
callq 0x7650
movq -0x858(%rbp), %rdx
leaq 0x4fdec(%rip), %rsi     # 0x144a4c
leaq -0x238(%rbp), %rdi
callq 0x7520
jmp 0xf4c6e
movq -0x7d0(%rbp), %rsi
leaq -0x1f8(%rbp), %rdi
leaq -0x218(%rbp), %rdx
leaq -0x238(%rbp), %rcx
callq 0xf9dc0
jmp 0xf4c91
leaq -0x238(%rbp), %rdi
callq 0x7708
leaq -0x239(%rbp), %rdi
callq 0x73d0
leaq -0x218(%rbp), %rdi
callq 0x7708
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x1d8(%rbp), %edx
leaq -0x1f8(%rbp), %rcx
callq 0x22f90
jmp 0xf4cd6
leaq 0x50050(%rip), %rdx     # 0x144d2d
leaq -0x280(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x2f8c0
jmp 0xf4cf2
leaq -0x260(%rbp), %rdi
leaq -0x280(%rbp), %rsi
leaq -0x1f8(%rbp), %rdx
callq 0xa1530
jmp 0xf4d0e
leaq -0x280(%rbp), %rdi
callq 0x7708
testb $0x1, -0x1cd(%rbp)
je 0xf4dcf
movq -0x7d0(%rbp), %rdi
movl -0x194(%rbp), %esi
movl -0x1a4(%rbp), %edx
leaq -0x260(%rbp), %rcx
callq 0x23000
jmp 0xf4d48
jmp 0xf5006
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf4d73
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x238(%rbp), %rdi
callq 0x7708
leaq -0x239(%rbp), %rdi
callq 0x73d0
leaq -0x218(%rbp), %rdi
callq 0x7708
jmp 0xf655f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf530d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x280(%rbp), %rdi
callq 0x7708
jmp 0xf530d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf5301
movl -0x14(%rbp), %eax
movl %eax, -0x85c(%rbp)
subl $0x1, %eax
je 0xf4df3
jmp 0xf4ddf
movl -0x85c(%rbp), %eax
subl $0x3, %eax
je 0xf4efc
jmp 0xf5002
movq -0x7d0(%rbp), %rax
movq -0x170(%rbp), %rcx
addq $0xb0, %rcx
movq %rcx, -0x870(%rbp)
movq %rax, -0x3b0(%rbp)
movq -0x190(%rbp), %rax
movq %rax, -0x3a8(%rbp)
leaq -0x3a0(%rbp), %rdi
movq %rdi, -0x868(%rbp)
movq -0x1a0(%rbp), %rsi
callq 0x3d730
jmp 0xf4e40
movl -0x1a4(%rbp), %eax
movl %eax, -0x2c8(%rbp)
leaq -0x2c0(%rbp), %rdi
leaq -0x260(%rbp), %rsi
callq 0x7170
jmp 0xf4e61
leaq -0x2a0(%rbp), %rdi
leaq -0x3b0(%rbp), %rsi
callq 0xfa2f0
jmp 0xf4e76
movq -0x870(%rbp), %rdi
leaq -0x2a0(%rbp), %rsi
callq 0x113fc0
jmp 0xf4e8b
leaq -0x2a0(%rbp), %rdi
callq 0x113ff0
leaq -0x3b0(%rbp), %rdi
callq 0xfa390
jmp 0xf5004
movq -0x868(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
callq 0x314e0
jmp 0xf5301
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf4eeb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x2a0(%rbp), %rdi
callq 0x113ff0
leaq -0x3b0(%rbp), %rdi
callq 0xfa390
jmp 0xf5301
movq -0x7d0(%rbp), %rax
movq -0x170(%rbp), %rcx
addq $0x98, %rcx
movq %rcx, -0x880(%rbp)
movq %rax, -0x4e0(%rbp)
leaq -0x4d8(%rbp), %rdi
movq %rdi, -0x878(%rbp)
leaq -0x260(%rbp), %rsi
callq 0x7170
jmp 0xf4f3b
movq -0x190(%rbp), %rax
movq %rax, -0x4b8(%rbp)
leaq -0x4b0(%rbp), %rdi
movq -0x1a0(%rbp), %rsi
callq 0x3d730
jmp 0xf4f5e
movl -0x1a4(%rbp), %eax
movl %eax, -0x3d8(%rbp)
leaq -0x3d0(%rbp), %rdi
leaq -0x4e0(%rbp), %rsi
callq 0xfa3d0
jmp 0xf4f7f
movq -0x880(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0x113fc0
jmp 0xf4f94
leaq -0x3d0(%rbp), %rdi
callq 0x113ff0
leaq -0x4e0(%rbp), %rdi
callq 0xfa470
jmp 0xf5004
movq -0x878(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
callq 0x7708
jmp 0xf5301
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf4ff1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x3d0(%rbp), %rdi
callq 0x113ff0
leaq -0x4e0(%rbp), %rdi
callq 0xfa470
jmp 0xf5301
jmp 0xf5004
jmp 0xf5006
movq -0x7d0(%rbp), %rdi
movl -0x194(%rbp), %esi
movl -0x1a4(%rbp), %edx
movl $0x1e, %ecx
callq 0x21f90
movb %al, -0x881(%rbp)
jmp 0xf502b
movb -0x881(%rbp), %al
testb $0x1, %al
jne 0xf5037
jmp 0xf50aa
movq -0x7d0(%rbp), %rdi
movl -0x194(%rbp), %esi
movl -0x1a4(%rbp), %edx
movl $0x1e, %ecx
callq 0x231b0
movl %eax, -0x888(%rbp)
jmp 0xf505c
movq -0x7d0(%rbp), %rdi
movl -0x888(%rbp), %eax
movl %eax, -0x4e4(%rbp)
movl -0x8c(%rbp), %esi
movl -0x1d8(%rbp), %edx
movl -0x4e4(%rbp), %r8d
movl $0x1e, %ecx
callq 0x22f50
jmp 0xf508e
movq -0x7d0(%rbp), %rdi
movl -0x4e4(%rbp), %esi
movl -0x14(%rbp), %edx
callq 0xf9f70
jmp 0xf50a5
jmp 0xf5151
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
movl $0x1e, %edx
callq 0x1f560
movb %al, -0x889(%rbp)
jmp 0xf50cd
movb -0x889(%rbp), %al
testb $0x1, %al
jne 0xf50d9
jmp 0xf514f
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
movl $0x1e, %edx
callq 0x23520
movl %eax, -0x890(%rbp)
jmp 0xf50fc
movq -0x7d0(%rbp), %rdi
movl -0x890(%rbp), %eax
movl -0x1a4(%rbp), %ecx
addl %ecx, %eax
movl %eax, -0x4e8(%rbp)
movl -0x8c(%rbp), %esi
movl -0x1d8(%rbp), %edx
movl -0x4e8(%rbp), %r8d
movl $0x1e, %ecx
callq 0x22f50
jmp 0xf5136
movq -0x7d0(%rbp), %rdi
movl -0x4e8(%rbp), %esi
movl -0x14(%rbp), %edx
callq 0xf9f70
jmp 0xf514d
jmp 0xf514f
jmp 0xf5151
movq -0x7d0(%rbp), %rdi
movl -0x194(%rbp), %esi
movl -0x1a4(%rbp), %edx
movl $0x1f, %ecx
callq 0x21f90
movb %al, -0x891(%rbp)
jmp 0xf5176
movb -0x891(%rbp), %al
testb $0x1, %al
jne 0xf5182
jmp 0xf51db
movq -0x7d0(%rbp), %rdi
movl -0x194(%rbp), %esi
movl -0x1a4(%rbp), %edx
movl $0x1f, %ecx
callq 0x231b0
movl %eax, -0x898(%rbp)
jmp 0xf51a7
movq -0x7d0(%rbp), %rdi
movl -0x898(%rbp), %eax
movl %eax, -0x4ec(%rbp)
movl -0x8c(%rbp), %esi
movl -0x1d8(%rbp), %edx
movl -0x4ec(%rbp), %r8d
movl $0x1f, %ecx
callq 0x22f50
jmp 0xf51d9
jmp 0xf51db
testb $0x1, -0x1cd(%rbp)
je 0xf5233
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x1d8(%rbp), %edx
movl -0x1cc(%rbp), %r8d
movl $0xb, %ecx
callq 0x22f50
jmp 0xf520a
cmpl $0x0, -0x1cc(%rbp)
jne 0xf5231
movq -0x7d0(%rbp), %rdi
addq $0x940, %rdi            # imm = 0x940
leaq -0x260(%rbp), %rsi
callq 0x7050
jmp 0xf522f
jmp 0xf5231
jmp 0xf5233
testb $0x1, -0x1ce(%rbp)
je 0xf5260
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x1d8(%rbp), %edx
movl $0xe, %ecx
xorl %r8d, %r8d
callq 0x22f50
jmp 0xf525e
jmp 0xf5260
testb $0x1, -0x1cf(%rbp)
je 0xf528d
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x1d8(%rbp), %edx
movl $0xd, %ecx
xorl %r8d, %r8d
callq 0x22f50
jmp 0xf528b
jmp 0xf528d
testb $0x1, -0x1d0(%rbp)
je 0xf52ba
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x1d8(%rbp), %edx
movl $0x10, %ecx
xorl %r8d, %r8d
callq 0x22f50
jmp 0xf52b8
jmp 0xf52ba
testb $0x1, -0x1d1(%rbp)
je 0xf52e7
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x1d8(%rbp), %edx
movl $0x11, %ecx
xorl %r8d, %r8d
callq 0x22f50
jmp 0xf52e5
jmp 0xf52e7
leaq -0x260(%rbp), %rdi
callq 0x7708
leaq -0x1f8(%rbp), %rdi
callq 0x7708
jmp 0xf531e
leaq -0x260(%rbp), %rdi
callq 0x7708
leaq -0x1f8(%rbp), %rdi
callq 0x7708
jmp 0xf655f
movl -0x1a4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1a4(%rbp)
leaq -0x1b8(%rbp), %rdi
callq 0x8790
jmp 0xf48ff
jmp 0xf64dd
movq -0x1a0(%rbp), %rax
cmpl $0x2, 0xc(%rax)
je 0xf53c2
movq -0x1a0(%rbp), %rax
cmpl $0x3, 0xc(%rax)
je 0xf53c2
movq -0x1a0(%rbp), %rax
cmpl $0x4, 0xc(%rax)
je 0xf53c2
movq -0x1a0(%rbp), %rax
cmpl $0x5, 0xc(%rax)
je 0xf53c2
movq -0x1a0(%rbp), %rax
cmpl $0x6, 0xc(%rax)
je 0xf53c2
movq -0x1a0(%rbp), %rax
cmpl $0x7, 0xc(%rax)
je 0xf53c2
movq -0x1a0(%rbp), %rdi
callq 0xfa4a0
movb %al, -0x899(%rbp)
jmp 0xf53a5
movb -0x899(%rbp), %al
testb $0x1, %al
jne 0xf53c2
jmp 0xf53b1
movq -0x1a0(%rbp), %rax
cmpl $0x2, 0xc(%rax)
jne 0xf64db
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rsi
callq 0x205a0
movb %al, -0x89a(%rbp)
jmp 0xf53dd
movq -0x7d0(%rbp), %rdi
movb -0x89a(%rbp), %al
andb $0x1, %al
movb %al, -0x4ed(%rbp)
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
movl $0xb, %edx
callq 0x23520
movl %eax, -0x8a0(%rbp)
jmp 0xf540e
movq -0x7d0(%rbp), %rdi
movl -0x8a0(%rbp), %eax
movl %eax, -0x4f4(%rbp)
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
movl $0xe, %edx
callq 0x1f560
movb %al, -0x8a1(%rbp)
jmp 0xf543d
movq -0x7d0(%rbp), %rdi
movb -0x8a1(%rbp), %al
andb $0x1, %al
movb %al, -0x4f5(%rbp)
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
movl $0xd, %edx
callq 0x1f560
movb %al, -0x8a2(%rbp)
jmp 0xf546e
movq -0x7d0(%rbp), %rdi
movb -0x8a2(%rbp), %al
andb $0x1, %al
movb %al, -0x4f6(%rbp)
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
movl $0x10, %edx
callq 0x1f560
movb %al, -0x8a3(%rbp)
jmp 0xf549f
movq -0x7d0(%rbp), %rdi
movb -0x8a3(%rbp), %al
andb $0x1, %al
movb %al, -0x4f7(%rbp)
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
movl $0x11, %edx
callq 0x1f560
movb %al, -0x8a4(%rbp)
jmp 0xf54d0
movb -0x8a4(%rbp), %al
andb $0x1, %al
movb %al, -0x4f8(%rbp)
testb $0x1, -0x4ed(%rbp)
je 0xf5513
movq -0x7d0(%rbp), %rdi
movl -0x4f4(%rbp), %esi
movl -0x14(%rbp), %edx
callq 0x2b1b0
movb %al, -0x8a5(%rbp)
jmp 0xf5504
movb -0x8a5(%rbp), %al
testb $0x1, %al
jne 0xf5513
jmp 0xf64d9
testb $0x1, -0x4ed(%rbp)
jne 0xf5f8e
cmpl $0x1, -0x14(%rbp)
je 0xf5530
cmpl $0x3, -0x14(%rbp)
jne 0xf5f8e
movq -0x7d0(%rbp), %rdi
movq -0x1a0(%rbp), %rsi
callq 0x20870
movb %al, -0x8a6(%rbp)
jmp 0xf554b
movb -0x8a6(%rbp), %al
testb $0x1, %al
jne 0xf5581
jmp 0xf5557
movq -0x7d0(%rbp), %rdi
movq -0x1a0(%rbp), %rsi
callq 0x208a0
movb %al, -0x8a7(%rbp)
jmp 0xf5572
movb -0x8a7(%rbp), %al
testb $0x1, %al
jne 0xf5581
jmp 0xf5f8e
movq -0x7d0(%rbp), %rdi
movl $0x0, -0x4fc(%rbp)
movq -0x1a0(%rbp), %rsi
callq 0x20870
movb %al, -0x8a8(%rbp)
jmp 0xf55a6
movb -0x8a8(%rbp), %al
testb $0x1, %al
jne 0xf55b5
jmp 0xf56c4
movq -0x7d0(%rbp), %rdi
movq -0x1a0(%rbp), %rsi
callq 0x208a0
movb %al, -0x8a9(%rbp)
jmp 0xf55d0
movb -0x8a9(%rbp), %al
testb $0x1, %al
jne 0xf55df
jmp 0xf56af
movb $0x1, -0x522(%rbp)
movl $0x10, %edi
callq 0x71a0
movq %rax, -0x8c0(%rbp)
leaq -0x521(%rbp), %rdi
movq %rdi, -0x8b8(%rbp)
callq 0x7650
movq -0x8b8(%rbp), %rdx
leaq 0x55572(%rip), %rsi     # 0x14ab8a
leaq -0x520(%rbp), %rdi
callq 0x7520
jmp 0xf5626
movq -0x8c0(%rbp), %rdi
leaq -0x520(%rbp), %rsi
callq 0x9c50
jmp 0xf563b
movq -0x8c0(%rbp), %rdi
movb $0x0, -0x522(%rbp)
leaq 0xb8788(%rip), %rsi     # 0x1addd8
leaq -0xeb9c7(%rip), %rdx    # 0x9c90
callq 0x7610
jmp 0xf6594
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf5687
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x520(%rbp), %rdi
callq 0x7708
leaq -0x521(%rbp), %rdi
callq 0x73d0
testb $0x1, -0x522(%rbp)
jne 0xf569e
jmp 0xf56aa
movq -0x8c0(%rbp), %rdi
callq 0x72c0
jmp 0xf655f
movq -0x1a0(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, -0x4fc(%rbp)
jmp 0xf589b
movq -0x7d0(%rbp), %rdi
movq -0x1a0(%rbp), %rsi
callq 0x208a0
movb %al, -0x8c1(%rbp)
jmp 0xf56df
movb -0x8c1(%rbp), %al
testb $0x1, %al
jne 0xf56ee
jmp 0xf5899
movq -0x1a0(%rbp), %rdi
addq $0x20, %rdi
callq 0x8650
cmpq $0x1, %rax
je 0xf57d8
movb $0x1, -0x54a(%rbp)
movl $0x10, %edi
callq 0x71a0
movq %rax, -0x8d8(%rbp)
leaq -0x549(%rbp), %rdi
movq %rdi, -0x8d0(%rbp)
callq 0x7650
movq -0x8d0(%rbp), %rdx
leaq 0x5548b(%rip), %rsi     # 0x14abcc
leaq -0x548(%rbp), %rdi
callq 0x7520
jmp 0xf574f
movq -0x8d8(%rbp), %rdi
leaq -0x548(%rbp), %rsi
callq 0x9c50
jmp 0xf5764
movq -0x8d8(%rbp), %rdi
movb $0x0, -0x54a(%rbp)
leaq 0xb865f(%rip), %rsi     # 0x1addd8
leaq -0xebaf0(%rip), %rdx    # 0x9c90
callq 0x7610
jmp 0xf6594
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf57b0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x548(%rbp), %rdi
callq 0x7708
leaq -0x549(%rbp), %rdi
callq 0x73d0
testb $0x1, -0x54a(%rbp)
jne 0xf57c7
jmp 0xf57d3
movq -0x8d8(%rbp), %rdi
callq 0x72c0
jmp 0xf655f
movq -0x1a0(%rbp), %rdi
addq $0x38, %rdi
callq 0x327d0
movq %rdx, -0x8e8(%rbp)
movq %rax, -0x8e0(%rbp)
jmp 0xf57f8
movq -0x8e8(%rbp), %rax
movq -0x8e0(%rbp), %rcx
movq %rcx, -0x560(%rbp)
movq %rax, -0x558(%rbp)
leaq -0x560(%rbp), %rdi
callq 0x1d8d0
testb $0x1, %al
jne 0xf5826
jmp 0xf5840
movq -0x1a0(%rbp), %rdi
addq $0x20, %rdi
callq 0x32840
movl (%rax), %eax
movl %eax, -0x8ec(%rbp)
jmp 0xf588d
movq -0x1a0(%rbp), %rdi
addq $0x20, %rdi
callq 0x32840
movq -0x7d0(%rbp), %rdi
movl (%rax), %esi
callq 0x31910
movq %rax, -0x8f8(%rbp)
jmp 0xf5867
movq -0x8f8(%rbp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x2f560
movl %eax, -0x8fc(%rbp)
jmp 0xf587f
movl -0x8fc(%rbp), %eax
movl %eax, -0x8ec(%rbp)
jmp 0xf588d
movl -0x8ec(%rbp), %eax
movl %eax, -0x4fc(%rbp)
jmp 0xf589b
movq -0x1a0(%rbp), %rax
movq %rax, -0x568(%rbp)
movq -0x7d0(%rbp), %rdi
movq -0x568(%rbp), %rsi
callq 0x208a0
movb %al, -0x8fd(%rbp)
jmp 0xf58c4
movb -0x8fd(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x8fe(%rbp)
jne 0xf5902
jmp 0xf58d9
movq -0x7d0(%rbp), %rdi
movq -0x568(%rbp), %rsi
callq 0x20870
movb %al, -0x8ff(%rbp)
jmp 0xf58f4
movb -0x8ff(%rbp), %al
movb %al, -0x8fe(%rbp)
jmp 0xf5902
movb -0x8fe(%rbp), %al
testb $0x1, %al
jne 0xf590e
jmp 0xf5943
movq -0x7d0(%rbp), %rdi
movq -0x568(%rbp), %rax
movl 0x9c(%rax), %esi
callq 0xea90
movq %rax, -0x908(%rbp)
jmp 0xf5930
movq -0x908(%rbp), %rax
movq %rax, -0x568(%rbp)
jmp 0xf58a9
movq -0x170(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
callq 0x113b50
jmp 0xf595b
movq -0x7d0(%rbp), %rdi
addq $0x8e0, %rdi            # imm = 0x8E0
movq -0x190(%rbp), %rsi
addq $0x8, %rsi
callq 0x88f0
jmp 0xf597b
movl $0x0, -0x56c(%rbp)
movl -0x56c(%rbp), %eax
cmpl -0x4fc(%rbp), %eax
jae 0xf5f89
movq -0x98(%rbp), %rdi
addq $0x68, %rdi
callq 0x8650
movl %eax, -0x570(%rbp)
movq -0x98(%rbp), %rdi
addq $0x68, %rdi
movq -0x568(%rbp), %rsi
addq $0x8, %rsi
callq 0x88f0
jmp 0xf59ca
movq -0x7d0(%rbp), %rsi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %edx
leaq -0x5d0(%rbp), %rdi
callq 0x71b50
jmp 0xf59e9
leaq 0x52b2e(%rip), %rdx     # 0x14851e
leaq -0x5b0(%rbp), %rdi
leaq -0x5d0(%rbp), %rsi
leaq -0x56c(%rbp), %rcx
callq 0x114010
jmp 0xf5a0c
leaq -0x5f1(%rbp), %rdi
movq %rdi, -0x910(%rbp)
callq 0x7650
movq -0x910(%rbp), %rdx
leaq 0x4f01f(%rip), %rsi     # 0x144a4c
leaq -0x5f0(%rbp), %rdi
callq 0x7520
jmp 0xf5a3b
movq -0x7d0(%rbp), %rsi
leaq -0x590(%rbp), %rdi
leaq -0x5b0(%rbp), %rdx
leaq -0x5f0(%rbp), %rcx
callq 0xf9dc0
jmp 0xf5a5e
leaq -0x5f0(%rbp), %rdi
callq 0x7708
leaq -0x5f1(%rbp), %rdi
callq 0x73d0
leaq -0x5b0(%rbp), %rdi
callq 0x7708
leaq -0x5d0(%rbp), %rdi
callq 0x7708
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x570(%rbp), %edx
leaq -0x590(%rbp), %rcx
callq 0x22f90
jmp 0xf5aaf
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
callq 0x23480
movq %rax, -0x918(%rbp)
jmp 0xf5ace
movq -0x918(%rbp), %rdi
movl $0x1e, %esi
callq 0xef50
movb %al, -0x919(%rbp)
jmp 0xf5ae7
movb -0x919(%rbp), %al
testb $0x1, %al
jne 0xf5af6
jmp 0xf5bda
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
movl $0x1e, %edx
callq 0x23520
movl %eax, -0x920(%rbp)
jmp 0xf5b19
movq -0x7d0(%rbp), %rdi
movl -0x920(%rbp), %eax
movl -0x56c(%rbp), %ecx
addl %ecx, %eax
movl %eax, -0x5f8(%rbp)
movl -0x8c(%rbp), %esi
movl -0x570(%rbp), %edx
movl -0x5f8(%rbp), %r8d
movl $0x1e, %ecx
callq 0x22f50
jmp 0xf5b53
movq -0x7d0(%rbp), %rdi
movl -0x5f8(%rbp), %esi
movl -0x14(%rbp), %edx
callq 0xf9f70
jmp 0xf5b6a
jmp 0xf5bda
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf5bb8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf5ba0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x5f0(%rbp), %rdi
callq 0x7708
leaq -0x5f1(%rbp), %rdi
callq 0x73d0
leaq -0x5b0(%rbp), %rdi
callq 0x7708
leaq -0x5d0(%rbp), %rdi
callq 0x7708
jmp 0xf655f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf5f78
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
callq 0x23480
movq %rax, -0x928(%rbp)
jmp 0xf5bf9
movq -0x928(%rbp), %rdi
movl $0x20, %esi
callq 0xef50
movb %al, -0x929(%rbp)
jmp 0xf5c12
movb -0x929(%rbp), %al
testb $0x1, %al
jne 0xf5c1e
jmp 0xf5c75
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
movl $0x20, %edx
callq 0x23520
movl %eax, -0x930(%rbp)
jmp 0xf5c41
movq -0x7d0(%rbp), %rdi
movl -0x930(%rbp), %eax
movl %eax, -0x5fc(%rbp)
movl -0x8c(%rbp), %esi
movl -0x570(%rbp), %edx
movl -0x5fc(%rbp), %r8d
movl $0x20, %ecx
callq 0x22f50
jmp 0xf5c73
jmp 0xf5c75
testb $0x1, -0x4f5(%rbp)
je 0xf5ca2
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x570(%rbp), %edx
movl $0xe, %ecx
xorl %r8d, %r8d
callq 0x22f50
jmp 0xf5ca0
jmp 0xf5ca2
testb $0x1, -0x4f6(%rbp)
je 0xf5ccf
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x570(%rbp), %edx
movl $0xd, %ecx
xorl %r8d, %r8d
callq 0x22f50
jmp 0xf5ccd
jmp 0xf5ccf
testb $0x1, -0x4f7(%rbp)
je 0xf5cfc
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x570(%rbp), %edx
movl $0x10, %ecx
xorl %r8d, %r8d
callq 0x22f50
jmp 0xf5cfa
jmp 0xf5cfc
testb $0x1, -0x4f8(%rbp)
je 0xf5d29
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x570(%rbp), %edx
movl $0x11, %ecx
xorl %r8d, %r8d
callq 0x22f50
jmp 0xf5d27
jmp 0xf5d29
movl -0x14(%rbp), %eax
movl %eax, -0x934(%rbp)
subl $0x1, %eax
je 0xf5d4d
jmp 0xf5d39
movl -0x934(%rbp), %eax
subl $0x3, %eax
je 0xf5e56
jmp 0xf5f56
movq -0x7d0(%rbp), %rax
movq -0x170(%rbp), %rcx
addq $0xb0, %rcx
movq %rcx, -0x948(%rbp)
movq %rax, -0x678(%rbp)
movq -0x190(%rbp), %rax
movq %rax, -0x670(%rbp)
movl -0x56c(%rbp), %eax
movl %eax, -0x668(%rbp)
leaq -0x660(%rbp), %rdi
movq %rdi, -0x940(%rbp)
leaq -0xd0(%rbp), %rsi
callq 0x7170
jmp 0xf5da6
leaq -0x640(%rbp), %rdi
leaq -0x590(%rbp), %rsi
callq 0x7170
jmp 0xf5dbb
leaq -0x620(%rbp), %rdi
leaq -0x678(%rbp), %rsi
callq 0xfa4e0
jmp 0xf5dd0
movq -0x948(%rbp), %rdi
leaq -0x620(%rbp), %rsi
callq 0x113fc0
jmp 0xf5de5
leaq -0x620(%rbp), %rdi
callq 0x113ff0
leaq -0x678(%rbp), %rdi
callq 0xfa580
jmp 0xf5f58
movq -0x940(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
callq 0x7708
jmp 0xf5f78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf5e45
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x620(%rbp), %rdi
callq 0x113ff0
leaq -0x678(%rbp), %rdi
callq 0xfa580
jmp 0xf5f78
movq -0x7d0(%rbp), %rax
movq -0x170(%rbp), %rcx
addq $0x98, %rcx
movq %rcx, -0x958(%rbp)
movq %rax, -0x6f0(%rbp)
leaq -0x6e8(%rbp), %rdi
movq %rdi, -0x950(%rbp)
leaq -0xd0(%rbp), %rsi
callq 0x7170
jmp 0xf5e95
leaq -0x6c8(%rbp), %rdi
leaq -0x590(%rbp), %rsi
callq 0x7170
jmp 0xf5eaa
movq -0x190(%rbp), %rax
movq %rax, -0x6a8(%rbp)
movl -0x56c(%rbp), %eax
movl %eax, -0x6a0(%rbp)
leaq -0x698(%rbp), %rdi
leaq -0x6f0(%rbp), %rsi
callq 0xfa5b0
jmp 0xf5ed9
movq -0x958(%rbp), %rdi
leaq -0x698(%rbp), %rsi
callq 0x113fc0
jmp 0xf5eee
leaq -0x698(%rbp), %rdi
callq 0x113ff0
leaq -0x6f0(%rbp), %rdi
callq 0xfa650
jmp 0xf5f58
movq -0x950(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
callq 0x7708
jmp 0xf5f78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf5f48
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x698(%rbp), %rdi
callq 0x113ff0
leaq -0x6f0(%rbp), %rdi
callq 0xfa650
jmp 0xf5f78
jmp 0xf5f58
leaq -0x590(%rbp), %rdi
callq 0x7708
movl -0x56c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x56c(%rbp)
jmp 0xf5985
leaq -0x590(%rbp), %rdi
callq 0x7708
jmp 0xf655f
jmp 0xf64d7
movq -0x98(%rbp), %rdi
addq $0x68, %rdi
callq 0x8650
movq -0x7d0(%rbp), %rdi
movl %eax, -0x6f4(%rbp)
movl -0x194(%rbp), %esi
movl -0x4f4(%rbp), %edx
callq 0xf9fd0
movl %eax, -0x95c(%rbp)
jmp 0xf5fc4
movl -0x95c(%rbp), %eax
movl %eax, -0x194(%rbp)
movl -0x194(%rbp), %ecx
movq -0x190(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x98(%rbp), %rdi
addq $0x68, %rdi
leaq -0x194(%rbp), %rsi
callq 0x88f0
jmp 0xf5ff9
movq -0x7d0(%rbp), %rsi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %edx
leaq -0x738(%rbp), %rdi
callq 0x71b50
jmp 0xf6018
leaq -0x759(%rbp), %rdi
movq %rdi, -0x968(%rbp)
callq 0x7650
movq -0x968(%rbp), %rdx
leaq 0x4ea13(%rip), %rsi     # 0x144a4c
leaq -0x758(%rbp), %rdi
callq 0x7520
jmp 0xf6047
movq -0x7d0(%rbp), %rsi
leaq -0x718(%rbp), %rdi
leaq -0x738(%rbp), %rdx
leaq -0x758(%rbp), %rcx
callq 0xf9dc0
jmp 0xf606a
leaq -0x758(%rbp), %rdi
callq 0x7708
leaq -0x759(%rbp), %rdi
callq 0x73d0
leaq -0x738(%rbp), %rdi
callq 0x7708
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x6f4(%rbp), %edx
leaq -0x718(%rbp), %rcx
callq 0x22f90
jmp 0xf60af
leaq 0x4ec77(%rip), %rdx     # 0x144d2d
leaq -0x7a0(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x2f8c0
jmp 0xf60cb
leaq -0x780(%rbp), %rdi
leaq -0x7a0(%rbp), %rsi
leaq -0x718(%rbp), %rdx
callq 0xa1530
jmp 0xf60e7
leaq -0x7a0(%rbp), %rdi
callq 0x7708
movq -0x7d0(%rbp), %rdi
addq $0x38, %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, %esi
callq 0xead0
movq %rax, %rdi
addq $0x20, %rdi
leaq -0x780(%rbp), %rsi
callq 0x7050
jmp 0xf6124
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
callq 0x23480
movq %rax, -0x970(%rbp)
jmp 0xf6143
movq -0x970(%rbp), %rdi
movl $0x1e, %esi
callq 0xef50
movb %al, -0x971(%rbp)
jmp 0xf615c
movb -0x971(%rbp), %al
testb $0x1, %al
jne 0xf616b
jmp 0xf626a
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
movl $0x1e, %edx
callq 0x23520
movl %eax, -0x978(%rbp)
jmp 0xf618e
movq -0x7d0(%rbp), %rdi
movl -0x978(%rbp), %eax
movl %eax, -0x7a4(%rbp)
movl -0x8c(%rbp), %esi
movl -0x6f4(%rbp), %edx
movl -0x7a4(%rbp), %r8d
movl $0x1e, %ecx
callq 0x22f50
jmp 0xf61c0
movq -0x7d0(%rbp), %rdi
movl -0x7a4(%rbp), %esi
movl -0x14(%rbp), %edx
callq 0xf9f70
jmp 0xf61d7
jmp 0xf626a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf6202
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x758(%rbp), %rdi
callq 0x7708
leaq -0x759(%rbp), %rdi
callq 0x73d0
leaq -0x738(%rbp), %rdi
callq 0x7708
jmp 0xf655f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xf64c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x7a0(%rbp), %rdi
callq 0x7708
jmp 0xf64c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x780(%rbp), %rdi
callq 0x7708
jmp 0xf64c6
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
callq 0x23480
movq %rax, -0x980(%rbp)
jmp 0xf6289
movq -0x980(%rbp), %rdi
movl $0x1f, %esi
callq 0xef50
movb %al, -0x981(%rbp)
jmp 0xf62a2
movb -0x981(%rbp), %al
testb $0x1, %al
jne 0xf62ae
jmp 0xf6305
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
movl $0x1f, %edx
callq 0x23520
movl %eax, -0x988(%rbp)
jmp 0xf62d1
movq -0x7d0(%rbp), %rdi
movl -0x988(%rbp), %eax
movl %eax, -0x7a8(%rbp)
movl -0x8c(%rbp), %esi
movl -0x6f4(%rbp), %edx
movl -0x7a8(%rbp), %r8d
movl $0x1f, %ecx
callq 0x22f50
jmp 0xf6303
jmp 0xf6305
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
callq 0x23480
movq %rax, -0x990(%rbp)
jmp 0xf6324
movq -0x990(%rbp), %rdi
movl $0x20, %esi
callq 0xef50
movb %al, -0x991(%rbp)
jmp 0xf633d
movb -0x991(%rbp), %al
testb $0x1, %al
jne 0xf6349
jmp 0xf63a0
movq -0x7d0(%rbp), %rdi
movq -0x190(%rbp), %rax
movl 0x8(%rax), %esi
movl $0x20, %edx
callq 0x23520
movl %eax, -0x998(%rbp)
jmp 0xf636c
movq -0x7d0(%rbp), %rdi
movl -0x998(%rbp), %eax
movl %eax, -0x7ac(%rbp)
movl -0x8c(%rbp), %esi
movl -0x6f4(%rbp), %edx
movl -0x7ac(%rbp), %r8d
movl $0x20, %ecx
callq 0x22f50
jmp 0xf639e
jmp 0xf63a0
testb $0x1, -0x4ed(%rbp)
je 0xf63f8
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x6f4(%rbp), %edx
movl -0x4f4(%rbp), %r8d
movl $0xb, %ecx
callq 0x22f50
jmp 0xf63cf
cmpl $0x0, -0x4f4(%rbp)
jne 0xf63f6
movq -0x7d0(%rbp), %rdi
addq $0x940, %rdi            # imm = 0x940
leaq -0x780(%rbp), %rsi
callq 0x7050
jmp 0xf63f4
jmp 0xf63f6
jmp 0xf63f8
testb $0x1, -0x4f5(%rbp)
je 0xf6425
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x6f4(%rbp), %edx
movl $0xe, %ecx
xorl %r8d, %r8d
callq 0x22f50
jmp 0xf6423
jmp 0xf6425
testb $0x1, -0x4f6(%rbp)
je 0xf6452
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x6f4(%rbp), %edx
movl $0xd, %ecx
xorl %r8d, %r8d
callq 0x22f50
jmp 0xf6450
jmp 0xf6452
testb $0x1, -0x4f7(%rbp)
je 0xf647f
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x6f4(%rbp), %edx
movl $0x10, %ecx
xorl %r8d, %r8d
callq 0x22f50
jmp 0xf647d
jmp 0xf647f
testb $0x1, -0x4f8(%rbp)
je 0xf64ac
movq -0x7d0(%rbp), %rdi
movl -0x8c(%rbp), %esi
movl -0x6f4(%rbp), %edx
movl $0x11, %ecx
xorl %r8d, %r8d
callq 0x22f50
jmp 0xf64aa
jmp 0xf64ac
leaq -0x780(%rbp), %rdi
callq 0x7708
leaq -0x718(%rbp), %rdi
callq 0x7708
jmp 0xf64d7
leaq -0x718(%rbp), %rdi
callq 0x7708
jmp 0xf655f
jmp 0xf64d9
jmp 0xf64db
jmp 0xf64dd
jmp 0xf64df
leaq -0x180(%rbp), %rdi
callq 0xd8070
jmp 0xf478b
movq -0x7d0(%rbp), %rdi
movq -0x98(%rbp), %rax
movq %rax, -0x9a0(%rbp)
addq $0x38, %rdi
movl -0x8c(%rbp), %eax
movl %eax, %esi
callq 0xead0
movq -0x9a0(%rbp), %rsi
movq %rax, %rdx
leaq -0x7c8(%rbp), %rdi
xorl %ecx, %ecx
callq 0x10e6b0
jmp 0xf6530
leaq -0x7c8(%rbp), %rdi
callq 0xfa680
jmp 0xf653e
movl -0x9c(%rbp), %eax
movl %eax, -0x4(%rbp)
movl $0x1, -0x84(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x7708
jmp 0xf656d
leaq -0xd0(%rbp), %rdi
callq 0x7708
jmp 0xf6582
leaq -0x30(%rbp), %rdi
callq 0xdacf0
movl -0x4(%rbp), %eax
addq $0x9a0, %rsp            # imm = 0x9A0
popq %rbp
retq
leaq -0x30(%rbp), %rdi
callq 0xdacf0
movq -0x60(%rbp), %rdi
callq 0x7640
nopw %cs:(%rax,%rax)