user: What is the c source code of the assembly code below?

```asm
<filtre_1>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %rdi,-0x68(%rbp)
  mov    %esi,-0x6c(%rbp)
  mov    %edx,-0x70(%rbp)
  mov    %rcx,-0x78(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0xffffffff,-0x30(%rbp)
  movl   $0xffffffff,-0x2c(%rbp)
  movl   $0x0,-0x28(%rbp)
  movl   $0xffffffff,-0x24(%rbp)
  movl   $0x0,-0x20(%rbp)
  movl   $0x1,-0x1c(%rbp)
  movl   $0x0,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  movl   $0x1,-0x10(%rbp)
  movl   $0x1,-0x3c(%rbp)
  movl   $0x80,-0x38(%rbp)
  movl   $0x0,-0x48(%rbp)
  movl   $0x1,-0x40(%rbp)
  jmp    L69
L54:
  movl   $0x1,-0x44(%rbp)
  jmp    L70
L65:
  mov    -0x40(%rbp),%eax
  sub    $0x1,%eax
  imul   -0x6c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x51(%rbp)
  mov    -0x40(%rbp),%eax
  sub    $0x1,%eax
  imul   -0x6c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x50(%rbp)
  mov    -0x40(%rbp),%eax
  sub    $0x1,%eax
  imul   -0x6c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x4f(%rbp)
  mov    -0x40(%rbp),%eax
  imul   -0x6c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x4e(%rbp)
  mov    -0x40(%rbp),%eax
  imul   -0x6c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x4d(%rbp)
  mov    -0x40(%rbp),%eax
  imul   -0x6c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x4c(%rbp)
  mov    -0x40(%rbp),%eax
  add    $0x1,%eax
  imul   -0x6c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x4b(%rbp)
  mov    -0x40(%rbp),%eax
  add    $0x1,%eax
  imul   -0x6c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x4a(%rbp)
  mov    -0x40(%rbp),%eax
  add    $0x1,%eax
  imul   -0x6c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x49(%rbp)
  mov    -0x30(%rbp),%edx
  movzbl -0x51(%rbp),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  mov    -0x2c(%rbp),%edx
  movzbl -0x50(%rbp),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x28(%rbp),%edx
  movzbl -0x4f(%rbp),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x24(%rbp),%edx
  movzbl -0x4e(%rbp),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x20(%rbp),%edx
  movzbl -0x4d(%rbp),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x1c(%rbp),%edx
  movzbl -0x4c(%rbp),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x18(%rbp),%edx
  movzbl -0x4b(%rbp),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x14(%rbp),%edx
  movzbl -0x4a(%rbp),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x10(%rbp),%edx
  movzbl -0x49(%rbp),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x34(%rbp),%edx
  mov    -0x38(%rbp),%eax
  add    %eax,%edx
  mov    -0x3c(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x34(%rbp)
  cmpl   $0xff,-0x34(%rbp)
  jle    L29
  mov    -0x48(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movb   $0xff,(%rax)
  jmp    L28
L29:
  cmpl   $0x0,-0x34(%rbp)
  jns    L44
  mov    -0x48(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  jmp    L28
L44:
  mov    -0x48(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    -0x34(%rbp),%edx
  mov    %dl,(%rax)
L28:
  addl   $0x1,-0x48(%rbp)
  addl   $0x1,-0x44(%rbp)
L70:
  mov    -0x6c(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x44(%rbp)
  jl     L65
  addl   $0x1,-0x40(%rbp)
L69:
  mov    -0x70(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x40(%rbp)
  jl     L54
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L10
  call   <__stack_chk_fail@plt>
L10:
  leave
  ret
```

assistant: ```c
void filtre_1(char *data, int largeur, int hauteur, char *data_sortie) {
  int cpt_out, tmp_i;
  int x, y;
  unsigned char p0, p1, p2, p3, p4, p5, p6, p7, p8;
  int coef[9];
  int alpha, beta;
  coef[0] = -1;
  coef[1] = -1;
  coef[2] = 0;
  coef[3] = -1;
  coef[4] = 0;
  coef[5] = +1;
  coef[6] = 0;
  coef[7] = +1;
  coef[8] = +1;
  alpha = 1;
  beta = 128;
  cpt_out = 0;
  for (y = 1; y < hauteur - 1; y++) {
    for (x = 1; x < largeur - 1; x++) {
      p0 = data[(y - 1) * largeur + x - 1];
      p1 = data[(y - 1) * largeur + x];
      p2 = data[(y - 1) * largeur + x + 1];
      p3 = data[y * largeur + x - 1];
      p4 = data[y * largeur + x];
      p5 = data[y * largeur + x + 1];
      p6 = data[(y + 1) * largeur + x - 1];
      p7 = data[(y + 1) * largeur + x];
      p8 = data[(y + 1) * largeur + x + 1];
      tmp_i = coef[0] * p0 + coef[1] * p1 + coef[2] * p2 + coef[3] * p3 + coef[4] * p4 + coef[5] * p5 + coef[6] * p6 + coef[7] * p7 + coef[8] * p8;
      tmp_i = alpha * (tmp_i + beta);
      if (tmp_i > 255) {
        data_sortie[cpt_out] = 255;
      } else if (tmp_i < 0) {
        data_sortie[cpt_out] = 0;
      } else {
        data_sortie[cpt_out] = (unsigned char)tmp_i;
      }
      cpt_out++;
    }
  }
}
```