user: Demonstrate the C code that generates the assembly output below:

```asm
<set_userdest>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %esi,-0x2c(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %rcx,-0x40(%rbp)
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x40,%al
  jne    L92
  movq   $0x0,-0x20(%rbp)
  jmp    L75
L92:
  lea    -0x2c(%rbp),%rdx
  mov    -0x40(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <quotstrtok@plt>
  mov    %rax,-0x20(%rbp)
L75:
  lea    -0x2c(%rbp),%rdx
  mov    -0x40(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <quotstrtok@plt>
  mov    %rax,-0x18(%rbp)
  lea    -0x2c(%rbp),%rdx
  mov    -0x40(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <quotstrtok@plt>
  mov    %rax,-0x10(%rbp)
  lea    -0x2c(%rbp),%rdx
  mov    -0x40(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <quotstrtok@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x38(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fw_forward@plt>
  test   %rax,%rax
  je     L97
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0xfffffffe,%eax
  jmp    L51
L97:
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <fw_transparent_forward@plt>
  test   %rax,%rax
  je     L95
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0xfffffffe,%eax
  jmp    L51
L95:
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <fw_transparent@plt>
  test   %rax,%rax
  je     L89
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0xfffffffe,%eax
  jmp    L51
L89:
  mov    -0x38(%rbp),%rdx
  mov    -0x8(%rbp),%rcx
  mov    -0x10(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fw_port_mode@plt>
  test   %rax,%rax
  je     L38
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0xfffffffe,%eax
  jmp    L51
L38:
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0x0,%eax
L51:
  leave
  ret
```

assistant: ```c
int set_userdest(const char *buffer, int offset, struct clientinfo *clntinfo, const char *delimiters) {
  char *user, *host, *port, *mode;
  if (buffer[0] == '@') {
    user = (char *)0;
  } else {
    user = quotstrtok(buffer, delimiters, &offset);
  }
  host = quotstrtok(buffer, delimiters, &offset);
  port = quotstrtok(buffer, delimiters, &offset);
  mode = quotstrtok(buffer, delimiters, &offset);
  if (fw_forward(user, host, clntinfo) != 0) {
    free(user);
    free(host);
    free(port);
    free(mode);
    return (-2);
  }
  if (fw_transparent_forward(clntinfo) != 0) {
    free(user);
    free(host);
    free(port);
    free(mode);
    return (-2);
  }
  if (fw_transparent(clntinfo) != 0) {
    free(user);
    free(host);
    free(port);
    free(mode);
    return (-2);
  }
  if (fw_port_mode(port, mode, clntinfo) != 0) {
    free(user);
    free(host);
    free(port);
    free(mode);
    return (-2);
  }
  free(user);
  free(host);
  free(port);
  free(mode);
  return 0;
}
```