Given the following C code and unoptimized assembly code, your task is to generate highly optimized x86-64 assembly code.
C Code:

```c
main(n,a,b,c){for(scanf("%d",&n),getchar();n--;printf("%s wins.\n",(a+b/9)&1?"Fabre":"Audrey"))for(a=b=-1;(c=getchar())!='\n';a++)b+=c-48;exit(0);}```

Unoptimized Assembly Code:

```assembly
	.file	"temp.c"
	.text
	.section	.rodata
.LC0:
	.string	"%d"
.LC1:
	.string	"Fabre"
.LC2:
	.string	"Audrey"
.LC3:
	.string	"%s wins.\n"
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movl	%edi, -4(%rbp)
	movl	%esi, -8(%rbp)
	movl	%edx, -12(%rbp)
	movl	%ecx, -16(%rbp)
	leaq	-4(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	scanf@PLT
	movl	$0, %eax
	call	getchar@PLT
	jmp	.L2
.L7:
	movl	$-1, -12(%rbp)
	movl	-12(%rbp), %eax
	movl	%eax, -8(%rbp)
	jmp	.L3
.L4:
	movl	-16(%rbp), %eax
	subl	$48, %eax
	addl	%eax, -12(%rbp)
	addl	$1, -8(%rbp)
.L3:
	movl	$0, %eax
	call	getchar@PLT
	movl	%eax, -16(%rbp)
	cmpl	$10, -16(%rbp)
	jne	.L4
	movl	-12(%rbp), %eax
	movslq	%eax, %rdx
	imulq	$954437177, %rdx, %rdx
	shrq	$32, %rdx
	sarl	%edx
	sarl	$31, %eax
	subl	%eax, %edx
	movl	-8(%rbp), %eax
	addl	%edx, %eax
	andl	$1, %eax
	testl	%eax, %eax
	je	.L5
	leaq	.LC1(%rip), %rax
	jmp	.L6
.L5:
	leaq	.LC2(%rip), %rax
.L6:
	movq	%rax, %rsi
	leaq	.LC3(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L2:
	movl	-4(%rbp), %eax
	leal	-1(%rax), %edx
	movl	%edx, -4(%rbp)
	testl	%eax, %eax
	jne	.L7
	movl	$0, %edi
	call	exit@PLT
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:
```

Only output the optimized assembly code. Do not include any other text. Do not write any comments in the assembly code. Wrap the assembly code in ```assembly``` tags.
user
	.file	"temp.c"
	.text
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"%d"
.LC1:
	.string	"Fabre"
.LC2:
	.string	"%s wins.\n"
.LC3:
	.string	"Audrey"
	.section	.text.startup,"ax",@progbits
	.p2align 4
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	endbr64
	pushq	%r14
	.cfi_def_cfa_offset 16
	.cfi_offset 14, -16
	xorl	%eax, %eax
	pushq	%r13
	.cfi_def_cfa_offset 24
	.cfi_offset 13, -24
	leaq	.LC3(%rip), %r13
	pushq	%r12
	.cfi_def_cfa_offset 32
	.cfi_offset 12, -32
	leaq	.LC1(%rip), %r12
	pushq	%rbp
	.cfi_def_cfa_offset 40
	.cfi_offset 6, -40
	leaq	.LC2(%rip), %rbp
	pushq	%rbx
	.cfi_def_cfa_offset 48
	.cfi_offset 3, -48
	subq	$16, %rsp
	.cfi_def_cfa_offset 64
	movl	%edi, 12(%rsp)
	leaq	12(%rsp), %rsi
	leaq	.LC0(%rip), %rdi
	call	scanf@PLT
	xorl	%eax, %eax
	call	getchar@PLT
	movl	12(%rsp), %eax
	leal	-1(%rax), %edx
	movl	%edx, 12(%rsp)
	testl	%eax, %eax
	je	.L3
	.p2align 4,,10
	.p2align 3
.L2:
	movl	$-1, %r14d
	movl	$-1, %ebx
	jmp	.L7
	.p2align 4,,10
	.p2align 3
.L4:
	leal	-48(%r14,%rax), %r14d
	addl	$1, %ebx
.L7:
	xorl	%eax, %eax
	call	getchar@PLT
	cmpl	$10, %eax
	jne	.L4
	movslq	%r14d, %rax
	sarl	$31, %r14d
	movq	%r12, %rsi
	imulq	$954437177, %rax, %rax
	sarq	$33, %rax
	subl	%r14d, %eax
	addl	%ebx, %eax
	testb	$1, %al
	jne	.L14
	movq	%r13, %rsi
.L14:
	movq	%rbp, %rdi
	xorl	%eax, %eax
	call	printf@PLT
	movl	12(%rsp), %eax
	leal	-1(%rax), %edx
	movl	%edx, 12(%rsp)
	testl	%eax, %eax
	jne	.L2
.L3:
	xorl	%edi, %edi
	call	exit@PLT
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:

rule
	.file	"temp.c"
	.text
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"%d"
.LC1:
	.string	"Fabre"
.LC2:
	.string	"%s wins.\n"
.LC3:
	.string	"Audrey"
	.section	.text.startup,"ax",@progbits
	.p2align 4
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	endbr64
	pushq	%r14
	.cfi_def_cfa_offset 16
	.cfi_offset 14, -16
	xorl	%eax, %eax
	pushq	%r13
	.cfi_def_cfa_offset 24
	.cfi_offset 13, -24
	leaq	.LC3(%rip), %r13
	pushq	%r12
	.cfi_def_cfa_offset 32
	.cfi_offset 12, -32
	leaq	.LC1(%rip), %r12
	pushq	%rbp
	.cfi_def_cfa_offset 40
	.cfi_offset 6, -40
	leaq	.LC2(%rip), %rbp
	pushq	%rbx
	.cfi_def_cfa_offset 48
	.cfi_offset 3, -48
	subq	$16, %rsp
	.cfi_def_cfa_offset 64
	movl	%edi, 12(%rsp)
	leaq	12(%rsp), %rsi
	leaq	.LC0(%rip), %rdi
	call	scanf@PLT
	xorl	%eax, %eax
	call	getchar@PLT
	movl	12(%rsp), %eax
	leal	-1(%rax), %edx
	movl	%edx, 12(%rsp)
	testl	%eax, %eax
	je	.L3
	.p2align 4,,10
	.p2align 3
.L2:
	movl	$-1, %r14d
	movl	$-1, %ebx
	jmp	.L7
	.p2align 4,,10
	.p2align 3
.L4:
	leal	-48(%r14,%rax), %r14d
	addl	$1, %ebx
.L7:
	xorl	%eax, %eax
	call	getchar@PLT
	cmpl	$10, %eax
	jne	.L4
	movslq	%r14d, %rax
	sarl	$31, %r14d
	movq	%r12, %rsi
	imulq	$954437177, %rax, %rax
	sarq	$33, %rax
	subl	%r14d, %eax
	addl	%ebx, %eax
	testb	$1, %al
	jne	.L14
	movq	%r13, %rsi
.L14:
	movq	%rbp, %rdi
	xorl	%eax, %eax
	call	printf@PLT
	movl	12(%rsp), %eax
	leal	-1(%rax), %edx
	movl	%edx, 12(%rsp)
	testl	%eax, %eax
	jne	.L2
.L3:
	xorl	%edi, %edi
	call	exit@PLT
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:

main(n,a,b,c){for(scanf("%d",&n),getchar();n--;printf("%s wins.\n",(a+b/9)&1?"Fabre":"Audrey"))for(a=b=-1;(c=getchar())!='\n';a++)b+=c-48;exit(0);}
3
1234
8371
9
 3
1234
1292
9
 3
2133
1292
9
 3
1687
10
7
 3
1656
10
11
 3
3178
10
11
 3
1499
29
11
 3
49
2
14
 3
2133
261
9
 3
2133
261
7

Audrey wins.
Fabre wins.
Audrey wins.
 Audrey wins.
Audrey wins.
Audrey wins.
 Fabre wins.
Audrey wins.
Audrey wins.
 Fabre wins.
Fabre wins.
Audrey wins.
 Audrey wins.
Fabre wins.
Fabre wins.
 Fabre wins.
Fabre wins.
Fabre wins.
 Fabre wins.
Audrey wins.
Fabre wins.
 Audrey wins.
Audrey wins.
Fabre wins.
 Fabre wins.
Audrey wins.
Audrey wins.
 Fabre wins.
Audrey wins.
Audrey wins.

Given the following C code and unoptimized assembly code, your task is to generate highly optimized x86-64 assembly code.
C Code:

```c
main(n,a,b,c){for(scanf("%d",&n),getchar();n--;printf("%s wins.\n",(a+b/9)&1?"Fabre":"Audrey"))for(a=b=-1;(c=getchar())!='\n';a++)b+=c-48;exit(0);}```

Unoptimized Assembly Code:

```assembly
	.file	"temp.c"
	.text
	.section	.rodata
.LC0:
	.string	"%d"
.LC1:
	.string	"Fabre"
.LC2:
	.string	"Audrey"
.LC3:
	.string	"%s wins.\n"
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movl	%edi, -4(%rbp)
	movl	%esi, -8(%rbp)
	movl	%edx, -12(%rbp)
	movl	%ecx, -16(%rbp)
	leaq	-4(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	scanf@PLT
	movl	$0, %eax
	call	getchar@PLT
	jmp	.L2
.L7:
	movl	$-1, -12(%rbp)
	movl	-12(%rbp), %eax
	movl	%eax, -8(%rbp)
	jmp	.L3
.L4:
	movl	-16(%rbp), %eax
	subl	$48, %eax
	addl	%eax, -12(%rbp)
	addl	$1, -8(%rbp)
.L3:
	movl	$0, %eax
	call	getchar@PLT
	movl	%eax, -16(%rbp)
	cmpl	$10, -16(%rbp)
	jne	.L4
	movl	-12(%rbp), %eax
	movslq	%eax, %rdx
	imulq	$954437177, %rdx, %rdx
	shrq	$32, %rdx
	sarl	%edx
	sarl	$31, %eax
	subl	%eax, %edx
	movl	-8(%rbp), %eax
	addl	%edx, %eax
	andl	$1, %eax
	testl	%eax, %eax
	je	.L5
	leaq	.LC1(%rip), %rax
	jmp	.L6
.L5:
	leaq	.LC2(%rip), %rax
.L6:
	movq	%rax, %rsi
	leaq	.LC3(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L2:
	movl	-4(%rbp), %eax
	leal	-1(%rax), %edx
	movl	%edx, -4(%rbp)
	testl	%eax, %eax
	jne	.L7
	movl	$0, %edi
	call	exit@PLT
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:
```

Only output the optimized assembly code. Do not include any other text. Do not write any comments in the assembly code. Wrap the assembly code in ```assembly``` tags.
train
	.file	"temp.c"
	.text
	.section	.rodata
.LC0:
	.string	"%d"
.LC1:
	.string	"Fabre"
.LC2:
	.string	"Audrey"
.LC3:
	.string	"%s wins.\n"
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movl	%edi, -4(%rbp)
	movl	%esi, -8(%rbp)
	movl	%edx, -12(%rbp)
	movl	%ecx, -16(%rbp)
	leaq	-4(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	scanf@PLT
	movl	$0, %eax
	call	getchar@PLT
	jmp	.L2
.L7:
	movl	$-1, -12(%rbp)
	movl	-12(%rbp), %eax
	movl	%eax, -8(%rbp)
	jmp	.L3
.L4:
	movl	-16(%rbp), %eax
	subl	$48, %eax
	addl	%eax, -12(%rbp)
	addl	$1, -8(%rbp)
.L3:
	movl	$0, %eax
	call	getchar@PLT
	movl	%eax, -16(%rbp)
	cmpl	$10, -16(%rbp)
	jne	.L4
	movl	-12(%rbp), %eax
	movslq	%eax, %rdx
	imulq	$954437177, %rdx, %rdx
	shrq	$32, %rdx
	sarl	%edx
	sarl	$31, %eax
	subl	%eax, %edx
	movl	-8(%rbp), %eax
	addl	%edx, %eax
	andl	$1, %eax
	testl	%eax, %eax
	je	.L5
	leaq	.LC1(%rip), %rax
	jmp	.L6
.L5:
	leaq	.LC2(%rip), %rax
.L6:
	movq	%rax, %rsi
	leaq	.LC3(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L2:
	movl	-4(%rbp), %eax
	leal	-1(%rax), %edx
	movl	%edx, -4(%rbp)
	testl	%eax, %eax
	jne	.L7
	movl	$0, %edi
	call	exit@PLT
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:
