undefined4 FUN_00402790(int param_1,uint param_2,uint param_3,int param_4)

{
  int iVar1;
  uint uVar2;
  uint *puVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  
  iVar1 = 1 << (param_3 & 0x1f);
  uVar5 = param_2;
  if ((int)param_2 < 0) {
    uVar5 = param_2 + 0x1f;
  }
  iVar6 = (int)uVar5 >> 5;
  uVar5 = iVar1 + 0x1fU >> 5;
  if (0x20 < iVar1) {
    iVar1 = 0;
  }
  uVar4 = (1 << (iVar1 - 1U & 0x1f)) * 2 + -1 << (param_2 & 0x1f);
  if (param_4 == 1) {
    iVar1 = 0;
    if (uVar5 != 0) {
      puVar3 = (uint *)(param_1 + iVar6 * 4);
      do {
        iVar1 = iVar1 + 1;
        *puVar3 = *puVar3 | uVar4;
        puVar3 = puVar3 + 1;
      } while (iVar1 < (int)uVar5);
      return 0;
    }
  }
  else if (param_4 == 2) {
    if (uVar5 != 0) {
      puVar3 = (uint *)(param_1 + iVar6 * 4);
      iVar1 = 0;
      do {
        iVar1 = iVar1 + 1;
        *puVar3 = *puVar3 & ~uVar4;
        puVar3 = puVar3 + 1;
      } while (iVar1 < (int)uVar5);
    }
  }
  else if (param_4 == 0) {
    if (uVar5 == 0) {
      return 1;
    }
    if ((uVar4 & *(uint *)(param_1 + iVar6 * 4)) == 0) {
      puVar3 = (uint *)(param_1 + (iVar6 + 1) * 4);
      iVar1 = 0;
      do {
        iVar1 = iVar1 + 1;
        if ((int)uVar5 <= iVar1) {
          return 1;
        }
        uVar2 = *puVar3;
        puVar3 = puVar3 + 1;
      } while ((uVar4 & uVar2) == 0);
    }
  }
  return 0;
}