// File: /workspace/github_cpp_makefile_star2_O3/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::emit_glsl_op(unsigned int, unsigned int, unsigned int, unsigned int const*, unsigned int)
void CompilerGLSL::emit_glsl_op(uint32_t result_type, uint32_t id, uint32_t eop, const uint32_t *args, uint32_t)
{
	auto op = static_cast<GLSLstd450>(eop);

	if (is_legacy() && is_unsigned_glsl_opcode(op))
		SPIRV_CROSS_THROW("Unsigned integers are not supported on legacy GLSL targets.");

	switch (op)
	{
	// FP fiddling
	case GLSLstd450Round:
		emit_unary_func_op(result_type, id, args[0], "round");
		break;

	case GLSLstd450RoundEven:
		if ((options.es && options.version >= 300) || (!options.es && options.version >= 130))
			emit_unary_func_op(result_type, id, args[0], "roundEven");
		else
			SPIRV_CROSS_THROW("roundEven supported only in ESSL 300 and GLSL 130 and up.");
		break;

	case GLSLstd450Trunc:
		emit_unary_func_op(result_type, id, args[0], "trunc");
		break;
	case GLSLstd450SAbs:
	case GLSLstd450FAbs:
		emit_unary_func_op(result_type, id, args[0], "abs");
		break;
	case GLSLstd450SSign:
	case GLSLstd450FSign:
		emit_unary_func_op(result_type, id, args[0], "sign");
		break;
	case GLSLstd450Floor:
		emit_unary_func_op(result_type, id, args[0], "floor");
		break;
	case GLSLstd450Ceil:
		emit_unary_func_op(result_type, id, args[0], "ceil");
		break;
	case GLSLstd450Fract:
		emit_unary_func_op(result_type, id, args[0], "fract");
		break;
	case GLSLstd450Radians:
		emit_unary_func_op(result_type, id, args[0], "radians");
		break;
	case GLSLstd450Degrees:
		emit_unary_func_op(result_type, id, args[0], "degrees");
		break;
	case GLSLstd450Fma:
		emit_trinary_func_op(result_type, id, args[0], args[1], args[2], "fma");
		break;
	case GLSLstd450Modf:
		register_call_out_argument(args[1]);
		forced_temporaries.insert(id);
		emit_binary_func_op(result_type, id, args[0], args[1], "modf");
		break;

	case GLSLstd450ModfStruct:
	{
		forced_temporaries.insert(id);
		auto &type = get<SPIRType>(result_type);
		auto flags = ir.meta[id].decoration.decoration_flags;
		statement(flags_to_precision_qualifiers_glsl(type, flags), variable_decl(type, to_name(id)), ";");
		set<SPIRExpression>(id, to_name(id), result_type, true);

		statement(to_expression(id), ".", to_member_name(type, 0), " = ", "modf(", to_expression(args[0]), ", ",
		          to_expression(id), ".", to_member_name(type, 1), ");");
		break;
	}

	// Minmax
	case GLSLstd450UMin:
	case GLSLstd450FMin:
	case GLSLstd450SMin:
		emit_binary_func_op(result_type, id, args[0], args[1], "min");
		break;
	case GLSLstd450FMax:
	case GLSLstd450UMax:
	case GLSLstd450SMax:
		emit_binary_func_op(result_type, id, args[0], args[1], "max");
		break;
	case GLSLstd450FClamp:
	case GLSLstd450UClamp:
	case GLSLstd450SClamp:
		emit_trinary_func_op(result_type, id, args[0], args[1], args[2], "clamp");
		break;

	// Trig
	case GLSLstd450Sin:
		emit_unary_func_op(result_type, id, args[0], "sin");
		break;
	case GLSLstd450Cos:
		emit_unary_func_op(result_type, id, args[0], "cos");
		break;
	case GLSLstd450Tan:
		emit_unary_func_op(result_type, id, args[0], "tan");
		break;
	case GLSLstd450Asin:
		emit_unary_func_op(result_type, id, args[0], "asin");
		break;
	case GLSLstd450Acos:
		emit_unary_func_op(result_type, id, args[0], "acos");
		break;
	case GLSLstd450Atan:
		emit_unary_func_op(result_type, id, args[0], "atan");
		break;
	case GLSLstd450Sinh:
		emit_unary_func_op(result_type, id, args[0], "sinh");
		break;
	case GLSLstd450Cosh:
		emit_unary_func_op(result_type, id, args[0], "cosh");
		break;
	case GLSLstd450Tanh:
		emit_unary_func_op(result_type, id, args[0], "tanh");
		break;
	case GLSLstd450Asinh:
		emit_unary_func_op(result_type, id, args[0], "asinh");
		break;
	case GLSLstd450Acosh:
		emit_unary_func_op(result_type, id, args[0], "acosh");
		break;
	case GLSLstd450Atanh:
		emit_unary_func_op(result_type, id, args[0], "atanh");
		break;
	case GLSLstd450Atan2:
		emit_binary_func_op(result_type, id, args[0], args[1], "atan");
		break;

	// Exponentials
	case GLSLstd450Pow:
		emit_binary_func_op(result_type, id, args[0], args[1], "pow");
		break;
	case GLSLstd450Exp:
		emit_unary_func_op(result_type, id, args[0], "exp");
		break;
	case GLSLstd450Log:
		emit_unary_func_op(result_type, id, args[0], "log");
		break;
	case GLSLstd450Exp2:
		emit_unary_func_op(result_type, id, args[0], "exp2");
		break;
	case GLSLstd450Log2:
		emit_unary_func_op(result_type, id, args[0], "log2");
		break;
	case GLSLstd450Sqrt:
		emit_unary_func_op(result_type, id, args[0], "sqrt");
		break;
	case GLSLstd450InverseSqrt:
		emit_unary_func_op(result_type, id, args[0], "inversesqrt");
		break;

	// Matrix math
	case GLSLstd450Determinant:
		emit_unary_func_op(result_type, id, args[0], "determinant");
		break;
	case GLSLstd450MatrixInverse:
		emit_unary_func_op(result_type, id, args[0], "inverse");
		break;

	// Lerping
	case GLSLstd450FMix:
	case GLSLstd450IMix:
	{
		emit_mix_op(result_type, id, args[0], args[1], args[2]);
		break;
	}
	case GLSLstd450Step:
		emit_binary_func_op(result_type, id, args[0], args[1], "step");
		break;
	case GLSLstd450SmoothStep:
		emit_trinary_func_op(result_type, id, args[0], args[1], args[2], "smoothstep");
		break;

	// Packing
	case GLSLstd450Frexp:
		register_call_out_argument(args[1]);
		forced_temporaries.insert(id);
		emit_binary_func_op(result_type, id, args[0], args[1], "frexp");
		break;

	case GLSLstd450FrexpStruct:
	{
		forced_temporaries.insert(id);
		auto &type = get<SPIRType>(result_type);
		auto flags = ir.meta[id].decoration.decoration_flags;
		statement(flags_to_precision_qualifiers_glsl(type, flags), variable_decl(type, to_name(id)), ";");
		set<SPIRExpression>(id, to_name(id), result_type, true);

		statement(to_expression(id), ".", to_member_name(type, 0), " = ", "frexp(", to_expression(args[0]), ", ",
		          to_expression(id), ".", to_member_name(type, 1), ");");
		break;
	}

	case GLSLstd450Ldexp:
		emit_binary_func_op(result_type, id, args[0], args[1], "ldexp");
		break;
	case GLSLstd450PackSnorm4x8:
		emit_unary_func_op(result_type, id, args[0], "packSnorm4x8");
		break;
	case GLSLstd450PackUnorm4x8:
		emit_unary_func_op(result_type, id, args[0], "packUnorm4x8");
		break;
	case GLSLstd450PackSnorm2x16:
		emit_unary_func_op(result_type, id, args[0], "packSnorm2x16");
		break;
	case GLSLstd450PackUnorm2x16:
		emit_unary_func_op(result_type, id, args[0], "packUnorm2x16");
		break;
	case GLSLstd450PackHalf2x16:
		emit_unary_func_op(result_type, id, args[0], "packHalf2x16");
		break;
	case GLSLstd450UnpackSnorm4x8:
		emit_unary_func_op(result_type, id, args[0], "unpackSnorm4x8");
		break;
	case GLSLstd450UnpackUnorm4x8:
		emit_unary_func_op(result_type, id, args[0], "unpackUnorm4x8");
		break;
	case GLSLstd450UnpackSnorm2x16:
		emit_unary_func_op(result_type, id, args[0], "unpackSnorm2x16");
		break;
	case GLSLstd450UnpackUnorm2x16:
		emit_unary_func_op(result_type, id, args[0], "unpackUnorm2x16");
		break;
	case GLSLstd450UnpackHalf2x16:
		emit_unary_func_op(result_type, id, args[0], "unpackHalf2x16");
		break;

	case GLSLstd450PackDouble2x32:
		emit_unary_func_op(result_type, id, args[0], "packDouble2x32");
		break;
	case GLSLstd450UnpackDouble2x32:
		emit_unary_func_op(result_type, id, args[0], "unpackDouble2x32");
		break;

	// Vector math
	case GLSLstd450Length:
		emit_unary_func_op(result_type, id, args[0], "length");
		break;
	case GLSLstd450Distance:
		emit_binary_func_op(result_type, id, args[0], args[1], "distance");
		break;
	case GLSLstd450Cross:
		emit_binary_func_op(result_type, id, args[0], args[1], "cross");
		break;
	case GLSLstd450Normalize:
		emit_unary_func_op(result_type, id, args[0], "normalize");
		break;
	case GLSLstd450FaceForward:
		emit_trinary_func_op(result_type, id, args[0], args[1], args[2], "faceforward");
		break;
	case GLSLstd450Reflect:
		emit_binary_func_op(result_type, id, args[0], args[1], "reflect");
		break;
	case GLSLstd450Refract:
		emit_trinary_func_op(result_type, id, args[0], args[1], args[2], "refract");
		break;

	// Bit-fiddling
	case GLSLstd450FindILsb:
		emit_unary_func_op(result_type, id, args[0], "findLSB");
		break;
	case GLSLstd450FindSMsb:
	case GLSLstd450FindUMsb:
		emit_unary_func_op(result_type, id, args[0], "findMSB");
		break;

	// Multisampled varying
	case GLSLstd450InterpolateAtCentroid:
		emit_unary_func_op(result_type, id, args[0], "interpolateAtCentroid");
		break;
	case GLSLstd450InterpolateAtSample:
		emit_binary_func_op(result_type, id, args[0], args[1], "interpolateAtSample");
		break;
	case GLSLstd450InterpolateAtOffset:
		emit_binary_func_op(result_type, id, args[0], args[1], "interpolateAtOffset");
		break;

	case GLSLstd450NMin:
		emit_binary_func_op(result_type, id, args[0], args[1], "unsupported_glsl450_nmin");
		break;
	case GLSLstd450NMax:
		emit_binary_func_op(result_type, id, args[0], args[1], "unsupported_glsl450_nmax");
		break;
	case GLSLstd450NClamp:
		emit_binary_func_op(result_type, id, args[0], args[1], "unsupported_glsl450_nclamp");
		break;

	default:
		statement("// unimplemented GLSL op ", eop);
		break;
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xf8, %rsp
movq %r8, %r14
movq %rdi, %rbx
movl %esi, 0xc(%rsp)
movl %edx, 0x8(%rsp)
movl %ecx, 0x54(%rsp)
movb 0x43c(%rdi), %dil
movl 0x438(%rbx), %eax
testb %dil, %dil
movl $0x12b, %r8d            # imm = 0x12B
movl $0x81, %r9d
cmovnel %r8d, %r9d
cmpl %r9d, %eax
ja 0x3dd4a
leal -0x26(%rcx), %r8d
cmpl $0x25, %r8d
ja 0x3dd4a
movabsq $0x2000000049, %r9      # imm = 0x2000000049
btq %r8, %r9
jb 0x3e73d
decl %ecx
cmpl $0x50, %ecx
ja 0x3e717
leaq 0x77abc(%rip), %r8      # 0xb5818
movslq (%r8,%rcx,4), %rcx
addq %r8, %rcx
jmpq *%rcx
movl (%r14), %ecx
movl 0x4(%r14), %r8d
leaq 0x84b99(%rip), %r9      # 0xc290c
jmp 0x3e6db
movl (%r14), %ecx
movl 0x4(%r14), %r8d
movl 0x8(%r14), %r9d
subq $0x8, %rsp
leaq 0x84b98(%rip), %rax     # 0xc2926
jmp 0x3e5c6
movl (%r14), %ecx
movl 0x4(%r14), %r8d
leaq 0x84b78(%rip), %r9      # 0xc2919
jmp 0x3e6db
movl (%r14), %ecx
leaq 0x7957c(%rip), %r8      # 0xb732c
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x79826(%rip), %r8      # 0xb75e5
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x793d0(%rip), %r8      # 0xb719e
jmp 0x3e6fe
movl (%r14), %ecx
movl 0x4(%r14), %r8d
movl 0x8(%r14), %r9d
movq %rbx, %rdi
addq $0xf8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x3b406
movl (%r14), %ecx
movl 0x4(%r14), %r8d
leaq 0x7a958(%rip), %r9      # 0xb875d
jmp 0x3e6db
movl (%r14), %ecx
movl 0x4(%r14), %r8d
leaq 0x797ad(%rip), %r9      # 0xb75c5
jmp 0x3e6db
movl (%r14), %ecx
movl 0x4(%r14), %r8d
leaq 0x79641(%rip), %r9      # 0xb746c
jmp 0x3e6db
leaq 0x228(%rbx), %rdi
leaq 0xb8(%rsp), %rdx
movq %rdi, (%rdx)
leaq 0x8(%rsp), %r12
movq %r12, %rsi
callq 0x1f510
movl 0xc(%rsp), %esi
movq %rbx, %rdi
callq 0xa3ea
movq %rax, %r15
movl (%r12), %eax
movq 0x38(%rbx), %rcx
imulq $0x148, %rax, %rax      # imm = 0x148
leaq (%rcx,%rax), %rsi
addq $0x60, %rsi
leaq 0xb8(%rsp), %r12
movq %r12, %rdi
callq 0x518dc
movq %rbx, %rdi
movq %r15, %rsi
movq %r12, %rdx
callq 0x2b8e0
movq %rax, 0x58(%rsp)
movl 0x8(%rsp), %edx
movq (%rbx), %rax
leaq 0x30(%rsp), %rdi
movq %rbx, %rsi
movl $0x1, %ecx
callq *0x38(%rax)
movq (%rbx), %rax
leaq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rcx
movq %rbx, %rsi
movq %r15, %rdx
xorl %r8d, %r8d
callq *0xc8(%rax)
leaq 0x80c1f(%rip), %rcx     # 0xbeaf1
leaq 0x58(%rsp), %rsi
leaq 0x10(%rsp), %rdx
movq %rbx, %rdi
callq 0x54978
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3deff
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0x40(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3df1a
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x8(%rsp), %ebp
movq (%rbx), %rax
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
movl $0x1, %ecx
callq *0x38(%rax)
leaq 0x30(%rsp), %r8
movb $0x1, (%r8)
leaq 0x10(%rsp), %rdx
leaq 0xc(%rsp), %rcx
movq %rbx, %rdi
movl %ebp, %esi
callq 0x53c18
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rbp
cmpq %rbp, %rdi
je 0x3df6c
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x8(%rsp), %edx
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
callq 0x33f8a
leaq 0x30(%rsp), %rdi
movq %rbx, %rsi
movq %r15, %rdx
xorl %ecx, %ecx
callq 0x2c088
movl (%r14), %edx
leaq 0x58(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x33f8a
movl 0x8(%rsp), %edx
leaq 0x98(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq 0x33f8a
leaq 0x78(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x1, %ecx
callq 0x2c088
leaq 0x80b18(%rip), %rax     # 0xbeaf0
leaq 0x7c86a(%rip), %rdx     # 0xba849
leaq 0x7c0c5(%rip), %r10     # 0xba0ab
leaq 0x80a6d(%rip), %r8      # 0xbea5a
leaq 0x7a749(%rip), %r9      # 0xb873d
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rcx
movq %rbx, %rdi
pushq %rax
pushq %r13
pushq %rdx
pushq %r12
pushq %r10
pushq %r14
callq 0x54cf6
addq $0x30, %rsp
jmp 0x3e242
movl 0x4(%r14), %esi
movq %rbx, %rdi
callq 0x3e9a2
leaq 0x228(%rbx), %rdi
leaq 0xb8(%rsp), %rdx
movq %rdi, (%rdx)
leaq 0x8(%rsp), %r15
movq %r15, %rsi
callq 0x1f510
movl 0xc(%rsp), %esi
movl (%r15), %edx
movl (%r14), %ecx
movl 0x4(%r14), %r8d
leaq 0x79304(%rip), %r9      # 0xb735d
jmp 0x3e392
leaq 0x228(%rbx), %rdi
leaq 0xb8(%rsp), %rdx
movq %rdi, (%rdx)
leaq 0x8(%rsp), %r12
movq %r12, %rsi
callq 0x1f510
movl 0xc(%rsp), %esi
movq %rbx, %rdi
callq 0xa3ea
movq %rax, %r15
movl (%r12), %eax
movq 0x38(%rbx), %rcx
imulq $0x148, %rax, %rax      # imm = 0x148
leaq (%rcx,%rax), %rsi
addq $0x60, %rsi
leaq 0xb8(%rsp), %r12
movq %r12, %rdi
callq 0x518dc
movq %rbx, %rdi
movq %r15, %rsi
movq %r12, %rdx
callq 0x2b8e0
movq %rax, 0x58(%rsp)
movl 0x8(%rsp), %edx
movq (%rbx), %rax
leaq 0x30(%rsp), %rdi
movq %rbx, %rsi
movl $0x1, %ecx
callq *0x38(%rax)
movq (%rbx), %rax
leaq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rcx
movq %rbx, %rsi
movq %r15, %rdx
xorl %r8d, %r8d
callq *0xc8(%rax)
leaq 0x809f1(%rip), %rcx     # 0xbeaf1
leaq 0x58(%rsp), %rsi
leaq 0x10(%rsp), %rdx
movq %rbx, %rdi
callq 0x54978
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e12d
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0x40(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e148
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x8(%rsp), %ebp
movq (%rbx), %rax
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
movl $0x1, %ecx
callq *0x38(%rax)
leaq 0x30(%rsp), %r8
movb $0x1, (%r8)
leaq 0x10(%rsp), %rdx
leaq 0xc(%rsp), %rcx
movq %rbx, %rdi
movl %ebp, %esi
callq 0x53c18
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rbp
cmpq %rbp, %rdi
je 0x3e19a
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x8(%rsp), %edx
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
callq 0x33f8a
leaq 0x30(%rsp), %rdi
movq %rbx, %rsi
movq %r15, %rdx
xorl %ecx, %ecx
callq 0x2c088
movl (%r14), %edx
leaq 0x58(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x33f8a
movl 0x8(%rsp), %edx
leaq 0x98(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq 0x33f8a
leaq 0x78(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x1, %ecx
callq 0x2c088
leaq 0x808ea(%rip), %rax     # 0xbeaf0
leaq 0x7c63c(%rip), %rdx     # 0xba849
leaq 0x7be97(%rip), %r10     # 0xba0ab
leaq 0x8083f(%rip), %r8      # 0xbea5a
leaq 0x7a509(%rip), %r9      # 0xb872b
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rcx
movq %rbx, %rdi
pushq %rax
pushq %r13
pushq %rdx
pushq %r12
pushq %r10
pushq %r14
callq 0x54afe
addq $0x30, %rsp
leaq 0x88(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e263
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0xa8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e284
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0x68(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e29f
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x3e2bb
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x10(%rsp), %rdi
cmpq %rbp, %rdi
je 0x3e2d2
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0xc0(%rsp), %rdi
callq 0xd570
jmp 0x3e72b
movl (%r14), %ecx
movl 0x4(%r14), %r8d
leaq 0x7a484(%rip), %r9      # 0xb8776
jmp 0x3e6db
movl (%r14), %ecx
movl 0x4(%r14), %r8d
leaq 0x84f79(%rip), %r9      # 0xc327e
jmp 0x3e6db
movl (%r14), %ecx
leaq 0x7916c(%rip), %r8      # 0xb7480
jmp 0x3e6fe
movl (%r14), %ecx
movl 0x4(%r14), %r8d
movl 0x8(%r14), %r9d
subq $0x8, %rsp
leaq 0x7929e(%rip), %rax     # 0xb75cd
jmp 0x3e5c6
movl (%r14), %ecx
leaq 0x791b0(%rip), %r8      # 0xb74ee
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x7fe66(%rip), %r8      # 0xbe1b3
jmp 0x3e6fe
movl 0x4(%r14), %esi
movq %rbx, %rdi
callq 0x3e9a2
leaq 0x228(%rbx), %rdi
leaq 0xb8(%rsp), %rdx
movq %rdi, (%rdx)
leaq 0x8(%rsp), %r15
movq %r15, %rsi
callq 0x1f510
movl 0xc(%rsp), %esi
movl (%r15), %edx
movl (%r14), %ecx
movl 0x4(%r14), %r8d
leaq 0x791dc(%rip), %r9      # 0xb756e
movq %rbx, %rdi
callq 0x3a096
jmp 0x3e72b
movl (%r14), %ecx
leaq 0x7fea8(%rip), %r8      # 0xbe251
jmp 0x3e6fe
movl (%r14), %ecx
movl 0x4(%r14), %r8d
leaq 0x79234(%rip), %r9      # 0xb75f0
jmp 0x3e6db
movl (%r14), %ecx
leaq 0x78dd7(%rip), %r8      # 0xb71a2
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78de7(%rip), %r8      # 0xb71c1
jmp 0x3e6fe
movl (%r14), %ecx
movl 0x4(%r14), %r8d
movl 0x8(%r14), %r9d
subq $0x8, %rsp
leaq 0x78f23(%rip), %rax     # 0xb7318
jmp 0x3e5c6
movl (%r14), %ecx
leaq 0x790a6(%rip), %r8      # 0xb74aa
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78e86(%rip), %r8      # 0xb7299
jmp 0x3e6fe
movl (%r14), %ecx
movl 0x4(%r14), %r8d
leaq 0x78e6d(%rip), %r9      # 0xb7293
jmp 0x3e6db
movl (%r14), %ecx
leaq 0x78d81(%rip), %r8      # 0xb71b6
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x7918b(%rip), %r8      # 0xb75cf
jmp 0x3e6fe
movl (%r14), %ecx
movl 0x4(%r14), %r8d
leaq 0x79162(%rip), %r9      # 0xb75b9
jmp 0x3e6db
movl (%r14), %ecx
movl 0x4(%r14), %r8d
leaq 0x78d56(%rip), %r9      # 0xb71c0
jmp 0x3e6db
movl (%r14), %ecx
leaq 0x792c7(%rip), %r8      # 0xb7740
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78d2d(%rip), %r8      # 0xb71b5
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78ebc(%rip), %r8      # 0xb7353
jmp 0x3e6fe
movl (%r14), %ecx
movl 0x4(%r14), %r8d
movl 0x8(%r14), %r9d
subq $0x8, %rsp
leaq 0x79138(%rip), %rax     # 0xb75ea
jmp 0x3e5c6
movl (%r14), %ecx
leaq 0x843e9(%rip), %r8      # 0xc28aa
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x79105(%rip), %r8      # 0xb75d5
jmp 0x3e6fe
testb %dil, %dil
movl $0x12c, %ecx            # imm = 0x12C
movl $0x82, %edi
cmovnel %ecx, %edi
cmpl %edi, %eax
jb 0x3e7ac
movl (%r14), %ecx
leaq 0x790e4(%rip), %r8      # 0xb75db
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78fac(%rip), %r8      # 0xb74b2
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78cab(%rip), %r8      # 0xb71c0
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78ca2(%rip), %r8      # 0xb71c6
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78c87(%rip), %r8      # 0xb71ba
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78c61(%rip), %r8      # 0xb71a3
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78c6a(%rip), %r8      # 0xb71bb
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x7905d(%rip), %r8      # 0xb75bd
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78d1f(%rip), %r8      # 0xb728e
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x7fced(%rip), %r8      # 0xbe26b
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x791e0(%rip), %r8      # 0xb776d
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78f1d(%rip), %r8      # 0xb74b9
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x7a186(%rip), %r8      # 0xb8731
jmp 0x3e6fe
movl (%r14), %ecx
movl 0x4(%r14), %r8d
movl 0x8(%r14), %r9d
subq $0x8, %rsp
leaq 0x78d93(%rip), %rax     # 0xb7359
movq %rbx, %rdi
pushq %rax
callq 0x3a620
addq $0x108, %rsp            # imm = 0x108
jmp 0x3e732
movl (%r14), %ecx
leaq 0x7fc1b(%rip), %r8      # 0xbe200
jmp 0x3e6fe
movl (%r14), %ecx
movl 0x4(%r14), %r8d
leaq 0x78e9e(%rip), %r9      # 0xb7496
jmp 0x3e6db
movl (%r14), %ecx
leaq 0x78ba0(%rip), %r8      # 0xb71a7
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x7fb82(%rip), %r8      # 0xbe198
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78eab(%rip), %r8      # 0xb74d0
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x7fb98(%rip), %r8      # 0xbe1cc
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78b65(%rip), %r8      # 0xb71a8
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78b73(%rip), %r8      # 0xb71c5
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78cb2(%rip), %r8      # 0xb7313
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78e82(%rip), %r8      # 0xb74f2
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78e4d(%rip), %r8      # 0xb74cc
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x7faf4(%rip), %r8      # 0xbe17f
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x7fb9e(%rip), %r8      # 0xbe235
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x7fb44(%rip), %r8      # 0xbe1e7
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x78c75(%rip), %r8      # 0xb7324
jmp 0x3e6fe
movl (%r14), %ecx
leaq 0x7fb60(%rip), %r8      # 0xbe21b
jmp 0x3e6fe
movl (%r14), %ecx
movl 0x4(%r14), %r8d
leaq 0x78dff(%rip), %r9      # 0xb74ca
jmp 0x3e6db
movl (%r14), %ecx
movl 0x4(%r14), %r8d
leaq 0x7a069(%rip), %r9      # 0xb8744
movq %rbx, %rdi
addq $0xf8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x3a096
movl (%r14), %ecx
leaq 0x78e97(%rip), %r8      # 0xb7595
movq %rbx, %rdi
addq $0xf8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x39f86
leaq 0x7a073(%rip), %rsi     # 0xb8791
leaq 0x54(%rsp), %rdx
movq %rbx, %rdi
callq 0x54eee
addq $0xf8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0xc8(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79f58(%rip), %rsi     # 0xb86b5
leaq 0x79f8c(%rip), %rdx     # 0xb86f0
leaq 0xb8(%rsp), %rdi
callq 0x7be0
movb $0x1, %bpl
leaq 0xb8(%rsp), %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbd63d(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbd615(%rip), %rsi     # 0xfbdb0
movq 0xbe836(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3e819
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0xc8(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79f25(%rip), %rsi     # 0xb86f1
leaq 0x79f57(%rip), %rdx     # 0xb872a
leaq 0xb8(%rsp), %rdi
callq 0x7be0
movb $0x1, %bpl
leaq 0xb8(%rsp), %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbd5ce(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbd5a6(%rip), %rsi     # 0xfbdb0
movq 0xbe7c7(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
movq %rax, %rbx
movq 0xb8(%rsp), %rdi
cmpq %r15, %rdi
je 0x3e839
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x6260
testb %bpl, %bpl
je 0x3e999
jmp 0x3e991
movq %rax, %rbx
jmp 0x3e991
jmp 0x3e851
movq %rax, %rbx
leaq 0x88(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e87c
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x3e87c
jmp 0x3e879
movq %rax, %rbx
leaq 0xa8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e8a4
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x3e8a4
jmp 0x3e8a1
movq %rax, %rbx
leaq 0x68(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e8c6
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x3e8c6
jmp 0x3e8c3
movq %rax, %rbx
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x3e8f1
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x3e8f1
jmp 0x3e8ee
jmp 0x3e8ee
jmp 0x3e955
jmp 0x3e955
jmp 0x3e8ee
movq %rax, %rbx
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x3e958
movq 0x20(%rsp), %rsi
jmp 0x3e945
jmp 0x3e955
jmp 0x3e955
jmp 0x3e90d
movq %rax, %rbx
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e932
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x3e932
jmp 0x3e92f
movq %rax, %rbx
leaq 0x40(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e958
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x3e958
jmp 0x3e955
jmp 0x3e955
jmp 0x3e955
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
callq 0xd570
jmp 0x3e999
movq %rax, %rbx
movq 0xb8(%rsp), %rdi
cmpq %r15, %rdi
je 0x3e987
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x6260
testb %bpl, %bpl
jne 0x3e991
jmp 0x3e999
movq %rax, %rbx
movq %r14, %rdi
callq 0x6200
movq %rbx, %rdi
callq 0x64a0
nop