/* WARNING: Type propagation algorithm not settling */

undefined4 FUN_00416224(int param_1,int param_2,int *param_3)

{
  undefined4 uVar1;
  int *piVar2;
  int iVar3;
  undefined4 *puVar4;
  int *piVar5;
  char *pcVar6;
  undefined4 local_38 [2];
  undefined4 *local_30;
  
  if (param_3 != (int *)0x0) {
    local_30 = local_38;
    do {
      iVar3 = param_3[2];
      piVar5 = ia_conflist0;
      switch(iVar3) {
      case 0x10:
        if (param_1 == 0) {
          *(uint *)(param_2 + 8) = *(uint *)(param_2 + 8) | 2;
        }
        else {
          iVar3 = 0x10;
          if (param_1 != 2) goto LAB_004164d8;
          *(uint *)(param_2 + 0xc) = *(uint *)(param_2 + 0xc) | 2;
        }
        break;
      case 0x11:
        if (param_1 != 0) {
          iVar3 = 0x11;
LAB_004164d8:
          pcVar6 = "invalid operation (%d) for option type (%d)";
LAB_004162d8:
          dprintf(3,"add_options",pcVar6,param_1,iVar3);
          return 0xffffffff;
        }
        iVar3 = FUN_00411d88(DAT_0043cd30,param_3[7]);
        if (iVar3 == 0) {
          iVar3 = param_3[3];
          pcVar6 = "%s:%d auth info (%s) is not defined";
          param_1 = configfilename;
          goto LAB_004162d8;
        }
        if (*(int *)(param_2 + 0x28) != 0) {
          iVar3 = param_3[3];
          pcVar6 = "%s:%d authinfo is doubly specified on %s";
          param_1 = configfilename;
          goto LAB_004162d8;
        }
        *(int *)(param_2 + 0x28) = iVar3;
        break;
      case 0x12:
      case 0x13:
      case 0x16:
      case 0x17:
      case 0x18:
      case 0x19:
      case 0x1a:
      case 0x1b:
      case 0x1c:
      case 0x1d:
      case 0x22:
      case 0x23:
      case 0x24:
      case 0x25:
        switch(iVar3) {
        case 0x12:
          local_38[0] = 0x17;
          break;
        case 0x13:
          local_38[0] = 0x18;
          break;
        default:
          break;
        case 0x16:
          local_38[0] = 0x1f;
          break;
        case 0x17:
          local_38[0] = 0x20;
          break;
        case 0x18:
          local_38[0] = 0x1b;
          break;
        case 0x19:
          local_38[0] = 0x1d;
          break;
        case 0x1a:
          local_38[0] = 0x1c;
          break;
        case 0x1b:
          local_38[0] = 0x1e;
          break;
        case 0x1c:
          local_38[0] = 0x22;
          break;
        case 0x1d:
          local_38[0] = 0x21;
          break;
        case 0x22:
          local_38[0] = 0x16;
          break;
        case 0x23:
          local_38[0] = 0x15;
          break;
        case 0x24:
          local_38[0] = 0x62;
          break;
        case 0x25:
          local_38[0] = 0x40;
        }
        if (param_1 != 1) goto LAB_00416454;
        iVar3 = dhcp6_find_listval(param_2 + 0x18,1,local_30,0);
        if (iVar3 == 0) {
          iVar3 = dhcp6_add_listval(param_2 + 0x18,1,local_30,0);
          if (iVar3 == 0) {
            dprintf(3,"add_options","failed to configure an option");
            return 0xffffffff;
          }
        }
        else {
          uVar1 = dhcp6optstr(local_38[0]);
          dprintf(6,"add_options","duplicated requested option: %s",uVar1);
        }
        break;
      case 0x14:
        if (param_1 != 0) {
          iVar3 = 0x14;
          goto LAB_00416454;
        }
        while( true ) {
          if (piVar5 == (int *)0x0) {
            iVar3 = param_3[3];
            pcVar6 = "%s:%d IA_PD (%lu) is not defined";
            param_1 = configfilename;
            goto LAB_004162d8;
          }
          if ((piVar5[2] == 0) && (param_3[4] == piVar5[3])) break;
          piVar5 = (int *)*piVar5;
        }
LAB_00416380:
        iVar3 = *piVar5;
        if (iVar3 == 0) {
          DAT_00438d24 = piVar5[1];
        }
        else {
          *(int *)(iVar3 + 4) = piVar5[1];
        }
        piVar2 = (int *)piVar5[1];
        piVar5[1] = *(int *)(param_2 + 0x24);
        puVar4 = *(undefined4 **)(param_2 + 0x24);
        *piVar2 = iVar3;
        *(int **)(param_2 + 0x24) = piVar5;
        *piVar5 = 0;
        *puVar4 = piVar5;
        break;
      case 0x15:
        if (param_1 == 0) {
          while( true ) {
            if (piVar5 == (int *)0x0) {
              iVar3 = param_3[3];
              pcVar6 = "%s:%d IA_NA (%lu) is not defined";
              param_1 = configfilename;
              goto LAB_004162d8;
            }
            if ((piVar5[2] == 1) && (param_3[4] == piVar5[3])) break;
            piVar5 = (int *)*piVar5;
          }
          goto LAB_00416380;
        }
        iVar3 = 0x15;
LAB_00416454:
        dprintf(3,"add_options","invalid operation (%d) for option type (%d)",param_1,iVar3);
        break;
      default:
        iVar3 = param_3[3];
        pcVar6 = "%s:%d unsupported option type: %d";
        param_1 = configfilename;
        goto LAB_004162d8;
      }
      param_3 = (int *)*param_3;
    } while (param_3 != (int *)0x0);
  }
  return 0;
}