// File: tewalds[P]morat/gomoku/board.h
// Function: Morat::Gomoku::Board::test_outcome(Morat::MoveValid const&, Morat::Side) const
Outcome test_outcome(const MoveValid & pos, Side turn) const {
		if (test_local(pos, turn)) {
			for (int d = 0; d < 4; d++) {
				int num = 1;
				MoveValid nb = pos;
				for (int i = 0; i < 4; i++) {
					nb = neighbors(nb)[d];
					if (nb.on_board() && get(nb) == turn)
						num++;
					else
						break;
				}
				nb = pos;
				for (int i = 0; i < 4; i++) {
					nb = neighbors(nb)[d + 4];
					if (nb.on_board() && get(nb) == turn)
						num++;
					else
						break;
				}
				if (num >= 5)
					return +turn;
			}
		}

		if(num_moves_+1 == num_cells_)
			return Outcome::DRAW;

		return Outcome::UNKNOWN;
	}

// Assembly:
subq $0x48, %rsp
movb %dl, %al
movb %al, 0x46(%rsp)
movq %rdi, 0x38(%rsp)
movq %rsi, 0x30(%rsp)
movq 0x38(%rsp), %rdi
movq %rdi, 0x8(%rsp)
movq 0x30(%rsp), %rsi
movb 0x46(%rsp), %al
movb %al, 0x2f(%rsp)
movzbl 0x2f(%rsp), %edx
callq 0x1f860
testb $0x1, %al
jne 0x1f41e
jmp 0x1f5b7
movl $0x0, 0x28(%rsp)
cmpl $0x4, 0x28(%rsp)
jge 0x1f5b5
movl $0x1, 0x24(%rsp)
movq 0x30(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x20(%rsp)
movl $0x0, 0x1c(%rsp)
cmpl $0x4, 0x1c(%rsp)
jge 0x1f4dc
movq 0x8(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x1f8b0
movslq 0x28(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, 0x20(%rsp)
leaq 0x20(%rsp), %rdi
callq 0x11590
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x7(%rsp)
jne 0x1f48b
jmp 0x1f4b1
movq 0x8(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x1f8e0
movb %al, 0x1b(%rsp)
leaq 0x1b(%rsp), %rdi
leaq 0x46(%rsp), %rsi
callq 0x1f7c0
movb %al, 0x7(%rsp)
movb 0x7(%rsp), %al
testb $0x1, %al
jne 0x1f4bb
jmp 0x1f4c8
movl 0x24(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x24(%rsp)
jmp 0x1f4ca
jmp 0x1f4dc
jmp 0x1f4cc
movl 0x1c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x1c(%rsp)
jmp 0x1f44c
movq 0x30(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x20(%rsp)
movl $0x0, 0x14(%rsp)
cmpl $0x4, 0x14(%rsp)
jge 0x1f584
movq 0x8(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x1f8b0
movl 0x28(%rsp), %ecx
addl $0x4, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, 0x20(%rsp)
leaq 0x20(%rsp), %rdi
callq 0x11590
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x6(%rsp)
jne 0x1f533
jmp 0x1f559
movq 0x8(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x1f8e0
movb %al, 0x13(%rsp)
leaq 0x13(%rsp), %rdi
leaq 0x46(%rsp), %rsi
callq 0x1f7c0
movb %al, 0x6(%rsp)
movb 0x6(%rsp), %al
testb $0x1, %al
jne 0x1f563
jmp 0x1f570
movl 0x24(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x24(%rsp)
jmp 0x1f572
jmp 0x1f584
jmp 0x1f574
movl 0x14(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x14(%rsp)
jmp 0x1f4ef
cmpl $0x5, 0x24(%rsp)
jl 0x1f5a3
movb 0x46(%rsp), %al
movb %al, 0x12(%rsp)
movzbl 0x12(%rsp), %edi
callq 0x1f910
movb %al, 0x47(%rsp)
jmp 0x1f5e7
jmp 0x1f5a5
movl 0x28(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x28(%rsp)
jmp 0x1f426
jmp 0x1f5b7
movq 0x8(%rsp), %rcx
movswl 0x4(%rcx), %eax
addl $0x1, %eax
movswl 0x2(%rcx), %ecx
cmpl %ecx, %eax
jne 0x1f5da
leaq 0x46f09(%rip), %rax     # 0x664db
movb (%rax), %al
movb %al, 0x47(%rsp)
jmp 0x1f5e7
leaq 0x46ef7(%rip), %rax     # 0x664d8
movb (%rax), %al
movb %al, 0x47(%rsp)
movb 0x47(%rsp), %al
addq $0x48, %rsp
retq