user: What would the C source look like for the assembly code provided here:

```asm
<iface_midi_router_set_program>:
  endbr64
  push   %rbp
  mov    %edi,%ebp
  mov    %ebp,%esi
  cmp    $0x15,%ebp
  ja     L87
  mov    $0x1,%edi
  call   <config_store_set_val@plt>
  cmp    $0x14,%ebp
  ja     L73
  lea    D14(%rip),%rdx
  movslq (%rdx,%rbp,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
L87:
  lea    D18(%rip),%rdi
  pop    %rbp
  jmp    1090 <log_error@plt>
  nopl   (%rax)
  mov    $0x3,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nop
  mov    $0x2,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
L104:
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x1,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  cs nopw 0x0(%rax,%rax,1)
  mov    $0x2,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  jmp    L104
  nopl   0x0(%rax)
  mov    $0x2,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  mov    $0x1,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  xchg   %ax,%ax
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
L93:
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x1,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x10,%esi
  mov    $0x2,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nopl   (%rax)
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  jmp    L93
  nopl   0x0(%rax)
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
L11:
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x1,%esi
  mov    $0x2,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nopl   (%rax)
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  jmp    L11
  nopl   (%rax)
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
L80:
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x2,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nopl   (%rax)
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
L58:
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  mov    $0x2,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nopl   (%rax)
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  jmp    L80
  nopl   (%rax)
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  jmp    L58
  nopl   0x0(%rax)
  xor    %edi,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0x1,%esi
L6:
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x10,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x11,%esi
  mov    $0x2,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x12,%esi
  mov    $0x3,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nopl   0x0(%rax)
  xor    %edi,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  jmp    L6
  cs nopw 0x0(%rax,%rax,1)
  xor    %edi,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
L105:
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x1,%esi
  mov    $0x2,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x10,%esi
  mov    $0x3,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nopl   0x0(%rax)
  xor    %edi,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  jmp    L105
  nopw   0x0(%rax,%rax,1)
  xor    %edi,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
L107:
  mov    $0x2,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x3,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nopl   0x0(%rax)
  xor    %edi,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  jmp    L107
  nopl   0x0(%rax)
  xor    %edi,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
L63:
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  mov    $0x2,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  mov    $0x3,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nopl   0x0(%rax)
  xor    %edi,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  jmp    L63
  nopw   0x0(%rax,%rax,1)
  mov    $0x3,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
  xor    %edi,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
L73:
  pop    %rbp
  ret
```

tool_calls: name: read_data
arguments: label: D18
type_infered: string

tool: D18: imrsp - prog invalid: %d

assistant: ```c
void iface_midi_router_set_program(int prog) {
  if (prog < 0 || prog > 21) {
    log_error("imrsp - prog invalid: %d", prog);
    return;
  }
  config_store_set_val(1, prog);
  switch (prog) {
  case 0:
    cvproc_set_pairs(0);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -1);
    cvproc_set_pair_mode(2, -1);
    cvproc_set_pair_mode(3, -1);
    break;
  case 1:
    cvproc_set_pairs(0);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -2);
    cvproc_set_pair_mode(2, -1);
    cvproc_set_pair_mode(3, -1);
    break;
  case 2:
    cvproc_set_pairs(0);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -2);
    cvproc_set_pair_mode(2, -1);
    cvproc_set_pair_mode(3, -2);
    break;
  case 3:
    cvproc_set_pairs(0);
    cvproc_set_pair_mode(0, -2);
    cvproc_set_pair_mode(1, -2);
    cvproc_set_pair_mode(2, -2);
    cvproc_set_pair_mode(3, -2);
    break;
  case 4:
    cvproc_set_pairs(0);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -1);
    cvproc_set_pair_mode(2, 1);
    cvproc_set_pair_mode(3, 16);
    break;
  case 5:
    cvproc_set_pairs(0);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -2);
    cvproc_set_pair_mode(2, 1);
    cvproc_set_pair_mode(3, 16);
    break;
  case 6:
    cvproc_set_pairs(0);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, 16);
    cvproc_set_pair_mode(2, 17);
    cvproc_set_pair_mode(3, 18);
    break;
  case 7:
    cvproc_set_pairs(0);
    cvproc_set_pair_mode(0, 1);
    cvproc_set_pair_mode(1, 16);
    cvproc_set_pair_mode(2, 17);
    cvproc_set_pair_mode(3, 18);
    break;
  case 8:
    cvproc_set_pairs(1);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -1);
    cvproc_set_pair_mode(2, -1);
    break;
  case 9:
    cvproc_set_pairs(1);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -1);
    cvproc_set_pair_mode(2, -2);
    break;
  case 10:
    cvproc_set_pairs(1);
    cvproc_set_pair_mode(0, -2);
    cvproc_set_pair_mode(1, -1);
    cvproc_set_pair_mode(2, -1);
    break;
  case 11:
    cvproc_set_pairs(1);
    cvproc_set_pair_mode(0, -2);
    cvproc_set_pair_mode(1, -2);
    cvproc_set_pair_mode(2, -2);
    break;
  case 12:
    cvproc_set_pairs(1);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -1);
    cvproc_set_pair_mode(2, 1);
    break;
  case 13:
    cvproc_set_pairs(1);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -2);
    cvproc_set_pair_mode(2, 1);
    break;
  case 14:
    cvproc_set_pairs(1);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, 1);
    cvproc_set_pair_mode(2, 16);
    break;
  case 15:
    cvproc_set_pairs(1);
    cvproc_set_pair_mode(0, -2);
    cvproc_set_pair_mode(1, 1);
    cvproc_set_pair_mode(2, 16);
    break;
  case 16:
    cvproc_set_pairs(2);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -1);
    break;
  case 17:
    cvproc_set_pairs(2);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -2);
    break;
  case 18:
    cvproc_set_pairs(2);
    cvproc_set_pair_mode(0, -2);
    cvproc_set_pair_mode(1, -2);
    break;
  case 19:
    cvproc_set_pairs(3);
    cvproc_set_pair_mode(0, -1);
    break;
  case 20:
    cvproc_set_pairs(3);
    cvproc_set_pair_mode(0, -2);
    break;
  }
}
```