// File: /workspace/github_cpp_makefile_star2_O2/rossy[P]crossc/SPIRV-Cross/spirv_msl.cpp
// Function: spirv_cross::CompilerMSL::entry_point_args[abi:cxx11](bool)
string CompilerMSL::entry_point_args(bool append_comma)
{
	string ep_args;

	// Stage-in structure
	if (stage_in_var_id)
	{
		auto &var = get<SPIRVariable>(stage_in_var_id);
		auto &type = get<SPIRType>(var.basetype);

		if (!ep_args.empty())
			ep_args += ", ";

		ep_args += type_to_glsl(type) + " " + to_name(var.self) + " [[stage_in]]";
	}

	// Output resources, sorted by resource index & type
	// We need to sort to work around a bug on macOS 10.13 with NVidia drivers where switching between shaders
	// with different order of buffers can result in issues with buffer assignments inside the driver.
	struct Resource
	{
		Variant *id;
		string name;
		SPIRType::BaseType basetype;
		uint32_t index;
	};

	vector<Resource> resources;

	for (auto &id : ir.ids)
	{
		if (id.get_type() == TypeVariable)
		{
			auto &var = id.get<SPIRVariable>();
			auto &type = get<SPIRType>(var.basetype);

			uint32_t var_id = var.self;

			if ((var.storage == StorageClassUniform || var.storage == StorageClassUniformConstant ||
			     var.storage == StorageClassPushConstant || var.storage == StorageClassStorageBuffer) &&
			    !is_hidden_variable(var))
			{
				if (type.basetype == SPIRType::SampledImage)
				{
					resources.push_back(
					    { &id, to_name(var_id), SPIRType::Image, get_metal_resource_index(var, SPIRType::Image) });

					if (type.image.dim != DimBuffer && constexpr_samplers.count(var_id) == 0)
					{
						resources.push_back({ &id, to_sampler_expression(var_id), SPIRType::Sampler,
						                      get_metal_resource_index(var, SPIRType::Sampler) });
					}
				}
				else if (constexpr_samplers.count(var_id) == 0)
				{
					// constexpr samplers are not declared as resources.
					resources.push_back(
					    { &id, to_name(var_id), type.basetype, get_metal_resource_index(var, type.basetype) });
				}
			}
		}
	}

	std::sort(resources.begin(), resources.end(), [](const Resource &lhs, const Resource &rhs) {
		return tie(lhs.basetype, lhs.index) < tie(rhs.basetype, rhs.index);
	});

	for (auto &r : resources)
	{
		auto &var = r.id->get<SPIRVariable>();
		auto &type = get<SPIRType>(var.basetype);

		uint32_t var_id = var.self;

		switch (r.basetype)
		{
		case SPIRType::Struct:
		{
			auto &m = ir.meta.at(type.self);
			if (m.members.size() == 0)
				break;
			if (!type.array.empty())
			{
				if (type.array.size() > 1)
					SPIRV_CROSS_THROW("Arrays of arrays of buffers are not supported.");

				// Metal doesn't directly support this, so we must expand the
				// array. We'll declare a local array to hold these elements
				// later.
				uint32_t array_size =
				    type.array_size_literal.back() ? type.array.back() : get<SPIRConstant>(type.array.back()).scalar();

				if (array_size == 0)
					SPIRV_CROSS_THROW("Unsized arrays of buffers are not supported in MSL.");

				buffer_arrays.push_back(var_id);
				for (uint32_t i = 0; i < array_size; ++i)
				{
					if (!ep_args.empty())
						ep_args += ", ";
					ep_args += get_argument_address_space(var) + " " + type_to_glsl(type) + "* " + r.name + "_" +
					           convert_to_string(i);
					ep_args += " [[buffer(" + convert_to_string(r.index + i) + ")]]";
				}
			}
			else
			{
				if (!ep_args.empty())
					ep_args += ", ";
				ep_args += get_argument_address_space(var) + " " + type_to_glsl(type) + "& " + r.name;
				ep_args += " [[buffer(" + convert_to_string(r.index) + ")]]";
			}
			break;
		}
		case SPIRType::Sampler:
			if (!ep_args.empty())
				ep_args += ", ";
			ep_args += sampler_type(type) + " " + r.name;
			ep_args += " [[sampler(" + convert_to_string(r.index) + ")]]";
			break;
		case SPIRType::Image:
			if (!ep_args.empty())
				ep_args += ", ";
			ep_args += image_type_glsl(type, var_id) + " " + r.name;
			ep_args += " [[texture(" + convert_to_string(r.index) + ")]]";
			break;
		default:
			SPIRV_CROSS_THROW("Unexpected resource type");
			break;
		}
	}

	// Builtin variables
	for (auto &id : ir.ids)
	{
		if (id.get_type() == TypeVariable)
		{
			auto &var = id.get<SPIRVariable>();

			uint32_t var_id = var.self;
			BuiltIn bi_type = ir.meta[var_id].decoration.builtin_type;

			// Don't emit SamplePosition as a separate parameter. In the entry
			// point, we get that by calling get_sample_position() on the sample ID.
			if (var.storage == StorageClassInput && is_builtin_variable(var))
			{
				if (bi_type != BuiltInSamplePosition)
				{
					if (!ep_args.empty())
						ep_args += ", ";

					ep_args += builtin_type_decl(bi_type) + " " + to_expression(var_id);
					ep_args += " [[" + builtin_qualifier(bi_type) + "]]";
				}
				else
				{
					auto &entry_func = get<SPIRFunction>(ir.default_entry_point);
					entry_func.fixup_hooks_in.push_back([=]() {
						statement(builtin_type_decl(bi_type), " ", to_expression(var_id), " = get_sample_position(",
						          to_expression(builtin_sample_id_id), ");");
					});
				}
			}
		}
	}

	// Vertex and instance index built-ins
	if (needs_vertex_idx_arg)
		ep_args += built_in_func_arg(BuiltInVertexIndex, !ep_args.empty());

	if (needs_instance_idx_arg)
		ep_args += built_in_func_arg(BuiltInInstanceIndex, !ep_args.empty());

	if (!ep_args.empty() && append_comma)
		ep_args += ", ";

	return ep_args;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x198, %rsp            # imm = 0x198
movl %edx, %ebp
leaq 0x10(%rdi), %rax
movq %rax, (%rdi)
andq $0x0, 0x8(%rdi)
movq %rsi, %r12
movb $0x0, 0x10(%rdi)
movl 0x92c(%rsi), %esi
testl %esi, %esi
movq %rdi, (%rsp)
je 0x76e77
movq %rdi, %r15
movq %r12, %rdi
callq 0x9c0e
movq %rax, %rbx
movl 0xc(%rax), %esi
movq %r12, %rdi
callq 0x90a4
movq %rax, %r14
cmpq $0x0, 0x8(%r15)
je 0x76dba
leaq 0x1e2d9(%rip), %rsi     # 0x9508b
movq %r15, %rdi
callq 0x64d0
movq (%r12), %rax
leaq 0xc8(%rsp), %rdi
movq %r12, %rsi
movq %r14, %rdx
xorl %ecx, %ecx
callq *0x98(%rax)
leaq 0x18aab(%rip), %rdx     # 0x8f886
leaq 0x68(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
callq 0xab3f
movl 0x8(%rbx), %edx
movq (%r12), %rax
leaq 0xe8(%rsp), %rdi
pushq $0x1
popq %rcx
movq %r12, %rsi
callq *0x38(%rax)
leaq 0x48(%rsp), %rdi
leaq 0x68(%rsp), %rsi
leaq 0xe8(%rsp), %rdx
callq 0x1743e
leaq 0x26fc1(%rip), %rdx     # 0x9dde4
leaq 0x10(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0xab3f
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x64f0
leaq 0x10(%rsp), %rdi
callq 0x6548
leaq 0x48(%rsp), %rdi
callq 0x6548
leaq 0xe8(%rsp), %rdi
callq 0x6548
leaq 0x68(%rsp), %rdi
callq 0x6548
leaq 0xc8(%rsp), %rdi
callq 0x6548
movl %ebp, 0x88(%rsp)
xorps %xmm0, %xmm0
leaq 0xb0(%rsp), %rax
movaps %xmm0, (%rax)
andq $0x0, 0x10(%rax)
movq 0x20(%r12), %r13
movq 0x28(%r12), %r15
movq %r12, 0x8(%rsp)
leaq 0x9c8(%r12), %rax
movq %rax, 0x40(%rsp)
movl $0x1205, %r14d          # imm = 0x1205
cmpq %r15, %r13
je 0x77057
cmpl $0x2, 0x8(%r13)
jne 0x7704e
movq %r13, %rdi
callq 0x9b30
movq %rax, %r12
movl 0xc(%rax), %esi
movq 0x8(%rsp), %rdi
callq 0x90a4
movq %rax, %rbx
movl 0x8(%r12), %eax
movl %eax, 0x48(%rsp)
movl 0x10(%r12), %eax
cmpl $0xc, %eax
ja 0x7704e
btl %eax, %r14d
jae 0x7704e
movq 0x8(%rsp), %rdi
movq %r12, %rsi
xorl %edx, %edx
callq 0x10b56
testb %al, %al
jne 0x7704e
cmpl $0xe, 0xc(%rbx)
jne 0x76fe8
movq %r13, 0x10(%rsp)
movl 0x48(%rsp), %edx
movq 0x8(%rsp), %rbp
movq (%rbp), %rax
leaq 0x18(%rsp), %rdi
movq %rbp, %rsi
pushq $0x1
popq %rcx
callq *0x38(%rax)
movl $0xd, 0x38(%rsp)
movq %rbp, %rdi
movq %r12, %rsi
pushq $0xd
popq %rdx
callq 0x7a1a2
movl %eax, 0x3c(%rsp)
leaq 0xb0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x7be8c
leaq 0x18(%rsp), %rdi
callq 0x6548
cmpl $0x5, 0x84(%rbx)
je 0x7704e
movq 0x40(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x88c74
testq %rax, %rax
jne 0x7704e
movq %r13, 0x10(%rsp)
movl 0x48(%rsp), %edx
leaq 0x18(%rsp), %rdi
movq 0x8(%rsp), %rbx
movq %rbx, %rsi
callq 0x6f3a6
movl $0xf, 0x38(%rsp)
movq %rbx, %rdi
movq %r12, %rsi
pushq $0xf
popq %rdx
callq 0x7a1a2
movl %eax, 0x3c(%rsp)
leaq 0xb0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x7be8c
jmp 0x77044
movq 0x40(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x88c74
testq %rax, %rax
jne 0x7704e
movq %r13, 0x10(%rsp)
movl 0x48(%rsp), %edx
movq 0x8(%rsp), %rbp
movq (%rbp), %rax
leaq 0x18(%rsp), %rdi
movq %rbp, %rsi
pushq $0x1
popq %rcx
callq *0x38(%rax)
movl 0xc(%rbx), %edx
movl %edx, 0x38(%rsp)
movq %rbp, %rdi
movq %r12, %rsi
callq 0x7a1a2
movl %eax, 0x3c(%rsp)
leaq 0xb0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x7be8c
leaq 0x18(%rsp), %rdi
callq 0x6548
addq $0x10, %r13
jmp 0x76eb3
movq 0xb0(%rsp), %rax
movq 0xb8(%rsp), %rcx
movq %rax, %r12
movq %rcx, 0x90(%rsp)
cmpq %rcx, %rax
movq (%rsp), %r15
movq 0x8(%rsp), %r14
je 0x770f2
movq 0x90(%rsp), %rsi
movq %rsi, %rbx
movq %r12, %rdi
subq %r12, %rbx
pushq $0x30
popq %rcx
movq %rbx, %rax
cqto
idivq %rcx
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
callq 0x7e4a8
cmpq $0x301, %rbx            # imm = 0x301
jl 0x770e2
movq %r12, %rdi
leaq 0x300(%r12), %rbx
movq %rbx, %rsi
callq 0x7e8f7
cmpq 0x90(%rsp), %rbx
je 0x770f2
movq %rbx, %rdi
callq 0x7e9a0
addq $0x30, %rbx
jmp 0x770ca
movq %r12, %rdi
movq 0x90(%rsp), %rsi
callq 0x7e8f7
leaq 0x38(%r14), %rax
movq %rax, 0xa0(%rsp)
leaq 0xa00(%r14), %rax
movq %rax, 0x108(%rsp)
leaq 0xc8(%rsp), %r13
movq %r12, %r15
cmpq 0x90(%rsp), %r15
je 0x77705
movq (%r15), %rdi
callq 0x9b30
movq %rax, %rbx
movl 0xc(%rax), %esi
movq 0x8(%rsp), %rdi
callq 0x90a4
movq %rax, 0x40(%rsp)
movl 0x8(%rbx), %ecx
movl %ecx, 0x8c(%rsp)
movl 0x28(%r15), %eax
cmpl $0xc, %eax
je 0x7732d
cmpl $0xd, %eax
je 0x77238
cmpl $0xf, %eax
leaq 0x48(%rsp), %r14
jne 0x779b0
movq (%rsp), %rax
cmpq $0x0, 0x8(%rax)
je 0x7718c
movq (%rsp), %rdi
leaq 0x1df04(%rip), %rsi     # 0x9508b
callq 0x64d0
leaq 0x68(%rsp), %rbx
movq %rbx, %rdi
movq 0x8(%rsp), %rsi
movq 0x40(%rsp), %rdx
callq 0x78108
movq %r14, %rdi
movq %rbx, %rsi
leaq 0x186d6(%rip), %rdx     # 0x8f886
callq 0xab3f
leaq 0x8(%r15), %rdx
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x42dd2
movq (%rsp), %rdi
movq %rbx, %rsi
callq 0x64f0
movq %rbx, %rdi
callq 0x6548
movq %r14, %rdi
callq 0x6548
leaq 0x68(%rsp), %rbx
movq %rbx, %rdi
callq 0x6548
leaq 0x2c(%r15), %rsi
movq %rbx, %rdi
callq 0x44a3d
movq %r14, %rdi
leaq 0x26c5b(%rip), %rsi     # 0x9de63
movq %rbx, %rdx
callq 0x463dd
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x26ab5(%rip), %rdx     # 0x9dcd7
callq 0xab3f
movq (%rsp), %rdi
movq %rbx, %rsi
callq 0x64f0
jmp 0x7730a
movq (%rsp), %rax
cmpq $0x0, 0x8(%rax)
leaq 0x48(%rsp), %r14
je 0x7725f
movq (%rsp), %rdi
leaq 0x1de38(%rip), %rsi     # 0x9508b
callq 0x64d0
movl 0x8c(%rsp), %ecx
movq 0x8(%rsp), %rsi
movq (%rsi), %rax
leaq 0x68(%rsp), %rbx
movq %rbx, %rdi
movq 0x40(%rsp), %rdx
callq *0xb0(%rax)
movq %r14, %rdi
movq %rbx, %rsi
leaq 0x185ff(%rip), %rdx     # 0x8f886
callq 0xab3f
leaq 0x8(%r15), %rdx
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x42dd2
movq (%rsp), %rdi
movq %rbx, %rsi
callq 0x64f0
movq %rbx, %rdi
callq 0x6548
movq %r14, %rdi
callq 0x6548
leaq 0x68(%rsp), %rbx
movq %rbx, %rdi
callq 0x6548
leaq 0x2c(%r15), %rsi
movq %rbx, %rdi
callq 0x44a3d
movq %r14, %rdi
leaq 0x26b90(%rip), %rsi     # 0x9de6f
movq %rbx, %rdx
callq 0x463dd
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x269de(%rip), %rdx     # 0x9dcd7
callq 0xab3f
movq (%rsp), %rdi
movq %rbx, %rsi
callq 0x64f0
movq %rbx, %rdi
callq 0x6548
movq %r14, %rdi
callq 0x6548
leaq 0x68(%rsp), %rdi
callq 0x6548
addq $0x30, %r15
jmp 0x77118
movq %rbx, 0xa8(%rsp)
movq 0x40(%rsp), %rax
movl 0x8(%rax), %esi
movq 0xa0(%rsp), %rdi
callq 0x1738e
movq 0xd8(%rax), %rcx
cmpq 0xd0(%rax), %rcx
je 0x77324
movq 0x40(%rsp), %rcx
movq 0x20(%rcx), %rax
movq 0x28(%rcx), %rcx
cmpq %rcx, %rax
je 0x775cb
subq %rax, %rcx
cmpq $0x5, %rcx
jae 0x77a49
movq 0x40(%rsp), %rbx
movq %rbx, %rdi
addq $0x38, %rdi
callq 0x17d30
movq %rax, %rcx
movq 0x28(%rbx), %rax
addq $-0x4, %rax
testq %rdx, (%rcx)
jne 0x773ae
movl (%rax), %esi
movq 0x8(%rsp), %rdi
callq 0x17bce
addq $0x10, %rax
movl (%rax), %eax
movl %eax, 0x9c(%rsp)
testl %eax, %eax
je 0x779fe
movq 0x108(%rsp), %rdi
leaq 0x8c(%rsp), %rsi
callq 0x6c06
leaq 0x8(%r15), %rax
movq %rax, 0x110(%rsp)
xorl %r12d, %r12d
cmpl %r12d, 0x9c(%rsp)
je 0x77324
movq %r13, %rbp
movq %r15, %r13
movq (%rsp), %r15
cmpq $0x0, 0x8(%r15)
je 0x77411
movq %r15, %rdi
leaq 0x1dc7f(%rip), %rsi     # 0x9508b
callq 0x64d0
leaq 0x178(%rsp), %rbx
movq %rbx, %rdi
movq 0x8(%rsp), %rsi
movq 0xa8(%rsp), %rdx
callq 0x6f534
leaq 0x118(%rsp), %rdi
movq %rbx, %rsi
leaq 0x18446(%rip), %rdx     # 0x8f886
callq 0xab3f
movq %r13, %r15
movq 0x8(%rsp), %rsi
movq (%rsi), %rax
leaq 0x158(%rsp), %r14
movq %r14, %rdi
movq 0x40(%rsp), %rdx
xorl %ecx, %ecx
callq *0x98(%rax)
leaq 0xe8(%rsp), %rbx
movq %rbx, %rdi
leaq 0x118(%rsp), %rsi
movq %r14, %rdx
callq 0x1743e
movq %rbp, %rdi
movq %rbx, %rsi
leaq 0x1d095(%rip), %rdx     # 0x94525
callq 0xab3f
leaq 0x68(%rsp), %rbx
movq %rbx, %rdi
movq %rbp, %rsi
movq 0x110(%rsp), %rdx
callq 0x42dd2
movq %rbp, %r13
leaq 0x48(%rsp), %rdi
movq %rbx, %rsi
leaq 0x21a88(%rip), %rdx     # 0x98f47
callq 0xab3f
leaq 0x138(%rsp), %r14
movq %r14, %rdi
movl %r12d, %esi
callq 0x1c182
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
leaq 0x48(%rsp), %rsi
movq %r14, %rdx
callq 0x1743e
movq (%rsp), %rdi
movq %rbx, %rsi
callq 0x64f0
movq %rbx, %rdi
callq 0x6548
leaq 0x138(%rsp), %rdi
callq 0x6548
leaq 0x48(%rsp), %rbp
movq %rbp, %rdi
callq 0x6548
leaq 0x68(%rsp), %rbx
movq %rbx, %rdi
callq 0x6548
movq %r13, %rdi
callq 0x6548
leaq 0xe8(%rsp), %rdi
callq 0x6548
leaq 0x158(%rsp), %rdi
callq 0x6548
leaq 0x118(%rsp), %rdi
callq 0x6548
leaq 0x178(%rsp), %rdi
callq 0x6548
movl 0x2c(%r15), %esi
addl %r12d, %esi
movq %rbx, %rdi
callq 0x1c182
movq %rbp, %rdi
leaq 0x268d9(%rip), %rsi     # 0x9de55
movq %rbx, %rdx
callq 0x463dd
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
movq %rbp, %rsi
leaq 0x26741(%rip), %rdx     # 0x9dcd7
callq 0xab3f
movq (%rsp), %rdi
movq %rbx, %rsi
callq 0x64f0
movq %rbx, %rdi
callq 0x6548
leaq 0x48(%rsp), %rdi
callq 0x6548
leaq 0x68(%rsp), %rdi
callq 0x6548
incl %r12d
jmp 0x773e3
movq (%rsp), %rax
cmpq $0x0, 0x8(%rax)
leaq 0xe8(%rsp), %rbx
leaq 0x118(%rsp), %r12
je 0x775f6
movq (%rsp), %rdi
leaq 0x1da9a(%rip), %rsi     # 0x9508b
callq 0x64d0
movq %rbx, %rdi
movq 0x8(%rsp), %rsi
movq 0xa8(%rsp), %rdx
callq 0x6f534
movq %r13, %rdi
movq %rbx, %rsi
leaq 0x1826e(%rip), %rdx     # 0x8f886
callq 0xab3f
movq 0x8(%rsp), %rsi
movq (%rsi), %rax
movq %r12, %rdi
movq 0x40(%rsp), %rdx
xorl %ecx, %ecx
callq *0x98(%rax)
leaq 0x68(%rsp), %r14
movq %r14, %rdi
movq %r13, %rsi
movq %r12, %rdx
callq 0x1743e
leaq 0x48(%rsp), %rbp
movq %rbp, %rdi
movq %r14, %rsi
leaq 0x26806(%rip), %rdx     # 0x9de60
callq 0xab3f
leaq 0x8(%r15), %rdx
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
callq 0x42dd2
movq (%rsp), %rdi
movq %r14, %rsi
callq 0x64f0
movq %r14, %rdi
callq 0x6548
movq %rbp, %rdi
callq 0x6548
leaq 0x68(%rsp), %r14
movq %r14, %rdi
callq 0x6548
movq %r12, %rdi
callq 0x6548
movq %r13, %rdi
callq 0x6548
movq %rbx, %rdi
callq 0x6548
leaq 0x2c(%r15), %rsi
movq %r14, %rdi
callq 0x44a3d
movq %rbp, %rdi
leaq 0x2678b(%rip), %rsi     # 0x9de55
movq %r14, %rdx
callq 0x463dd
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
movq %rbp, %rsi
leaq 0x265f3(%rip), %rdx     # 0x9dcd7
callq 0xab3f
movq (%rsp), %rdi
movq %rbx, %rsi
callq 0x64f0
movq %rbx, %rdi
callq 0x6548
movq %rbp, %rdi
jmp 0x77315
movq 0x8(%rsp), %rax
movq 0x20(%rax), %rbx
movq 0x28(%rax), %r15
leaq 0x10(%rsp), %r14
cmpq %r15, %rbx
je 0x778db
cmpl $0x2, 0x8(%rbx)
jne 0x778d2
movq %rbx, %rdi
callq 0x9b30
cmpl $0x1, 0x10(%rax)
jne 0x778d2
movl 0x8(%rax), %ebp
movq 0xa0(%rsp), %rcx
movq (%rcx), %rcx
imulq $0x148, %rbp, %rdx      # imm = 0x148
movl 0xa0(%rcx,%rdx), %r12d
movq 0x8(%rsp), %rdi
movq %rax, %rsi
callq 0x10c60
testb %al, %al
je 0x778d2
cmpl $0x13, %r12d
jne 0x777d0
movq 0x8(%rsp), %r12
movl 0x108(%r12), %esi
movq %r12, %rdi
callq 0xa048
addq $0xb0, %rax
movq %r12, 0x10(%rsp)
movl $0x13, 0x18(%rsp)
movl %ebp, 0x1c(%rsp)
leaq 0x726b(%rip), %rcx      # 0x7ea12
movq %rcx, 0x28(%rsp)
leaq 0x7329(%rip), %rcx      # 0x7eadc
movq %rcx, 0x20(%rsp)
movq %rax, %rdi
movq %r14, %rsi
callq 0x83d70
movq %r14, %rdi
callq 0xbe36
jmp 0x778d2
movq (%rsp), %rax
cmpq $0x0, 0x8(%rax)
je 0x777eb
movq (%rsp), %rdi
leaq 0x1d8a5(%rip), %rsi     # 0x9508b
callq 0x64d0
leaq 0x68(%rsp), %r13
movq %r13, %rdi
movq 0x8(%rsp), %rsi
movl %r12d, %edx
callq 0x7bf9e
leaq 0x48(%rsp), %rdi
movq %r13, %rsi
leaq 0x18077(%rip), %rdx     # 0x8f886
callq 0xab3f
leaq 0xc8(%rsp), %r13
movq %r13, %rdi
movq 0x8(%rsp), %rsi
movl %ebp, %edx
callq 0x2b9f0
movq %r14, %rdi
leaq 0x48(%rsp), %rsi
movq %r13, %rdx
callq 0x1743e
movq (%rsp), %rdi
movq %r14, %rsi
callq 0x64f0
movq %r14, %rdi
callq 0x6548
leaq 0xc8(%rsp), %rdi
callq 0x6548
leaq 0x48(%rsp), %r13
movq %r13, %rdi
callq 0x6548
leaq 0x68(%rsp), %rbp
movq %rbp, %rdi
callq 0x6548
movq %rbp, %rdi
movq 0x8(%rsp), %rsi
movl %r12d, %edx
callq 0x7bb9c
movq %r13, %rdi
leaq 0x26412(%rip), %rsi     # 0x9dca2
movq %rbp, %rdx
callq 0x463dd
movq %r14, %rdi
movq %r13, %rsi
leaq 0x26510(%rip), %rdx     # 0x9ddb5
callq 0xab3f
movq (%rsp), %rdi
movq %r14, %rsi
callq 0x64f0
movq %r14, %rdi
callq 0x6548
leaq 0x48(%rsp), %rdi
callq 0x6548
leaq 0x68(%rsp), %rdi
callq 0x6548
addq $0x10, %rbx
jmp 0x77717
movq (%rsp), %r15
movq 0x8(%r15), %rax
movq 0x8(%rsp), %r14
cmpb $0x0, 0x935(%r14)
je 0x7792e
xorl %ecx, %ecx
testq %rax, %rax
setne %cl
leaq 0x10(%rsp), %rdi
pushq $0x2a
popq %rdx
movq %r14, %rsi
callq 0x7c106
movl 0x88(%rsp), %ebx
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x64f0
leaq 0x10(%rsp), %rdi
callq 0x6548
movq 0x8(%r15), %rax
jmp 0x77935
movl 0x88(%rsp), %ebx
cmpb $0x1, 0x936(%r14)
jne 0x77972
xorl %ecx, %ecx
testq %rax, %rax
setne %cl
leaq 0x10(%rsp), %rdi
pushq $0x2b
popq %rdx
movq %r14, %rsi
callq 0x7c106
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x64f0
leaq 0x10(%rsp), %rdi
callq 0x6548
movq 0x8(%r15), %rax
testq %rax, %rax
sete %al
xorb $0x1, %bl
orb %al, %bl
jne 0x7798e
leaq 0x1d705(%rip), %rsi     # 0x9508b
movq %r15, %rdi
callq 0x64d0
leaq 0xb0(%rsp), %rdi
callq 0x7c270
movq %r15, %rax
addq $0x198, %rsp            # imm = 0x198
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
pushq $0x10
popq %rdi
callq 0x6140
movq %rax, %rbx
leaq 0x264b9(%rip), %rsi     # 0x9de7b
leaq 0x10(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x6100
movb $0x1, %bpl
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq 0x6f6e
xorl %ebp, %ebp
leaq 0x6f3d6(%rip), %rsi     # 0xe6dc0
movq 0x705ef(%rip), %rdx     # 0xe7fe0
movq %rbx, %rdi
callq 0x6490
jmp 0x77a92
pushq $0x10
popq %rdi
callq 0x6140
movq %rax, %rbx
leaq 0x26411(%rip), %rsi     # 0x9de21
leaq 0x10(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x6100
movb $0x1, %bpl
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq 0x6f6e
xorl %ebp, %ebp
leaq 0x6f388(%rip), %rsi     # 0xe6dc0
movq 0x705a1(%rip), %rdx     # 0xe7fe0
movq %rbx, %rdi
callq 0x6490
jmp 0x77a92
pushq $0x10
popq %rdi
callq 0x6140
movq %rax, %rbx
leaq 0x26397(%rip), %rsi     # 0x9ddf2
leaq 0x10(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x6100
movb $0x1, %bpl
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq 0x6f6e
xorl %ebp, %ebp
leaq 0x6f33d(%rip), %rsi     # 0xe6dc0
movq 0x70556(%rip), %rdx     # 0xe7fe0
movq %rbx, %rdi
callq 0x6490
jmp 0x77a99
jmp 0x77ceb
movq %rax, %r14
leaq 0x10(%rsp), %rdi
jmp 0x77ddb
jmp 0x77ceb
jmp 0x77c1b
jmp 0x77c1b
jmp 0x77de2
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x6548
jmp 0x77acc
movq %rax, %r14
leaq 0x48(%rsp), %rdi
callq 0x6548
jmp 0x77adb
movq %rax, %r14
leaq 0xe8(%rsp), %rdi
callq 0x6548
jmp 0x77aed
movq %rax, %r14
leaq 0x68(%rsp), %rdi
callq 0x6548
jmp 0x77afc
movq %rax, %r14
leaq 0xc8(%rsp), %rdi
callq 0x6548
movq (%rsp), %r15
jmp 0x77df6
jmp 0x77b16
jmp 0x77b16
movq %rax, %r14
jmp 0x77df6
jmp 0x77c1b
jmp 0x77c1b
jmp 0x77de2
jmp 0x77ceb
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0xbe36
jmp 0x77de5
jmp 0x77de2
jmp 0x77c8d
jmp 0x77ca2
jmp 0x77cb1
jmp 0x77de2
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x6548
jmp 0x77b6f
movq %rax, %r14
leaq 0xc8(%rsp), %rdi
jmp 0x77c95
jmp 0x77ca2
jmp 0x77cb1
jmp 0x77de2
jmp 0x77c32
jmp 0x77c4d
jmp 0x77c32
jmp 0x77c4d
jmp 0x77c8d
jmp 0x77ca2
jmp 0x77cb1
jmp 0x77de2
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x6548
jmp 0x77bc5
movq %rax, %r14
leaq 0x48(%rsp), %rdi
callq 0x6548
jmp 0x77bd4
movq %rax, %r14
leaq 0x68(%rsp), %rdi
callq 0x6548
jmp 0x77be3
movq %rax, %r14
leaq 0x118(%rsp), %rdi
callq 0x6548
jmp 0x77bf5
movq %rax, %r14
leaq 0xc8(%rsp), %rdi
callq 0x6548
leaq 0xe8(%rsp), %rdi
jmp 0x77cb9
movq %rax, %r14
jmp 0x77c02
jmp 0x77de2
jmp 0x77c1b
movq %rax, %r14
leaq 0x18(%rsp), %rdi
jmp 0x77cb9
jmp 0x77de2
jmp 0x77de2
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x6548
testb %bpl, %bpl
movq (%rsp), %r15
jne 0x77c54
jmp 0x77de9
movq %rax, %r14
movq (%rsp), %r15
movq %rbx, %rdi
callq 0x6200
jmp 0x77de9
jmp 0x77de2
jmp 0x77de2
jmp 0x77ceb
jmp 0x77cb1
jmp 0x77de2
jmp 0x77cb1
jmp 0x77de2
jmp 0x77de2
jmp 0x77de2
jmp 0x77c8d
jmp 0x77c8d
jmp 0x77c8d
jmp 0x77ca2
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x6548
jmp 0x77ca5
jmp 0x77ca2
jmp 0x77ca2
jmp 0x77cb1
movq %rax, %r14
leaq 0x48(%rsp), %rdi
callq 0x6548
jmp 0x77cb4
movq %rax, %r14
leaq 0x68(%rsp), %rdi
callq 0x6548
jmp 0x77de5
jmp 0x77de2
jmp 0x77de2
jmp 0x77de2
jmp 0x77de2
jmp 0x77de2
jmp 0x77de2
jmp 0x77de2
jmp 0x77de2
movq %rax, %r14
jmp 0x77de9
jmp 0x77de2
movq %rax, %r14
jmp 0x77d54
movq %rax, %r14
movq (%rsp), %r15
jmp 0x77db9
movq %rax, %r14
movq (%rsp), %r15
jmp 0x77dc6
movq %rax, %r14
movq (%rsp), %r15
jmp 0x77dac
movq %rax, %r14
movq (%rsp), %r15
jmp 0x77d95
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x6548
jmp 0x77d4a
movq %rax, %r14
movq (%rsp), %r15
jmp 0x77d9f
movq %rax, %r14
jmp 0x77d87
movq %rax, %r14
leaq 0x48(%rsp), %rdi
callq 0x6548
movq (%rsp), %r15
leaq 0x68(%rsp), %rdi
jmp 0x77ddb
movq %rax, %r14
jmp 0x77d7a
movq %rax, %r14
movq (%rsp), %r15
jmp 0x77dd3
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x6548
leaq 0x138(%rsp), %rdi
callq 0x6548
movq (%rsp), %r15
leaq 0x48(%rsp), %rdi
callq 0x6548
leaq 0x68(%rsp), %rdi
callq 0x6548
leaq 0xc8(%rsp), %rdi
callq 0x6548
leaq 0xe8(%rsp), %rdi
callq 0x6548
leaq 0x158(%rsp), %rdi
callq 0x6548
leaq 0x118(%rsp), %rdi
callq 0x6548
leaq 0x178(%rsp), %rdi
callq 0x6548
jmp 0x77de9
movq %rax, %r14
movq (%rsp), %r15
leaq 0xb0(%rsp), %rdi
callq 0x7c270
movq %r15, %rdi
callq 0x6548
movq %r14, %rdi
callq 0x64b0