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

```asm
<iface_midi_router_set_program>:
  endbr64
  push   %rbx
  mov    %edi,%ebx
  cmp    $0x15,%edi
  ja     L182
  mov    %edi,%esi
  mov    $0x1,%edi
  call   <config_store_set_val@plt>
  cmp    $0x14,%ebx
  ja     L16
  mov    %ebx,%ebx
  lea    D10(%rip),%rdx
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
L182:
  mov    %edi,%esi
  lea    D2(%rip),%rdi
  call   <log_error@plt>
L16:
  pop    %rbx
  ret
  mov    $0x0,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  mov    $0x0,%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
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  mov    $0x3,%edi
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x0,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  mov    $0x0,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  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
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x0,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  mov    $0x0,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  mov    $0x2,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x3,%edi
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x0,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
  mov    $0x0,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x2,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x3,%edi
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x0,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  mov    $0x0,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  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
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x0,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  mov    $0x0,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  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
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x0,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  mov    $0x0,%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
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x0,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0x1,%esi
  mov    $0x0,%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
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  mov    $0x0,%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
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  mov    $0x0,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x2,%edi
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
  mov    $0x0,%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
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
  mov    $0x0,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x2,%edi
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  mov    $0x0,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x1,%esi
  mov    $0x2,%edi
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  mov    $0x0,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x1,%esi
  mov    $0x2,%edi
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  mov    $0x0,%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
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
  mov    $0x0,%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
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x2,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  mov    $0x0,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x2,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  mov    $0x0,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x2,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
  mov    $0x0,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x3,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  mov    $0x0,%edi
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
  mov    $0x3,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
  mov    $0x0,%edi
  call   <cvproc_set_pair_mode@plt>
  jmp    L16
```

tool_calls: name: retrieve_data
arguments: data_tag: D2
type_guessed: string

tool: D2: 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;
  }
}
```