user: Translate the below assembly code into C programming language:

```asm
<conservativeSmooth>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %edx,-0x34(%rbp)
  mov    %ecx,-0x38(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L26
L95:
  movl   $0x0,-0xc(%rbp)
  jmp    L93
L0:
  cmpl   $0x0,-0x10(%rbp)
  jle    L74
  mov    -0x38(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x10(%rbp)
  jge    L74
  cmpl   $0x0,-0xc(%rbp)
  jle    L74
  mov    -0x34(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0xc(%rbp)
  jge    L74
  movb   $0xff,-0x12(%rbp)
  movb   $0x0,-0x11(%rbp)
  movl   $0xffffffff,-0x8(%rbp)
  jmp    L122
L21:
  movl   $0xffffffff,-0x4(%rbp)
  jmp    L143
L194:
  cmpl   $0x0,-0x8(%rbp)
  je     L14
  cmpl   $0x0,-0x4(%rbp)
  je     L14
  mov    -0x10(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  imul   -0x34(%rbp),%eax
  mov    -0xc(%rbp),%ecx
  mov    -0x4(%rbp),%edx
  add    %ecx,%edx
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    %al,-0x12(%rbp)
  jb     L155
  mov    -0x10(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  imul   -0x34(%rbp),%eax
  mov    -0xc(%rbp),%ecx
  mov    -0x4(%rbp),%edx
  add    %ecx,%edx
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x12(%rbp)
L155:
  mov    -0x10(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  imul   -0x34(%rbp),%eax
  mov    -0xc(%rbp),%ecx
  mov    -0x4(%rbp),%edx
  add    %ecx,%edx
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    %al,-0x11(%rbp)
  ja     L14
  mov    -0x10(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  imul   -0x34(%rbp),%eax
  mov    -0xc(%rbp),%ecx
  mov    -0x4(%rbp),%edx
  add    %ecx,%edx
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x11(%rbp)
L14:
  addl   $0x1,-0x4(%rbp)
L143:
  cmpl   $0x1,-0x4(%rbp)
  jle    L194
  addl   $0x1,-0x8(%rbp)
L122:
  cmpl   $0x1,-0x8(%rbp)
  jle    L21
  mov    -0x10(%rbp),%eax
  imul   -0x34(%rbp),%eax
  mov    %eax,%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    %al,-0x11(%rbp)
  jae    L157
  mov    -0x10(%rbp),%eax
  imul   -0x34(%rbp),%eax
  mov    %eax,%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x11(%rbp),%eax
  mov    %al,(%rdx)
  jmp    L160
L157:
  mov    -0x10(%rbp),%eax
  imul   -0x34(%rbp),%eax
  mov    %eax,%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    %al,-0x12(%rbp)
  jbe    L120
  mov    -0x10(%rbp),%eax
  imul   -0x34(%rbp),%eax
  mov    %eax,%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x12(%rbp),%eax
  mov    %al,(%rdx)
  jmp    L160
L120:
  mov    -0x10(%rbp),%eax
  imul   -0x34(%rbp),%eax
  mov    %eax,%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x10(%rbp),%eax
  imul   -0x34(%rbp),%eax
  mov    %eax,%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  movzbl (%rcx),%eax
  mov    %al,(%rdx)
  jmp    L160
L74:
  mov    -0x10(%rbp),%eax
  imul   -0x34(%rbp),%eax
  mov    %eax,%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x10(%rbp),%eax
  imul   -0x34(%rbp),%eax
  mov    %eax,%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  movzbl (%rcx),%eax
  mov    %al,(%rdx)
L160:
  addl   $0x1,-0xc(%rbp)
L93:
  mov    -0xc(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jl     L0
  addl   $0x1,-0x10(%rbp)
L26:
  mov    -0x10(%rbp),%eax
  cmp    -0x38(%rbp),%eax
  jl     L95
  nop
  nop
  pop    %rbp
  ret
```

assistant: ```c
void conservativeSmooth(unsigned char *out, unsigned char *in, int w, int h) {
  int i, j, m, n;
  unsigned char min, max;
  for (i = 0; i < h; i++) {
    for (j = 0; j < w; j++) {
      if (i > 0 && i < h - 1 && j > 0 && j < w - 1) {
        min = 255;
        max = 0;
        for (m = -1; m <= +1; m++) {
          for (n = -1; n <= +1; n++) {
            if (m != 0 && n != 0) {
              if (in[(i + m) * w + (j + n)] <= min) {
                min = in[(i + m) * w + (j + n)];
              }
              if (in[(i + m) * w + (j + n)] >= max) {
                max = in[(i + m) * w + (j + n)];
              }
            }
          }
        }
        if (in[i * w + j] > max) {
          out[i * w + j] = max;
        } else if (in[i * w + j] < min) {
          out[i * w + j] = min;
        } else {
          out[i * w + j] = in[i * w + j];
        }
      } else {
        out[i * w + j] = in[i * w + j];
      }
    }
  }
}
```