user: 请显示与下面列出的汇编代码相匹配的C语言实现：

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

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);
}
```