// File: /workspace/github_c_makefile_star2_O3/michaelforney[P]cproc/decl.c
// Function: declspecs
static struct qualtype
declspecs(struct scope *s, enum storageclass *sc, enum funcspec *fs, int *align)
{
	struct type *t, *other;
	struct decl *d;
	struct expr *e;
	enum typespec ts = SPECNONE;
	enum typequal tq = QUALNONE;
	enum tokenkind op;
	int ntypes = 0;
	unsigned long long i;
	struct expr *typeofexpr = NULL;

	t = NULL;
	if (sc)
		*sc = SCNONE;
	if (fs)
		*fs = FUNCNONE;
	if (align)
		*align = 0;
	for (;;) {
		if (typequal(&tq) || storageclass(sc) || funcspec(fs))
			continue;
		op = tok.kind;
		switch (op) {
		/* 6.7.2 Type specifiers */
		case TVOID:
			t = &typevoid;
			++ntypes;
			next();
			break;
		case TCHAR:
			ts |= SPECCHAR;
			++ntypes;
			next();
			break;
		case TSHORT:
			if (ts & SPECSHORT)
				error(&tok.loc, "duplicate 'short'");
			ts |= SPECSHORT;
			next();
			break;
		case TINT:
			ts |= SPECINT;
			++ntypes;
			next();
			break;
		case TLONG:
			if (ts & SPECLONG2)
				error(&tok.loc, "too many 'long'");
			if (ts & SPECLONG)
				ts |= SPECLONG2;
			ts |= SPECLONG;
			next();
			break;
		case TFLOAT:
			ts |= SPECFLOAT;
			++ntypes;
			next();
			break;
		case TDOUBLE:
			ts |= SPECDOUBLE;
			++ntypes;
			next();
			break;
		case TSIGNED:
			if (ts & SPECSIGNED)
				error(&tok.loc, "duplicate 'signed'");
			ts |= SPECSIGNED;
			next();
			break;
		case TUNSIGNED:
			if (ts & SPECUNSIGNED)
				error(&tok.loc, "duplicate 'unsigned'");
			ts |= SPECUNSIGNED;
			next();
			break;
		case TBOOL:
			t = &typebool;
			++ntypes;
			next();
			break;
		case T_COMPLEX:
			error(&tok.loc, "_Complex is not yet supported");
			break;
		case T_ATOMIC:
			error(&tok.loc, "_Atomic is not yet supported");
			break;
		case TSTRUCT:
		case TUNION:
		case TENUM:
			t = tagspec(s);
			++ntypes;
			break;
		case TIDENT:
			if (t || ts)
				goto done;
			d = scopegetdecl(s, tok.lit, 1);
			if (!d || d->kind != DECLTYPE)
				goto done;
			t = d->type;
			tq |= d->qual;
			++ntypes;
			next();
			break;
		case TTYPEOF:
		case TTYPEOF_UNQUAL:
			next();
			expect(TLPAREN, "after 'typeof'");
			t = typename(s, &tq, &typeofexpr);
			if (!t) {
				e = expr(s);
				if (e->decayed)
					e = e->base;
				t = e->type;
				if (op == TTYPEOF)
					tq |= e->qual;
				if (t->prop & PROPVM)
					typeofexpr = e;
			}
			++ntypes;
			expect(TRPAREN, "to close 'typeof'");
			break;

		/* 6.7.5 Alignment specifier */
		case TALIGNAS:
			if (!align)
				error(&tok.loc, "alignment specifier not allowed in this declaration");
			next();
			expect(TLPAREN, "after 'alignas'");
			other = typename(s, NULL, NULL);
			i = other ? other->align : intconstexpr(s, false);
			if (i & i - 1 || i > INT_MAX)
				error(&tok.loc, "invalid alignment: %llu", i);
			if (i > *align)
				*align = i;
			expect(TRPAREN, "to close 'alignas' specifier");
			break;

		case T__ATTRIBUTE__:
			gnuattr(NULL, 0);
			break;

		default:
			goto done;
		}
		if (ntypes > 1 || (t && ts))
			error(&tok.loc, "multiple types in declaration specifiers");
	}
done:
	switch ((int)ts) {
	case SPECNONE:                                            break;
	case SPECCHAR:                          t = &typechar;    break;
	case SPECSIGNED|SPECCHAR:               t = &typeschar;   break;
	case SPECUNSIGNED|SPECCHAR:             t = &typeuchar;   break;
	case SPECSHORT:
	case SPECSHORT|SPECINT:
	case SPECSIGNED|SPECSHORT:
	case SPECSIGNED|SPECSHORT|SPECINT:      t = &typeshort;   break;
	case SPECUNSIGNED|SPECSHORT:
	case SPECUNSIGNED|SPECSHORT|SPECINT:    t = &typeushort;  break;
	case SPECINT:
	case SPECSIGNED:
	case SPECSIGNED|SPECINT:                t = &typeint;     break;
	case SPECUNSIGNED:
	case SPECUNSIGNED|SPECINT:              t = &typeuint;    break;
	case SPECLONG:
	case SPECLONG|SPECINT:
	case SPECSIGNED|SPECLONG:
	case SPECSIGNED|SPECLONG|SPECINT:       t = &typelong;    break;
	case SPECUNSIGNED|SPECLONG:
	case SPECUNSIGNED|SPECLONG|SPECINT:     t = &typeulong;   break;
	case SPECLONGLONG:
	case SPECLONGLONG|SPECINT:
	case SPECSIGNED|SPECLONGLONG:
	case SPECSIGNED|SPECLONGLONG|SPECINT:   t = &typellong;   break;
	case SPECUNSIGNED|SPECLONGLONG:
	case SPECUNSIGNED|SPECLONGLONG|SPECINT: t = &typeullong;  break;
	case SPECFLOAT:                         t = &typefloat;   break;
	case SPECDOUBLE:                        t = &typedouble;  break;
	case SPECLONG|SPECDOUBLE:               t = &typeldouble; break;
	default:
		error(&tok.loc, "invalid combination of type specifiers");
	}
	if (!t && (tq || sc && *sc || fs && *fs))
		error(&tok.loc, "declaration has no type specifier");
	/*
	TODO: consider delaying attribute parsing to declarator(),
	so we can tell the difference between the start of an
	attribute and an array declarator.
	*/
	attr(NULL, 0);

	return (struct qualtype){t, tq, typeofexpr};
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xf8, %rsp
movq %rcx, %r13
movq %rdx, %r15
movq %rdi, 0x90(%rsp)
movl $0x0, 0x18(%rsp)
movq $0x0, 0x58(%rsp)
testq %rdx, %rdx
je 0x391f
movl $0x0, (%r15)
testq %r13, %r13
je 0x392c
movl $0x0, (%r13)
movq %rsi, 0x38(%rsp)
testq %r8, %r8
je 0x393d
movl $0x0, (%r8)
movq %r8, 0x88(%rsp)
xorl %ebp, %ebp
leaq 0x18(%rsp), %rbx
leaq 0x187b5(%rip), %r14     # 0x1c108
xorl %r12d, %r12d
movq $0x0, 0x20(%rsp)
movq %r15, 0x60(%rsp)
movl %r12d, 0x1c(%rsp)
movq %rbx, %rdi
callq 0x5726
testl %eax, %eax
jne 0x3969
movq %r14, %r12
movl (%r14), %r14d
leal -0x4(%r14), %eax
cmpl $0x3b, %eax
ja 0x45e8
movl $0x2, %ebx
leaq 0xe754(%rip), %rcx      # 0x120e8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x10, %ebx
jmp 0x39be
movl $0x20, %ebx
jmp 0x39be
movl $0x4, %ebx
jmp 0x39be
movl $0x40, %ebx
jmp 0x39be
movl $0x8, %ebx
testq %r15, %r15
movq %r12, %r14
jne 0x39d8
leaq 0x8(%r14), %rdi
leaq 0xed8e(%rip), %rsi      # 0x1275f
xorl %eax, %eax
callq 0xd55c
movl (%r15), %eax
cmpl $0x7, %eax
jg 0x39ed
movl %eax, %ecx
testl %eax, %eax
je 0x3a0a
cmpl $0x4, %eax
je 0x39fe
jmp 0x3a05
cmpl $0x8, %eax
je 0x39fe
cmpl $0x40, %eax
jne 0x3a05
movl $0xfffffff3, %ecx       # imm = 0xFFFFFFF3
jmp 0x3a0a
movl $0xffffffbf, %ecx       # imm = 0xFFFFFFBF
jmp 0x3a0a
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
testl %ebx, %ecx
je 0x3a23
leaq 0x8(%r14), %rdi
leaq 0xed74(%rip), %rsi      # 0x1278d
xorl %eax, %eax
callq 0xd55c
movl (%r15), %eax
orl %ebx, %eax
movl %eax, (%r15)
jmp 0x3a4d
movl $0x4, %ebx
testq %r13, %r13
movq %r12, %r14
jne 0x3a49
leaq 0x8(%r14), %rdi
leaq 0xed7b(%rip), %rsi      # 0x127bd
xorl %eax, %eax
callq 0xd55c
orl %ebx, (%r13)
callq 0xa920
leaq 0x18(%rsp), %rbx
jmp 0x3969
xorl %ebx, %ebx
cmpl $0x16, %r14d
movq %rbp, 0x28(%rsp)
je 0x3d4e
cmpl $0x29, %r14d
je 0x3d3d
cmpl $0x30, %r14d
jne 0x3d5b
xorl %ebp, %ebp
movl $0x10, 0x20(%rsp)
xorl %ebx, %ebx
jmp 0x3d6b
movq %rbp, 0x28(%rsp)
callq 0xa920
leaq 0xeb84(%rip), %rsi      # 0x12627
movl $0x42, %edi
callq 0xafeb
leaq 0x18(%rsp), %rsi
leaq 0x58(%rsp), %rdx
movq 0x38(%rsp), %rdi
callq 0x3846
movq %rax, %rdx
testq %rax, %rax
jne 0x3af9
movq 0x38(%rsp), %rdi
callq 0x7252
cmpb $0x1, 0x5(%rax)
jne 0x3add
movq 0x18(%rax), %rax
movq 0x8(%rax), %rdx
cmpl $0x2e, %r14d
jne 0x3aee
movl 0x10(%rax), %ecx
orl %ecx, 0x18(%rsp)
testb $0x40, 0x4(%rdx)
je 0x3af9
movq %rax, 0x58(%rsp)
movq %rdx, 0x20(%rsp)
movl 0x1c(%rsp), %ebp
incl %ebp
leaq 0xeb2b(%rip), %rsi      # 0x12636
movl $0x43, %edi
callq 0xafeb
jmp 0x3cf8
movq %r12, %r14
leaq 0x8(%r12), %rdi
leaq 0xeae1(%rip), %rsi      # 0x1260a
jmp 0x3cdc
orl $0x4, %ebp
jmp 0x3ce8
movq %rbp, 0x28(%rsp)
movl 0x1c(%rsp), %ebp
incl %ebp
callq 0xa920
leaq 0x17e4b(%rip), %rax     # 0x1b998
jmp 0x3c7e
xorl %edi, %edi
xorl %esi, %esi
callq 0x3483
jmp 0x4215
orl $0x40, %ebp
jmp 0x3ce8
cmpq $0x0, 0x20(%rsp)
jne 0x45e8
testl %ebp, %ebp
jne 0x45e8
movq %r12, %r14
movq 0x20(%r12), %rsi
movq 0x38(%rsp), %rdi
movl $0x1, %edx
callq 0xc70d
testq %rax, %rax
je 0x4870
cmpl $0x0, 0x8(%rax)
jne 0x4870
movq 0x10(%rax), %rcx
movq %rcx, 0x20(%rsp)
movl 0x18(%rax), %eax
orl %eax, 0x18(%rsp)
movl 0x1c(%rsp), %r12d
incl %r12d
callq 0xa920
xorl %ebp, %ebp
jmp 0x45b2
movq 0x88(%rsp), %r14
testq %r14, %r14
jne 0x3bea
leaq 0x8(%r12), %rdi
leaq 0xea65(%rip), %rsi      # 0x12648
xorl %eax, %eax
callq 0xd55c
callq 0xa920
leaq 0xea86(%rip), %rsi      # 0x1267c
movl $0x42, %edi
callq 0xafeb
movq 0x38(%rsp), %rbx
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3846
testq %rax, %rax
je 0x416c
movslq 0x8(%rax), %rbx
jmp 0x4179
btl $0x9, %ebp
movq %r12, %r14
jae 0x3c3e
leaq 0x8(%r14), %rdi
leaq 0xe97d(%rip), %rsi      # 0x125b4
xorl %eax, %eax
callq 0xd55c
leal (,%rbp,2), %ebx
andl $0x200, %ebx            # imm = 0x200
orl %ebp, %ebx
orl $0x100, %ebx            # imm = 0x100
callq 0xa920
movl %ebx, %ebp
jmp 0x3d33
orl $0x20, %ebp
jmp 0x3ce8
movq %rbp, 0x28(%rsp)
movl 0x1c(%rsp), %ebp
incl %ebp
callq 0xa920
leaq 0x17d72(%rip), %rax     # 0x1b9f0
movq %rax, 0x20(%rsp)
jmp 0x3cf8
testb %bpl, %bpl
movq %r12, %r14
jns 0x3c9f
leaq 0x8(%r14), %rdi
leaq 0xe90a(%rip), %rsi      # 0x125a2
xorl %eax, %eax
callq 0xd55c
orl $0x80, %ebp
jmp 0x3d2e
btl $0xa, %ebp
movq %r12, %r14
jae 0x3cc5
leaq 0x8(%r14), %rdi
leaq 0xe906(%rip), %rsi      # 0x125c4
xorl %eax, %eax
callq 0xd55c
orl $0x400, %ebp            # imm = 0x400
jmp 0x3d2e
movq %r12, %r14
leaq 0x8(%r12), %rdi
leaq 0xe910(%rip), %rsi      # 0x125ec
xorl %eax, %eax
callq 0xd55c
jmp 0x3d33
orl $0x10, %ebp
movq %rbp, 0x28(%rsp)
movl 0x1c(%rsp), %ebp
incl %ebp
callq 0xa920
leaq 0x18(%rsp), %rbx
movq %r12, %r14
movl %ebp, %r12d
movq 0x28(%rsp), %rbp
jmp 0x45b7
btl $0xb, %ebp
movq %r12, %r14
jae 0x3d28
leaq 0x8(%r14), %rdi
leaq 0xe8b6(%rip), %rsi      # 0x125d7
xorl %eax, %eax
callq 0xd55c
orl $0x800, %ebp            # imm = 0x800
callq 0xa920
leaq 0x18(%rsp), %rbx
jmp 0x421d
movl $0x8, %ebx
movl $0xf, 0x20(%rsp)
xorl %ebp, %ebp
jmp 0x3d6b
movl $0x6, 0x20(%rsp)
movb $0x1, %bpl
jmp 0x3d6b
leaq 0xea8e(%rip), %rdi      # 0x127f0
xorl %ebx, %ebx
xorl %eax, %eax
callq 0xe058
callq 0xa920
leaq 0xc0(%rsp), %r14
movl $0x0, (%r14)
movq %r14, %rdi
movl %ebx, %esi
callq 0x33ec
movq %r14, %rdi
movl %ebx, %esi
callq 0x3483
movq %r12, %r14
cmpl $0x4, (%r12)
jne 0x3da8
movq 0x20(%r14), %rbx
callq 0xa920
jmp 0x3daa
xorl %ebx, %ebx
testb $0x1, %bpl
je 0x3e07
movl $0x5f, %edi
callq 0xb00a
testb %al, %al
je 0x3e07
leaq 0xc8(%rsp), %r14
movq %r14, %rdi
movq 0x38(%rsp), %rsi
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x38e3
movq (%r14), %rcx
movq %r12, %r14
movq %rcx, 0x30(%rsp)
testq %rcx, %rcx
jne 0x3e10
leaq 0x8(%r14), %rdi
leaq 0xea1c(%rip), %rsi      # 0x12811
movq $0x0, 0x30(%rsp)
xorl %eax, %eax
callq 0xd55c
jmp 0x3e10
movq $0x0, 0x30(%rsp)
testq %rbx, %rbx
je 0x3e68
movl (%r14), %eax
cmpl $0x44, %eax
setne %cl
cmpl $0x61, %eax
setne %al
andb %cl, %al
movzbl %al, %edx
movq 0x38(%rsp), %rdi
movq %rbx, %rsi
callq 0xc76e
testq %rax, %rax
je 0x3e68
movl 0x20(%rsp), %ecx
cmpl %ecx, (%rax)
je 0x3e61
leaq 0x8(%r14), %rdi
leaq 0xe9e2(%rip), %rsi      # 0x12830
movq %rax, %r14
movq %rbx, %rdx
xorl %eax, %eax
callq 0xd55c
movq %r14, %rax
movq %r12, %r14
movq 0x28(%rsp), %rbp
jmp 0x3ed5
testb $0x1, %bpl
je 0x3e88
movl $0x6, %edi
movl $0x1e, %esi
callq 0xd7d8
movq 0x30(%rsp), %rcx
movq %rcx, 0x20(%rax)
jmp 0x3eae
xorl %r15d, %r15d
movl 0x20(%rsp), %edi
xorl %esi, %esi
callq 0xd7d8
movq %r15, 0x10(%rax)
movl $0x0, 0x8(%rax)
movq %rbx, 0x40(%rax)
movq %r15, 0x48(%rax)
movq 0x60(%rsp), %r15
movq 0x28(%rsp), %rbp
movb $0x1, 0x3c(%rax)
testq %rbx, %rbx
je 0x3ed5
movq 0x38(%rsp), %rdi
movq %rbx, %rsi
movq %rax, %r14
movq %rax, %rdx
callq 0xc7cd
movq %r14, %rax
movq %r12, %r14
cmpl $0x44, (%r14)
movq %rax, 0x20(%rsp)
jne 0x45aa
cmpb $0x0, 0x3c(%rax)
jne 0x3eff
leaq 0x8(%r14), %rdi
leaq 0xe969(%rip), %rsi      # 0x1285e
movq %rbx, %rdx
xorl %eax, %eax
callq 0xd55c
callq 0xa920
movq 0x20(%rsp), %rdx
movl (%rdx), %eax
leal -0xf(%rax), %ecx
cmpl $0x2, %ecx
jae 0x412b
movq %rdx, 0x68(%rsp)
leaq 0x48(%rdx), %rax
movq %rax, 0x30(%rsp)
movq %rax, 0x70(%rsp)
movl $0x0, 0x78(%rsp)
movb 0xc0(%rsp), %al
shrb $0x3, %al
andb $0x1, %al
movb %al, 0x7c(%rsp)
movq 0x38(%rsp), %rbp
movq %rbp, %rdi
callq 0x5124
testb %al, %al
jne 0x40d2
xorl %edi, %edi
xorl %esi, %esi
callq 0x33ec
leaq 0xa8(%rsp), %rbx
leaq 0x54(%rsp), %r8
movq %rbx, %rdi
movq %rbp, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x38e3
movq (%rbx), %rbx
testq %rbx, %rbx
jne 0x3f96
leaq 0x8(%r14), %rdi
leaq 0xea26(%rip), %rsi      # 0x129b5
xorl %eax, %eax
callq 0xd55c
cmpl $0x61, (%r14)
jne 0x3feb
movl (%rbx), %eax
addl $-0xf, %eax
cmpl $0x1, %eax
ja 0x3fad
cmpq $0x0, 0x40(%rbx)
je 0x3fbf
leaq 0x8(%r14), %rdi
leaq 0xea22(%rip), %rsi      # 0x129da
xorl %eax, %eax
callq 0xd55c
callq 0xa920
movl 0x54(%rsp), %r8d
movl 0xb0(%rsp), %edx
leaq 0x68(%rsp), %rdi
movq %rbx, %rsi
xorl %ecx, %ecx
movq $-0x1, %r9
callq 0x5787
jmp 0x40d2
movl $0x5f, %edi
callq 0xb00a
testb %al, %al
je 0x4029
movq %rbp, %rdi
xorl %esi, %esi
callq 0x7359
movq 0xa8(%rsp), %rsi
movl 0xb0(%rsp), %edx
leaq 0x68(%rsp), %rdi
xorl %ecx, %ecx
xorl %r8d, %r8d
movq %rax, %r9
callq 0x5787
jmp 0x40b1
movq 0xb8(%rsp), %rax
movq %rax, 0x10(%rsp)
movups 0xa8(%rsp), %xmm0
movups %xmm0, (%rsp)
leaq 0xe0(%rsp), %r14
leaq 0xa0(%rsp), %rdx
movq %r14, %rdi
movq %rbp, %rsi
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x48fe
movq (%r14), %rbx
movl 0x8(%r14), %ebp
movl $0x5f, %edi
callq 0xb00a
movq $-0x1, %r9
testb %al, %al
je 0x408d
movq 0x38(%rsp), %rdi
xorl %esi, %esi
callq 0x7359
movq %rax, %r9
movq 0xa0(%rsp), %rcx
movl 0x54(%rsp), %r8d
leaq 0x68(%rsp), %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq 0x5787
movq 0x38(%rsp), %rbp
movq %r12, %r14
cmpl $0x61, (%r14)
je 0x40cd
leaq 0xe49e(%rip), %rsi      # 0x1255c
movl $0x6e, %edi
callq 0xafeb
jmp 0x3feb
callq 0xa920
cmpl $0x45, (%r14)
jne 0x3f47
movq 0x30(%rsp), %rax
cmpq $0x0, (%rax)
jne 0x40f9
leaq 0x8(%r14), %rdi
leaq 0xe785(%rip), %rsi      # 0x12877
xorl %eax, %eax
callq 0xd55c
callq 0xa920
cmpb $0x0, 0x7c(%rsp)
movq 0x20(%rsp), %rdx
jne 0x45a1
movq 0x10(%rdx), %rax
movslq 0x8(%rdx), %rcx
addq %rcx, %rax
decq %rax
negq %rcx
andq %rax, %rcx
movq %rcx, 0x10(%rdx)
jmp 0x45a1
cmpl $0x6, %eax
jne 0x45a1
cmpq $0x0, 0x30(%rsp)
movq %r13, 0x80(%rsp)
je 0x4227
movq 0x20(%rdx), %rax
movq 0x10(%rax), %rcx
movq %rcx, 0x10(%rdx)
movl 0x8(%rax), %ecx
movl %ecx, 0x8(%rdx)
movb 0x40(%rax), %al
movb %al, 0x40(%rdx)
movb $0x0, 0x3c(%rdx)
movq %rdx, %rbx
jmp 0x422e
movq %rbx, %rdi
xorl %esi, %esi
callq 0x7359
movq %rax, %rbx
cmpq $0x7fffffff, %rbx       # imm = 0x7FFFFFFF
ja 0x41e3
movq %rbx, %rax
shrq %rax
movabsq $0x5555555555555555, %rcx # imm = 0x5555555555555555
andq %rax, %rcx
movq %rbx, %rax
subq %rcx, %rax
movabsq $0x3333333333333333, %rcx # imm = 0x3333333333333333
movq %rax, %rdx
andq %rcx, %rdx
shrq $0x2, %rax
andq %rcx, %rax
addq %rdx, %rax
movq %rax, %rcx
shrq $0x4, %rcx
addq %rax, %rcx
movabsq $0xf0f0f0f0f0f0f0f, %rax # imm = 0xF0F0F0F0F0F0F0F
andq %rcx, %rax
movabsq $0x101010101010101, %rcx # imm = 0x101010101010101
imulq %rax, %rcx
shrq $0x38, %rcx
cmpl $0x2, %ecx
jb 0x41f9
leaq 0x8(%r12), %rdi
leaq 0xe49d(%rip), %rsi      # 0x1268c
movq %rbx, %rdx
xorl %eax, %eax
callq 0xd55c
movslq (%r14), %rax
cmpq %rax, %rbx
jbe 0x4204
movl %ebx, (%r14)
leaq 0xe499(%rip), %rsi      # 0x126a4
movl $0x43, %edi
callq 0xafeb
leaq 0x18(%rsp), %rbx
movq %r12, %r14
movl 0x1c(%rsp), %r12d
jmp 0x45b7
leaq 0x179d2(%rip), %rbx     # 0x1bc00
xorl %ebp, %ebp
cmpl $0x4, (%r14)
movl $0x0, %eax
movq %rax, 0x48(%rsp)
movl $0x0, %eax
movq %rax, 0x40(%rsp)
movq %r14, %r13
jne 0x448e
movq $0x0, 0x40(%rsp)
movq $0x0, 0x48(%rsp)
xorl %r14d, %r14d
xorl %eax, %eax
movq %rax, 0x98(%rsp)
movq 0x20(%r13), %rax
movq %rax, 0x30(%rsp)
callq 0xa920
xorl %edi, %edi
xorl %esi, %esi
callq 0x33ec
movl $0x63, %edi
callq 0xb00a
testb %al, %al
je 0x42fc
movq 0x38(%rsp), %rdi
callq 0x6f6b
movq %rax, %rdi
callq 0x603c
movq %rax, %rbp
cmpl $0x1, (%rax)
jne 0x42b9
movq 0x8(%rbp), %rax
testb $0x2, 0x4(%rax)
jne 0x42cc
leaq 0x8(%r12), %rdi
leaq 0xe5ce(%rip), %rsi      # 0x12893
xorl %eax, %eax
callq 0xd55c
movq 0x8(%rbp), %rax
movq 0x30(%rbp), %r14
movq 0x20(%rsp), %rcx
cmpq $0x0, 0x20(%rcx)
movzbl 0x40(%rax), %edx
je 0x4318
movq %rbx, %rdi
movq %r14, %rsi
callq 0xdd39
testb %al, %al
je 0x437e
jmp 0x43d4
movb 0x40(%rbx), %al
movq %r14, %rcx
negq %rcx
jo 0x433b
jb 0x435d
testb $0x1, %al
movb $0x1, %al
jne 0x435d
leaq 0xe5da(%rip), %rdx      # 0x128f0
jmp 0x4346
leaq 0x178e1(%rip), %rbx     # 0x1bc00
movq %rbx, %rdi
movq %r14, %rsi
callq 0xdd39
testb %al, %al
jne 0x43d4
movq 0x8(%rbp), %rbx
jmp 0x43d4
testb $0x1, %al
je 0x435b
leaq 0x103cf(%rip), %rdx     # 0x14715
leaq 0x8(%r12), %rdi
leaq 0xe566(%rip), %rsi      # 0x128b8
xorl %eax, %eax
callq 0xd55c
jmp 0x43d4
xorl %eax, %eax
movzbl %al, %edx
andl $0x1, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xdd39
testb %al, %al
jne 0x43d4
movq 0x20(%rsp), %rax
cmpq $0x0, 0x20(%rax)
je 0x4396
leaq 0x8(%r12), %rdi
leaq 0xe569(%rip), %rsi      # 0x128f3
movq 0x30(%rsp), %rdx
xorl %eax, %eax
callq 0xd55c
movzbl 0x40(%rbx), %ebp
leaq 0x161cf(%rip), %rax     # 0x1a570
leaq (%rax,%rbp,8), %r13
movq $-0x30, %r15
movq 0x30(%r13,%r15), %rbx
movzbl %bpl, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xdd39
testb %al, %al
jne 0x43cf
addq $0x10, %r15
jne 0x43ac
jmp 0x48df
movq 0x60(%rsp), %r15
movl $0x48, %edi
callq 0xe142
movq %rax, %rbp
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%rax)
movups %xmm0, 0x28(%rax)
movq $0x0, 0x38(%rax)
movq 0x30(%rsp), %rax
movq %rax, (%rbp)
movq $0x3, 0x8(%rbp)
movq %rbx, 0x10(%rbp)
movq %r14, 0x40(%rbp)
movq %r14, %rdi
callq 0xe37d
movq %rax, 0x20(%rbp)
movq 0x98(%rsp), %rax
movq %rax, 0x38(%rbp)
cmpb $0x1, 0x40(%rbx)
jne 0x4449
testq %r14, %r14
jns 0x4449
movq %r14, %rax
negq %rax
movq 0x40(%rsp), %rcx
cmpq %rax, %rcx
cmovbeq %rax, %rcx
movq %rcx, 0x40(%rsp)
jmp 0x445a
movq 0x48(%rsp), %rax
cmpq %rax, %r14
cmovaq %r14, %rax
movq %rax, 0x48(%rsp)
movq 0x38(%rsp), %rdi
movq %rbp, %rsi
callq 0xc644
movl $0x6e, %edi
callq 0xb00a
testb %al, %al
je 0x448b
incq %r14
movq %r12, %r13
cmpl $0x4, (%r12)
movq %rbp, %rax
je 0x4268
jmp 0x448e
movq %r12, %r13
leaq 0xe4d4(%rip), %rsi      # 0x12969
movl $0x45, %edi
callq 0xafeb
movq 0x20(%rsp), %rdx
cmpq $0x0, 0x20(%rdx)
movq %r13, %r14
movq 0x80(%rsp), %r13
jne 0x45a1
movl $0x80000000, %eax       # imm = 0x80000000
incq %rax
movq 0x40(%rsp), %rsi
cmpq %rax, %rsi
setb %al
movq 0x48(%rsp), %rcx
shrq $0x1f, %rcx
sete %cl
andb %al, %cl
cmpb $0x1, %cl
jne 0x44f5
testq %rsi, %rsi
jne 0x4582
leaq 0x17768(%rip), %rbx     # 0x1bc58
jmp 0x4589
xorl %eax, %eax
negq %rsi
movq %rsi, 0x40(%rsp)
setb %al
leaq 0x16067(%rip), %rcx     # 0x1a570
leaq (%rcx,%rax,8), %rax
movq %rax, 0x30(%rsp)
movq $-0x30, %r14
movq 0x30(%rsp), %rax
movq 0x30(%rax,%r14), %rbx
movq %rbx, %rdi
movq 0x48(%rsp), %rsi
xorl %edx, %edx
callq 0xdd39
testb %al, %al
je 0x454c
movq %rbx, %rdi
movq 0x40(%rsp), %rsi
movl $0x1, %edx
callq 0xdd39
testb %al, %al
jne 0x4565
addq $0x10, %r14
jne 0x4519
leaq 0x8(%r12), %rdi
leaq 0xe423(%rip), %rsi      # 0x12981
xorl %eax, %eax
callq 0xd55c
movq 0x20(%rsp), %rdx
movq %rbx, 0x20(%rdx)
testq %rbp, %rbp
je 0x457d
movq %rdx, 0x10(%rbp)
movq 0x38(%rbp), %rbp
jmp 0x456e
movq %r12, %r14
jmp 0x458d
leaq 0x17677(%rip), %rbx     # 0x1bc00
movq %rbx, 0x20(%rdx)
movq 0x10(%rbx), %rax
movq %rax, 0x10(%rdx)
movl 0x8(%rbx), %eax
movl %eax, 0x8(%rdx)
movb 0x40(%rbx), %al
movb %al, 0x40(%rdx)
movb $0x0, 0x3c(%rdx)
movq 0x28(%rsp), %rbp
movl 0x1c(%rsp), %r12d
incl %r12d
leaq 0x18(%rsp), %rbx
cmpl $0x1, %r12d
jg 0x45d1
cmpq $0x0, 0x20(%rsp)
je 0x3964
testl %ebp, %ebp
je 0x3964
leaq 0x8(%r14), %rdi
leaq 0xe0e5(%rip), %rsi      # 0x126c1
xorl %eax, %eax
callq 0xd55c
jmp 0x3964
cmpl $0x47f, %ebp            # imm = 0x47F
jg 0x4630
cmpl $0xff, %ebp
movq %r12, %r14
jle 0x4670
cmpl $0x30f, %ebp            # imm = 0x30F
jg 0x46da
cmpl $0x13f, %ebp            # imm = 0x13F
jg 0x47b6
cmpl $0x100, %ebp            # imm = 0x100
je 0x476a
cmpl $0x110, %ebp            # imm = 0x110
je 0x476a
jmp 0x4854
cmpl $0x803, %ebp            # imm = 0x803
movq %r12, %r14
jle 0x46a5
cmpl $0x8ff, %ebp            # imm = 0x8FF
jg 0x4703
cmpl $0x87f, %ebp            # imm = 0x87F
jg 0x47d6
cmpl $0x804, %ebp            # imm = 0x804
je 0x4830
cmpl $0x810, %ebp            # imm = 0x810
je 0x47aa
jmp 0x4854
cmpl $0x1f, %ebp
movq 0x20(%rsp), %rbx
jle 0x472f
cmpl $0x7f, %ebp
jg 0x4776
cmpl $0x20, %ebp
je 0x4827
cmpl $0x40, %ebp
jne 0x4854
leaq 0x177c8(%rip), %rbx     # 0x1be68
jmp 0x488e
cmpl $0x50f, %ebp            # imm = 0x50F
jle 0x474e
cmpl $0x70f, %ebp            # imm = 0x70F
jg 0x4796
cmpl $0x510, %ebp            # imm = 0x510
je 0x476a
cmpl $0x700, %ebp            # imm = 0x700
je 0x47ca
jmp 0x4854
cmpl $0x403, %ebp            # imm = 0x403
jg 0x47f2
cmpl $0x310, %ebp            # imm = 0x310
je 0x47ca
cmpl $0x400, %ebp            # imm = 0x400
je 0x4802
jmp 0x4854
cmpl $0xaff, %ebp            # imm = 0xAFF
jg 0x480e
cmpl $0x900, %ebp            # imm = 0x900
je 0x4723
cmpl $0x910, %ebp            # imm = 0x910
jne 0x4854
leaq 0x175de(%rip), %rbx     # 0x1bd08
jmp 0x488e
testl %ebp, %ebp
je 0x486b
cmpl $0x4, %ebp
je 0x484b
cmpl $0x10, %ebp
je 0x4802
jmp 0x4854
cmpl $0x480, %ebp            # imm = 0x480
je 0x478a
cmpl $0x490, %ebp            # imm = 0x490
je 0x478a
cmpl $0x500, %ebp            # imm = 0x500
jne 0x4854
leaq 0x1753f(%rip), %rbx     # 0x1bcb0
jmp 0x488e
cmpl $0x80, %ebp
je 0x478a
cmpl $0x90, %ebp
jne 0x4854
leaq 0x173bf(%rip), %rbx     # 0x1bb50
jmp 0x488e
cmpl $0x710, %ebp            # imm = 0x710
je 0x47ca
cmpl $0x800, %ebp            # imm = 0x800
jne 0x4854
leaq 0x174a7(%rip), %rbx     # 0x1bc58
jmp 0x488e
cmpl $0x140, %ebp            # imm = 0x140
je 0x4839
cmpl $0x300, %ebp            # imm = 0x300
jne 0x4854
leaq 0x1758f(%rip), %rbx     # 0x1bd60
jmp 0x488e
cmpl $0x880, %ebp            # imm = 0x880
je 0x47e6
cmpl $0x890, %ebp            # imm = 0x890
jne 0x4854
leaq 0x173bb(%rip), %rbx     # 0x1bba8
jmp 0x488e
cmpl $0x404, %ebp            # imm = 0x404
je 0x4842
cmpl $0x410, %ebp            # imm = 0x410
jne 0x4854
leaq 0x173f7(%rip), %rbx     # 0x1bc00
jmp 0x488e
cmpl $0xb00, %ebp            # imm = 0xB00
je 0x481e
cmpl $0xb10, %ebp            # imm = 0xB10
jne 0x4854
leaq 0x17593(%rip), %rbx     # 0x1bdb8
jmp 0x488e
leaq 0x175e2(%rip), %rbx     # 0x1be10
jmp 0x488e
leaq 0x172c1(%rip), %rbx     # 0x1baf8
jmp 0x488e
leaq 0x17680(%rip), %rbx     # 0x1bec0
jmp 0x488e
leaq 0x17257(%rip), %rbx     # 0x1baa0
jmp 0x488e
leaq 0x171f6(%rip), %rbx     # 0x1ba48
jmp 0x488e
leaq 0x8(%r14), %rdi
leaq 0xde8b(%rip), %rsi      # 0x126ea
xorl %eax, %eax
callq 0xd55c
movq 0x20(%rsp), %rbx
testq %rbx, %rbx
jne 0x488e
cmpl $0x0, 0x18(%rsp)
je 0x48c4
addq $0x8, %r14
leaq 0xde8f(%rip), %rsi      # 0x12711
xorl %ebx, %ebx
movq %r14, %rdi
xorl %eax, %eax
callq 0xd55c
xorl %edi, %edi
xorl %esi, %esi
callq 0x33ec
movq 0x90(%rsp), %rcx
movq %rbx, (%rcx)
movl 0x18(%rsp), %eax
movl %eax, 0x8(%rcx)
movq 0x58(%rsp), %rax
movq %rax, 0x10(%rcx)
addq $0xf8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
testq %r15, %r15
je 0x48cf
cmpl $0x0, (%r15)
jne 0x4877
testq %r13, %r13
je 0x48db
cmpl $0x0, (%r13)
jne 0x4877
xorl %ebx, %ebx
jmp 0x488e
leaq 0xe04c(%rip), %rdi      # 0x12932
leaq 0xdc3e(%rip), %rsi      # 0x1252b
leaq 0xe050(%rip), %rcx      # 0x12944
movl $0x112, %edx            # imm = 0x112
callq 0x30e0