// File: /workspace/github_c_makefile_star2_O0/michaelforney[P]cproc/stmt.c
// Function: stmt
void
stmt(struct func *f, struct scope *s)
{
	char *name;
	struct expr *e;
	struct type *t;
	struct value *v;
	struct block *b[4];
	struct switchcases swtch;

	attr(NULL, 0);
	switch (tok.kind) {
	/* 6.8.2 Compound statement */
	case TLBRACE:
		next();
		s = mkscope(s);
		while (tok.kind != TRBRACE) {
			if (!label(f, s) && !decl(s, f))
				stmt(f, s);
		}
		s = delscope(s);
		next();
		break;

	/* 6.8.3 Expression statement */
	case TSEMICOLON:
		next();
		break;
	default:
		e = expr(s);
		v = funcexpr(f, e);
		delexpr(e);
		expect(TSEMICOLON, "after expression statement");
		break;

	/* 6.8.4 Selection statement */
	case TIF:
		next();
		s = mkscope(s);
		expect(TLPAREN, "after 'if'");
		e = expr(s);
		t = e->type;
		if (!(t->prop & PROPSCALAR))
			error(&tok.loc, "controlling expression of if statement must have scalar type");
		v = funcexpr(f, e);
		delexpr(e);
		expect(TRPAREN, "after expression");

		b[0] = mkblock("if_true");
		b[1] = mkblock("if_false");
		funcjnz(f, v, t, b[0], b[1]);

		funclabel(f, b[0]);
		s = mkscope(s);
		labelstmt(f, s);
		s = delscope(s);

		if (consume(TELSE)) {
			b[2] = mkblock("if_join");
			funcjmp(f, b[2]);
			funclabel(f, b[1]);
			s = mkscope(s);
			labelstmt(f, s);
			s = delscope(s);
			funclabel(f, b[2]);
		} else {
			funclabel(f, b[1]);
		}
		s = delscope(s);
		break;
	case TSWITCH:
		next();

		s = mkscope(s);
		expect(TLPAREN, "after 'switch'");
		e = expr(s);
		expect(TRPAREN, "after expression");

		if (!(e->type->prop & PROPINT))
			error(&tok.loc, "controlling expression of switch statement must have integer type");
		e = exprpromote(e);

		swtch.root = NULL;
		swtch.type = e->type;
		swtch.defaultlabel = NULL;

		b[0] = mkblock("switch_cond");
		b[1] = mkblock("switch_join");

		v = funcexpr(f, e);
		funcjmp(f, b[0]);
		s = mkscope(s);
		s->breaklabel = b[1];
		s->switchcases = &swtch;
		labelstmt(f, s);
		funcjmp(f, b[1]);

		funclabel(f, b[0]);
		funcswitch(f, v, &swtch, swtch.defaultlabel ? swtch.defaultlabel : b[1]);
		s = delscope(s);

		funclabel(f, b[1]);
		s = delscope(s);
		break;

	/* 6.8.5 Iteration statements */
	case TWHILE:
		next();
		s = mkscope(s);
		expect(TLPAREN, "after 'while'");
		e = expr(s);
		t = e->type;
		if (!(t->prop & PROPSCALAR))
			error(&tok.loc, "controlling expression of loop must have scalar type");
		expect(TRPAREN, "after expression");

		b[0] = mkblock("while_cond");
		b[1] = mkblock("while_body");
		b[2] = mkblock("while_join");

		funclabel(f, b[0]);
		v = funcexpr(f, e);
		funcjnz(f, v, t, b[1], b[2]);
		funclabel(f, b[1]);
		s = mkscope(s);
		s->continuelabel = b[0];
		s->breaklabel = b[2];
		labelstmt(f, s);
		s = delscope(s);
		funcjmp(f, b[0]);
		funclabel(f, b[2]);
		s = delscope(s);
		break;
	case TDO:
		next();

		b[0] = mkblock("do_body");
		b[1] = mkblock("do_cond");
		b[2] = mkblock("do_join");

		s = mkscope(s);
		s = mkscope(s);
		s->continuelabel = b[1];
		s->breaklabel = b[2];
		funclabel(f, b[0]);
		labelstmt(f, s);
		s = delscope(s);

		expect(TWHILE, "after 'do' statement");
		expect(TLPAREN, "after 'while'");
		funclabel(f, b[1]);
		e = expr(s);
		t = e->type;
		if (!(t->prop & PROPSCALAR))
			error(&tok.loc, "controlling expression of loop must have scalar type");
		expect(TRPAREN, "after expression");

		v = funcexpr(f, e);
		funcjnz(f, v, t, b[0], b[2]);
		funclabel(f, b[2]);
		s = delscope(s);
		expect(TSEMICOLON, "after 'do' statement");
		break;
	case TFOR:
		next();
		expect(TLPAREN, "after while");
		s = mkscope(s);
		if (!decl(s, f)) {
			if (tok.kind != TSEMICOLON) {
				e = expr(s);
				funcexpr(f, e);
				delexpr(e);
			}
			expect(TSEMICOLON, NULL);
		}

		b[0] = mkblock("for_cond");
		b[1] = mkblock("for_body");
		b[2] = mkblock("for_cont");
		b[3] = mkblock("for_join");

		funclabel(f, b[0]);
		if (tok.kind != TSEMICOLON) {
			e = expr(s);
			t = e->type;
			if (!(t->prop & PROPSCALAR))
				error(&tok.loc, "controlling expression of loop must have scalar type");
			v = funcexpr(f, e);
			funcjnz(f, v, t, b[1], b[3]);
			delexpr(e);
		}
		expect(TSEMICOLON, NULL);
		e = tok.kind == TRPAREN ? NULL : expr(s);
		expect(TRPAREN, NULL);

		funclabel(f, b[1]);
		s = mkscope(s);
		s->breaklabel = b[3];
		s->continuelabel = b[2];
		labelstmt(f, s);
		s = delscope(s);

		funclabel(f, b[2]);
		if (e) {
			funcexpr(f, e);
			delexpr(e);
		}
		funcjmp(f, b[0]);
		funclabel(f, b[3]);
		s = delscope(s);
		break;

	/* 6.8.6 Jump statements */
	case TGOTO:
		next();
		name = expect(TIDENT, "after 'goto'");
		funcjmp(f, funcgoto(f, name)->label);
		expect(TSEMICOLON, "after 'goto' statement");
		break;
	case TCONTINUE:
		next();
		if (!s->continuelabel)
			error(&tok.loc, "'continue' statement must be in loop");
		funcjmp(f, s->continuelabel);
		expect(TSEMICOLON, "after 'continue' statement");
		break;
	case TBREAK:
		next();
		if (!s->breaklabel)
			error(&tok.loc, "'break' statement must be in loop or switch");
		funcjmp(f, s->breaklabel);
		expect(TSEMICOLON, "after 'break' statement");
		break;
	case TRETURN:
		next();
		t = functype(f);
		if (t->base != &typevoid) {
			e = exprassign(expr(s), t->base);
			v = funcexpr(f, e);
			delexpr(e);
		} else {
			v = NULL;
		}
		funcret(f, v);
		expect(TSEMICOLON, "after 'return' statement");
		break;

	case T__ASM__:
		error(&tok.loc, "inline assembly is not yet supported");
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
xorl %esi, %esi
movl %esi, %edi
callq 0x3360
leaq 0x120d5(%rip), %rax     # 0x221a8
movl (%rax), %eax
addl $-0xc, %eax
movl %eax, %ecx
movq %rcx, -0x70(%rbp)
subl $0x55, %eax
ja 0x1016b
movq -0x70(%rbp), %rax
leaq 0xb41a(%rip), %rcx      # 0x1b50c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
callq 0xd540
movq -0x10(%rbp), %rdi
callq 0xfe10
movq %rax, -0x10(%rbp)
leaq 0x12094(%rip), %rax     # 0x221a8
cmpl $0x45, (%rax)
je 0x1014a
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x10b50
testb $0x1, %al
jne 0x10148
movq -0x10(%rbp), %rdi
movq -0x8(%rbp), %rsi
callq 0x45f0
testb $0x1, %al
jne 0x10148
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x100b0
jmp 0x1010d
movq -0x10(%rbp), %rdi
callq 0xfe90
movq %rax, -0x10(%rbp)
callq 0xd540
jmp 0x10b45
callq 0xd540
jmp 0x10b45
movq -0x10(%rbp), %rdi
callq 0x8f10
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x13fe0
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rdi
callq 0x7ee0
movl $0x61, %edi
leaq 0xb4c6(%rip), %rsi      # 0x1b664
callq 0xd8d0
jmp 0x10b45
callq 0xd540
movq -0x10(%rbp), %rdi
callq 0xfe10
movq %rax, -0x10(%rbp)
movl $0x42, %edi
leaq 0xb4b9(%rip), %rsi      # 0x1b67f
callq 0xd8d0
movq -0x10(%rbp), %rdi
callq 0x8f10
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x10, %eax
cmpl $0x0, %eax
jne 0x1020c
leaq 0x11fae(%rip), %rdi     # 0x221a8
addq $0x8, %rdi
leaq 0xb485(%rip), %rsi      # 0x1b68a
movb $0x0, %al
callq 0x11190
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x13fe0
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rdi
callq 0x7ee0
movl $0x43, %edi
leaq 0x9cc8(%rip), %rsi      # 0x19efa
callq 0xd8d0
leaq 0xb489(%rip), %rdi      # 0x1b6c7
callq 0x12b50
movq %rax, -0x50(%rbp)
leaq 0xb481(%rip), %rdi      # 0x1b6cf
callq 0x12b50
movq %rax, -0x48(%rbp)
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x50(%rbp), %rcx
movq -0x48(%rbp), %r8
callq 0x13950
movq -0x8(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x13810
movq -0x10(%rbp), %rdi
callq 0xfe10
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x10d20
movq -0x10(%rbp), %rdi
callq 0xfe90
movq %rax, -0x10(%rbp)
movl $0x15, %edi
callq 0xd910
testb $0x1, %al
jne 0x102b4
jmp 0x10314
leaq 0xb41d(%rip), %rdi      # 0x1b6d8
callq 0x12b50
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x13910
movq -0x8(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0x13810
movq -0x10(%rbp), %rdi
callq 0xfe10
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x10d20
movq -0x10(%rbp), %rdi
callq 0xfe90
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x13810
jmp 0x10321
movq -0x8(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0x13810
movq -0x10(%rbp), %rdi
callq 0xfe90
movq %rax, -0x10(%rbp)
jmp 0x10b45
callq 0xd540
movq -0x10(%rbp), %rdi
callq 0xfe10
movq %rax, -0x10(%rbp)
movl $0x42, %edi
leaq 0xb38f(%rip), %rsi      # 0x1b6e0
callq 0xd8d0
movq -0x10(%rbp), %rdi
callq 0x8f10
movq %rax, -0x20(%rbp)
movl $0x43, %edi
leaq 0x9b8b(%rip), %rsi      # 0x19efa
callq 0xd8d0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x4(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
jne 0x103a0
leaq 0x11e1a(%rip), %rdi     # 0x221a8
addq $0x8, %rdi
leaq 0xb356(%rip), %rsi      # 0x1b6ef
movb $0x0, %al
callq 0x11190
movq -0x20(%rbp), %rdi
callq 0x82f0
movq %rax, -0x20(%rbp)
movq $0x0, -0x68(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x60(%rbp)
movq $0x0, -0x58(%rbp)
leaq 0xb361(%rip), %rdi      # 0x1b731
callq 0x12b50
movq %rax, -0x50(%rbp)
leaq 0xb35d(%rip), %rdi      # 0x1b73d
callq 0x12b50
movq %rax, -0x48(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x13fe0
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x13910
movq -0x10(%rbp), %rdi
callq 0xfe10
movq %rax, -0x10(%rbp)
movq -0x48(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x10(%rbp), %rax
leaq -0x68(%rbp), %rcx
movq %rcx, 0x50(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x10d20
movq -0x8(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0x13910
movq -0x8(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x13810
movq -0x8(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x78(%rbp)
cmpq $0x0, -0x58(%rbp)
je 0x10477
movq -0x58(%rbp), %rax
movq %rax, -0x88(%rbp)
jmp 0x10482
movq -0x48(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x78(%rbp), %rsi
movq -0x80(%rbp), %rdi
movq -0x88(%rbp), %rcx
leaq -0x68(%rbp), %rdx
callq 0x15f00
movq -0x10(%rbp), %rdi
callq 0xfe90
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0x13810
movq -0x10(%rbp), %rdi
callq 0xfe90
movq %rax, -0x10(%rbp)
jmp 0x10b45
callq 0xd540
movq -0x10(%rbp), %rdi
callq 0xfe10
movq %rax, -0x10(%rbp)
movl $0x42, %edi
leaq 0xb265(%rip), %rsi      # 0x1b749
callq 0xd8d0
movq -0x10(%rbp), %rdi
callq 0x8f10
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x10, %eax
cmpl $0x0, %eax
jne 0x1052a
leaq 0x11c90(%rip), %rdi     # 0x221a8
addq $0x8, %rdi
leaq 0xb234(%rip), %rsi      # 0x1b757
movb $0x0, %al
callq 0x11190
movl $0x43, %edi
leaq 0x99c4(%rip), %rsi      # 0x19efa
callq 0xd8d0
leaq 0xb24a(%rip), %rdi      # 0x1b78c
callq 0x12b50
movq %rax, -0x50(%rbp)
leaq 0xb245(%rip), %rdi      # 0x1b797
callq 0x12b50
movq %rax, -0x48(%rbp)
leaq 0xb240(%rip), %rdi      # 0x1b7a2
callq 0x12b50
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x13810
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x13fe0
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x48(%rbp), %rcx
movq -0x40(%rbp), %r8
callq 0x13950
movq -0x8(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0x13810
movq -0x10(%rbp), %rdi
callq 0xfe10
movq %rax, -0x10(%rbp)
movq -0x50(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x40(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x10d20
movq -0x10(%rbp), %rdi
callq 0xfe90
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x13910
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x13810
movq -0x10(%rbp), %rdi
callq 0xfe90
movq %rax, -0x10(%rbp)
jmp 0x10b45
callq 0xd540
leaq 0xb187(%rip), %rdi      # 0x1b7ad
callq 0x12b50
movq %rax, -0x50(%rbp)
leaq 0xb17f(%rip), %rdi      # 0x1b7b5
callq 0x12b50
movq %rax, -0x48(%rbp)
leaq 0xb177(%rip), %rdi      # 0x1b7bd
callq 0x12b50
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rdi
callq 0xfe10
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
callq 0xfe10
movq %rax, -0x10(%rbp)
movq -0x48(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x40(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x8(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x13810
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x10d20
movq -0x10(%rbp), %rdi
callq 0xfe90
movq %rax, -0x10(%rbp)
movl $0x34, %edi
leaq 0xb111(%rip), %rsi      # 0x1b7c5
callq 0xd8d0
movl $0x42, %edi
leaq 0xb084(%rip), %rsi      # 0x1b749
callq 0xd8d0
movq -0x8(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0x13810
movq -0x10(%rbp), %rdi
callq 0x8f10
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x10, %eax
cmpl $0x0, %eax
jne 0x10718
leaq 0x11aa2(%rip), %rdi     # 0x221a8
addq $0x8, %rdi
leaq 0xb046(%rip), %rsi      # 0x1b757
movb $0x0, %al
callq 0x11190
movl $0x43, %edi
leaq 0x97d6(%rip), %rsi      # 0x19efa
callq 0xd8d0
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x13fe0
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x50(%rbp), %rcx
movq -0x40(%rbp), %r8
callq 0x13950
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x13810
movq -0x10(%rbp), %rdi
callq 0xfe90
movq %rax, -0x10(%rbp)
movl $0x61, %edi
leaq 0xb04c(%rip), %rsi      # 0x1b7c5
callq 0xd8d0
jmp 0x10b45
callq 0xd540
movl $0x42, %edi
leaq 0xb046(%rip), %rsi      # 0x1b7da
callq 0xd8d0
movq -0x10(%rbp), %rdi
callq 0xfe10
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
movq -0x8(%rbp), %rsi
callq 0x45f0
testb $0x1, %al
jne 0x107f4
leaq 0x119ea(%rip), %rax     # 0x221a8
cmpl $0x61, (%rax)
je 0x107e6
movq -0x10(%rbp), %rdi
callq 0x8f10
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x13fe0
movq -0x20(%rbp), %rdi
callq 0x7ee0
movl $0x61, %edi
xorl %eax, %eax
movl %eax, %esi
callq 0xd8d0
leaq 0xafeb(%rip), %rdi      # 0x1b7e6
callq 0x12b50
movq %rax, -0x50(%rbp)
leaq 0xafe4(%rip), %rdi      # 0x1b7ef
callq 0x12b50
movq %rax, -0x48(%rbp)
leaq 0xafdd(%rip), %rdi      # 0x1b7f8
callq 0x12b50
movq %rax, -0x40(%rbp)
leaq 0xafd6(%rip), %rdi      # 0x1b801
callq 0x12b50
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x13810
leaq 0x11960(%rip), %rax     # 0x221a8
cmpl $0x61, (%rax)
je 0x108c1
movq -0x10(%rbp), %rdi
callq 0x8f10
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x10, %eax
cmpl $0x0, %eax
jne 0x1088e
leaq 0x1192c(%rip), %rdi     # 0x221a8
addq $0x8, %rdi
leaq 0xaed0(%rip), %rsi      # 0x1b757
movb $0x0, %al
callq 0x11190
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x13fe0
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x48(%rbp), %rcx
movq -0x38(%rbp), %r8
callq 0x13950
movq -0x20(%rbp), %rdi
callq 0x7ee0
movl $0x61, %edi
xorl %eax, %eax
movl %eax, %esi
callq 0xd8d0
leaq 0x118d2(%rip), %rax     # 0x221a8
cmpl $0x43, (%rax)
jne 0x108e6
xorl %eax, %eax
movq %rax, -0x90(%rbp)
jmp 0x108f6
movq -0x10(%rbp), %rdi
callq 0x8f10
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
movq %rax, -0x20(%rbp)
movl $0x43, %edi
xorl %eax, %eax
movl %eax, %esi
callq 0xd8d0
movq -0x8(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0x13810
movq -0x10(%rbp), %rdi
callq 0xfe10
movq %rax, -0x10(%rbp)
movq -0x38(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x40(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x10d20
movq -0x10(%rbp), %rdi
callq 0xfe90
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x13810
cmpq $0x0, -0x20(%rbp)
je 0x10985
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x13fe0
movq -0x20(%rbp), %rdi
callq 0x7ee0
movq -0x8(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x13910
movq -0x8(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x13810
movq -0x10(%rbp), %rdi
callq 0xfe90
movq %rax, -0x10(%rbp)
jmp 0x10b45
callq 0xd540
movl $0x4, %edi
leaq 0xae48(%rip), %rsi      # 0x1b80a
callq 0xd8d0
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x13f50
movq -0x98(%rbp), %rdi
movq (%rax), %rsi
callq 0x13910
movl $0x61, %edi
leaq 0xae19(%rip), %rsi      # 0x1b817
callq 0xd8d0
jmp 0x10b45
callq 0xd540
movq -0x10(%rbp), %rax
cmpq $0x0, 0x48(%rax)
jne 0x10a31
leaq 0x11789(%rip), %rdi     # 0x221a8
addq $0x8, %rdi
leaq 0xae04(%rip), %rsi      # 0x1b82e
movb $0x0, %al
callq 0x11190
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rsi
callq 0x13910
movl $0x61, %edi
leaq 0xae05(%rip), %rsi      # 0x1b853
callq 0xd8d0
jmp 0x10b45
callq 0xd540
movq -0x10(%rbp), %rax
cmpq $0x0, 0x40(%rax)
jne 0x10a81
leaq 0x11739(%rip), %rdi     # 0x221a8
addq $0x8, %rdi
leaq 0xadf4(%rip), %rsi      # 0x1b86e
movb $0x0, %al
callq 0x11190
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rsi
callq 0x13910
movl $0x61, %edi
leaq 0xadfc(%rip), %rsi      # 0x1b89a
callq 0xd8d0
jmp 0x10b45
callq 0xd540
movq -0x8(%rbp), %rdi
callq 0x138f0
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
leaq 0x10f73(%rip), %rcx     # 0x21a38
cmpq %rcx, 0x20(%rax)
je 0x10b04
movq -0x10(%rbp), %rdi
callq 0x8f10
movq %rax, %rdi
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0x7ff0
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x13fe0
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rdi
callq 0x7ee0
jmp 0x10b0c
movq $0x0, -0x30(%rbp)
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0x13ee0
movl $0x61, %edi
leaq 0xad8d(%rip), %rsi      # 0x1b8b2
callq 0xd8d0
jmp 0x10b45
leaq 0x11675(%rip), %rdi     # 0x221a8
addq $0x8, %rdi
leaq 0xad8d(%rip), %rsi      # 0x1b8cb
movb $0x0, %al
callq 0x11190
addq $0xa0, %rsp
popq %rbp
retq
nop