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

```asm
<XD_Draw_Vector>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %esi,-0x4c(%rbp)
  mov    %edx,-0x50(%rbp)
  mov    %rcx,-0x58(%rbp)
  mov    %r8,-0x60(%rbp)
  mov    %r9,-0x68(%rbp)
  movl   $0x0,-0x18(%rbp)
  jmp    L26
L63:
  movl   $0x1,-0x1c(%rbp)
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x18(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x18(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x24(%rbp),%eax
  sub    -0x2c(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x20(%rbp),%eax
  sub    -0x28(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x10(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  jge    L21
  mov    -0x28(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jle    L125
  mov    -0x18(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x18(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x20(%rbp)
L125:
  mov    -0x68(%rbp),%rdi
  mov    -0x28(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  mov    -0x4c(%rbp),%edx
  mov    -0x48(%rbp),%rax
  sub    $0x8,%rsp
  push   0x10(%rbp)
  mov    %rdi,%r9
  mov    %esi,%r8d
  mov    $0x9,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <XD_Device_Interface@plt>
  add    $0x10,%rsp
  mov    %eax,-0x14(%rbp)
  cmpl   $0x1,-0x14(%rbp)
  jne    L19
  mov    -0x2c(%rbp),%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x2c(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jle    L238
  movl   $0xffffffff,-0x1c(%rbp)
L238:
  mov    -0x10(%rbp),%eax
  add    %eax,%eax
  sub    -0xc(%rbp),%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x10(%rbp),%eax
  add    %eax,%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x10(%rbp),%eax
  sub    -0xc(%rbp),%eax
  add    %eax,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x28(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x30(%rbp)
  jmp    L4
L1:
  cmpl   $0x0,-0x38(%rbp)
  jns    L151
  mov    -0x8(%rbp),%eax
  add    %eax,-0x38(%rbp)
  jmp    L164
L151:
  mov    -0x1c(%rbp),%eax
  add    %eax,-0x34(%rbp)
  mov    -0x4(%rbp),%eax
  add    %eax,-0x38(%rbp)
L164:
  mov    -0x68(%rbp),%rdi
  mov    -0x30(%rbp),%esi
  mov    -0x34(%rbp),%ecx
  mov    -0x4c(%rbp),%edx
  mov    -0x48(%rbp),%rax
  sub    $0x8,%rsp
  push   0x10(%rbp)
  mov    %rdi,%r9
  mov    %esi,%r8d
  mov    $0x9,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <XD_Device_Interface@plt>
  add    $0x10,%rsp
  mov    %eax,-0x14(%rbp)
  cmpl   $0x1,-0x14(%rbp)
  jne    L28
  addl   $0x1,-0x30(%rbp)
L4:
  mov    -0x30(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jle    L1
  jmp    L96
L21:
  mov    -0x2c(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jle    L224
  mov    -0x18(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x18(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x20(%rbp)
L224:
  mov    -0x68(%rbp),%rdi
  mov    -0x28(%rbp),%esi
  mov    -0x2c(%rbp),%ecx
  mov    -0x4c(%rbp),%edx
  mov    -0x48(%rbp),%rax
  sub    $0x8,%rsp
  push   0x10(%rbp)
  mov    %rdi,%r9
  mov    %esi,%r8d
  mov    $0x9,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <XD_Device_Interface@plt>
  add    $0x10,%rsp
  mov    %eax,-0x14(%rbp)
  cmpl   $0x1,-0x14(%rbp)
  jne    L59
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x28(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jle    L212
  movl   $0xffffffff,-0x1c(%rbp)
L212:
  mov    -0xc(%rbp),%eax
  add    %eax,%eax
  sub    -0x10(%rbp),%eax
  mov    %eax,-0x38(%rbp)
  mov    -0xc(%rbp),%eax
  add    %eax,%eax
  mov    %eax,-0x8(%rbp)
  mov    -0xc(%rbp),%eax
  sub    -0x10(%rbp),%eax
  add    %eax,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x2c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x34(%rbp)
  jmp    L211
L42:
  cmpl   $0x0,-0x38(%rbp)
  jns    L17
  mov    -0x8(%rbp),%eax
  add    %eax,-0x38(%rbp)
  jmp    L64
L17:
  mov    -0x1c(%rbp),%eax
  add    %eax,-0x30(%rbp)
  mov    -0x4(%rbp),%eax
  add    %eax,-0x38(%rbp)
L64:
  mov    -0x68(%rbp),%rdi
  mov    -0x30(%rbp),%esi
  mov    -0x34(%rbp),%ecx
  mov    -0x4c(%rbp),%edx
  mov    -0x48(%rbp),%rax
  sub    $0x8,%rsp
  push   0x10(%rbp)
  mov    %rdi,%r9
  mov    %esi,%r8d
  mov    $0x9,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <XD_Device_Interface@plt>
  add    $0x10,%rsp
  mov    %eax,-0x14(%rbp)
  cmpl   $0x1,-0x14(%rbp)
  jne    L155
  addl   $0x1,-0x34(%rbp)
L211:
  mov    -0x34(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jle    L42
  jmp    L96
L28:
  nop
  jmp    L96
L155:
  nop
L96:
  addl   $0x1,-0x18(%rbp)
L26:
  mov    -0x50(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x18(%rbp)
  jl     L63
  jmp    L61
L19:
  nop
  jmp    L61
L59:
  nop
L61:
  mov    -0x14(%rbp),%eax
  leave
  ret
```

assistant: ```c
int XD_Draw_Vector(Unit, Imp, NPts, X, Y, Value, Mask)
int *Unit, Imp, NPts, *X, *Y, *Mask;
char *Value;
{
  int dx, dy, incr1, incr2, d, x, y;
  int XStart, YStart, XEnd, YEnd, Offset, i, status;
  for (i = 0; i < NPts - 1; i++) {
    Offset = 1;
    XStart = X[i];
    XEnd = X[i + 1];
    YStart = Y[i];
    YEnd = Y[i + 1];
    dx = abs(XEnd - XStart);
    dy = abs(YEnd - YStart);
    if (dx < dy) {
      if (YStart > YEnd) {
        XStart = X[i + 1], XEnd = X[i];
        YStart = Y[i + 1], YEnd = Y[i];
      }
      status = XD_Device_Interface(Unit, 9, Imp, XStart, YStart, Value, Mask);
      if (status != 1)
        break;
      x = XStart;
      if (XStart > XEnd)
        Offset = -1;
      d = 2 * dx - dy;
      incr1 = 2 * dx;
      incr2 = 2 * (dx - dy);
      for (y = YStart + 1; y <= YEnd; y++) {
        if (d < 0) {
          d = d + incr1;
        } else {
          x = x + Offset;
          d = d + incr2;
        }
        status = XD_Device_Interface(Unit, 9, Imp, x, y, Value, Mask);
        if (status != 1)
          break;
      }
    } else {
      if (XStart > XEnd) {
        XStart = X[i + 1], XEnd = X[i];
        YStart = Y[i + 1], YEnd = Y[i];
      }
      status = XD_Device_Interface(Unit, 9, Imp, XStart, YStart, Value, Mask);
      if (status != 1)
        break;
      y = YStart;
      if (YStart > YEnd)
        Offset = -1;
      d = 2 * dy - dx;
      incr1 = 2 * dy;
      incr2 = 2 * (dy - dx);
      for (x = XStart + 1; x <= XEnd; x++) {
        if (d < 0) {
          d = d + incr1;
        } else {
          y = y + Offset;
          d = d + incr2;
        }
        status = XD_Device_Interface(Unit, 9, Imp, x, y, Value, Mask);
        if (status != 1)
          break;
      }
    }
  }
  return (status);
}
```