user: Please show me the C implementation that matches the assembly code listed below:

```asm
<long_demo>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    $0x0,%eax
  call   <FS460_play_begin@plt>
  lea    -0xc(%rbp),%rax
  mov    %rax,%rdi
  call   <FS460_get_tv_active_lines@plt>
  mov    -0xc(%rbp),%eax
  mov    $0x11,%r9d
  mov    $0x0,%r8d
  mov    %eax,%ecx
  mov    $0x2d0,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <set@plt>
  mov    -0xc(%rbp),%eax
  mov    $0x11,%r9d
  mov    $0x0,%r8d
  mov    %eax,%ecx
  mov    $0x2d0,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <set@plt>
  mov    -0xc(%rbp),%eax
  mov    $0x11,%r9d
  mov    $0x0,%r8d
  mov    %eax,%ecx
  mov    $0x2d0,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <set@plt>
  mov    -0xc(%rbp),%eax
  mov    $0x11,%r9d
  mov    $0x0,%r8d
  mov    %eax,%ecx
  mov    $0x2d0,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <set@plt>
  mov    $0x1,%ecx
  mov    $0x1e,%edx
  mov    $0x7f,%esi
  mov    $0x0,%edi
  call   <fade@plt>
  mov    $0x1e,%edi
  call   <pause@plt>
  mov    $0x1f,%r8d
  mov    $0x0,%ecx
  mov    $0xfffffd30,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <move@plt>
  mov    $0x1f,%r8d
  mov    $0x0,%ecx
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    $0x2d0,%edi
  call   <move@plt>
  mov    $0x1e,%edi
  call   <pause@plt>
  mov    -0xc(%rbp),%eax
  lea    -0x3c(%rax),%edx
  mov    -0xc(%rbp),%eax
  sub    $0x8,%rsp
  push   $0x1f
  push   %rdx
  push   $0x276
  mov    $0x3c,%r9d
  mov    $0x5a,%r8d
  mov    %eax,%ecx
  mov    $0x2d0,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <scale@plt>
  add    $0x20,%rsp
  mov    $0x1e,%edi
  call   <pause@plt>
  mov    -0xc(%rbp),%eax
  sub    $0x3c,%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
  mov    %eax,%edx
  mov    -0xc(%rbp),%eax
  mov    %edx,%r8d
  mov    %eax,%ecx
  mov    $0x5a,%edx
  mov    $0x3c,%esi
  mov    $0x5a,%edi
  call   <move@plt>
  mov    $0xf,%edi
  call   <pause@plt>
  mov    -0xc(%rbp),%eax
  sub    $0x3c,%eax
  lea    0xf(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x4,%eax
  mov    %eax,%ecx
  mov    -0xc(%rbp),%edx
  mov    $0x78,%eax
  sub    %edx,%eax
  mov    %ecx,%r8d
  mov    $0x3c,%ecx
  mov    $0x5a,%edx
  mov    %eax,%esi
  mov    $0x5a,%edi
  call   <move@plt>
  mov    $0x1e,%edi
  call   <pause@plt>
  mov    -0xc(%rbp),%eax
  mov    $0x69,%r8d
  mov    %eax,%ecx
  mov    $0x2d0,%edx
  mov    $0x3c,%esi
  mov    $0x5a,%edi
  call   <move@plt>
  mov    -0xc(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  lea    0x3(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x2,%eax
  mov    %eax,%ecx
  mov    -0xc(%rbp),%eax
  lea    0x3(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x2,%eax
  sub    $0x8,%rsp
  push   $0x1e
  push   %rcx
  push   $0x21c
  mov    %eax,%r9d
  mov    $0xb4,%r8d
  mov    $0x0,%ecx
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <scale@plt>
  add    $0x20,%rsp
  mov    -0xc(%rbp),%edx
  mov    -0xc(%rbp),%ecx
  mov    %ecx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  lea    0x3(%rax),%ecx
  test   %eax,%eax
  cmovs  %ecx,%eax
  sar    $0x2,%eax
  mov    %eax,%esi
  mov    -0xc(%rbp),%eax
  lea    0x3(%rax),%ecx
  test   %eax,%eax
  cmovs  %ecx,%eax
  sar    $0x2,%eax
  sub    $0x8,%rsp
  push   $0x1e
  push   %rdx
  push   $0x2d0
  mov    $0x0,%r9d
  mov    $0x0,%r8d
  mov    %esi,%ecx
  mov    $0x21c,%edx
  mov    %eax,%esi
  mov    $0xb4,%edi
  call   <scale@plt>
  add    $0x20,%rsp
  mov    $0x1e,%edi
  call   <pause@plt>
  mov    -0xc(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  movslq %eax,%rdx
  imul   $0x2aaaaaab,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  lea    0x64(%rax),%edx
  mov    -0xc(%rbp),%eax
  sub    $0x8,%rsp
  push   $0xf
  push   %rdx
  push   $0x294
  mov    $0x64,%r9d
  mov    $0x168,%r8d
  mov    %eax,%ecx
  mov    $0x2d0,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <scale@plt>
  add    $0x20,%rsp
  mov    $0x1e,%edi
  call   <pause@plt>
  mov    -0xc(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  movslq %eax,%rdx
  imul   $0x2aaaaaab,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  add    $0x64,%eax
  sub    $0x8,%rsp
  push   $0xf
  push   $0x12c
  push   $0x12c
  mov    $0x12c,%r9d
  mov    $0x12c,%r8d
  mov    %eax,%ecx
  mov    $0x294,%edx
  mov    $0x64,%esi
  mov    $0x168,%edi
  call   <scale@plt>
  add    $0x20,%rsp
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  add    $0xf0,%eax
  sub    $0x8,%rsp
  push   $0xf
  push   %rax
  push   $0x168
  mov    $0xf0,%r9d
  mov    $0x78,%r8d
  mov    $0x12c,%ecx
  mov    $0x12c,%edx
  mov    $0x12c,%esi
  mov    $0x12c,%edi
  call   <scale@plt>
  add    $0x20,%rsp
  mov    $0x1e,%edi
  call   <pause@plt>
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  add    $0xf0,%eax
  sub    $0x8,%rsp
  push   $0xf
  push   $0x64
  push   $0x64
  mov    $0x64,%r9d
  mov    $0x64,%r8d
  mov    %eax,%ecx
  mov    $0x168,%edx
  mov    $0xf0,%esi
  mov    $0x78,%edi
  call   <scale@plt>
  add    $0x20,%rsp
  mov    -0xc(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    %edx
  sar    $0x1f,%eax
  sub    %eax,%edx
  mov    -0xc(%rbp),%eax
  add    %eax,%eax
  movslq %eax,%rcx
  imul   $0x66666667,%rcx,%rcx
  shr    $0x20,%rcx
  sar    %ecx
  sar    $0x1f,%eax
  mov    %eax,%esi
  mov    %ecx,%eax
  sub    %esi,%eax
  sub    $0x8,%rsp
  push   $0xf
  push   %rdx
  push   $0x1b0
  mov    %eax,%r9d
  mov    $0x120,%r8d
  mov    $0x64,%ecx
  mov    $0x64,%edx
  mov    $0x64,%esi
  mov    $0x64,%edi
  call   <scale@plt>
  add    $0x20,%rsp
  mov    $0x1e,%edi
  call   <pause@plt>
  mov    -0xc(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    %edx
  sar    $0x1f,%eax
  mov    %edx,%ecx
  sub    %eax,%ecx
  mov    -0xc(%rbp),%eax
  add    %eax,%eax
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    %edx
  sar    $0x1f,%eax
  mov    %edx,%edi
  sub    %eax,%edi
  mov    -0xc(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    %edx
  sar    $0x1f,%eax
  sub    %eax,%edx
  mov    -0xc(%rbp),%eax
  add    %eax,%eax
  movslq %eax,%rsi
  imul   $0x66666667,%rsi,%rsi
  shr    $0x20,%rsi
  sar    %esi
  sar    $0x1f,%eax
  mov    %eax,%r8d
  mov    %esi,%eax
  sub    %r8d,%eax
  sub    $0x8,%rsp
  push   $0xf
  push   %rcx
  push   $0x168
  mov    %edi,%r9d
  mov    $0x168,%r8d
  mov    %edx,%ecx
  mov    $0x1b0,%edx
  mov    %eax,%esi
  mov    $0x120,%edi
  call   <scale@plt>
  add    $0x20,%rsp
  mov    -0xc(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  lea    0x3(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x2,%eax
  mov    %eax,%esi
  mov    -0xc(%rbp),%eax
  lea    0x3(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x2,%eax
  mov    %eax,%edi
  mov    -0xc(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  lea    0x3(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x2,%eax
  mov    %eax,%ecx
  mov    -0xc(%rbp),%eax
  lea    0x3(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x2,%eax
  sub    $0x8,%rsp
  push   $0xf
  push   %rsi
  push   $0x21c
  mov    %edi,%r9d
  mov    $0xb4,%r8d
  mov    $0x168,%edx
  mov    %eax,%esi
  mov    $0x168,%edi
  call   <scale@plt>
  add    $0x20,%rsp
  mov    $0x1e,%edi
  call   <pause@plt>
  mov    -0xc(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  lea    0x3(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x2,%eax
  mov    %eax,%esi
  mov    -0xc(%rbp),%eax
  lea    0x3(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x2,%eax
  mov    %eax,%edi
  mov    -0xc(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  lea    0x3(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x2,%eax
  mov    %eax,%ecx
  mov    -0xc(%rbp),%eax
  lea    0x3(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x2,%eax
  sub    $0x8,%rsp
  push   $0xf
  push   %rsi
  push   $0x168
  mov    %edi,%r9d
  mov    $0x168,%r8d
  mov    $0x21c,%edx
  mov    %eax,%esi
  mov    $0xb4,%edi
  call   <scale@plt>
  add    $0x20,%rsp
  mov    -0xc(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x2aaaaaab,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %edx,%ecx
  sub    %eax,%ecx
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x2aaaaaab,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %edx,%edi
  sub    %eax,%edi
  mov    -0xc(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x2aaaaaab,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  sub    %eax,%edx
  mov    -0xc(%rbp),%eax
  movslq %eax,%rsi
  imul   $0x2aaaaaab,%rsi,%rsi
  shr    $0x20,%rsi
  sar    $0x1f,%eax
  mov    %eax,%r8d
  mov    %esi,%eax
  sub    %r8d,%eax
  sub    $0x8,%rsp
  push   $0xf
  push   %rcx
  push   $0x258
  mov    %edi,%r9d
  mov    $0x78,%r8d
  mov    %edx,%ecx
  mov    $0x168,%edx
  mov    %eax,%esi
  mov    $0x168,%edi
  call   <scale@plt>
  add    $0x20,%rsp
  mov    $0x1e,%edi
  call   <pause@plt>
  mov    -0xc(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%esi
  mov    -0xc(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%r8d
  mov    -0xc(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x2aaaaaab,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  sub    %eax,%edx
  mov    -0xc(%rbp),%eax
  movslq %eax,%rcx
  imul   $0x2aaaaaab,%rcx,%rcx
  shr    $0x20,%rcx
  sar    $0x1f,%eax
  mov    %eax,%edi
  mov    %ecx,%eax
  sub    %edi,%eax
  sub    $0x8,%rsp
  push   $0xf
  push   %rsi
  push   $0x258
  mov    %r8d,%r9d
  mov    $0x78,%r8d
  mov    %edx,%ecx
  mov    $0x258,%edx
  mov    %eax,%esi
  mov    $0x78,%edi
  call   <scale@plt>
  add    $0x20,%rsp
  mov    -0xc(%rbp),%eax
  mov    -0xc(%rbp),%edx
  mov    %edx,%ecx
  shr    $0x1f,%ecx
  add    %ecx,%edx
  sar    %edx
  mov    %edx,%ecx
  mov    -0xc(%rbp),%edx
  mov    %edx,%esi
  shr    $0x1f,%esi
  add    %esi,%edx
  sar    %edx
  mov    %edx,%esi
  sub    $0x8,%rsp
  push   $0xf
  push   %rax
  push   $0x2d0
  mov    $0x0,%r9d
  mov    $0x0,%r8d
  mov    $0x2d0,%edx
  mov    $0x0,%edi
  call   <scale@plt>
  add    $0x20,%rsp
  mov    $0x1e,%edi
  call   <pause@plt>
  mov    -0xc(%rbp),%eax
  push   $0x0
  push   $0x3c
  push   $0x7f
  push   $0x40
  mov    $0x40,%r9d
  mov    $0x0,%r8d
  mov    %eax,%ecx
  mov    $0x2d0,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <wipe@plt>
  add    $0x20,%rsp
  mov    $0x1e,%edi
  call   <pause@plt>
  mov    -0xc(%rbp),%eax
  push   $0x1
  push   $0x3c
  push   $0x40
  push   $0x7f
  mov    $0x0,%r9d
  mov    $0x40,%r8d
  mov    $0x0,%ecx
  mov    $0x2d0,%edx
  mov    %eax,%esi
  mov    $0x0,%edi
  call   <wipe@plt>
  add    $0x20,%rsp
  mov    $0x1e,%edi
  call   <pause@plt>
  mov    $0x8,%ecx
  mov    $0x1e,%edx
  mov    $0x0,%esi
  mov    $0x7f,%edi
  call   <shutters@plt>
  mov    $0x3c,%edi
  call   <pause@plt>
  mov    $0x1,%edi
  call   <FS460_play_run@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L4
  call   <__stack_chk_fail@plt>
L4:
  leave
  ret
```

assistant: ```c
void long_demo(void) {
  int full_height;
  FS460_play_begin();
  FS460_get_tv_active_lines(&full_height);
  set(0, 0, 720, full_height, 0, 0x0001 | 0x0010);
  set(0, 0, 720, full_height, 0, 0x0001 | 0x0010);
  set(0, 0, 720, full_height, 0, 0x0001 | 0x0010);
  set(0, 0, 720, full_height, 0, 0x0001 | 0x0010);
  fade(0, 0x7F, 30, 1);
  pause(30);
  move(0, 0, -720, 0, 31);
  move(720, 0, 0, 0, 31);
  pause(30);
  scale(0, 0, 720, full_height, 90, 60, 630, full_height - 60, 31);
  pause(30);
  move(90, 60, 90, full_height, (full_height - 60) / 16);
  pause(15);
  move(90, -full_height + 120, 90, 60, (full_height - 60) / 16);
  pause(30);
  move(90, 60, 720, full_height, 105);
  scale(0, 0, 0, 0, 180, full_height / 4, 540, full_height * 3 / 4, 30);
  scale(180, full_height / 4, 540, full_height * 3 / 4, 0, 0, 720, full_height, 30);
  pause(30);
  scale(0, 0, 720, full_height, 360, 100, 660, 100 + full_height * 10 / 24, 15);
  pause(30);
  scale(360, 100, 660, 100 + full_height * 10 / 24, 300, 300, 300, 300, 15);
  scale(300, 300, 300, 300, 120, 240, 360, 240 + full_height / 3, 15);
  pause(30);
  scale(120, 240, 360, 240 + full_height / 3, 100, 100, 100, 100, 15);
  scale(100, 100, 100, 100, 288, full_height * 2 / 5, 432, full_height * 3 / 5, 15);
  pause(30);
  scale(288, full_height * 2 / 5, 432, full_height * 3 / 5, 360, full_height * 2 / 5, 360, full_height * 3 / 5, 15);
  scale(360, full_height / 4, 360, full_height * 3 / 4, 180, full_height / 4, 540, full_height * 3 / 4, 15);
  pause(30);
  scale(180, full_height / 4, 540, full_height * 3 / 4, 360, full_height / 4, 360, full_height * 3 / 4, 15);
  scale(360, full_height * 1 / 6, 360, full_height * 5 / 6, 120, full_height * 1 / 6, 600, full_height * 5 / 6, 15);
  pause(30);
  scale(120, full_height * 1 / 6, 600, full_height * 5 / 6, 120, full_height / 2, 600, full_height / 2, 15);
  scale(0, full_height / 2, 720, full_height / 2, 0, 0, 720, full_height, 15);
  pause(30);
  wipe(0, 0, 720, full_height, 0x00, 0x40, 0x40, 0x7F, 60, 0);
  pause(30);
  wipe(0, full_height, 720, 0, 0x40, 0x00, 0x7F, 0x40, 60, 1);
  pause(30);
  shutters(0x7F, 0, 30, 8);
  pause(60);
  FS460_play_run(0x0001);
}
```