int FUN_0040d56c(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
                undefined4 *param_5)

{
  int iVar1;
  int iVar2;
  undefined4 *puVar3;
  undefined4 *puVar4;
  undefined4 uVar5;
  undefined4 *puVar6;
  char *pcVar7;
  undefined4 ***local_30;
  undefined4 ***local_2c;
  
  if ((code *)param_5[1] != (code *)0x0) {
    iVar1 = (*(code *)param_5[1])();
    goto LAB_0040d7fc;
  }
  local_30 = &local_30;
  pcVar7 = (char *)*param_5;
  local_2c = local_30;
  for (puVar3 = (undefined4 *)param_1[4]; puVar3 != param_1 + 4; puVar3 = (undefined4 *)*puVar3) {
    iVar2 = strcmp(pcVar7,(char *)puVar3[2]);
    if (iVar2 == 0) {
      iVar2 = sobj_new();
      if (iVar2 == 0) {
        client_printf(*param_1,"\n!! %s >>>>>>>>>>>>>>>>>>>>>>>>>\n","INTERNAL ERROR");
        client_printf(*param_1,"memory allocation failed !");
        goto LAB_0040d6b0;
      }
      puVar4 = (undefined4 *)param_5[2];
      puVar6 = (undefined4 *)puVar3[3];
      goto LAB_0040d75c;
    }
  }
  client_printf(*param_1,"\n!! %s >>>>>>>>>>>>>>>>>>>>>>>>>\n","INTERNAL ERROR");
  client_printf(*param_1,"can not find function - %s().",*param_5);
LAB_0040d6b0:
  client_printf(*param_1,"\n!! %s <<<<<<<<<<<<<<<<<<<<<<<<<\n","INTERNAL ERROR");
  iVar1 = -1;
  goto LAB_0040d7ec;
LAB_0040d75c:
  if (puVar6 == puVar3 + 3) goto code_r0x0040d774;
  if (puVar4 == param_5 + 2) {
LAB_0040d72c:
    pcVar7 = (char *)0x0;
  }
  else {
    iVar1 = FUN_0040d858(param_1,1,param_3,iVar2,puVar4 + 2);
    if (iVar1 < 0) goto LAB_0040d72c;
    pcVar7 = (char *)sobj_get_string(iVar2);
  }
  if (pcVar7 == (char *)0x0) {
    pcVar7 = "";
  }
  FUN_0040c744(param_1,&local_30,puVar6[3],pcVar7);
  if (puVar4 != param_5 + 2) {
    puVar4 = (undefined4 *)*puVar4;
  }
  puVar6 = (undefined4 *)*puVar6;
  goto LAB_0040d75c;
code_r0x0040d774:
  uVar5 = param_1[3];
  param_1[3] = 0;
  iVar1 = FUN_0040c9e4(param_1,1,&local_30,param_4,puVar3 + 5);
  if (param_1[3] != 0) {
    xmldb_del_anchor();
  }
  param_1[3] = uVar5;
  sobj_del(iVar2);
LAB_0040d7ec:
  while ((undefined4 ****)local_30 != &local_30) {
    FUN_0040995c(local_30);
  }
LAB_0040d7fc:
  if (iVar1 == 3) {
    iVar1 = 0;
  }
  else {
    sobj_free(param_4);
  }
  return iVar1;
}