void APUpdateCapabilityAndErpIe(int param_1)

{
  bool bVar1;
  bool bVar2;
  char cVar3;
  uint uVar4;
  int *piVar5;
  int iVar6;
  uint uVar7;
  char cVar8;
  
  cVar8 = *(char *)(param_1 + 0x16a7c)   //possible issue identified - semgrep
  if (*(char *)(param_1 + 0x16982) == '\x01') {
    return;
  }
  piVar5 = (int *)(param_1 + 0x5d958);
  cVar3 = '\x01';
  bVar1 = false;
  do {
    cVar3 = cVar3 + '\x01';
    if ((*piVar5 == 1) && (piVar5[0x9d] == 2)) {
      if (*(byte *)(piVar5 + 0xd3) < 4) {
        bVar1 = true;
        cVar8 = '\0';
      }
      if ((*(ushort *)(piVar5 + 0xa0) & 0x400) == 0) {
        cVar8 = '\0';
      }
    }
    piVar5 = piVar5 + 0x288;
  } while (cVar3 != ' ');
  if (*(int *)(param_1 + 0x16a78) == 0) {
    uVar4 = 3;
    bVar2 = true;
    if (!bVar1) {
      uVar4 = 0;
      bVar2 = bVar1;
    }
    bVar1 = bVar2;
    if (*(uint *)(param_1 + 0x16fbc) < *(int *)(param_1 + 0x16634) + 0x4e2U) {
      uVar4 = uVar4 | 2;
    }
    uVar4 = (uVar4 << 0x1e) >> 0x1f;
  }
  else {
    uVar4 = 0;
    if (*(int *)(param_1 + 0x16a78) == 1) {
      uVar4 = 1;
    }
  }
  uVar7 = *(uint *)(param_1 + 0x16abc);
  if (uVar4 != (uVar7 << 0x1d) >> 0x1f) {
    if (uVar4 == 0) {
      *(uint *)(param_1 + 0x16abc) = uVar7 & 0xfffffffb;
    }
    else {
      *(uint *)(param_1 + 0x16abc) = uVar7 | 4;
    }
    AsicUpdateProtect(param_1,(uint)(*(int *)(param_1 + 0x16b18) << 0xe) >> 0x1e,2,uVar4 == 0,
                      *(undefined1 *)(param_1 + 0x71351));
  }
  if (*(int *)(param_1 + 0x16a70) == 0) {
LAB_00069298:
    *(byte *)(param_1 + 0x16633) = bVar1 | 4;
  }
  else {
    piVar5 = (int *)(param_1 + 0x5cf38);
    cVar3 = '\0';
    do {
      cVar3 = cVar3 + '\x01';
      if (((*piVar5 == 1) && (piVar5[0x9d] == 2)) && ((*(ushort *)(piVar5 + 0xa0) & 0x20) == 0))
      goto LAB_00069298;
      piVar5 = piVar5 + 0x288;
    } while (cVar3 != ' ');
    *(bool *)(param_1 + 0x16633) = bVar1;
  }
  for (uVar4 = 0; iVar6 = uVar4 * 0x1140 + param_1, uVar4 < *(byte *)(param_1 + 0x51aa);
      uVar4 = uVar4 + 1 & 0xff) {
    if (cVar8 == '\0') {
      *(ushort *)(iVar6 + 0x51d4) = *(ushort *)(iVar6 + 0x51d4) & 0xfbff;
    }
    else {
      *(ushort *)(iVar6 + 0x51d4) = *(ushort *)(iVar6 + 0x51d4) | 0x400;
    }
    iVar6 = uVar4 * 0x1140 + param_1;
    if (*(int *)(param_1 + 0x16a70) == 0) {
      *(ushort *)(iVar6 + 0x51d4) = *(ushort *)(iVar6 + 0x51d4) & 0xffdf;
    }
    else {
      *(ushort *)(iVar6 + 0x51d4) = *(ushort *)(iVar6 + 0x51d4) | 0x20;
    }
  }
  AsicSetSlotTime(param_1,cVar8);
  return;
}