// File: /workspace/github_c_makefile_star2_O2/azhai[P]mlite/mlite.c
// Function: xeval
cell xeval(cell x, int cbn) {
	cell	m2,	/* Root of result list */
		a,	/* Used to append to result */
		rib;	/* Temp storage for args */
	cell	n, new;
	int	s,	/* Current state */
		c;	/* Continue */
	cell	name;	/* Name of procedure to apply */

	save(x);
	save(State_stack);
	save(Stack_bottom);
	Stack_bottom = Stack;
	s = EV_ATOM;
	c = 0;
	while (!Error_flag) {
		if (Run_stats)
			count(&Reductions);
		if (symbol_p(x)) {		/* Symbol -> Value */
			if (cbn) {
				Acc = x;
				cbn = 0;
			}
			else {
				Acc = lookup(x, Environment, 1);
				if (Error_flag)
					break;
				Acc = box_value(Acc);
			}
		}
		else if (auto_quoting_p(x) || cbn == 2) {
			Acc = x;		/* Object -> Object */
			cbn = 0;
		}
		else {				/* (...) -> Value */
			/*
			 * This block is used to DESCEND into lists.
			 * The following structure is saved on the
			 * Stack: RIB = (args append result source)
			 * The current s is saved on the State_stack.
			 */
			Acc = x;
			x = car(x);
			save_state(s);
			/* Check call-by-name built-ins and flag */
			if (special_p(x) || cbn) {
				cbn = 0;
				rib = node(Acc, Acc);	/* result/source */
				rib = node(NIL, rib);	/* append */
				rib = node(NIL, rib);	/* args */
				x = NIL;
			}
			else {
				Tmp = node(NIL, NIL);
				rib = node(Tmp, Acc);	/* result/source */
				rib = node(Tmp, rib);	/* append */
				rib = node(cdr(Acc), rib); /* args */
				Tmp = NIL;
				x = car(Acc);
			}
			save(rib);
			s = EV_ARGS;
			continue;
		}
		/*
		 * The following loop is used to ASCEND back to the
		 * root of a list, thereby performing BETA REDUCTION.
		 */
		while (!Error_flag) {
		if (s == EV_BETA) {
			/* Finish BETA reduction */
			Environment = unsave(1);
			unsave(1);		/* source expression */
			s = restore_state();
		}
		else if (s == EV_ARGS) {	/* append to list, reduce */
			rib = car(Stack);
			x = rib_args(rib);
			a = rib_append(rib);
			m2 = rib_result(rib);
			if (a != NIL) 	/* Append new member */
				car(a) = Acc;
			if (x == NIL) {	/* End of list */
				Acc = m2;
				/* Remember name of caller */
				name = car(rib_source(rib));
				if (primitive_p(car(Acc))) {
					if (cadar(Acc) == Callcc_magic)
						c = cbn = 1;
					Cons_stats = 1;
					Acc = x = apply_primitive(Acc);
					Cons_stats = 0;
				}
				else if (special_p(car(Acc))) {
					Acc = x = apply_special(Acc, &c, &s);
				}
				else if (procedure_p(car(Acc))) {
					name = symbol_p(name)? name: NIL;
					Called_procedures[Proc_ptr] = name;
					Proc_ptr++;
					if (Proc_ptr >= Proc_max)
						Proc_ptr = 0;
					tail_call();
					x = fnmatch(Acc, &s);
					c = 2;
				}
				else if (continuation_p(car(Acc))) {
					Acc = resume(Acc);
				}
				else {
					error("application of non-procedure",
						name);
					x = NIL;
				}
				if (c != 2) {
					unsave(1); /* drop source expr */
					s = restore_state();
				}
				/* Leave the ASCENDING loop and descend */
				/* once more into X. */
				if (c)
					break;
			}
			else if (atom_p(x)) {
				error("syntax error", rib_source(rib));
				x = NIL;
				break;
			}
			else {		/* X =/= NIL: append to list */
				/* Create space for next argument */
				Acc = node(NIL, NIL);
				cdr(a) = Acc;
				rib_append(rib) = cdr(a);
				rib_args(rib) = cdr(x);
				x = car(x);	/* evaluate next member */
				break;
			}
		}
		else if (s == EV_GUARD) {
			if (Acc != FALSE) {
				x = cdddar(unsave(1));	/* cases */
				x = cadar(x);		/* current body */
			}
			else {
				x = car(Stack);		/* application */
				n = cddddr(car(x));	/* next case */
				x = next_case(x, n);
				unsave(1);
				Environment = cdr(Environment);
				cbn = 1;
			}
			s = EV_BETA;
			c = 1;
			break;
		}
		else if (s == EV_IF_PRED) {
			x = unsave(1);
			unsave(1);	/* source expression */
			s = restore_state();
			if (Acc != FALSE)
				x = cadr(x);
			else
				x = caddr(x);
			c = 1;
			break;
		}
		else if (s == EV_AND || s == EV_OR) {
			Stack = node(cdar(Stack), cdr(Stack));
			if (	(Acc == FALSE && s == EV_AND) ||
				(Acc != FALSE && s == EV_OR) ||
				car(Stack) == NIL
			) {
				unsave(2);	/* state, source expr */
				s = restore_state();
				x = Acc;
				cbn = 2;
			}
			else if (cdar(Stack) == NIL) {
				x = caar(Stack);
				unsave(2);	/* state, source expr */
				s = restore_state();
			}
			else {
				x = caar(Stack);
			}
			c = 1;
			break;
		}
		else if (s == EV_BEGIN) {
			Stack = node(cdar(Stack), cdr(Stack));
			if (cdar(Stack) == NIL) {
				x = caar(Stack);
				unsave(2);	/* state, source expr */
				s = restore_state();
			}
			else {
				x = caar(Stack);
			}
			c = 1;
			break;
		}
		else if (s == EV_SET_VAL || s == EV_MACRO) {
			char err[] = "define_syntax: expected fn, got";

			if (s == EV_MACRO) {
				if (procedure_p(Acc)) {
					Acc = new_atom(T_SYNTAX, Acc);
				}
				if (syntax_p(Acc)) {
					/* Acc = Acc; */
				}
				else {
					error(err, Acc);
					break;
				}
			}
			x = unsave(1);
			unsave(1);	/* source expression */
			s = restore_state();
			box_value(x) = Acc;
			Acc = x = UNIT;
			c = 0;
			break;
		}
		else if (s == EV_RAISE) {
			x = raise_exception(Acc);
			unsave(1);
			s = restore_state();
			c = 0;
			break;
		}
		else if (s == EV_INPUT || s == EV_OUTPUT) {
			char inerr[]  = ">>: expected instream, got";
			char outerr[] = "<<: expected outstream, got";

			if (	instream_p(car(Stack)) ||
				outstream_p(car(Stack))
			) {
				if (s == EV_INPUT) {
					Stream_flags[Instream] &= ~LOCK_TAG;
					Instream = stream_id(car(Stack));
				}
				else {
					Stream_flags[Outstream] &= ~LOCK_TAG;
					Outstream = stream_id(car(Stack));
				}
				unsave(2);
				s = restore_state();
			}
			else {
				x = car(Stack);
				if (s == EV_INPUT) {
					if (!instream_p(Acc))
						error(inerr, Acc);
					set(car(Stack), make_stream(Instream,
								T_INSTREAM));
					Instream = stream_id(Acc);
					Stream_flags[Instream] |= LOCK_TAG;
				}
				else {
					if (!outstream_p(Acc))
						error(outerr, Acc);
					set(car(Stack), make_stream(Outstream,
								T_OUTSTREAM));
					Outstream = stream_id(Acc);
					Stream_flags[Outstream] |= LOCK_TAG;
				}
				c = 1;
				break;
			}
		}
		else { /* s == EV_ATOM */
			break;
		}}
		if (c) {	/* Continue evaluation if requested */
			c = 0;
			continue;
		}
		if (Stack == Stack_bottom)
			break;
	}
	Stack = Stack_bottom;
	Stack_bottom = unsave(1);
	State_stack = unsave(1);
	unsave(1);
	return Acc;		/* Return the evaluated expr */
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movl %esi, -0x30(%rbp)
movq %rdi, %r12
movq 0xae05(%rip), %rsi      # 0x1c128
xorl %edx, %edx
callq 0x3613
movq %rax, 0xadf7(%rip)      # 0x1c128
movq 0xae00(%rip), %rdi      # 0x1c138
movq %rax, %rsi
xorl %edx, %edx
callq 0x3613
movq %rax, 0xaddf(%rip)      # 0x1c128
movq 0xade0(%rip), %rdi      # 0x1c130
movq %rax, %rsi
xorl %edx, %edx
callq 0x3613
movq %rax, 0xadc7(%rip)      # 0x1c128
movq %rax, 0xadc8(%rip)      # 0x1c130
leaq -0x2c(%rbp), %rax
andl $0x0, (%rax)
leaq -0x34(%rbp), %rax
andl $0x0, (%rax)
pushq $0x1
popq %r15
cmpl $0x0, 0xb233(%rip)      # 0x1c5b4
jne 0x11e14
cmpl $0x0, 0xb292(%rip)      # 0x1c620
je 0x1139c
leaq 0xb829(%rip), %rdi      # 0x1cbc0
callq 0x334c
movq %r12, %rax
testq %r12, %r12
js 0x1158c
movq 0xb231(%rip), %rax      # 0x1c5e0
movzbl (%rax,%r12), %ecx
testb $0x10, %cl
je 0x1140a
movq 0xadb0(%rip), %rax      # 0x1c170
cmpq $-0x22, (%rax,%r12,8)
jne 0x1140a
movq %r12, %rax
cmpl $0x0, -0x30(%rbp)
jne 0x1158c
movq 0xad2d(%rip), %rsi      # 0x1c108
movq %r12, %rdi
movl %r15d, %edx
callq 0xca03
movq %rax, 0xad53(%rip)      # 0x1c140
cmpl $0x0, 0xb1c0(%rip)      # 0x1c5b4
jne 0x11e14
movq 0xb1bf(%rip), %rcx      # 0x1c5c0
movq (%rcx,%rax,8), %rax
jmp 0x1158c
movq %r12, %rax
testb $0x1, %cl
jne 0x1158c
movq %r12, %rax
testb $0x10, %cl
jne 0x1158c
movq %r12, %rax
cmpl $0x2, -0x30(%rbp)
je 0x1158c
movq %r12, 0xad0a(%rip)      # 0x1c140
movq 0xad33(%rip), %rax      # 0x1c170
movq (%rax,%r12,8), %rbx
movslq -0x2c(%rbp), %rdi
movq 0xacec(%rip), %rsi      # 0x1c138
movl %r15d, %edx
callq 0x3613
movq %rax, 0xacdd(%rip)      # 0x1c138
cmpq 0xb246(%rip), %rbx      # 0x1c6a8
je 0x1191a
cmpq 0xb2e9(%rip), %rbx      # 0x1c758
je 0x1191a
cmpq 0xb2c4(%rip), %rbx      # 0x1c740
je 0x1191a
cmpq 0xb25f(%rip), %rbx      # 0x1c6e8
je 0x1191a
cmpq 0xb26a(%rip), %rbx      # 0x1c700
je 0x1191a
cmpq 0xb265(%rip), %rbx      # 0x1c708
je 0x1191a
cmpq 0xb2b8(%rip), %rbx      # 0x1c768
je 0x1191a
cmpq 0xb2cb(%rip), %rbx      # 0x1c788
je 0x1191a
cmpq 0xb26e(%rip), %rbx      # 0x1c738
je 0x1191a
cmpq 0xb289(%rip), %rbx      # 0x1c760
je 0x1191a
cmpq 0xb28c(%rip), %rbx      # 0x1c770
je 0x1191a
cmpq 0xb257(%rip), %rbx      # 0x1c748
je 0x1191a
cmpq 0xb252(%rip), %rbx      # 0x1c750
je 0x1191a
cmpq 0xb285(%rip), %rbx      # 0x1c790
je 0x1191a
cmpl $0x0, -0x30(%rbp)
jne 0x1191a
pushq $-0x1
popq %rdi
movq %rdi, %rsi
xorl %edx, %edx
callq 0x3613
movq %rax, 0xabe1(%rip)      # 0x1c110
movq 0xac0a(%rip), %rsi      # 0x1c140
movq %rax, %rdi
xorl %edx, %edx
callq 0x3613
movq 0xabc9(%rip), %rdi      # 0x1c110
movq %rax, %rsi
xorl %edx, %edx
callq 0x3613
movq 0xb068(%rip), %rcx      # 0x1c5c0
movq 0xabe1(%rip), %rdx      # 0x1c140
movq (%rcx,%rdx,8), %rdi
movq %rax, %rsi
xorl %edx, %edx
callq 0x3613
orq $-0x1, 0xab9b(%rip)     # 0x1c110
movq 0xabf4(%rip), %rcx      # 0x1c170
movq 0xabbd(%rip), %rdx      # 0x1c140
movq (%rcx,%rdx,8), %r12
jmp 0x11949
movq %rax, 0xabad(%rip)      # 0x1c140
xorl %r13d, %r13d
movl $0x0, -0x30(%rbp)
movl -0x2c(%rbp), %ebx
cmpl $0x0, 0xb00d(%rip)      # 0x1c5b4
jne 0x118ac
leal -0x1(%rbx), %eax
cmpl $0x3, %eax
ja 0x115dc
leaq 0x2b80(%rip), %rcx      # 0x1413c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl %r15d, %edi
callq 0x3775
movq %rax, 0xab34(%rip)      # 0x1c108
movl %r15d, %edi
jmp 0x116ba
movl %ebx, %eax
andl $-0x2, %eax
cmpl $0x8, %eax
je 0x11ab6
cmpl $0x7, %ebx
je 0x11b48
leal -0x5(%rbx), %ecx
cmpl $0x1, %ecx
jbe 0x11bb0
cmpl $0xc, %ebx
je 0x11c82
cmpl $0xa, %eax
jne 0x118ac
movups 0x4373(%rip), %xmm0     # 0x1598b
movups %xmm0, -0x75(%rbp)
movaps 0x435d(%rip), %xmm0     # 0x15980
movaps %xmm0, -0x80(%rbp)
movups 0x437e(%rip), %xmm0     # 0x159ac
movups %xmm0, -0x54(%rbp)
movaps 0x4367(%rip), %xmm0     # 0x159a0
movaps %xmm0, -0x60(%rbp)
movq 0xab2c(%rip), %rax      # 0x1c170
movq 0xaadd(%rip), %rcx      # 0x1c128
movq (%rax,%rcx,8), %r14
testq %r14, %r14
js 0x118bd
movq 0xaf81(%rip), %rdx      # 0x1c5e0
movb (%rdx,%r14), %dl
notb %dl
testb $0x21, %dl
jne 0x118bd
cmpq $-0x17, (%rax,%r14,8)
je 0x11680
cmpq $-0x19, (%rax,%r14,8)
jne 0x118bd
cmpl $0xa, %ebx
leaq 0xabf6(%rip), %rdx      # 0x1c280
leaq 0xb007(%rip), %rsi      # 0x1c698
cmoveq %rsi, %rdx
movslq (%rdx), %rsi
leaq 0xaf61(%rip), %rdi      # 0x1c600
andb $0x7f, (%rsi,%rdi)
movq 0xaf16(%rip), %rsi      # 0x1c5c0
movq (%rax,%rcx,8), %rcx
movq (%rsi,%rcx,8), %rcx
movl (%rax,%rcx,8), %eax
movl %eax, (%rdx)
pushq $0x2
popq %rdi
callq 0x3775
callq 0x11ef5
movq %rax, %rbx
jmp 0x115a0
movl %ebx, -0x2c(%rbp)
movq 0xaa9a(%rip), %rax      # 0x1c170
movq 0xaa4b(%rip), %rcx      # 0x1c128
movq (%rax,%rcx,8), %rbx
movq (%rax,%rbx,8), %r14
movq 0xaed4(%rip), %rdx      # 0x1c5c0
movq (%rdx,%rbx,8), %rcx
movq (%rax,%rcx,8), %r12
movq (%rdx,%rcx,8), %rcx
movq (%rax,%rcx,8), %rdi
cmpq $-0x1, %r12
je 0x1170d
movq 0xaa37(%rip), %rcx      # 0x1c140
movq %rcx, (%rax,%r12,8)
cmpq $-0x1, %r14
jne 0x11d3d
movq %rdi, 0xaa22(%rip)      # 0x1c140
movq (%rdx,%rbx,8), %rcx
movq (%rdx,%rcx,8), %rcx
movq (%rdx,%rcx,8), %rcx
movq (%rax,%rcx,8), %rsi
movq (%rax,%rdi,8), %rcx
testq %rcx, %rcx
js 0x11795
movq 0xaea2(%rip), %r8       # 0x1c5e0
testb $0x1, (%r8,%rcx)
je 0x11795
cmpq $-0x1d, (%rax,%rcx,8)
jne 0x11795
movq (%rdx,%rcx,8), %rcx
movq (%rax,%rcx,8), %rax
xorl %ebx, %ebx
cmpq 0xb48b(%rip), %rax      # 0x1cbe8
jne 0x11770
movl $0x1, -0x34(%rbp)
movl %r15d, %r13d
movl %r15d, %ebx
movl %r15d, -0x30(%rbp)
movl $0x1, 0xaeda(%rip)      # 0x1c654
callq 0x10c60
movq %rax, %r12
movq %rax, 0xa9b7(%rip)      # 0x1c140
andl $0x0, 0xaec4(%rip)      # 0x1c654
jmp 0x11892
cmpq 0xaf0c(%rip), %rcx      # 0x1c6a8
je 0x11859
cmpq 0xafaf(%rip), %rcx      # 0x1c758
je 0x11859
cmpq 0xaf8a(%rip), %rcx      # 0x1c740
je 0x11859
cmpq 0xaf25(%rip), %rcx      # 0x1c6e8
je 0x11859
cmpq 0xaf30(%rip), %rcx      # 0x1c700
je 0x11859
cmpq 0xaf2b(%rip), %rcx      # 0x1c708
je 0x11859
cmpq 0xaf82(%rip), %rcx      # 0x1c768
je 0x11859
cmpq 0xaf99(%rip), %rcx      # 0x1c788
je 0x11859
cmpq 0xaf40(%rip), %rcx      # 0x1c738
je 0x11859
cmpq 0xaf5f(%rip), %rcx      # 0x1c760
je 0x11859
cmpq 0xaf66(%rip), %rcx      # 0x1c770
je 0x11859
cmpq 0xaf35(%rip), %rcx      # 0x1c748
je 0x11859
cmpq 0xaf34(%rip), %rcx      # 0x1c750
je 0x11859
cmpq 0xaf6b(%rip), %rcx      # 0x1c790
je 0x11859
testq %rcx, %rcx
js 0x11880
movq 0xadad(%rip), %rdx      # 0x1c5e0
testb $0x1, (%rdx,%rcx)
je 0x11880
cmpq $-0x1e, (%rax,%rcx,8)
je 0x11dae
cmpq $-0x25, (%rax,%rcx,8)
jne 0x11880
callq 0xf0a0
movq %rax, 0xa8e9(%rip)      # 0x1c140
jmp 0x1188c
leaq -0x34(%rbp), %rsi
leaq -0x2c(%rbp), %rdx
callq 0xdb7f
movq %rax, %r12
movq %rax, 0xa8d0(%rip)      # 0x1c140
movl -0x34(%rbp), %ebx
movl %ebx, %r13d
cmpl $0x2, %ebx
jne 0x11892
jmp 0x11d26
leaq 0x38c4(%rip), %rdi      # 0x1514b
callq 0x33e4
xorl %ebx, %ebx
pushq $-0x1
popq %r12
movl %r15d, %edi
callq 0x3775
callq 0x11ef5
movl %eax, -0x2c(%rbp)
testl %ebx, %ebx
je 0x1159d
jmp 0x118af
movl %ebx, -0x2c(%rbp)
testl %r13d, %r13d
jne 0x11d26
jmp 0x11ca8
movl %ebx, -0x2c(%rbp)
movq 0xa879(%rip), %rsi      # 0x1c140
cmpl $0xa, %ebx
jne 0x11974
leaq -0x80(%rbp), %rdi
leaq 0xadbd(%rip), %r12      # 0x1c698
pushq $-0x17
popq %rbx
testq %rsi, %rsi
js 0x119ad
movq 0xacf2(%rip), %rcx      # 0x1c5e0
movb (%rcx,%rsi), %cl
notb %cl
leaq 0xad9e(%rip), %r12      # 0x1c698
testb $0x21, %cl
jne 0x119ad
cmpq $-0x17, (%rax,%rsi,8)
leaq 0xad89(%rip), %r12      # 0x1c698
jne 0x119ad
jmp 0x119b2
movq 0xa81f(%rip), %rdi      # 0x1c140
movq %rdi, %rsi
xorl %edx, %edx
callq 0x3613
pushq $-0x1
popq %r12
movq %r12, %rdi
movq %rax, %rsi
xorl %edx, %edx
callq 0x3613
movq %r12, %rdi
movq %rax, %rsi
xorl %edx, %edx
callq 0x3613
movq 0xa7d8(%rip), %rsi      # 0x1c128
movl $0x0, -0x30(%rbp)
movq %rax, %rdi
xorl %edx, %edx
callq 0x3613
movq %rax, 0xa7c0(%rip)      # 0x1c128
movl $0x1, -0x2c(%rbp)
jmp 0x1137a
leaq -0x60(%rbp), %rdi
leaq 0xa901(%rip), %r12      # 0x1c280
pushq $-0x19
popq %rbx
testq %rsi, %rsi
js 0x119ad
movq 0xac52(%rip), %rcx      # 0x1c5e0
movb (%rcx,%rsi), %cl
notb %cl
leaq 0xa8e6(%rip), %r12      # 0x1c280
testb $0x21, %cl
jne 0x119ad
cmpq $-0x19, (%rax,%rsi,8)
leaq 0xa8d5(%rip), %r12      # 0x1c280
je 0x119b2
callq 0x33e4
movl (%r12), %edi
movq %rbx, %rsi
callq 0xff7d
movq 0xa7ab(%rip), %rcx      # 0x1c170
movq 0xa75c(%rip), %rdx      # 0x1c128
movq %rax, (%rcx,%rdx,8)
movq 0xabe9(%rip), %rax      # 0x1c5c0
movq 0xa762(%rip), %rdx      # 0x1c140
movq (%rax,%rdx,8), %rax
movq (%rcx,%rax,8), %rax
movl %eax, (%r12)
cltq
leaq 0xac0d(%rip), %rcx      # 0x1c600
orb $-0x80, (%rax,%rcx)
movq %r14, %r12
jmp 0x11d26
movl %ebx, -0x2c(%rbp)
cmpq $-0x3, 0xa736(%rip)     # 0x1c140
jne 0x11cdf
movq 0xa759(%rip), %rax      # 0x1c170
movq 0xa70a(%rip), %rcx      # 0x1c128
movq (%rax,%rcx,8), %rdi
movq 0xab97(%rip), %rcx      # 0x1c5c0
movq (%rax,%rdi,8), %rax
movq (%rcx,%rax,8), %rax
movq (%rcx,%rax,8), %rax
movq (%rcx,%rax,8), %rax
movq (%rcx,%rax,8), %rsi
callq 0x12186
movq %rax, %r12
movl %r15d, %edi
callq 0x3775
movq 0xab6c(%rip), %rax      # 0x1c5c0
movq 0xa6ad(%rip), %rcx      # 0x1c108
movq (%rax,%rcx,8), %rax
movq %rax, 0xa6a2(%rip)      # 0x1c108
movl %r15d, -0x30(%rbp)
jmp 0x11d1f
movl %ebx, -0x2c(%rbp)
movl %r15d, %edi
callq 0x3775
movq %rax, %rbx
movl %r15d, %edi
callq 0x3775
callq 0x11ef5
movl %eax, -0x2c(%rbp)
cmpq $-0x3, 0xa6ab(%rip)     # 0x1c140
movq 0xab24(%rip), %rcx      # 0x1c5c0
movq (%rcx,%rbx,8), %rax
jne 0x11aa6
movq (%rcx,%rax,8), %rax
movq 0xa6c3(%rip), %rcx      # 0x1c170
movq (%rcx,%rax,8), %r12
jmp 0x11d26
movl %ebx, -0x2c(%rbp)
movq 0xab00(%rip), %rax      # 0x1c5c0
movq 0xa6a9(%rip), %rcx      # 0x1c170
movq 0xa65a(%rip), %rdx      # 0x1c128
movq (%rcx,%rdx,8), %rcx
movq (%rax,%rcx,8), %rdi
movq (%rax,%rdx,8), %rsi
xorl %edx, %edx
callq 0x3613
movq %rax, 0xa640(%rip)      # 0x1c128
movq 0xa651(%rip), %rcx      # 0x1c140
cmpq $-0x3, %rcx
sete %dl
cmpl $0x8, %ebx
sete %sil
testb %dl, %sil
jne 0x11cc1
cmpq $-0x3, %rcx
setne %cl
cmpl $0x9, %ebx
sete %dl
testb %cl, %dl
jne 0x11cc1
movq 0xa64e(%rip), %rcx      # 0x1c170
movq (%rcx,%rax,8), %rax
cmpq $-0x1, %rax
je 0x11cc1
movq 0xaa89(%rip), %rdx      # 0x1c5c0
cmpq $-0x1, (%rdx,%rax,8)
movq (%rcx,%rax,8), %r12
jne 0x11d26
jmp 0x11b9b
movl %ebx, -0x2c(%rbp)
movq 0xaa6e(%rip), %rax      # 0x1c5c0
movq 0xa617(%rip), %rcx      # 0x1c170
movq 0xa5c8(%rip), %rdx      # 0x1c128
movq (%rcx,%rdx,8), %rcx
movq (%rax,%rcx,8), %rdi
movq (%rax,%rdx,8), %rsi
xorl %edx, %edx
callq 0x3613
movq %rax, 0xa5ae(%rip)      # 0x1c128
movq 0xaa3f(%rip), %rcx      # 0x1c5c0
movq 0xa5e8(%rip), %rdx      # 0x1c170
movq (%rdx,%rax,8), %rax
cmpq $-0x1, (%rcx,%rax,8)
movq (%rdx,%rax,8), %r12
jne 0x11d26
pushq $0x2
popq %rdi
callq 0x3775
callq 0x11ef5
movl %eax, -0x2c(%rbp)
jmp 0x11d26
movl %ebx, -0x2c(%rbp)
movaps 0x3db6(%rip), %xmm0     # 0x15970
movaps %xmm0, -0x50(%rbp)
movaps 0x3d9b(%rip), %xmm0     # 0x15960
movaps %xmm0, -0x60(%rbp)
cmpl $0x6, %ebx
jne 0x11c3a
movq 0xa56b(%rip), %rsi      # 0x1c140
testq %rsi, %rsi
js 0x11d2f
movq 0xa9fb(%rip), %rax      # 0x1c5e0
testb $0x1, (%rax,%rsi)
je 0x11c17
movq 0xa57e(%rip), %rax      # 0x1c170
cmpq $-0x1e, (%rax,%rsi,8)
jne 0x11c17
pushq $-0x23
popq %rdi
movl %r15d, %edx
callq 0x3613
movq %rax, %rsi
movq %rax, 0xa532(%rip)      # 0x1c140
testq %rax, %rax
js 0x11d2f
movq 0xa9c2(%rip), %rax      # 0x1c5e0
testb $0x1, (%rax,%rsi)
je 0x11d2f
movq 0xa541(%rip), %rax      # 0x1c170
cmpq $-0x23, (%rax,%rsi,8)
jne 0x11d2f
movl %r15d, %edi
callq 0x3775
movq %rax, %rbx
movl %r15d, %edi
callq 0x3775
callq 0x11ef5
movl %eax, -0x2c(%rbp)
movq 0xa4e4(%rip), %rax      # 0x1c140
movq 0xa95d(%rip), %rcx      # 0x1c5c0
movq %rax, (%rcx,%rbx,8)
andl $0x0, -0x34(%rbp)
movq $-0x6, 0xa4ca(%rip) # 0x1c140
xorl %r13d, %r13d
pushq $-0x6
popq %r12
jmp 0x118af
movl %ebx, -0x2c(%rbp)
movq 0xa4b4(%rip), %rdi      # 0x1c140
callq 0x1242d
movq %rax, %r12
movl %r15d, %edi
callq 0x3775
callq 0x11ef5
movl %eax, -0x2c(%rbp)
andl $0x0, -0x34(%rbp)
movq 0xa479(%rip), %rax      # 0x1c128
cmpq 0xa47a(%rip), %rax      # 0x1c130
jne 0x1137a
jmp 0x11e14
pushq $0x2
popq %rbx
movl %ebx, %edi
callq 0x3775
callq 0x11ef5
movl %eax, -0x2c(%rbp)
movq 0xa466(%rip), %r12      # 0x1c140
movl %ebx, -0x30(%rbp)
jmp 0x11d26
movq 0xa8da(%rip), %rbx      # 0x1c5c0
movq 0xa483(%rip), %r14      # 0x1c170
movl %r15d, %edi
callq 0x3775
movq (%r14,%rax,8), %rax
movq (%rbx,%rax,8), %rax
movq (%rbx,%rax,8), %rax
movq (%rbx,%rax,8), %rax
movq 0xa464(%rip), %rcx      # 0x1c170
movq 0xa8ad(%rip), %rdx      # 0x1c5c0
movq (%rcx,%rax,8), %rax
movq (%rdx,%rax,8), %rax
movq (%rcx,%rax,8), %r12
movl $0x2, -0x2c(%rbp)
andl $0x0, -0x34(%rbp)
jmp 0x1137a
leaq -0x60(%rbp), %rdi
callq 0x33e4
jmp 0x118af
testq %r14, %r14
js 0x11d50
movq 0xa897(%rip), %rax      # 0x1c5e0
testb $0x11, (%rax,%r14)
je 0x11d6f
movq (%rdx,%rbx,8), %rax
movq (%rdx,%rax,8), %rax
movq (%rdx,%rax,8), %rsi
leaq 0x2e73(%rip), %rdi      # 0x14bd6
callq 0x33e4
pushq $-0x1
jmp 0x11c7b
pushq $-0x1
popq %rdi
movq %rdi, %rsi
xorl %edx, %edx
callq 0x3613
movq %rax, 0xa3bd(%rip)      # 0x1c140
movq 0xa836(%rip), %rcx      # 0x1c5c0
movq %rax, (%rcx,%r12,8)
movq 0xa3db(%rip), %rdx      # 0x1c170
movq (%rcx,%rbx,8), %rsi
movq %rax, (%rdx,%rsi,8)
movq (%rcx,%r14,8), %rax
movq %rax, (%rdx,%rbx,8)
movq (%rdx,%r14,8), %r12
jmp 0x118af
pushq $-0x1
popq %rdi
movq %rdi, %rcx
testq %rsi, %rsi
js 0x11dce
testb $0x10, (%rdx,%rsi)
movq %rdi, %rcx
je 0x11dce
cmpq $-0x22, (%rax,%rsi,8)
cmovneq %rdi, %rsi
movq %rsi, %rcx
movslq 0xa7db(%rip), %rax      # 0x1c5b0
leal 0x1(%rax), %edx
cmpl 0xa4ae(%rip), %edx      # 0x1c28c
leaq 0xa4ab(%rip), %rsi      # 0x1c290
movq %rcx, (%rsi,%rax,8)
movl $0x0, %eax
cmovgel %eax, %edx
movl %edx, 0xa7b9(%rip)      # 0x1c5b0
callq 0x123a6
movq 0xa33d(%rip), %rdi      # 0x1c140
leaq -0x2c(%rbp), %rsi
callq 0x121fc
movq %rax, %r12
jmp 0x11d26
movq 0xa315(%rip), %rax      # 0x1c130
movq %rax, 0xa306(%rip)      # 0x1c128
pushq $0x1
popq %rbx
movl %ebx, %edi
callq 0x3775
movq %rax, 0xa2fd(%rip)      # 0x1c130
movl %ebx, %edi
callq 0x3775
movq %rax, 0xa2f7(%rip)      # 0x1c138
movl %ebx, %edi
callq 0x3775
movq 0xa2f1(%rip), %rax      # 0x1c140
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq