// File: mh0fm4[P]SCDC/src/lib/scdc/scdc.cc
// Function: scdc_main_config_hook_config(void*, char const*, char const*, char const*, long long, _scdc_result_t*)
static scdcint_t scdc_main_config_hook_config(void *dataprov, const char *cmd, const char *param, const char *val, scdcint_t val_size, scdc_result_t *result)
{
  SCDC_TRACE(__func__ << ": cmd: '" << cmd << "', param: '" << param << "', val: " << string(val, val_size));

  string c(cmd), p(param);

  bool done = false;
  bool ret = true;

  scdc_config_result res;

  if (p == "")
  {
    if (c == "info")
    {
      done = true;

      ret = scdc_dataprov_config::info(res, "libscdc configuration");

    } else if (c == "ls")
    {
      done = true;

      ret = scdc_dataprov_config::ls(res, "dataprovs")
         && scdc_dataprov_config::ls(res, "nodeports")
         && scdc_dataprov_config::ls(res, "nodeconns")
#if NODECONN_CACHE_CONNECTIONS
         && scdc_dataprov_config::ls(res, "nodeconn_cache_connections")
#endif
         && true;

    } else done = false;

  } else
  {
    if (done);
    if (c == "info")
    {
      done = true;

      if (p == "dataprovs") ret = scdc_dataprov_config::info(res, param, "data providers");
      else if (p == "nodeports") ret = scdc_dataprov_config::info(res, param, "node ports");
      else if (p == "nodeports") ret = scdc_dataprov_config::info(res, param, "node connections");
#if NODECONN_CACHE_CONNECTIONS
      else if (p == "nodeconn_cache_connections") ret = scdc_dataprov_config::info(res, param, "number of node connections to cache (integer)");
#endif
      else done = false;

/*    } else if (c == "ls")
    {*/
    } else if (c == "put")
    {
      done = true;

/*      if (p == "dataprovs")  ret = scdc_dataprov_config::put<>(res, param);
      else if (p == "nodeports")  ret = scdc_dataprov_config::put<>(res, param);
      else if (p == "nodeconns")  ret = scdc_dataprov_config::put<>(res, param);*/
      if (p == "");
#if NODECONN_CACHE_CONNECTIONS
      else if (p == "nodeconn_cache_connections") ret = scdc_dataprov_config::put<scdcint_t>(res, param, val, data->nodeconns.cache_connections);
#endif
      else done = false;

    } else if (c == "get")
    {
      done = true;

      if (p == "dataprovs")  ret = scdc_dataprov_config::get<size_t>(res, param, scdc_main_context.data->dataprovs.size());
      else if (p == "nodeports")  ret = scdc_dataprov_config::get<size_t>(res, param, scdc_main_context.data->nodeports.size());
      else if (p == "nodeconns")  ret = scdc_dataprov_config::get<size_t>(res, param, scdc_main_context.data->nodeconns.size());
#if NODECONN_CACHE_CONNECTIONS
      else if (p == "nodeconn_cache_connections") ss << scdc_main_context.data->nodeconns.cache_connections;
#endif
      else done = false;
    }
  }

  if (!done || (done && !ret))
  {
    SCDC_FAIL(__func__ << ": command '" << cmd << "' failed");
    return SCDC_FAILURE;
  }

  if (result) SCDC_RESULT_SET_STR(result, res.c_str());

  return ret;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x230, %rsp            # imm = 0x230
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
jmp 0x23ea5
movq -0x18(%rbp), %rax
movq %rax, -0x160(%rbp)
leaq -0x59(%rbp), %rdi
movq %rdi, -0x158(%rbp)
callq 0xcbc0
movq -0x160(%rbp), %rsi
movq -0x158(%rbp), %rdx
leaq -0x58(%rbp), %rdi
callq 0x27820
jmp 0x23ed9
leaq -0x59(%rbp), %rdi
callq 0xc730
movq -0x20(%rbp), %rax
movq %rax, -0x170(%rbp)
leaq -0x91(%rbp), %rdi
movq %rdi, -0x168(%rbp)
callq 0xcbc0
movq -0x170(%rbp), %rsi
movq -0x168(%rbp), %rdx
leaq -0x90(%rbp), %rdi
callq 0x27820
jmp 0x23f1c
leaq -0x91(%rbp), %rdi
callq 0xc730
movb $0x0, -0x92(%rbp)
movb $0x1, -0x93(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x278d0
jmp 0x23f44
leaq -0x90(%rbp), %rdi
leaq 0x82652(%rip), %rsi     # 0xa65a4
callq 0x25b80
testb $0x1, %al
jne 0x23f60
jmp 0x240df
leaq -0x58(%rbp), %rdi
leaq 0x82908(%rip), %rsi     # 0xa6873
callq 0x25b80
testb $0x1, %al
jne 0x23f79
jmp 0x24007
movb $0x1, -0x92(%rbp)
leaq 0x822f2(%rip), %rsi     # 0xa6279
leaq -0xb8(%rbp), %rdi
callq 0x278f0
movb %al, -0x171(%rbp)
jmp 0x23f9b
movb -0x171(%rbp), %al
andb $0x1, %al
movb %al, -0x93(%rbp)
jmp 0x240da
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x59(%rbp), %rdi
callq 0xc730
jmp 0x2475d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x91(%rbp), %rdi
callq 0xc730
jmp 0x24754
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x24748
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2473c
leaq -0x58(%rbp), %rdi
leaq 0x82b1e(%rip), %rsi     # 0xa6b30
callq 0x25b80
testb $0x1, %al
jne 0x24020
jmp 0x240d1
movb $0x1, -0x92(%rbp)
leaq 0x863ce(%rip), %rsi     # 0xaa3fc
leaq -0xb8(%rbp), %rdi
callq 0x27920
movb %al, -0x172(%rbp)
jmp 0x24042
movb -0x172(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x173(%rbp)
jne 0x24057
jmp 0x240c1
leaq 0x82231(%rip), %rsi     # 0xa628f
leaq -0xb8(%rbp), %rdi
callq 0x27920
movb %al, -0x174(%rbp)
jmp 0x24072
movb -0x174(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x173(%rbp)
jne 0x24087
jmp 0x240c1
leaq 0x8220b(%rip), %rsi     # 0xa6299
leaq -0xb8(%rbp), %rdi
callq 0x27920
movb %al, -0x175(%rbp)
jmp 0x240a2
movb -0x175(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x173(%rbp)
jne 0x240b7
jmp 0x240c1
movb $0x1, %al
movb %al, -0x173(%rbp)
jmp 0x240c1
movb -0x173(%rbp), %al
andb $0x1, %al
movb %al, -0x93(%rbp)
jmp 0x240d8
movb $0x0, -0x92(%rbp)
jmp 0x240da
jmp 0x24569
testb $0x1, -0x92(%rbp)
je 0x240ea
jmp 0x240ea
leaq -0x58(%rbp), %rdi
leaq 0x8277e(%rip), %rsi     # 0xa6873
callq 0x25b80
testb $0x1, %al
jne 0x24103
jmp 0x243a5
movb $0x1, -0x92(%rbp)
leaq -0x90(%rbp), %rdi
leaq 0x862e4(%rip), %rsi     # 0xaa3fc
callq 0x25b80
testb $0x1, %al
jne 0x24126
jmp 0x241e4
movq -0x20(%rbp), %rax
movq %rax, -0x188(%rbp)
leaq -0xd9(%rbp), %rdi
movq %rdi, -0x180(%rbp)
callq 0xcbc0
movq -0x188(%rbp), %rsi
movq -0x180(%rbp), %rdx
leaq -0xd8(%rbp), %rdi
callq 0x27820
jmp 0x24160
leaq 0x8213c(%rip), %rdx     # 0xa62a3
leaq -0xb8(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x27950
movb %al, -0x189(%rbp)
jmp 0x24182
movb -0x189(%rbp), %al
andb $0x1, %al
movb %al, -0x93(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0xc3e0
leaq -0xd9(%rbp), %rdi
callq 0xc730
jmp 0x243a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x241d3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0xc3e0
leaq -0xd9(%rbp), %rdi
callq 0xc730
jmp 0x2473c
leaq -0x90(%rbp), %rdi
leaq 0x8209d(%rip), %rsi     # 0xa628f
callq 0x25b80
testb $0x1, %al
jne 0x24200
jmp 0x242be
movq -0x20(%rbp), %rax
movq %rax, -0x1a0(%rbp)
leaq -0x101(%rbp), %rdi
movq %rdi, -0x198(%rbp)
callq 0xcbc0
movq -0x1a0(%rbp), %rsi
movq -0x198(%rbp), %rdx
leaq -0x100(%rbp), %rdi
callq 0x27820
jmp 0x2423a
leaq 0x82071(%rip), %rdx     # 0xa62b2
leaq -0xb8(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x27950
movb %al, -0x1a1(%rbp)
jmp 0x2425c
movb -0x1a1(%rbp), %al
andb $0x1, %al
movb %al, -0x93(%rbp)
leaq -0x100(%rbp), %rdi
callq 0xc3e0
leaq -0x101(%rbp), %rdi
callq 0xc730
jmp 0x2439e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x242ad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x100(%rbp), %rdi
callq 0xc3e0
leaq -0x101(%rbp), %rdi
callq 0xc730
jmp 0x2473c
leaq -0x90(%rbp), %rdi
leaq 0x81fc3(%rip), %rsi     # 0xa628f
callq 0x25b80
testb $0x1, %al
jne 0x242da
jmp 0x24395
movq -0x20(%rbp), %rax
movq %rax, -0x1b8(%rbp)
leaq -0x129(%rbp), %rdi
movq %rdi, -0x1b0(%rbp)
callq 0xcbc0
movq -0x1b8(%rbp), %rsi
movq -0x1b0(%rbp), %rdx
leaq -0x128(%rbp), %rdi
callq 0x27820
jmp 0x24314
leaq 0x81fa2(%rip), %rdx     # 0xa62bd
leaq -0xb8(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x27950
movb %al, -0x1b9(%rbp)
jmp 0x24336
movb -0x1b9(%rbp), %al
andb $0x1, %al
movb %al, -0x93(%rbp)
leaq -0x128(%rbp), %rdi
callq 0xc3e0
leaq -0x129(%rbp), %rdi
callq 0xc730
jmp 0x2439c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x24384
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x128(%rbp), %rdi
callq 0xc3e0
leaq -0x129(%rbp), %rdi
callq 0xc730
jmp 0x2473c
movb $0x0, -0x92(%rbp)
jmp 0x2439e
jmp 0x243a0
jmp 0x24567
leaq -0x58(%rbp), %rdi
leaq 0x827a3(%rip), %rsi     # 0xa6b53
callq 0x25b80
testb $0x1, %al
jne 0x243bb
jmp 0x243e9
movb $0x1, -0x92(%rbp)
leaq -0x90(%rbp), %rdi
leaq 0x821d4(%rip), %rsi     # 0xa65a4
callq 0x25b80
testb $0x1, %al
jne 0x243db
jmp 0x243dd
jmp 0x243e4
movb $0x0, -0x92(%rbp)
jmp 0x24565
leaq -0x58(%rbp), %rdi
leaq 0x827d7(%rip), %rsi     # 0xa6bcb
callq 0x25b80
testb $0x1, %al
jne 0x24402
jmp 0x24563
movb $0x1, -0x92(%rbp)
leaq -0x90(%rbp), %rdi
leaq 0x85fe5(%rip), %rsi     # 0xaa3fc
callq 0x25b80
testb $0x1, %al
jne 0x24422
jmp 0x24479
movq -0x20(%rbp), %rax
movq %rax, -0x1c8(%rbp)
movq 0xb02ec(%rip), %rdi     # 0xd4720
addq $0x38, %rdi
callq 0x27a80
movq -0x1c8(%rbp), %rsi
movq %rax, -0x138(%rbp)
leaq -0xb8(%rbp), %rdi
leaq -0x138(%rbp), %rdx
callq 0x27980
movb %al, -0x1ba(%rbp)
jmp 0x24466
movb -0x1ba(%rbp), %al
andb $0x1, %al
movb %al, -0x93(%rbp)
jmp 0x24561
leaq -0x90(%rbp), %rdi
leaq 0x81e08(%rip), %rsi     # 0xa628f
callq 0x25b80
testb $0x1, %al
jne 0x24492
jmp 0x244e6
movq -0x20(%rbp), %rax
movq %rax, -0x1d8(%rbp)
movq 0xb027c(%rip), %rdi     # 0xd4720
addq $0x68, %rdi
callq 0x27aa0
movq -0x1d8(%rbp), %rsi
movq %rax, -0x140(%rbp)
leaq -0xb8(%rbp), %rdi
leaq -0x140(%rbp), %rdx
callq 0x27980
movb %al, -0x1c9(%rbp)
jmp 0x244d6
movb -0x1c9(%rbp), %al
andb $0x1, %al
movb %al, -0x93(%rbp)
jmp 0x2455f
leaq -0x90(%rbp), %rdi
leaq 0x81da5(%rip), %rsi     # 0xa6299
callq 0x25b80
testb $0x1, %al
jne 0x244ff
jmp 0x24556
movq -0x20(%rbp), %rax
movq %rax, -0x1e8(%rbp)
movq 0xb020f(%rip), %rdi     # 0xd4720
addq $0x98, %rdi
callq 0x27ac0
movq -0x1e8(%rbp), %rsi
movq %rax, -0x148(%rbp)
leaq -0xb8(%rbp), %rdi
leaq -0x148(%rbp), %rdx
callq 0x27980
movb %al, -0x1d9(%rbp)
jmp 0x24546
movb -0x1d9(%rbp), %al
andb $0x1, %al
movb %al, -0x93(%rbp)
jmp 0x2455d
movb $0x0, -0x92(%rbp)
jmp 0x2455f
jmp 0x24561
jmp 0x24563
jmp 0x24565
jmp 0x24567
jmp 0x24569
testb $0x1, -0x92(%rbp)
je 0x2458c
testb $0x1, -0x92(%rbp)
je 0x246b9
testb $0x1, -0x93(%rbp)
jne 0x246b9
jmp 0x2458e
movq 0xb0113(%rip), %rdi     # 0xd46a8
callq 0x257e0
movq %rax, -0x1f0(%rbp)
jmp 0x245a3
movq -0x1f0(%rbp), %rax
cmpq $0x0, %rax
je 0x246a1
movq 0xb00ed(%rip), %rdi     # 0xd46a8
callq 0x25800
jmp 0x245c2
movq 0xb00df(%rip), %rdi     # 0xd46a8
callq 0x257e0
movq %rax, -0x1f8(%rbp)
jmp 0x245d7
movq -0x1f8(%rbp), %rdi
leaq 0x81bcb(%rip), %rsi     # 0xa61b0
callq 0xc670
movq %rax, -0x200(%rbp)
jmp 0x245f3
movq -0x200(%rbp), %rdi
leaq 0x81bbb(%rip), %rsi     # 0xa61bc
callq 0xc670
movq %rax, -0x208(%rbp)
jmp 0x2460f
movq -0x208(%rbp), %rdi
leaq 0x81cb1(%rip), %rsi     # 0xa62ce
callq 0xc670
movq %rax, -0x210(%rbp)
jmp 0x2462b
movq -0x210(%rbp), %rdi
leaq 0x845ee(%rip), %rsi     # 0xa8c27
callq 0xc670
movq %rax, -0x218(%rbp)
jmp 0x24647
movq -0x218(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0xc670
movq %rax, -0x220(%rbp)
jmp 0x24660
movq -0x220(%rbp), %rdi
leaq 0x8389e(%rip), %rsi     # 0xa7f0c
callq 0xc670
movq %rax, -0x228(%rbp)
jmp 0x2467c
movq -0x228(%rbp), %rdi
movq 0xaf936(%rip), %rsi     # 0xd3fc0
callq 0xc6d0
jmp 0x24691
movq 0xb0010(%rip), %rdi     # 0xd46a8
callq 0x25820
jmp 0x2469f
jmp 0x246a1
jmp 0x246a3
jmp 0x246a5
movq $0x0, -0x8(%rbp)
movl $0x1, -0x14c(%rbp)
jmp 0x2470e
cmpq $0x0, -0x38(%rbp)
je 0x246f5
movq -0x38(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x230(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0xc260
movq -0x230(%rbp), %rdi
movq %rax, %rsi
movq -0x38(%rbp), %rax
movq (%rax), %rdx
subq $0x1, %rdx
callq 0xc320
movb -0x93(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movq %rax, -0x8(%rbp)
movl $0x1, -0x14c(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x27ae0
leaq -0x90(%rbp), %rdi
callq 0xc3e0
leaq -0x58(%rbp), %rdi
callq 0xc3e0
movq -0x8(%rbp), %rax
addq $0x230, %rsp            # imm = 0x230
popq %rbp
retq
leaq -0xb8(%rbp), %rdi
callq 0x27ae0
leaq -0x90(%rbp), %rdi
callq 0xc3e0
leaq -0x58(%rbp), %rdi
callq 0xc3e0
movq -0x68(%rbp), %rdi
callq 0xcba0
nopw %cs:(%rax,%rax)