########## TARGET 180017200 ##########
callers (1):
  18000c950 FUN_18000c950

### CALLER FUNC 18000c950 (221 bytes) name=FUN_18000c950

void FUN_18000c950(longlong param_1,ushort *param_2)

{
  undefined8 uVar1;
  ushort *puVar2;
  
  if (*(int *)(param_1 + 0x41fdc) == 1) {
    FUN_1800011a0(param_1 + 0x41f10,param_2);
    if (*(int *)(param_1 + 0x41f3c) == 0) {
      puVar2 = (ushort *)0x0;
    }
    else {
      puVar2 = *(ushort **)(param_1 + 0x41f20);
    }
    *(ushort **)(param_1 + 0x44c58) = puVar2;
    if ((*(int *)(param_1 + 0x41340) != 0) && (*(int *)(param_1 + 0x41348) != 0)) {
      FUN_180017200(param_1,puVar2);
      FUN_180017330(param_1,*(longlong *)(param_1 + 0x270));
      goto LAB_18000ca18;
    }
  }
  else {
    uVar1 = FUN_1800011a0(param_1 + 0x41f10,param_2);
    *(int *)(param_1 + 0x41ffc) = (int)uVar1;
    if ((int)uVar1 == 0) {
      return;
    }
    puVar2 = (ushort *)0x0;
    *(undefined4 *)(param_1 + 0x41ffc) = 0;
    if (*(int *)(param_1 + 0x41f3c) != 0) {
      puVar2 = *(ushort **)(param_1 + 0x41f20);
    }
    if ((*(int *)(param_1 + 0x41340) != 0) && (*(int *)(param_1 + 0x41348) != 0)) {
      FUN_180017200(param_1,puVar2);
      FUN_180017330(param_1,*(longlong *)(param_1 + 0x270));
      goto LAB_18000ca18;
    }
  }
  FUN_180017040(param_1,puVar2);
LAB_18000ca18:
  *(undefined4 *)(param_1 + 0x42004) = 1;
  return;
}


==================================================================

########## TARGET 180017330 ##########
callers (1):
  18000c950 FUN_18000c950

### CALLER FUNC 18000c950 (221 bytes) name=FUN_18000c950

void FUN_18000c950(longlong param_1,ushort *param_2)

{
  undefined8 uVar1;
  ushort *puVar2;
  
  if (*(int *)(param_1 + 0x41fdc) == 1) {
    FUN_1800011a0(param_1 + 0x41f10,param_2);
    if (*(int *)(param_1 + 0x41f3c) == 0) {
      puVar2 = (ushort *)0x0;
    }
    else {
      puVar2 = *(ushort **)(param_1 + 0x41f20);
    }
    *(ushort **)(param_1 + 0x44c58) = puVar2;
    if ((*(int *)(param_1 + 0x41340) != 0) && (*(int *)(param_1 + 0x41348) != 0)) {
      FUN_180017200(param_1,puVar2);
      FUN_180017330(param_1,*(longlong *)(param_1 + 0x270));
      goto LAB_18000ca18;
    }
  }
  else {
    uVar1 = FUN_1800011a0(param_1 + 0x41f10,param_2);
    *(int *)(param_1 + 0x41ffc) = (int)uVar1;
    if ((int)uVar1 == 0) {
      return;
    }
    puVar2 = (ushort *)0x0;
    *(undefined4 *)(param_1 + 0x41ffc) = 0;
    if (*(int *)(param_1 + 0x41f3c) != 0) {
      puVar2 = *(ushort **)(param_1 + 0x41f20);
    }
    if ((*(int *)(param_1 + 0x41340) != 0) && (*(int *)(param_1 + 0x41348) != 0)) {
      FUN_180017200(param_1,puVar2);
      FUN_180017330(param_1,*(longlong *)(param_1 + 0x270));
      goto LAB_18000ca18;
    }
  }
  FUN_180017040(param_1,puVar2);
LAB_18000ca18:
  *(undefined4 *)(param_1 + 0x42004) = 1;
  return;
}


==================================================================

########## TARGET 18000c760 ##########
callers (1):
  180009ee0 FUN_180009ee0

### CALLER FUNC 180009ee0 (1300 bytes) name=FUN_180009ee0

void FUN_180009ee0(uint param_1,longlong param_2)

{
  char cVar1;
  longlong lVar2;
  bool bVar3;
  uint uVar4;
  DWORD DVar5;
  int iVar6;
  __time64_t _Var7;
  ulonglong uVar8;
  byte *pbVar9;
  undefined7 extraout_var;
  uint uVar10;
  ulonglong uVar11;
  longlong lVar12;
  uint uVar13;
  int iVar14;
  undefined8 in_XMM1_Qa;
  uint local_res10 [2];
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  __time64_t local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  
  uVar11 = (ulonglong)param_1;
  lVar12 = uVar11 * 0x4a8;
  if (*(int *)(&DAT_180073778 + lVar12) == 0) {
    return;
  }
  if ((*(uint *)(param_2 + 0xc) & 3) != 0) {
    if (*(int *)(param_2 + 0x14) != (&DAT_1800737b8)[uVar11 * 0x12a]) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737bc + lVar12)) {
      return;
    }
  }
  if ((*(uint *)(param_2 + 0xc) & 4) != 0) {
    if (*(int *)(param_2 + 0x14) != *(int *)(&DAT_1800737f8 + lVar12)) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737fc + lVar12)) {
      return;
    }
  }
  _Var7 = _time64((__time64_t *)0x0);
  *(int *)(&DAT_180073bf0 + lVar12) = *(int *)(&DAT_180073bf0 + lVar12) + 1;
  lVar2 = (&DAT_180073758)[uVar11 * 0x95];
  *(__time64_t *)(&DAT_180073810 + lVar12) = _Var7;
  *(undefined8 *)(&DAT_180073818 + lVar12) = 0;
  *(undefined8 *)(&DAT_180073820 + lVar12) = 0;
  *(undefined4 *)(&DAT_180073828 + lVar12) = 0;
  cVar1 = *(char *)(lVar2 + 0x2d47);
  if ((cVar1 == '\x01') || (cVar1 == '\x02')) {
    if (*(uint *)(&DAT_180073bf0 + lVar12) < 0x14) {
      return;
    }
  }
  else if ((cVar1 == '\x04') && (*(uint *)(&DAT_180073bf0 + lVar12) < 8)) {
    return;
  }
  *(int *)(param_2 + 0x28) = *(int *)(param_2 + 0x28) + (int)*(short *)(lVar2 + 0x2d86);
  *(int *)(param_2 + 0x2c) = *(int *)(param_2 + 0x2c) + (int)*(short *)(lVar2 + 0x2d86);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x60) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x5c) = *(undefined4 *)(param_2 + 0x2c);
  iVar6 = *(int *)(&DAT_180073bec + lVar12);
  *(undefined4 *)(&DAT_180073800 + lVar12) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)(&DAT_180073804 + lVar12) = *(undefined4 *)(param_2 + 0x2c);
  if (iVar6 < 0) {
    FUN_180002f50(param_1);
    return;
  }
  uVar10 = iVar6 + 1;
  *(uint *)(&DAT_180073bec + lVar12) = uVar10;
  uVar13 = *(uint *)(lVar2 + 0x2d88);
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,
                  *(int *)(lVar2 + 0x2d8c) + uVar13 + *(int *)(lVar2 + 0x2d78));
    return;
  }
  uVar4 = *(int *)(lVar2 + 0x2d78) + uVar13;
  if (uVar10 <= uVar4) {
    if (uVar10 == uVar4) {
      if (*(int *)((&DAT_180073758)[uVar11 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
      }
      else {
        local_res10[0] = 0x6bb6b672;
        local_res10[1] = 1;
        FUN_18001c670((&DAT_180073758)[uVar11 * 0x95],local_res10,8);
      }
    }
    FUN_18000c620((&DAT_180073750)[uVar11 * 0x95],(ushort *)(param_2 + 0x4c),
                  (uint)(*(int *)(&DAT_180073bec + lVar12) == *(int *)(lVar2 + 0x2d88) + 1));
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],*(int *)(&DAT_180073bec + lVar12) + -1,
                  *(int *)(lVar2 + 0x2d8c) + *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d88));
    return;
  }
  uVar13 = *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d8c) + uVar13;
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,uVar13);
    return;
  }
  iVar14 = 0;
  switch(cVar1) {
  case '\0':
  case '\x03':
  case '\x05':
  case '\x06':
    if ((*(int *)(&DAT_180073bf4 + lVar12) == 0) && (iVar14 = 0, uVar10 == 0x4b)) {
      *(undefined4 *)(&DAT_180073bf4 + lVar12) = 1;
      iVar14 = iVar6 + -0x49;
    }
    iVar6 = 0x1e;
    break;
  case '\x01':
  case '\x02':
  case '\x04':
    if ((*(uint *)(&DAT_180073bf4 + lVar12) < 5) && (iVar14 = 0, uVar10 == 0x82 - uVar13)) {
      iVar14 = 1;
      *(uint *)(&DAT_180073bf4 + lVar12) = *(uint *)(&DAT_180073bf4 + lVar12) + 1;
    }
    iVar6 = 100;
    break;
  default:
    iVar6 = 100;
    goto LAB_18000a1d2;
  }
  if (iVar14 == 0) {
LAB_18000a1d2:
    if ((uVar10 < uVar13 + *(int *)(lVar2 + 0x2d90)) &&
       ((uVar10 < iVar6 + uVar13 ||
        (uVar13 = *(int *)((&DAT_180073750)[uVar11 * 0x95] + 0x54) - *(int *)(param_2 + 0x2c),
        uVar10 = (int)uVar13 >> 0x1f, (uVar13 ^ uVar10) - uVar10 <= *(uint *)(lVar2 + 0x2d94)))))
    goto LAB_18000a20a;
  }
  FUN_180002f50(param_1);
LAB_18000a20a:
  uVar8 = FUN_18000ca30((&DAT_180073750)[uVar11 * 0x95],in_XMM1_Qa,0,1,0);
  if ((uVar8 & 1) != 0) {
    if ((*(int *)((&DAT_180073768)[uVar11 * 0x95] + 0x44) != 0) &&
       (*(int *)(&DAT_180073ba4 + lVar12) = *(int *)(&DAT_180073ba4 + lVar12) + 1,
       *(int *)(&DAT_180073ba8 + lVar12) <= *(int *)(&DAT_180073ba4 + lVar12))) {
      *(undefined4 *)(&DAT_180073ba4 + lVar12) = 0;
      local_50 = 0;
      local_48 = 0;
      local_40 = 0;
      local_38 = 0;
      local_30 = 0;
      local_68 = 0x1010000000040;
      local_60 = *(undefined8 *)(&DAT_180073800 + lVar12);
      local_58 = *(undefined8 *)(&DAT_180073808 + lVar12);
      local_50 = _time64((__time64_t *)0x0);
      DVar5 = GetTickCount();
      local_48 = CONCAT44(*(undefined4 *)(param_2 + 0x38),DVar5);
      FUN_18001b1b0((&DAT_180073768)[uVar11 * 0x95],(longlong)&local_68,0x40,
                    *(longlong *)((&DAT_180073750)[uVar11 * 0x95] + 0x270),
                    *(int *)(param_2 + 0x18) * *(int *)(param_2 + 0x14) * 2);
    }
    if (*(int *)((&DAT_180073760)[uVar11 * 0x95] + 0x44) != 0) {
      pbVar9 = (byte *)FUN_1800110a0((&DAT_180073750)[uVar11 * 0x95]);
      lVar2 = (&DAT_180073750)[uVar11 * 0x95];
      if (((pbVar9 != (byte *)0x0) && (lVar2 + 0x6c8 != 0)) &&
         (iVar6 = (uint)*(ushort *)(lVar2 + 0x6d6) * *(int *)(lVar2 + 0x6d0) *
                  *(int *)(lVar2 + 0x6cc), iVar6 = iVar6 + (iVar6 >> 0x1f & 7U),
         uVar13 = iVar6 >> 0x1f,
         bVar3 = FUN_180001cd0((&DAT_180073760)[uVar11 * 0x95],pbVar9,(iVar6 >> 3 ^ uVar13) - uVar13
                               ,lVar2 + 0x6c8), (int)CONCAT71(extraout_var,bVar3) == 0)) {
        FUN_180001c50((&DAT_180073760)[uVar11 * 0x95]);
      }
    }
    if (*(code **)(&DAT_180073790 + lVar12) != (code *)0x0) {
      (**(code **)(&DAT_180073790 + lVar12))
                (param_1,*(undefined4 *)(param_2 + 0x28),*(undefined4 *)(param_2 + 0x38),
                 *(undefined4 *)(param_2 + 0x44),2,*(undefined8 *)(&DAT_180073770 + lVar12));
    }
  }
  return;
}


==================================================================

########## TARGET 18000c620 ##########
callers (1):
  180009ee0 FUN_180009ee0

### CALLER FUNC 180009ee0 (1300 bytes) name=FUN_180009ee0

void FUN_180009ee0(uint param_1,longlong param_2)

{
  char cVar1;
  longlong lVar2;
  bool bVar3;
  uint uVar4;
  DWORD DVar5;
  int iVar6;
  __time64_t _Var7;
  ulonglong uVar8;
  byte *pbVar9;
  undefined7 extraout_var;
  uint uVar10;
  ulonglong uVar11;
  longlong lVar12;
  uint uVar13;
  int iVar14;
  undefined8 in_XMM1_Qa;
  uint local_res10 [2];
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  __time64_t local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  
  uVar11 = (ulonglong)param_1;
  lVar12 = uVar11 * 0x4a8;
  if (*(int *)(&DAT_180073778 + lVar12) == 0) {
    return;
  }
  if ((*(uint *)(param_2 + 0xc) & 3) != 0) {
    if (*(int *)(param_2 + 0x14) != (&DAT_1800737b8)[uVar11 * 0x12a]) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737bc + lVar12)) {
      return;
    }
  }
  if ((*(uint *)(param_2 + 0xc) & 4) != 0) {
    if (*(int *)(param_2 + 0x14) != *(int *)(&DAT_1800737f8 + lVar12)) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737fc + lVar12)) {
      return;
    }
  }
  _Var7 = _time64((__time64_t *)0x0);
  *(int *)(&DAT_180073bf0 + lVar12) = *(int *)(&DAT_180073bf0 + lVar12) + 1;
  lVar2 = (&DAT_180073758)[uVar11 * 0x95];
  *(__time64_t *)(&DAT_180073810 + lVar12) = _Var7;
  *(undefined8 *)(&DAT_180073818 + lVar12) = 0;
  *(undefined8 *)(&DAT_180073820 + lVar12) = 0;
  *(undefined4 *)(&DAT_180073828 + lVar12) = 0;
  cVar1 = *(char *)(lVar2 + 0x2d47);
  if ((cVar1 == '\x01') || (cVar1 == '\x02')) {
    if (*(uint *)(&DAT_180073bf0 + lVar12) < 0x14) {
      return;
    }
  }
  else if ((cVar1 == '\x04') && (*(uint *)(&DAT_180073bf0 + lVar12) < 8)) {
    return;
  }
  *(int *)(param_2 + 0x28) = *(int *)(param_2 + 0x28) + (int)*(short *)(lVar2 + 0x2d86);
  *(int *)(param_2 + 0x2c) = *(int *)(param_2 + 0x2c) + (int)*(short *)(lVar2 + 0x2d86);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x60) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x5c) = *(undefined4 *)(param_2 + 0x2c);
  iVar6 = *(int *)(&DAT_180073bec + lVar12);
  *(undefined4 *)(&DAT_180073800 + lVar12) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)(&DAT_180073804 + lVar12) = *(undefined4 *)(param_2 + 0x2c);
  if (iVar6 < 0) {
    FUN_180002f50(param_1);
    return;
  }
  uVar10 = iVar6 + 1;
  *(uint *)(&DAT_180073bec + lVar12) = uVar10;
  uVar13 = *(uint *)(lVar2 + 0x2d88);
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,
                  *(int *)(lVar2 + 0x2d8c) + uVar13 + *(int *)(lVar2 + 0x2d78));
    return;
  }
  uVar4 = *(int *)(lVar2 + 0x2d78) + uVar13;
  if (uVar10 <= uVar4) {
    if (uVar10 == uVar4) {
      if (*(int *)((&DAT_180073758)[uVar11 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
      }
      else {
        local_res10[0] = 0x6bb6b672;
        local_res10[1] = 1;
        FUN_18001c670((&DAT_180073758)[uVar11 * 0x95],local_res10,8);
      }
    }
    FUN_18000c620((&DAT_180073750)[uVar11 * 0x95],(ushort *)(param_2 + 0x4c),
                  (uint)(*(int *)(&DAT_180073bec + lVar12) == *(int *)(lVar2 + 0x2d88) + 1));
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],*(int *)(&DAT_180073bec + lVar12) + -1,
                  *(int *)(lVar2 + 0x2d8c) + *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d88));
    return;
  }
  uVar13 = *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d8c) + uVar13;
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,uVar13);
    return;
  }
  iVar14 = 0;
  switch(cVar1) {
  case '\0':
  case '\x03':
  case '\x05':
  case '\x06':
    if ((*(int *)(&DAT_180073bf4 + lVar12) == 0) && (iVar14 = 0, uVar10 == 0x4b)) {
      *(undefined4 *)(&DAT_180073bf4 + lVar12) = 1;
      iVar14 = iVar6 + -0x49;
    }
    iVar6 = 0x1e;
    break;
  case '\x01':
  case '\x02':
  case '\x04':
    if ((*(uint *)(&DAT_180073bf4 + lVar12) < 5) && (iVar14 = 0, uVar10 == 0x82 - uVar13)) {
      iVar14 = 1;
      *(uint *)(&DAT_180073bf4 + lVar12) = *(uint *)(&DAT_180073bf4 + lVar12) + 1;
    }
    iVar6 = 100;
    break;
  default:
    iVar6 = 100;
    goto LAB_18000a1d2;
  }
  if (iVar14 == 0) {
LAB_18000a1d2:
    if ((uVar10 < uVar13 + *(int *)(lVar2 + 0x2d90)) &&
       ((uVar10 < iVar6 + uVar13 ||
        (uVar13 = *(int *)((&DAT_180073750)[uVar11 * 0x95] + 0x54) - *(int *)(param_2 + 0x2c),
        uVar10 = (int)uVar13 >> 0x1f, (uVar13 ^ uVar10) - uVar10 <= *(uint *)(lVar2 + 0x2d94)))))
    goto LAB_18000a20a;
  }
  FUN_180002f50(param_1);
LAB_18000a20a:
  uVar8 = FUN_18000ca30((&DAT_180073750)[uVar11 * 0x95],in_XMM1_Qa,0,1,0);
  if ((uVar8 & 1) != 0) {
    if ((*(int *)((&DAT_180073768)[uVar11 * 0x95] + 0x44) != 0) &&
       (*(int *)(&DAT_180073ba4 + lVar12) = *(int *)(&DAT_180073ba4 + lVar12) + 1,
       *(int *)(&DAT_180073ba8 + lVar12) <= *(int *)(&DAT_180073ba4 + lVar12))) {
      *(undefined4 *)(&DAT_180073ba4 + lVar12) = 0;
      local_50 = 0;
      local_48 = 0;
      local_40 = 0;
      local_38 = 0;
      local_30 = 0;
      local_68 = 0x1010000000040;
      local_60 = *(undefined8 *)(&DAT_180073800 + lVar12);
      local_58 = *(undefined8 *)(&DAT_180073808 + lVar12);
      local_50 = _time64((__time64_t *)0x0);
      DVar5 = GetTickCount();
      local_48 = CONCAT44(*(undefined4 *)(param_2 + 0x38),DVar5);
      FUN_18001b1b0((&DAT_180073768)[uVar11 * 0x95],(longlong)&local_68,0x40,
                    *(longlong *)((&DAT_180073750)[uVar11 * 0x95] + 0x270),
                    *(int *)(param_2 + 0x18) * *(int *)(param_2 + 0x14) * 2);
    }
    if (*(int *)((&DAT_180073760)[uVar11 * 0x95] + 0x44) != 0) {
      pbVar9 = (byte *)FUN_1800110a0((&DAT_180073750)[uVar11 * 0x95]);
      lVar2 = (&DAT_180073750)[uVar11 * 0x95];
      if (((pbVar9 != (byte *)0x0) && (lVar2 + 0x6c8 != 0)) &&
         (iVar6 = (uint)*(ushort *)(lVar2 + 0x6d6) * *(int *)(lVar2 + 0x6d0) *
                  *(int *)(lVar2 + 0x6cc), iVar6 = iVar6 + (iVar6 >> 0x1f & 7U),
         uVar13 = iVar6 >> 0x1f,
         bVar3 = FUN_180001cd0((&DAT_180073760)[uVar11 * 0x95],pbVar9,(iVar6 >> 3 ^ uVar13) - uVar13
                               ,lVar2 + 0x6c8), (int)CONCAT71(extraout_var,bVar3) == 0)) {
        FUN_180001c50((&DAT_180073760)[uVar11 * 0x95]);
      }
    }
    if (*(code **)(&DAT_180073790 + lVar12) != (code *)0x0) {
      (**(code **)(&DAT_180073790 + lVar12))
                (param_1,*(undefined4 *)(param_2 + 0x28),*(undefined4 *)(param_2 + 0x38),
                 *(undefined4 *)(param_2 + 0x44),2,*(undefined8 *)(&DAT_180073770 + lVar12));
    }
  }
  return;
}


==================================================================

########## TARGET 1800011a0 ##########
callers (2):
  18000c620 FUN_18000c620
  18000c950 FUN_18000c950

### CALLER FUNC 18000c620 (309 bytes) name=FUN_18000c620

ulonglong FUN_18000c620(longlong param_1,ushort *param_2,int param_3)

{
  ulonglong uVar1;
  ulonglong uVar2;
  
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  if (*(int *)(param_1 + 0x228) == 0) {
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
    uVar1 = 0;
  }
  else {
    if (param_3 != 0) {
      *(undefined4 *)(param_1 + 0x22c) = 0;
      *(undefined4 *)(param_1 + 0x41ffc) = 0;
      *(undefined4 *)(param_1 + 0x42004) = 0;
      if (*(int *)(param_1 + 0x41f0c) != 0) {
        *(undefined4 *)(param_1 + 0x41f00) = 0;
      }
      if (*(int *)(param_1 + 0x41f3c) != 0) {
        *(undefined4 *)(param_1 + 0x41f30) = 0;
      }
      if ((1 < *(uint *)(param_1 + 0x41fe0)) && (*(int *)(param_1 + 0x41f7c) != 0)) {
        *(undefined4 *)(param_1 + 0x41f70) = 0;
        *(undefined8 *)(param_1 + 0x41f68) = *(undefined8 *)(param_1 + 0x41f50);
        FUN_1800357d0(*(ulonglong **)(param_1 + 0x41f58),0,
                      (ulonglong)*(uint *)(param_1 + 0x41f74) << 2);
      }
      if (*(int *)(param_1 + 0x41fbc) != 0) {
        *(undefined4 *)(param_1 + 0x41fb0) = 0;
        *(undefined8 *)(param_1 + 0x41fa8) = *(undefined8 *)(param_1 + 0x41f90);
        FUN_1800357d0(*(ulonglong **)(param_1 + 0x41f98),0,
                      (ulonglong)*(uint *)(param_1 + 0x41fb4) << 2);
      }
    }
    uVar2 = FUN_1800011a0(param_1 + 0x41ee0,param_2);
    uVar1 = uVar2 & 0xffffffff;
    if ((int)uVar2 != 0) {
      *(undefined4 *)(param_1 + 0x22c) = 1;
    }
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  }
  return uVar1;
}


==================================================================

### CALLER FUNC 18000c950 (221 bytes) name=FUN_18000c950

void FUN_18000c950(longlong param_1,ushort *param_2)

{
  undefined8 uVar1;
  ushort *puVar2;
  
  if (*(int *)(param_1 + 0x41fdc) == 1) {
    FUN_1800011a0(param_1 + 0x41f10,param_2);
    if (*(int *)(param_1 + 0x41f3c) == 0) {
      puVar2 = (ushort *)0x0;
    }
    else {
      puVar2 = *(ushort **)(param_1 + 0x41f20);
    }
    *(ushort **)(param_1 + 0x44c58) = puVar2;
    if ((*(int *)(param_1 + 0x41340) != 0) && (*(int *)(param_1 + 0x41348) != 0)) {
      FUN_180017200(param_1,puVar2);
      FUN_180017330(param_1,*(longlong *)(param_1 + 0x270));
      goto LAB_18000ca18;
    }
  }
  else {
    uVar1 = FUN_1800011a0(param_1 + 0x41f10,param_2);
    *(int *)(param_1 + 0x41ffc) = (int)uVar1;
    if ((int)uVar1 == 0) {
      return;
    }
    puVar2 = (ushort *)0x0;
    *(undefined4 *)(param_1 + 0x41ffc) = 0;
    if (*(int *)(param_1 + 0x41f3c) != 0) {
      puVar2 = *(ushort **)(param_1 + 0x41f20);
    }
    if ((*(int *)(param_1 + 0x41340) != 0) && (*(int *)(param_1 + 0x41348) != 0)) {
      FUN_180017200(param_1,puVar2);
      FUN_180017330(param_1,*(longlong *)(param_1 + 0x270));
      goto LAB_18000ca18;
    }
  }
  FUN_180017040(param_1,puVar2);
LAB_18000ca18:
  *(undefined4 *)(param_1 + 0x42004) = 1;
  return;
}


==================================================================

########## TARGET 18001e920 ##########
callers (1):
  18000ca30 FUN_18000ca30

### CALLER FUNC 18000ca30 (1760 bytes) name=FUN_18000ca30

/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8
FUN_18000ca30(longlong param_1,undefined8 param_2,int param_3,undefined8 param_4,int param_5)

{
  byte *pbVar1;
  byte *pbVar2;
  byte *pbVar3;
  int *piVar4;
  ushort uVar5;
  byte *_Dst;
  undefined1 uVar6;
  DWORD DVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  DWORD DVar11;
  undefined1 *puVar12;
  longlong lVar13;
  int iVar14;
  ushort *in_RDX;
  ulonglong uVar15;
  int iVar16;
  uint uVar17;
  int iVar18;
  ushort *puVar19;
  byte *pbVar20;
  undefined1 auStack_3518 [32];
  DWORD local_34f8;
  int local_34e8;
  ulonglong local_34e4 [63];
  int aiStack_32e8 [384];
  undefined1 local_2ce8 [11424];
  ulonglong local_48;
  
  local_48 = DAT_18006cea0 ^ (ulonglong)auStack_3518;
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  DVar7 = GetTickCount();
  local_34f8 = DVar7;
  if (((*(int *)(param_1 + 0x228) == 0) || (in_RDX == (ushort *)0x0)) ||
     ((param_3 == 0 && (*(int *)(param_1 + 0x22c) == 0)))) {
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
    return 0;
  }
  *(undefined4 *)(param_1 + 0x4203c) = 0;
  *(undefined4 *)(param_1 + 0x42040) = 0;
  *(undefined4 *)(param_1 + 0x42044) = 0;
  *(undefined4 *)(param_1 + 0x42004) = 0;
  if (param_3 == 0) {
    FUN_18000c950(param_1,in_RDX);
  }
  else {
    if (param_3 != 1) goto LAB_18000cb0b;
    memcpy(*(void **)(param_1 + 0x270),in_RDX,(ulonglong)*(uint *)(param_1 + 0x47938) * 2);
    *(undefined4 *)(param_1 + 0x42004) = 1;
  }
  if (*(int *)(param_1 + 0x42004) == 0) {
    FUN_18000d2a0(param_1);
LAB_18000cb0b:
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
    return 0;
  }
  *(undefined4 *)(param_1 + 0x44c4c) = 0;
  *(undefined4 *)(param_1 + 0x42038) = 0;
  if ((param_5 == 0) && (1 < *(uint *)(param_1 + 0x41fe0))) {
    uVar8 = FUN_180015680(param_1,30000,*(uint *)(param_1 + 0x50));
    FUN_18001e920(param_1 + 0x41f40,*(ushort **)(param_1 + 0x270),uVar8 & 0xffff);
    *(undefined4 *)(param_1 + 0x42038) = 1;
  }
  if (*(int *)(param_1 + 0x230) != 0) {
    FUN_1800175a0(param_1);
  }
  iVar10 = *(int *)(param_1 + 0x41fe8);
  if (iVar10 == 1) {
    FUN_1800184f0(param_1);
  }
  else if (iVar10 == 2) {
    FUN_180018660(param_1);
  }
  else if (iVar10 == 3) {
    FUN_1800184f0(param_1);
    FUN_180018660(param_1);
  }
  else if (iVar10 == 4) {
    FUN_180018660(param_1);
    FUN_180018660(param_1);
  }
  FUN_180010780(param_1,*(ushort **)(param_1 + 0x270));
  FUN_1800109c0(param_1);
  uVar8 = *(uint *)(param_1 + 0x30);
  if (uVar8 < 5) {
    if ((int)uVar8 < 1) goto LAB_18000cf9a;
  }
  else {
    uVar8 = 4;
  }
  if ((((*(int *)(param_1 + 0x4203c) != 0) && (*(int *)(param_1 + 0x28) == 0)) &&
      (*(int *)(param_1 + 0x10) == 0)) &&
     ((*(int *)(param_1 + 0x88) == 0 && (*(int *)(param_1 + 0x44) == 0)))) {
    if (*(int *)(param_1 + 0x84) == 0) {
      FUN_180017770(param_1,param_2);
      memcpy(local_2ce8,(void *)(param_1 + 0x41ff8),0x2ca0);
      FUN_180010780(param_1,*(ushort **)(param_1 + 0x288));
      if (*(int *)(param_1 + 0x42014) < *(int *)(param_1 + 0x42010)) {
        iVar10 = *(int *)(param_1 + 0x42018);
        uVar17 = *(int *)(param_1 + 0x42010) - iVar10;
        uVar8 = iVar10 - *(int *)(param_1 + 0x42014);
        uVar9 = FUN_180015680(param_1,30000,(uint)(*(int *)(param_1 + 0x24) * 1000) >> 1);
        puVar19 = *(ushort **)(param_1 + 0x288);
        if (uVar8 < uVar17) {
          uVar8 = uVar17;
        }
        uVar17 = uVar9 & 0xffff;
        if ((uVar9 & 0xffff) < uVar8) {
          uVar17 = uVar8;
        }
        puVar12 = *(undefined1 **)(param_1 + 0x280);
        uVar8 = 0;
        if (*(int *)(param_1 + 0x47938) != 0) {
          do {
            uVar5 = *puVar19;
            puVar19 = puVar19 + 1;
            uVar9 = ((uint)uVar5 - (iVar10 - uVar17)) * (int)(0x3fc00000 / (ulonglong)(uVar17 * 2))
                    >> 0x16;
            if (uVar9 < 0xc0) {
              uVar6 = (undefined1)uVar9;
              if (uVar9 < 0x3f) {
                uVar6 = 0x3f;
              }
            }
            else {
              uVar6 = 0xbf;
            }
            *puVar12 = uVar6;
            uVar8 = uVar8 + 1;
            puVar12 = puVar12 + 1;
          } while (uVar8 < *(uint *)(param_1 + 0x47938));
        }
        local_34e8 = 0;
        FUN_1800357d0(local_34e4,0,0x7fc);
        _Dst = *(byte **)(param_1 + 0x290);
        memcpy(_Dst,*(void **)(param_1 + 0x280),(ulonglong)*(uint *)(param_1 + 0x47938));
        uVar15 = (ulonglong)*(uint *)(param_1 + 0x41fc0);
        puVar12 = (undefined1 *)(uVar15 + 1 + *(longlong *)(param_1 + 0x280));
        pbVar1 = _Dst + 1;
        pbVar2 = pbVar1 + uVar15;
        pbVar3 = pbVar2 + uVar15;
        iVar10 = (*(int *)(param_1 + 0x41fc4) + -2) * *(uint *)(param_1 + 0x41fc0) + -2;
        if (0 < iVar10) {
          pbVar20 = pbVar3 + 1;
          iVar18 = (uint)pbVar2[uVar15 - 1] + (uint)pbVar1[uVar15 - 1] * 2 + (uint)*_Dst;
          iVar16 = (uint)*pbVar3 + (uint)*pbVar2 * 2 + (uint)*pbVar1;
          do {
            iVar14 = (uint)pbVar20[(longlong)pbVar1 - (longlong)pbVar3] +
                     (uint)pbVar20[(longlong)pbVar2 - (longlong)pbVar3] * 2 + (uint)*pbVar20;
            uVar8 = (uint)(iVar14 + iVar16 * 2 + iVar18) >> 4;
            *puVar12 = (char)uVar8;
            if (0x7f < uVar8) {
              piVar4 = (int *)((longlong)local_34e4 +
                              (longlong)
                              (int)(pbVar20[*(longlong *)(param_1 + 0x2a0) + (-1 - (longlong)pbVar3)
                                           ] + uVar8) * 4 + -4);
              *piVar4 = *piVar4 + 1;
            }
            pbVar20 = pbVar20 + 1;
            puVar12 = puVar12 + 1;
            iVar18 = iVar16;
            iVar16 = iVar14;
          } while ((longlong)(pbVar20 + (-1 - (longlong)pbVar3)) < (longlong)iVar10);
        }
        uVar8 = 0;
        if (*(int *)(param_1 + 0x41fc4) != 0) {
          do {
            uVar9 = *(int *)(param_1 + 0x41fc0) * uVar8;
            *(byte *)((ulonglong)uVar9 + *(longlong *)(param_1 + 0x280)) = _Dst[uVar9];
            uVar8 = uVar8 + 1;
            uVar9 = uVar8 * *(int *)(param_1 + 0x41fc0) - 1;
            *(byte *)((ulonglong)uVar9 + *(longlong *)(param_1 + 0x280)) = _Dst[uVar9];
          } while (uVar8 < *(uint *)(param_1 + 0x41fc4));
        }
        iVar18 = 0x1ff;
        iVar10 = 0;
        lVar13 = 0x1ff;
        do {
          iVar10 = iVar10 + *(int *)((longlong)local_34e4 + lVar13 * 4 + -4);
          if (*(uint *)(param_1 + 0x47938) < (uint)(iVar10 * 0x800)) break;
          lVar13 = lVar13 + -1;
          iVar18 = iVar18 + -1;
        } while (0x17d < lVar13);
        iVar10 = 0x1000;
        if (0x17e < iVar18) {
          iVar10 = (int)(0xff000 / (longlong)(iVar18 + -0x7f));
        }
        uVar8 = 0;
        lVar13 = 0;
        if (*(uint *)(param_1 + 0x47938) != 0) {
          do {
            iVar18 = ((*(byte *)(lVar13 + *(longlong *)(param_1 + 0x280)) - 0x7f) +
                     (uint)*(byte *)(*(longlong *)(param_1 + 0x2a0) + lVar13)) * iVar10;
            iVar18 = (int)(iVar18 + (iVar18 >> 0x1f & 0xfffU)) >> 0xc;
            if (iVar18 < 0) {
              iVar18 = 0;
            }
            else if (0xff < iVar18) {
              iVar18 = 0xff;
            }
            *(char *)(*(longlong *)(param_1 + 0x2a0) + lVar13) = (char)iVar18;
            uVar8 = uVar8 + 1;
            lVar13 = lVar13 + 1;
          } while (uVar8 < *(uint *)(param_1 + 0x47938));
        }
      }
      memcpy((void *)(param_1 + 0x41ff8),local_2ce8,0x2ca0);
      DVar7 = local_34f8;
    }
    else {
      FUN_180017c40(param_1,uVar8 << 3);
    }
  }
LAB_18000cf9a:
  uVar8 = *(uint *)(param_1 + 0x41fc8);
  uVar9 = *(uint *)(param_1 + 0x41fc0);
  if ((uVar8 == uVar9) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4))) {
    memcpy(*(void **)(param_1 + 0x220),*(void **)(param_1 + 0x2a0),
           (ulonglong)*(uint *)(param_1 + 0x47938));
  }
  else if ((uVar8 == uVar9 * 2) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) * 2))
  {
    FUN_180019740(param_1);
  }
  else if ((uVar8 == uVar9 * 4) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) << 2)
          ) {
    FUN_180019b30(param_1);
  }
  else if ((uVar8 == uVar9 * 8) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) << 3)
          ) {
    FUN_180019e60(param_1);
  }
  else if ((uVar8 * 2 == uVar9 * 3) &&
          (*(int *)(param_1 + 0x41fcc) * 2 == *(int *)(param_1 + 0x41fc4) * 3)) {
    FUN_180018e90(param_1);
  }
  else if ((uVar8 * 3 == uVar9 * 5) &&
          (*(int *)(param_1 + 0x41fcc) * 3 == *(int *)(param_1 + 0x41fc4) * 5)) {
    FUN_1800191b0(param_1);
  }
  else if ((uVar9 < uVar8) && (*(uint *)(param_1 + 0x41fc4) < *(uint *)(param_1 + 0x41fcc))) {
    FUN_18001a750(param_1);
  }
  DVar11 = GetTickCount();
  *(DWORD *)(param_1 + 0x42048) = DVar11 - DVar7;
  FUN_18000d2a0(param_1);
  *(undefined4 *)(param_1 + 0x234) = 1;
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  return 3;
}


==================================================================

########## TARGET 180010780 ##########
callers (1):
  18000ca30 FUN_18000ca30

### CALLER FUNC 18000ca30 (1760 bytes) name=FUN_18000ca30

/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8
FUN_18000ca30(longlong param_1,undefined8 param_2,int param_3,undefined8 param_4,int param_5)

{
  byte *pbVar1;
  byte *pbVar2;
  byte *pbVar3;
  int *piVar4;
  ushort uVar5;
  byte *_Dst;
  undefined1 uVar6;
  DWORD DVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  DWORD DVar11;
  undefined1 *puVar12;
  longlong lVar13;
  int iVar14;
  ushort *in_RDX;
  ulonglong uVar15;
  int iVar16;
  uint uVar17;
  int iVar18;
  ushort *puVar19;
  byte *pbVar20;
  undefined1 auStack_3518 [32];
  DWORD local_34f8;
  int local_34e8;
  ulonglong local_34e4 [63];
  int aiStack_32e8 [384];
  undefined1 local_2ce8 [11424];
  ulonglong local_48;
  
  local_48 = DAT_18006cea0 ^ (ulonglong)auStack_3518;
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  DVar7 = GetTickCount();
  local_34f8 = DVar7;
  if (((*(int *)(param_1 + 0x228) == 0) || (in_RDX == (ushort *)0x0)) ||
     ((param_3 == 0 && (*(int *)(param_1 + 0x22c) == 0)))) {
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
    return 0;
  }
  *(undefined4 *)(param_1 + 0x4203c) = 0;
  *(undefined4 *)(param_1 + 0x42040) = 0;
  *(undefined4 *)(param_1 + 0x42044) = 0;
  *(undefined4 *)(param_1 + 0x42004) = 0;
  if (param_3 == 0) {
    FUN_18000c950(param_1,in_RDX);
  }
  else {
    if (param_3 != 1) goto LAB_18000cb0b;
    memcpy(*(void **)(param_1 + 0x270),in_RDX,(ulonglong)*(uint *)(param_1 + 0x47938) * 2);
    *(undefined4 *)(param_1 + 0x42004) = 1;
  }
  if (*(int *)(param_1 + 0x42004) == 0) {
    FUN_18000d2a0(param_1);
LAB_18000cb0b:
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
    return 0;
  }
  *(undefined4 *)(param_1 + 0x44c4c) = 0;
  *(undefined4 *)(param_1 + 0x42038) = 0;
  if ((param_5 == 0) && (1 < *(uint *)(param_1 + 0x41fe0))) {
    uVar8 = FUN_180015680(param_1,30000,*(uint *)(param_1 + 0x50));
    FUN_18001e920(param_1 + 0x41f40,*(ushort **)(param_1 + 0x270),uVar8 & 0xffff);
    *(undefined4 *)(param_1 + 0x42038) = 1;
  }
  if (*(int *)(param_1 + 0x230) != 0) {
    FUN_1800175a0(param_1);
  }
  iVar10 = *(int *)(param_1 + 0x41fe8);
  if (iVar10 == 1) {
    FUN_1800184f0(param_1);
  }
  else if (iVar10 == 2) {
    FUN_180018660(param_1);
  }
  else if (iVar10 == 3) {
    FUN_1800184f0(param_1);
    FUN_180018660(param_1);
  }
  else if (iVar10 == 4) {
    FUN_180018660(param_1);
    FUN_180018660(param_1);
  }
  FUN_180010780(param_1,*(ushort **)(param_1 + 0x270));
  FUN_1800109c0(param_1);
  uVar8 = *(uint *)(param_1 + 0x30);
  if (uVar8 < 5) {
    if ((int)uVar8 < 1) goto LAB_18000cf9a;
  }
  else {
    uVar8 = 4;
  }
  if ((((*(int *)(param_1 + 0x4203c) != 0) && (*(int *)(param_1 + 0x28) == 0)) &&
      (*(int *)(param_1 + 0x10) == 0)) &&
     ((*(int *)(param_1 + 0x88) == 0 && (*(int *)(param_1 + 0x44) == 0)))) {
    if (*(int *)(param_1 + 0x84) == 0) {
      FUN_180017770(param_1,param_2);
      memcpy(local_2ce8,(void *)(param_1 + 0x41ff8),0x2ca0);
      FUN_180010780(param_1,*(ushort **)(param_1 + 0x288));
      if (*(int *)(param_1 + 0x42014) < *(int *)(param_1 + 0x42010)) {
        iVar10 = *(int *)(param_1 + 0x42018);
        uVar17 = *(int *)(param_1 + 0x42010) - iVar10;
        uVar8 = iVar10 - *(int *)(param_1 + 0x42014);
        uVar9 = FUN_180015680(param_1,30000,(uint)(*(int *)(param_1 + 0x24) * 1000) >> 1);
        puVar19 = *(ushort **)(param_1 + 0x288);
        if (uVar8 < uVar17) {
          uVar8 = uVar17;
        }
        uVar17 = uVar9 & 0xffff;
        if ((uVar9 & 0xffff) < uVar8) {
          uVar17 = uVar8;
        }
        puVar12 = *(undefined1 **)(param_1 + 0x280);
        uVar8 = 0;
        if (*(int *)(param_1 + 0x47938) != 0) {
          do {
            uVar5 = *puVar19;
            puVar19 = puVar19 + 1;
            uVar9 = ((uint)uVar5 - (iVar10 - uVar17)) * (int)(0x3fc00000 / (ulonglong)(uVar17 * 2))
                    >> 0x16;
            if (uVar9 < 0xc0) {
              uVar6 = (undefined1)uVar9;
              if (uVar9 < 0x3f) {
                uVar6 = 0x3f;
              }
            }
            else {
              uVar6 = 0xbf;
            }
            *puVar12 = uVar6;
            uVar8 = uVar8 + 1;
            puVar12 = puVar12 + 1;
          } while (uVar8 < *(uint *)(param_1 + 0x47938));
        }
        local_34e8 = 0;
        FUN_1800357d0(local_34e4,0,0x7fc);
        _Dst = *(byte **)(param_1 + 0x290);
        memcpy(_Dst,*(void **)(param_1 + 0x280),(ulonglong)*(uint *)(param_1 + 0x47938));
        uVar15 = (ulonglong)*(uint *)(param_1 + 0x41fc0);
        puVar12 = (undefined1 *)(uVar15 + 1 + *(longlong *)(param_1 + 0x280));
        pbVar1 = _Dst + 1;
        pbVar2 = pbVar1 + uVar15;
        pbVar3 = pbVar2 + uVar15;
        iVar10 = (*(int *)(param_1 + 0x41fc4) + -2) * *(uint *)(param_1 + 0x41fc0) + -2;
        if (0 < iVar10) {
          pbVar20 = pbVar3 + 1;
          iVar18 = (uint)pbVar2[uVar15 - 1] + (uint)pbVar1[uVar15 - 1] * 2 + (uint)*_Dst;
          iVar16 = (uint)*pbVar3 + (uint)*pbVar2 * 2 + (uint)*pbVar1;
          do {
            iVar14 = (uint)pbVar20[(longlong)pbVar1 - (longlong)pbVar3] +
                     (uint)pbVar20[(longlong)pbVar2 - (longlong)pbVar3] * 2 + (uint)*pbVar20;
            uVar8 = (uint)(iVar14 + iVar16 * 2 + iVar18) >> 4;
            *puVar12 = (char)uVar8;
            if (0x7f < uVar8) {
              piVar4 = (int *)((longlong)local_34e4 +
                              (longlong)
                              (int)(pbVar20[*(longlong *)(param_1 + 0x2a0) + (-1 - (longlong)pbVar3)
                                           ] + uVar8) * 4 + -4);
              *piVar4 = *piVar4 + 1;
            }
            pbVar20 = pbVar20 + 1;
            puVar12 = puVar12 + 1;
            iVar18 = iVar16;
            iVar16 = iVar14;
          } while ((longlong)(pbVar20 + (-1 - (longlong)pbVar3)) < (longlong)iVar10);
        }
        uVar8 = 0;
        if (*(int *)(param_1 + 0x41fc4) != 0) {
          do {
            uVar9 = *(int *)(param_1 + 0x41fc0) * uVar8;
            *(byte *)((ulonglong)uVar9 + *(longlong *)(param_1 + 0x280)) = _Dst[uVar9];
            uVar8 = uVar8 + 1;
            uVar9 = uVar8 * *(int *)(param_1 + 0x41fc0) - 1;
            *(byte *)((ulonglong)uVar9 + *(longlong *)(param_1 + 0x280)) = _Dst[uVar9];
          } while (uVar8 < *(uint *)(param_1 + 0x41fc4));
        }
        iVar18 = 0x1ff;
        iVar10 = 0;
        lVar13 = 0x1ff;
        do {
          iVar10 = iVar10 + *(int *)((longlong)local_34e4 + lVar13 * 4 + -4);
          if (*(uint *)(param_1 + 0x47938) < (uint)(iVar10 * 0x800)) break;
          lVar13 = lVar13 + -1;
          iVar18 = iVar18 + -1;
        } while (0x17d < lVar13);
        iVar10 = 0x1000;
        if (0x17e < iVar18) {
          iVar10 = (int)(0xff000 / (longlong)(iVar18 + -0x7f));
        }
        uVar8 = 0;
        lVar13 = 0;
        if (*(uint *)(param_1 + 0x47938) != 0) {
          do {
            iVar18 = ((*(byte *)(lVar13 + *(longlong *)(param_1 + 0x280)) - 0x7f) +
                     (uint)*(byte *)(*(longlong *)(param_1 + 0x2a0) + lVar13)) * iVar10;
            iVar18 = (int)(iVar18 + (iVar18 >> 0x1f & 0xfffU)) >> 0xc;
            if (iVar18 < 0) {
              iVar18 = 0;
            }
            else if (0xff < iVar18) {
              iVar18 = 0xff;
            }
            *(char *)(*(longlong *)(param_1 + 0x2a0) + lVar13) = (char)iVar18;
            uVar8 = uVar8 + 1;
            lVar13 = lVar13 + 1;
          } while (uVar8 < *(uint *)(param_1 + 0x47938));
        }
      }
      memcpy((void *)(param_1 + 0x41ff8),local_2ce8,0x2ca0);
      DVar7 = local_34f8;
    }
    else {
      FUN_180017c40(param_1,uVar8 << 3);
    }
  }
LAB_18000cf9a:
  uVar8 = *(uint *)(param_1 + 0x41fc8);
  uVar9 = *(uint *)(param_1 + 0x41fc0);
  if ((uVar8 == uVar9) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4))) {
    memcpy(*(void **)(param_1 + 0x220),*(void **)(param_1 + 0x2a0),
           (ulonglong)*(uint *)(param_1 + 0x47938));
  }
  else if ((uVar8 == uVar9 * 2) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) * 2))
  {
    FUN_180019740(param_1);
  }
  else if ((uVar8 == uVar9 * 4) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) << 2)
          ) {
    FUN_180019b30(param_1);
  }
  else if ((uVar8 == uVar9 * 8) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) << 3)
          ) {
    FUN_180019e60(param_1);
  }
  else if ((uVar8 * 2 == uVar9 * 3) &&
          (*(int *)(param_1 + 0x41fcc) * 2 == *(int *)(param_1 + 0x41fc4) * 3)) {
    FUN_180018e90(param_1);
  }
  else if ((uVar8 * 3 == uVar9 * 5) &&
          (*(int *)(param_1 + 0x41fcc) * 3 == *(int *)(param_1 + 0x41fc4) * 5)) {
    FUN_1800191b0(param_1);
  }
  else if ((uVar9 < uVar8) && (*(uint *)(param_1 + 0x41fc4) < *(uint *)(param_1 + 0x41fcc))) {
    FUN_18001a750(param_1);
  }
  DVar11 = GetTickCount();
  *(DWORD *)(param_1 + 0x42048) = DVar11 - DVar7;
  FUN_18000d2a0(param_1);
  *(undefined4 *)(param_1 + 0x234) = 1;
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  return 3;
}


==================================================================

########## TARGET 180018e90 ##########
callers (2):
  18000ca30 FUN_18000ca30
  18000d110 FUN_18000d110

### CALLER FUNC 18000ca30 (1760 bytes) name=FUN_18000ca30

/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8
FUN_18000ca30(longlong param_1,undefined8 param_2,int param_3,undefined8 param_4,int param_5)

{
  byte *pbVar1;
  byte *pbVar2;
  byte *pbVar3;
  int *piVar4;
  ushort uVar5;
  byte *_Dst;
  undefined1 uVar6;
  DWORD DVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  DWORD DVar11;
  undefined1 *puVar12;
  longlong lVar13;
  int iVar14;
  ushort *in_RDX;
  ulonglong uVar15;
  int iVar16;
  uint uVar17;
  int iVar18;
  ushort *puVar19;
  byte *pbVar20;
  undefined1 auStack_3518 [32];
  DWORD local_34f8;
  int local_34e8;
  ulonglong local_34e4 [63];
  int aiStack_32e8 [384];
  undefined1 local_2ce8 [11424];
  ulonglong local_48;
  
  local_48 = DAT_18006cea0 ^ (ulonglong)auStack_3518;
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  DVar7 = GetTickCount();
  local_34f8 = DVar7;
  if (((*(int *)(param_1 + 0x228) == 0) || (in_RDX == (ushort *)0x0)) ||
     ((param_3 == 0 && (*(int *)(param_1 + 0x22c) == 0)))) {
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
    return 0;
  }
  *(undefined4 *)(param_1 + 0x4203c) = 0;
  *(undefined4 *)(param_1 + 0x42040) = 0;
  *(undefined4 *)(param_1 + 0x42044) = 0;
  *(undefined4 *)(param_1 + 0x42004) = 0;
  if (param_3 == 0) {
    FUN_18000c950(param_1,in_RDX);
  }
  else {
    if (param_3 != 1) goto LAB_18000cb0b;
    memcpy(*(void **)(param_1 + 0x270),in_RDX,(ulonglong)*(uint *)(param_1 + 0x47938) * 2);
    *(undefined4 *)(param_1 + 0x42004) = 1;
  }
  if (*(int *)(param_1 + 0x42004) == 0) {
    FUN_18000d2a0(param_1);
LAB_18000cb0b:
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
    return 0;
  }
  *(undefined4 *)(param_1 + 0x44c4c) = 0;
  *(undefined4 *)(param_1 + 0x42038) = 0;
  if ((param_5 == 0) && (1 < *(uint *)(param_1 + 0x41fe0))) {
    uVar8 = FUN_180015680(param_1,30000,*(uint *)(param_1 + 0x50));
    FUN_18001e920(param_1 + 0x41f40,*(ushort **)(param_1 + 0x270),uVar8 & 0xffff);
    *(undefined4 *)(param_1 + 0x42038) = 1;
  }
  if (*(int *)(param_1 + 0x230) != 0) {
    FUN_1800175a0(param_1);
  }
  iVar10 = *(int *)(param_1 + 0x41fe8);
  if (iVar10 == 1) {
    FUN_1800184f0(param_1);
  }
  else if (iVar10 == 2) {
    FUN_180018660(param_1);
  }
  else if (iVar10 == 3) {
    FUN_1800184f0(param_1);
    FUN_180018660(param_1);
  }
  else if (iVar10 == 4) {
    FUN_180018660(param_1);
    FUN_180018660(param_1);
  }
  FUN_180010780(param_1,*(ushort **)(param_1 + 0x270));
  FUN_1800109c0(param_1);
  uVar8 = *(uint *)(param_1 + 0x30);
  if (uVar8 < 5) {
    if ((int)uVar8 < 1) goto LAB_18000cf9a;
  }
  else {
    uVar8 = 4;
  }
  if ((((*(int *)(param_1 + 0x4203c) != 0) && (*(int *)(param_1 + 0x28) == 0)) &&
      (*(int *)(param_1 + 0x10) == 0)) &&
     ((*(int *)(param_1 + 0x88) == 0 && (*(int *)(param_1 + 0x44) == 0)))) {
    if (*(int *)(param_1 + 0x84) == 0) {
      FUN_180017770(param_1,param_2);
      memcpy(local_2ce8,(void *)(param_1 + 0x41ff8),0x2ca0);
      FUN_180010780(param_1,*(ushort **)(param_1 + 0x288));
      if (*(int *)(param_1 + 0x42014) < *(int *)(param_1 + 0x42010)) {
        iVar10 = *(int *)(param_1 + 0x42018);
        uVar17 = *(int *)(param_1 + 0x42010) - iVar10;
        uVar8 = iVar10 - *(int *)(param_1 + 0x42014);
        uVar9 = FUN_180015680(param_1,30000,(uint)(*(int *)(param_1 + 0x24) * 1000) >> 1);
        puVar19 = *(ushort **)(param_1 + 0x288);
        if (uVar8 < uVar17) {
          uVar8 = uVar17;
        }
        uVar17 = uVar9 & 0xffff;
        if ((uVar9 & 0xffff) < uVar8) {
          uVar17 = uVar8;
        }
        puVar12 = *(undefined1 **)(param_1 + 0x280);
        uVar8 = 0;
        if (*(int *)(param_1 + 0x47938) != 0) {
          do {
            uVar5 = *puVar19;
            puVar19 = puVar19 + 1;
            uVar9 = ((uint)uVar5 - (iVar10 - uVar17)) * (int)(0x3fc00000 / (ulonglong)(uVar17 * 2))
                    >> 0x16;
            if (uVar9 < 0xc0) {
              uVar6 = (undefined1)uVar9;
              if (uVar9 < 0x3f) {
                uVar6 = 0x3f;
              }
            }
            else {
              uVar6 = 0xbf;
            }
            *puVar12 = uVar6;
            uVar8 = uVar8 + 1;
            puVar12 = puVar12 + 1;
          } while (uVar8 < *(uint *)(param_1 + 0x47938));
        }
        local_34e8 = 0;
        FUN_1800357d0(local_34e4,0,0x7fc);
        _Dst = *(byte **)(param_1 + 0x290);
        memcpy(_Dst,*(void **)(param_1 + 0x280),(ulonglong)*(uint *)(param_1 + 0x47938));
        uVar15 = (ulonglong)*(uint *)(param_1 + 0x41fc0);
        puVar12 = (undefined1 *)(uVar15 + 1 + *(longlong *)(param_1 + 0x280));
        pbVar1 = _Dst + 1;
        pbVar2 = pbVar1 + uVar15;
        pbVar3 = pbVar2 + uVar15;
        iVar10 = (*(int *)(param_1 + 0x41fc4) + -2) * *(uint *)(param_1 + 0x41fc0) + -2;
        if (0 < iVar10) {
          pbVar20 = pbVar3 + 1;
          iVar18 = (uint)pbVar2[uVar15 - 1] + (uint)pbVar1[uVar15 - 1] * 2 + (uint)*_Dst;
          iVar16 = (uint)*pbVar3 + (uint)*pbVar2 * 2 + (uint)*pbVar1;
          do {
            iVar14 = (uint)pbVar20[(longlong)pbVar1 - (longlong)pbVar3] +
                     (uint)pbVar20[(longlong)pbVar2 - (longlong)pbVar3] * 2 + (uint)*pbVar20;
            uVar8 = (uint)(iVar14 + iVar16 * 2 + iVar18) >> 4;
            *puVar12 = (char)uVar8;
            if (0x7f < uVar8) {
              piVar4 = (int *)((longlong)local_34e4 +
                              (longlong)
                              (int)(pbVar20[*(longlong *)(param_1 + 0x2a0) + (-1 - (longlong)pbVar3)
                                           ] + uVar8) * 4 + -4);
              *piVar4 = *piVar4 + 1;
            }
            pbVar20 = pbVar20 + 1;
            puVar12 = puVar12 + 1;
            iVar18 = iVar16;
            iVar16 = iVar14;
          } while ((longlong)(pbVar20 + (-1 - (longlong)pbVar3)) < (longlong)iVar10);
        }
        uVar8 = 0;
        if (*(int *)(param_1 + 0x41fc4) != 0) {
          do {
            uVar9 = *(int *)(param_1 + 0x41fc0) * uVar8;
            *(byte *)((ulonglong)uVar9 + *(longlong *)(param_1 + 0x280)) = _Dst[uVar9];
            uVar8 = uVar8 + 1;
            uVar9 = uVar8 * *(int *)(param_1 + 0x41fc0) - 1;
            *(byte *)((ulonglong)uVar9 + *(longlong *)(param_1 + 0x280)) = _Dst[uVar9];
          } while (uVar8 < *(uint *)(param_1 + 0x41fc4));
        }
        iVar18 = 0x1ff;
        iVar10 = 0;
        lVar13 = 0x1ff;
        do {
          iVar10 = iVar10 + *(int *)((longlong)local_34e4 + lVar13 * 4 + -4);
          if (*(uint *)(param_1 + 0x47938) < (uint)(iVar10 * 0x800)) break;
          lVar13 = lVar13 + -1;
          iVar18 = iVar18 + -1;
        } while (0x17d < lVar13);
        iVar10 = 0x1000;
        if (0x17e < iVar18) {
          iVar10 = (int)(0xff000 / (longlong)(iVar18 + -0x7f));
        }
        uVar8 = 0;
        lVar13 = 0;
        if (*(uint *)(param_1 + 0x47938) != 0) {
          do {
            iVar18 = ((*(byte *)(lVar13 + *(longlong *)(param_1 + 0x280)) - 0x7f) +
                     (uint)*(byte *)(*(longlong *)(param_1 + 0x2a0) + lVar13)) * iVar10;
            iVar18 = (int)(iVar18 + (iVar18 >> 0x1f & 0xfffU)) >> 0xc;
            if (iVar18 < 0) {
              iVar18 = 0;
            }
            else if (0xff < iVar18) {
              iVar18 = 0xff;
            }
            *(char *)(*(longlong *)(param_1 + 0x2a0) + lVar13) = (char)iVar18;
            uVar8 = uVar8 + 1;
            lVar13 = lVar13 + 1;
          } while (uVar8 < *(uint *)(param_1 + 0x47938));
        }
      }
      memcpy((void *)(param_1 + 0x41ff8),local_2ce8,0x2ca0);
      DVar7 = local_34f8;
    }
    else {
      FUN_180017c40(param_1,uVar8 << 3);
    }
  }
LAB_18000cf9a:
  uVar8 = *(uint *)(param_1 + 0x41fc8);
  uVar9 = *(uint *)(param_1 + 0x41fc0);
  if ((uVar8 == uVar9) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4))) {
    memcpy(*(void **)(param_1 + 0x220),*(void **)(param_1 + 0x2a0),
           (ulonglong)*(uint *)(param_1 + 0x47938));
  }
  else if ((uVar8 == uVar9 * 2) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) * 2))
  {
    FUN_180019740(param_1);
  }
  else if ((uVar8 == uVar9 * 4) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) << 2)
          ) {
    FUN_180019b30(param_1);
  }
  else if ((uVar8 == uVar9 * 8) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) << 3)
          ) {
    FUN_180019e60(param_1);
  }
  else if ((uVar8 * 2 == uVar9 * 3) &&
          (*(int *)(param_1 + 0x41fcc) * 2 == *(int *)(param_1 + 0x41fc4) * 3)) {
    FUN_180018e90(param_1);
  }
  else if ((uVar8 * 3 == uVar9 * 5) &&
          (*(int *)(param_1 + 0x41fcc) * 3 == *(int *)(param_1 + 0x41fc4) * 5)) {
    FUN_1800191b0(param_1);
  }
  else if ((uVar9 < uVar8) && (*(uint *)(param_1 + 0x41fc4) < *(uint *)(param_1 + 0x41fcc))) {
    FUN_18001a750(param_1);
  }
  DVar11 = GetTickCount();
  *(DWORD *)(param_1 + 0x42048) = DVar11 - DVar7;
  FUN_18000d2a0(param_1);
  *(undefined4 *)(param_1 + 0x234) = 1;
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  return 3;
}


==================================================================

### CALLER FUNC 18000d110 (396 bytes) name=FUN_18000d110

void FUN_18000d110(longlong param_1)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  
  if (*(int *)(param_1 + 0x234) != 0) {
    FUN_1800109c0(param_1);
    if (((*(int *)(param_1 + 0x4203c) != 0) && (*(int *)(param_1 + 0x30) != 0)) &&
       ((*(int *)(param_1 + 0x28) == 0 || (*(int *)(param_1 + 0x10) != 0)))) {
      iVar3 = *(int *)(param_1 + 0x30) << 3;
      if (*(int *)(param_1 + 0x84) == 0) {
        FUN_180017c40(param_1,iVar3);
      }
      else {
        FUN_180017fd0(param_1,iVar3);
      }
    }
    uVar1 = *(uint *)(param_1 + 0x41fc8);
    uVar2 = *(uint *)(param_1 + 0x41fc0);
    if ((uVar1 == uVar2) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4))) {
      memcpy(*(void **)(param_1 + 0x220),*(void **)(param_1 + 0x2a0),
             (ulonglong)*(uint *)(param_1 + 0x47938));
      return;
    }
    if ((uVar1 == uVar2 * 2) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) * 2)) {
      FUN_180019740(param_1);
      return;
    }
    if ((uVar1 == uVar2 * 4) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) << 2)) {
      FUN_180019b30(param_1);
      return;
    }
    if ((uVar1 == uVar2 * 8) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) << 3)) {
      FUN_180019e60(param_1);
      return;
    }
    if ((uVar1 * 2 == uVar2 * 3) &&
       (*(int *)(param_1 + 0x41fcc) * 2 == *(int *)(param_1 + 0x41fc4) * 3)) {
      FUN_180018e90(param_1);
      return;
    }
    if ((uVar1 * 3 == uVar2 * 5) &&
       (*(int *)(param_1 + 0x41fcc) * 3 == *(int *)(param_1 + 0x41fc4) * 5)) {
      FUN_1800191b0(param_1);
      return;
    }
    if ((uVar2 < uVar1) && (*(uint *)(param_1 + 0x41fc4) < *(uint *)(param_1 + 0x41fcc))) {
      FUN_18001a750(param_1);
    }
  }
  return;
}


==================================================================

########## TARGET 180009ee0 ##########
callers (0):

########## TARGET 180002f50 ##########
callers (2):
  180009b50 FUN_180009b50
  180009ee0 FUN_180009ee0

### CALLER FUNC 180009b50 (875 bytes) name=FUN_180009b50

undefined8 FUN_180009b50(uint param_1,uint *param_2,longlong param_3,int param_4)

{
  LPCWSTR pWVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  LPVOID pvVar5;
  ulonglong uVar6;
  undefined8 uVar7;
  longlong lVar8;
  ulonglong uVar9;
  LPCWSTR local_res10;
  uint local_50;
  uint local_4c;
  uint local_48;
  uint local_44;
  uint local_40;
  uint local_3c;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  
  uVar9 = (ulonglong)param_1;
  if (((param_2 != (uint *)0x0) && (param_3 != 0)) && (param_4 == 2)) {
    lVar8 = uVar9 * 0x4a8;
    uVar2 = *param_2;
    if ((((uVar2 == (&DAT_1800737b8)[uVar9 * 0x12a]) &&
         (uVar3 = param_2[1], uVar3 == *(uint *)(&DAT_1800737bc + lVar8))) &&
        (((uVar2 & 3) == 0 && (((param_2[2] & 3) == 0 && ((param_2[4] & 3) == 0)))))) &&
       ((uVar2 <= param_2[2] &&
        ((((uVar3 <= param_2[3] && (uVar3 != 0)) && (param_2[3] != 0)) && (param_2[5] != 0)))))) {
      if (*(int *)(&DAT_180073778 + lVar8) != 0) {
        SetLastError(0xe4ae000a);
        return 0;
      }
      if (*(int *)((&DAT_180073758)[uVar9 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
        return 0;
      }
      *(undefined4 *)(&DAT_18007377c + lVar8) = 2;
      *(undefined4 *)(&DAT_180073bf4 + lVar8) = 0;
      *(undefined4 *)(&DAT_180073bf0 + lVar8) = 0;
      *(uint *)(&DAT_180073798 + lVar8) = *param_2;
      *(uint *)(&DAT_18007379c + lVar8) = param_2[1];
      *(uint *)(&DAT_1800737a0 + lVar8) = param_2[2];
      *(uint *)(&DAT_1800737a4 + lVar8) = param_2[3];
      *(uint *)(&DAT_1800737a8 + lVar8) = param_2[4];
      *(uint *)(&DAT_1800737ac + lVar8) = param_2[5];
      uVar2 = *param_2 * param_2[1] * 2;
      if (*(LPVOID *)(&DAT_180073788 + lVar8) != (LPVOID)0x0) {
        thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar8));
        *(undefined8 *)(&DAT_180073788 + lVar8) = 0;
      }
      pvVar5 = thunk_FUN_18001eb74((ulonglong)uVar2 + 0x98);
      *(LPVOID *)(&DAT_180073788 + lVar8) = pvVar5;
      if (pvVar5 == (LPVOID)0x0) {
        SetLastError(0xe4ae0002);
        return 0;
      }
      local_50 = *param_2;
      local_4c = param_2[1];
      local_48 = param_2[2];
      local_44 = param_2[3];
      local_40 = param_2[4];
      local_3c = param_2[5];
      local_38 = 4;
      local_34 = 1;
      local_30 = 1;
      local_2c = 5;
      uVar6 = FUN_18001e4c0((&DAT_180073758)[uVar9 * 0x95]);
      if ((int)uVar6 == 0) {
        SetLastError(0xe4ae0008);
        return 0;
      }
      iVar4 = FUN_18000bce0((&DAT_180073750)[uVar9 * 0x95],&local_50);
      if (iVar4 == 0) {
        if (*(LPVOID *)(&DAT_180073788 + lVar8) != (LPVOID)0x0) {
          thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar8));
          *(undefined8 *)(&DAT_180073788 + lVar8) = 0;
        }
        SetLastError(0xe4ae0003);
        return 0;
      }
      FUN_18001e3c0((&DAT_180073758)[uVar9 * 0x95],(longlong *)&local_res10);
      iVar4 = FUN_18000f130((&DAT_180073750)[uVar9 * 0x95],local_res10);
      if (iVar4 == 0) {
        SetLastError(0xe4ae0009);
        LOCK();
        pWVar1 = local_res10 + -4;
        iVar4 = *(int *)pWVar1;
        *(int *)pWVar1 = *(int *)pWVar1 + -1;
        UNLOCK();
        if (iVar4 + -1 < 1) {
          (**(code **)(**(longlong **)(local_res10 + -0xc) + 8))();
        }
        return 0;
      }
      FUN_180002f50(param_1);
      if (*(int *)((longlong)(&DAT_180073758)[uVar9 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
      }
      else {
        uVar7 = FUN_18001d2d0((void *)(&DAT_180073758)[uVar9 * 0x95],uVar2,
                              *(longlong *)(&DAT_180073788 + lVar8));
        if ((int)uVar7 != 0) {
          *(longlong *)(&DAT_180073790 + lVar8) = param_3;
          *(undefined4 *)(&DAT_180073bec + lVar8) = 0xffffffff;
          *(undefined4 *)(&DAT_180073778 + lVar8) = 1;
          LOCK();
          pWVar1 = local_res10 + -4;
          iVar4 = *(int *)pWVar1;
          *(int *)pWVar1 = *(int *)pWVar1 + -1;
          UNLOCK();
          if (iVar4 + -1 < 1) {
            (**(code **)(**(longlong **)(local_res10 + -0xc) + 8))();
          }
          return 1;
        }
      }
      if (*(LPVOID *)(&DAT_180073788 + lVar8) != (LPVOID)0x0) {
        thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar8));
        *(undefined8 *)(&DAT_180073788 + lVar8) = 0;
      }
      SetLastError(0xe4ae0008);
      LOCK();
      pWVar1 = local_res10 + -4;
      iVar4 = *(int *)pWVar1;
      *(int *)pWVar1 = *(int *)pWVar1 + -1;
      UNLOCK();
      if (iVar4 + -1 < 1) {
        (**(code **)(**(longlong **)(local_res10 + -0xc) + 8))();
      }
      return 0;
    }
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### CALLER FUNC 180009ee0 (1300 bytes) name=FUN_180009ee0

void FUN_180009ee0(uint param_1,longlong param_2)

{
  char cVar1;
  longlong lVar2;
  bool bVar3;
  uint uVar4;
  DWORD DVar5;
  int iVar6;
  __time64_t _Var7;
  ulonglong uVar8;
  byte *pbVar9;
  undefined7 extraout_var;
  uint uVar10;
  ulonglong uVar11;
  longlong lVar12;
  uint uVar13;
  int iVar14;
  undefined8 in_XMM1_Qa;
  uint local_res10 [2];
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  __time64_t local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  
  uVar11 = (ulonglong)param_1;
  lVar12 = uVar11 * 0x4a8;
  if (*(int *)(&DAT_180073778 + lVar12) == 0) {
    return;
  }
  if ((*(uint *)(param_2 + 0xc) & 3) != 0) {
    if (*(int *)(param_2 + 0x14) != (&DAT_1800737b8)[uVar11 * 0x12a]) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737bc + lVar12)) {
      return;
    }
  }
  if ((*(uint *)(param_2 + 0xc) & 4) != 0) {
    if (*(int *)(param_2 + 0x14) != *(int *)(&DAT_1800737f8 + lVar12)) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737fc + lVar12)) {
      return;
    }
  }
  _Var7 = _time64((__time64_t *)0x0);
  *(int *)(&DAT_180073bf0 + lVar12) = *(int *)(&DAT_180073bf0 + lVar12) + 1;
  lVar2 = (&DAT_180073758)[uVar11 * 0x95];
  *(__time64_t *)(&DAT_180073810 + lVar12) = _Var7;
  *(undefined8 *)(&DAT_180073818 + lVar12) = 0;
  *(undefined8 *)(&DAT_180073820 + lVar12) = 0;
  *(undefined4 *)(&DAT_180073828 + lVar12) = 0;
  cVar1 = *(char *)(lVar2 + 0x2d47);
  if ((cVar1 == '\x01') || (cVar1 == '\x02')) {
    if (*(uint *)(&DAT_180073bf0 + lVar12) < 0x14) {
      return;
    }
  }
  else if ((cVar1 == '\x04') && (*(uint *)(&DAT_180073bf0 + lVar12) < 8)) {
    return;
  }
  *(int *)(param_2 + 0x28) = *(int *)(param_2 + 0x28) + (int)*(short *)(lVar2 + 0x2d86);
  *(int *)(param_2 + 0x2c) = *(int *)(param_2 + 0x2c) + (int)*(short *)(lVar2 + 0x2d86);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x60) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x5c) = *(undefined4 *)(param_2 + 0x2c);
  iVar6 = *(int *)(&DAT_180073bec + lVar12);
  *(undefined4 *)(&DAT_180073800 + lVar12) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)(&DAT_180073804 + lVar12) = *(undefined4 *)(param_2 + 0x2c);
  if (iVar6 < 0) {
    FUN_180002f50(param_1);
    return;
  }
  uVar10 = iVar6 + 1;
  *(uint *)(&DAT_180073bec + lVar12) = uVar10;
  uVar13 = *(uint *)(lVar2 + 0x2d88);
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,
                  *(int *)(lVar2 + 0x2d8c) + uVar13 + *(int *)(lVar2 + 0x2d78));
    return;
  }
  uVar4 = *(int *)(lVar2 + 0x2d78) + uVar13;
  if (uVar10 <= uVar4) {
    if (uVar10 == uVar4) {
      if (*(int *)((&DAT_180073758)[uVar11 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
      }
      else {
        local_res10[0] = 0x6bb6b672;
        local_res10[1] = 1;
        FUN_18001c670((&DAT_180073758)[uVar11 * 0x95],local_res10,8);
      }
    }
    FUN_18000c620((&DAT_180073750)[uVar11 * 0x95],(ushort *)(param_2 + 0x4c),
                  (uint)(*(int *)(&DAT_180073bec + lVar12) == *(int *)(lVar2 + 0x2d88) + 1));
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],*(int *)(&DAT_180073bec + lVar12) + -1,
                  *(int *)(lVar2 + 0x2d8c) + *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d88));
    return;
  }
  uVar13 = *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d8c) + uVar13;
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,uVar13);
    return;
  }
  iVar14 = 0;
  switch(cVar1) {
  case '\0':
  case '\x03':
  case '\x05':
  case '\x06':
    if ((*(int *)(&DAT_180073bf4 + lVar12) == 0) && (iVar14 = 0, uVar10 == 0x4b)) {
      *(undefined4 *)(&DAT_180073bf4 + lVar12) = 1;
      iVar14 = iVar6 + -0x49;
    }
    iVar6 = 0x1e;
    break;
  case '\x01':
  case '\x02':
  case '\x04':
    if ((*(uint *)(&DAT_180073bf4 + lVar12) < 5) && (iVar14 = 0, uVar10 == 0x82 - uVar13)) {
      iVar14 = 1;
      *(uint *)(&DAT_180073bf4 + lVar12) = *(uint *)(&DAT_180073bf4 + lVar12) + 1;
    }
    iVar6 = 100;
    break;
  default:
    iVar6 = 100;
    goto LAB_18000a1d2;
  }
  if (iVar14 == 0) {
LAB_18000a1d2:
    if ((uVar10 < uVar13 + *(int *)(lVar2 + 0x2d90)) &&
       ((uVar10 < iVar6 + uVar13 ||
        (uVar13 = *(int *)((&DAT_180073750)[uVar11 * 0x95] + 0x54) - *(int *)(param_2 + 0x2c),
        uVar10 = (int)uVar13 >> 0x1f, (uVar13 ^ uVar10) - uVar10 <= *(uint *)(lVar2 + 0x2d94)))))
    goto LAB_18000a20a;
  }
  FUN_180002f50(param_1);
LAB_18000a20a:
  uVar8 = FUN_18000ca30((&DAT_180073750)[uVar11 * 0x95],in_XMM1_Qa,0,1,0);
  if ((uVar8 & 1) != 0) {
    if ((*(int *)((&DAT_180073768)[uVar11 * 0x95] + 0x44) != 0) &&
       (*(int *)(&DAT_180073ba4 + lVar12) = *(int *)(&DAT_180073ba4 + lVar12) + 1,
       *(int *)(&DAT_180073ba8 + lVar12) <= *(int *)(&DAT_180073ba4 + lVar12))) {
      *(undefined4 *)(&DAT_180073ba4 + lVar12) = 0;
      local_50 = 0;
      local_48 = 0;
      local_40 = 0;
      local_38 = 0;
      local_30 = 0;
      local_68 = 0x1010000000040;
      local_60 = *(undefined8 *)(&DAT_180073800 + lVar12);
      local_58 = *(undefined8 *)(&DAT_180073808 + lVar12);
      local_50 = _time64((__time64_t *)0x0);
      DVar5 = GetTickCount();
      local_48 = CONCAT44(*(undefined4 *)(param_2 + 0x38),DVar5);
      FUN_18001b1b0((&DAT_180073768)[uVar11 * 0x95],(longlong)&local_68,0x40,
                    *(longlong *)((&DAT_180073750)[uVar11 * 0x95] + 0x270),
                    *(int *)(param_2 + 0x18) * *(int *)(param_2 + 0x14) * 2);
    }
    if (*(int *)((&DAT_180073760)[uVar11 * 0x95] + 0x44) != 0) {
      pbVar9 = (byte *)FUN_1800110a0((&DAT_180073750)[uVar11 * 0x95]);
      lVar2 = (&DAT_180073750)[uVar11 * 0x95];
      if (((pbVar9 != (byte *)0x0) && (lVar2 + 0x6c8 != 0)) &&
         (iVar6 = (uint)*(ushort *)(lVar2 + 0x6d6) * *(int *)(lVar2 + 0x6d0) *
                  *(int *)(lVar2 + 0x6cc), iVar6 = iVar6 + (iVar6 >> 0x1f & 7U),
         uVar13 = iVar6 >> 0x1f,
         bVar3 = FUN_180001cd0((&DAT_180073760)[uVar11 * 0x95],pbVar9,(iVar6 >> 3 ^ uVar13) - uVar13
                               ,lVar2 + 0x6c8), (int)CONCAT71(extraout_var,bVar3) == 0)) {
        FUN_180001c50((&DAT_180073760)[uVar11 * 0x95]);
      }
    }
    if (*(code **)(&DAT_180073790 + lVar12) != (code *)0x0) {
      (**(code **)(&DAT_180073790 + lVar12))
                (param_1,*(undefined4 *)(param_2 + 0x28),*(undefined4 *)(param_2 + 0x38),
                 *(undefined4 *)(param_2 + 0x44),2,*(undefined8 *)(&DAT_180073770 + lVar12));
    }
  }
  return;
}


==================================================================

########## TARGET 180016ae0 ##########
callers (1):
  18000c760 FUN_18000c760

### CALLER FUNC 18000c760 (488 bytes) name=FUN_18000c760

void FUN_18000c760(longlong param_1,int param_2,uint param_3)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  longlong lVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  if ((*(int *)(param_1 + 0x228) != 0) && (*(int *)(param_1 + 0x41340) != 0)) {
    if (param_2 == 0) {
      FUN_180016ae0(param_1);
      if ((*(int *)(param_1 + 0x41340) != 0) && (*(int *)(param_1 + 0x41344) != 0)) {
        FUN_18000ffb0(param_1);
      }
    }
    else {
      uVar6 = 0;
      if (param_2 == 1) {
        if (1 < param_3) {
          DAT_18009a43c = 0;
          DAT_18009a438 = 0;
          DAT_18009a440 = (*(int *)(param_1 + 0x41554) + -1) * *(int *)(param_1 + 0x47938);
          DAT_18009a444 = *(int *)(param_1 + 0x47938) * *(int *)(param_1 + 0x41554) * 2;
          DAT_18009a448 =
               (DAT_18009a444 + DAT_18009a440 + -2 + param_3) / (param_3 - 1) + 7 & 0xfffffff8;
        }
      }
      else if (param_2 < 1) goto LAB_18000c92d;
      uVar3 = DAT_18009a448;
      iVar2 = DAT_18009a444;
      iVar1 = DAT_18009a43c;
      iVar5 = DAT_18009a438;
      if (DAT_18009a438 < DAT_18009a440) {
        lVar4 = (longlong)DAT_18009a438;
        uVar6 = DAT_18009a440 - DAT_18009a438;
        if ((int)DAT_18009a448 < DAT_18009a440 - DAT_18009a438) {
          uVar6 = DAT_18009a448;
        }
        FUN_180016dd0(param_1,(short *)(*(longlong *)(param_1 + 0x41848) + lVar4 * 2),
                      (short *)(*(longlong *)(param_1 + 0x41850) + lVar4 * 2),
                      (short *)(*(longlong *)(param_1 + 0x41858) + lVar4 * 2),uVar6);
        DAT_18009a438 = iVar5 + uVar6;
      }
      if (((int)uVar6 < (int)uVar3) && (iVar1 < iVar2)) {
        lVar4 = (longlong)iVar1;
        iVar7 = uVar3 - uVar6;
        iVar5 = iVar2 - iVar1;
        if (iVar7 < iVar2 - iVar1) {
          iVar5 = iVar7;
        }
        FUN_180016f10(param_1,(ushort *)(*(longlong *)(param_1 + 0x41860) + lVar4 * 2),
                      (ushort *)(*(longlong *)(param_1 + 0x41868) + lVar4 * 2),
                      (short *)(*(longlong *)(param_1 + 0x41870) + lVar4 * 2),iVar5);
        DAT_18009a43c = iVar1 + iVar5;
        if (DAT_18009a43c == iVar2) {
          *(undefined4 *)(param_1 + 0x41348) = 1;
        }
      }
    }
  }
LAB_18000c92d:
                    /* WARNING: Could not recover jumptable at 0x00018000c941. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  return;
}


==================================================================

########## TARGET 18000ffb0 ##########
callers (1):
  18000c760 FUN_18000c760

### CALLER FUNC 18000c760 (488 bytes) name=FUN_18000c760

void FUN_18000c760(longlong param_1,int param_2,uint param_3)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  longlong lVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  if ((*(int *)(param_1 + 0x228) != 0) && (*(int *)(param_1 + 0x41340) != 0)) {
    if (param_2 == 0) {
      FUN_180016ae0(param_1);
      if ((*(int *)(param_1 + 0x41340) != 0) && (*(int *)(param_1 + 0x41344) != 0)) {
        FUN_18000ffb0(param_1);
      }
    }
    else {
      uVar6 = 0;
      if (param_2 == 1) {
        if (1 < param_3) {
          DAT_18009a43c = 0;
          DAT_18009a438 = 0;
          DAT_18009a440 = (*(int *)(param_1 + 0x41554) + -1) * *(int *)(param_1 + 0x47938);
          DAT_18009a444 = *(int *)(param_1 + 0x47938) * *(int *)(param_1 + 0x41554) * 2;
          DAT_18009a448 =
               (DAT_18009a444 + DAT_18009a440 + -2 + param_3) / (param_3 - 1) + 7 & 0xfffffff8;
        }
      }
      else if (param_2 < 1) goto LAB_18000c92d;
      uVar3 = DAT_18009a448;
      iVar2 = DAT_18009a444;
      iVar1 = DAT_18009a43c;
      iVar5 = DAT_18009a438;
      if (DAT_18009a438 < DAT_18009a440) {
        lVar4 = (longlong)DAT_18009a438;
        uVar6 = DAT_18009a440 - DAT_18009a438;
        if ((int)DAT_18009a448 < DAT_18009a440 - DAT_18009a438) {
          uVar6 = DAT_18009a448;
        }
        FUN_180016dd0(param_1,(short *)(*(longlong *)(param_1 + 0x41848) + lVar4 * 2),
                      (short *)(*(longlong *)(param_1 + 0x41850) + lVar4 * 2),
                      (short *)(*(longlong *)(param_1 + 0x41858) + lVar4 * 2),uVar6);
        DAT_18009a438 = iVar5 + uVar6;
      }
      if (((int)uVar6 < (int)uVar3) && (iVar1 < iVar2)) {
        lVar4 = (longlong)iVar1;
        iVar7 = uVar3 - uVar6;
        iVar5 = iVar2 - iVar1;
        if (iVar7 < iVar2 - iVar1) {
          iVar5 = iVar7;
        }
        FUN_180016f10(param_1,(ushort *)(*(longlong *)(param_1 + 0x41860) + lVar4 * 2),
                      (ushort *)(*(longlong *)(param_1 + 0x41868) + lVar4 * 2),
                      (short *)(*(longlong *)(param_1 + 0x41870) + lVar4 * 2),iVar5);
        DAT_18009a43c = iVar1 + iVar5;
        if (DAT_18009a43c == iVar2) {
          *(undefined4 *)(param_1 + 0x41348) = 1;
        }
      }
    }
  }
LAB_18000c92d:
                    /* WARNING: Could not recover jumptable at 0x00018000c941. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  return;
}


==================================================================

########## TARGET 18001d930 ##########
callers (0):

########## TARGET 18001d6e0 ##########
callers (1):
  180008bd0 FUN_180008bd0

### CALLER FUNC 180008bd0 (3886 bytes) name=FUN_180008bd0

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8 FUN_180008bd0(uint param_1)

{
  int *piVar1;
  ulonglong *puVar2;
  char cVar3;
  longlong *plVar4;
  undefined8 uVar5;
  undefined **ppuVar6;
  undefined8 *puVar7;
  int iVar8;
  uint uVar9;
  longlong lVar10;
  ulonglong *_Source;
  ulonglong uVar11;
  longlong lVar12;
  uint uVar13;
  char *pcVar14;
  ulonglong uVar15;
  longlong lVar16;
  undefined1 auStack_d8 [32];
  ulonglong *local_b8;
  uint local_b0;
  uint local_ac;
  uint local_a0;
  uint local_9c;
  undefined4 local_98;
  undefined8 local_78;
  undefined8 local_70 [5];
  undefined4 local_48;
  float local_44;
  char local_40;
  char local_3f;
  char local_3e;
  char local_3d;
  char local_3c;
  char local_3b;
  char local_3a;
  char local_39;
  ulonglong local_38;
  
  local_78 = 0xfffffffffffffffe;
  local_38 = DAT_18006cea0 ^ (ulonglong)auStack_d8;
  lVar16 = (longlong)(int)param_1;
  uVar11 = (ulonglong)param_1;
  lVar12 = uVar11 * 0x4a8;
  if (*(int *)((&DAT_180073758)[uVar11 * 0x95] + 0x14) == 0) {
    SetLastError(0xe4ae0005);
LAB_180008c52:
    if (*(int *)((&DAT_180073758)[uVar11 * 0x95] + 0x14) == 0) {
      SetLastError(0xe4ae0005);
    }
    else {
      uVar5 = FUN_18001d6e0((&DAT_180073758)[uVar11 * 0x95],(undefined8 *)&local_b0,local_70,1000);
      if ((int)uVar5 != 0) goto LAB_180008c98;
    }
    SetLastError(0xe4ae0008);
    uVar5 = 0;
  }
  else {
    uVar5 = FUN_18001d6e0((&DAT_180073758)[uVar11 * 0x95],(undefined8 *)&local_b0,local_70,500);
    if ((int)uVar5 == 0) goto LAB_180008c52;
LAB_180008c98:
    uVar9 = local_b0;
    uVar13 = local_ac >> 0x18;
    if ((((((uVar13 == 0) || (uVar13 == 1)) && (local_b0 != 0x9898f19)) &&
         ((local_b0 != 0x9898f1a && (local_b0 != 0x9898f1c)))) &&
        ((local_b0 != 0x9898f1f && ((local_b0 != 0x9898f20 && (local_b0 != 0x9898f21)))))) &&
       (local_b0 != 0x9898f2b)) {
      SetLastError(0xe4ae000b);
      uVar5 = 0;
    }
    else {
      FUN_1800357d0((ulonglong *)(&DAT_1800737b8 + uVar11 * 0x12a),0,0x48);
      *(undefined4 *)(&DAT_180073bac + lVar12) = 0;
      *(undefined4 *)(&DAT_180073bb0 + lVar12) = 0;
      FUN_1800357d0((ulonglong *)(&DAT_180073bb4 + lVar12),0,0x38);
      FUN_1800357d0((ulonglong *)((&DAT_180073750)[uVar11 * 0x95] + 8),0,200);
      (&DAT_1800737b0)[uVar11 * 0x12a] = uVar9;
      *(undefined4 *)(&DAT_1800737b4 + lVar12) = 0;
      *(undefined4 *)(&DAT_1800737c0 + lVar12) = 0;
      *(undefined4 *)(&DAT_1800737c4 + lVar12) = 0;
      ppuVar6 = FUN_18001fcc0();
      if (ppuVar6 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_18000b170(-0x7fffbffb);
      }
      puVar7 = (undefined8 *)(**(code **)(*ppuVar6 + 0x18))(ppuVar6);
      _Source = puVar7 + 3;
      local_b8 = _Source;
      switch(uVar13) {
      case 0:
        lVar10 = -1;
        pcVar14 = "C1";
        do {
          if (lVar10 == 0) break;
          lVar10 = lVar10 + -1;
          cVar3 = *pcVar14;
          pcVar14 = pcVar14 + 1;
        } while (cVar3 != '\0');
        iVar8 = ~(uint)lVar10 - 1;
        if (iVar8 == 0) {
          plVar4 = (longlong *)*puVar7;
          if (*(int *)(puVar7 + 1) != 0) {
            if (*(int *)(puVar7 + 2) < 0) {
              if (*(int *)((longlong)puVar7 + 0xc) < 0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7ff8ffa9);
              }
              *(undefined4 *)(puVar7 + 1) = 0;
              *(char *)_Source = '\0';
            }
            else {
              LOCK();
              piVar1 = (int *)(puVar7 + 2);
              iVar8 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar8 + -1 < 1) {
                (**(code **)(*(longlong *)*puVar7 + 8))();
              }
              lVar10 = (**(code **)(*plVar4 + 0x18))(plVar4);
              _Source = (ulonglong *)(lVar10 + 0x18);
              uVar9 = local_b0;
              local_b8 = _Source;
            }
          }
        }
        else {
          uVar13 = *(uint *)(puVar7 + 1);
          uVar15 = (longlong)&DAT_1800590e0 - (longlong)_Source;
          if ((int)(*(int *)((longlong)puVar7 + 0xc) - iVar8 | 1U - *(int *)(puVar7 + 2)) < 0) {
            FUN_18000ab60((longlong *)&local_b8,iVar8);
          }
          _Source = local_b8;
          if (uVar13 < uVar15) {
            FUN_180032c60(local_b8,(longlong)iVar8,&DAT_1800590e0,(longlong)iVar8);
          }
          else {
            memmove_s(local_b8,(longlong)iVar8,(void *)(uVar15 + (longlong)local_b8),(longlong)iVar8
                     );
          }
          if ((iVar8 < 0) || (*(int *)((longlong)_Source + -0xc) < iVar8)) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7ff8ffa9);
          }
          *(int *)(_Source + -2) = iVar8;
          *(undefined1 *)((longlong)iVar8 + (longlong)_Source) = 0;
        }
        break;
      case 1:
        lVar10 = -1;
        pcVar14 = "M3";
        do {
          if (lVar10 == 0) break;
          lVar10 = lVar10 + -1;
          cVar3 = *pcVar14;
          pcVar14 = pcVar14 + 1;
        } while (cVar3 != '\0');
        iVar8 = ~(uint)lVar10 - 1;
        if (iVar8 == 0) {
          plVar4 = (longlong *)*puVar7;
          if (*(int *)(puVar7 + 1) != 0) {
            if (*(int *)(puVar7 + 2) < 0) {
              if (*(int *)((longlong)puVar7 + 0xc) < 0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7ff8ffa9);
              }
              *(undefined4 *)(puVar7 + 1) = 0;
              *(char *)_Source = '\0';
            }
            else {
              LOCK();
              piVar1 = (int *)(puVar7 + 2);
              iVar8 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar8 + -1 < 1) {
                (**(code **)(*(longlong *)*puVar7 + 8))();
              }
              lVar10 = (**(code **)(*plVar4 + 0x18))(plVar4);
              _Source = (ulonglong *)(lVar10 + 0x18);
              uVar9 = local_b0;
              local_b8 = _Source;
            }
          }
        }
        else {
          uVar13 = *(uint *)(puVar7 + 1);
          uVar15 = (longlong)&DAT_180059100 - (longlong)_Source;
          if ((int)(*(int *)((longlong)puVar7 + 0xc) - iVar8 | 1U - *(int *)(puVar7 + 2)) < 0) {
            FUN_18000ab60((longlong *)&local_b8,iVar8);
          }
          _Source = local_b8;
          if (uVar13 < uVar15) {
            FUN_180032c60(local_b8,(longlong)iVar8,&DAT_180059100,(longlong)iVar8);
          }
          else {
            memmove_s(local_b8,(longlong)iVar8,(void *)(uVar15 + (longlong)local_b8),(longlong)iVar8
                     );
          }
          if ((iVar8 < 0) || (*(int *)((longlong)_Source + -0xc) < iVar8)) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7ff8ffa9);
          }
          *(int *)(_Source + -2) = iVar8;
          *(undefined1 *)((longlong)iVar8 + (longlong)_Source) = 0;
        }
        break;
      case 2:
        lVar10 = -1;
        pcVar14 = "M3Pro";
        do {
          if (lVar10 == 0) break;
          lVar10 = lVar10 + -1;
          cVar3 = *pcVar14;
          pcVar14 = pcVar14 + 1;
        } while (cVar3 != '\0');
        iVar8 = ~(uint)lVar10 - 1;
        if (iVar8 == 0) {
          plVar4 = (longlong *)*puVar7;
          if (*(int *)(puVar7 + 1) != 0) {
            if (*(int *)(puVar7 + 2) < 0) {
              if (*(int *)((longlong)puVar7 + 0xc) < 0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7ff8ffa9);
              }
              *(undefined4 *)(puVar7 + 1) = 0;
              *(char *)_Source = '\0';
            }
            else {
              LOCK();
              piVar1 = (int *)(puVar7 + 2);
              iVar8 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar8 + -1 < 1) {
                (**(code **)(*(longlong *)*puVar7 + 8))();
              }
              lVar10 = (**(code **)(*plVar4 + 0x18))(plVar4);
              _Source = (ulonglong *)(lVar10 + 0x18);
              uVar9 = local_b0;
              local_b8 = _Source;
            }
          }
        }
        else {
          uVar13 = *(uint *)(puVar7 + 1);
          uVar15 = (longlong)&DAT_180059104 - (longlong)_Source;
          if ((int)(*(int *)((longlong)puVar7 + 0xc) - iVar8 | 1U - *(int *)(puVar7 + 2)) < 0) {
            FUN_18000ab60((longlong *)&local_b8,iVar8);
          }
          _Source = local_b8;
          if (uVar13 < uVar15) {
            FUN_180032c60(local_b8,(longlong)iVar8,&DAT_180059104,(longlong)iVar8);
          }
          else {
            memmove_s(local_b8,(longlong)iVar8,(void *)(uVar15 + (longlong)local_b8),(longlong)iVar8
                     );
          }
          if ((iVar8 < 0) || (*(int *)((longlong)_Source + -0xc) < iVar8)) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7ff8ffa9);
          }
          *(int *)(_Source + -2) = iVar8;
          *(undefined1 *)((longlong)iVar8 + (longlong)_Source) = 0;
        }
        break;
      case 3:
        lVar10 = -1;
        pcVar14 = "160Core";
        do {
          if (lVar10 == 0) break;
          lVar10 = lVar10 + -1;
          cVar3 = *pcVar14;
          pcVar14 = pcVar14 + 1;
        } while (cVar3 != '\0');
        iVar8 = ~(uint)lVar10 - 1;
        if (iVar8 == 0) {
          plVar4 = (longlong *)*puVar7;
          if (*(int *)(puVar7 + 1) != 0) {
            if (*(int *)(puVar7 + 2) < 0) {
              if (*(int *)((longlong)puVar7 + 0xc) < 0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7ff8ffa9);
              }
              *(undefined4 *)(puVar7 + 1) = 0;
              *(char *)_Source = '\0';
            }
            else {
              LOCK();
              piVar1 = (int *)(puVar7 + 2);
              iVar8 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar8 + -1 < 1) {
                (**(code **)(*(longlong *)*puVar7 + 8))();
              }
              lVar10 = (**(code **)(*plVar4 + 0x18))(plVar4);
              _Source = (ulonglong *)(lVar10 + 0x18);
              uVar9 = local_b0;
              local_b8 = _Source;
            }
          }
        }
        else {
          uVar13 = *(uint *)(puVar7 + 1);
          uVar15 = (longlong)&DAT_1800590f8 - (longlong)_Source;
          if ((int)(*(int *)((longlong)puVar7 + 0xc) - iVar8 | 1U - *(int *)(puVar7 + 2)) < 0) {
            FUN_18000ab60((longlong *)&local_b8,iVar8);
          }
          _Source = local_b8;
          if (uVar13 < uVar15) {
            FUN_180032c60(local_b8,(longlong)iVar8,&DAT_1800590f8,(longlong)iVar8);
          }
          else {
            memmove_s(local_b8,(longlong)iVar8,(void *)(uVar15 + (longlong)local_b8),(longlong)iVar8
                     );
          }
          if ((iVar8 < 0) || (*(int *)((longlong)_Source + -0xc) < iVar8)) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7ff8ffa9);
          }
          *(int *)(_Source + -2) = iVar8;
          *(undefined1 *)((longlong)iVar8 + (longlong)_Source) = 0;
        }
        break;
      case 4:
        lVar10 = -1;
        pcVar14 = "M6";
        do {
          if (lVar10 == 0) break;
          lVar10 = lVar10 + -1;
          cVar3 = *pcVar14;
          pcVar14 = pcVar14 + 1;
        } while (cVar3 != '\0');
        iVar8 = ~(uint)lVar10 - 1;
        if (iVar8 == 0) {
          plVar4 = (longlong *)*puVar7;
          if (*(int *)(puVar7 + 1) != 0) {
            if (*(int *)(puVar7 + 2) < 0) {
              if (*(int *)((longlong)puVar7 + 0xc) < 0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7ff8ffa9);
              }
              *(undefined4 *)(puVar7 + 1) = 0;
              *(char *)_Source = '\0';
            }
            else {
              LOCK();
              piVar1 = (int *)(puVar7 + 2);
              iVar8 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar8 + -1 < 1) {
                (**(code **)(*(longlong *)*puVar7 + 8))();
              }
              lVar10 = (**(code **)(*plVar4 + 0x18))(plVar4);
              _Source = (ulonglong *)(lVar10 + 0x18);
              uVar9 = local_b0;
              local_b8 = _Source;
            }
          }
        }
        else {
          uVar13 = *(uint *)(puVar7 + 1);
          uVar15 = (longlong)&DAT_18005910c - (longlong)_Source;
          if ((int)(*(int *)((longlong)puVar7 + 0xc) - iVar8 | 1U - *(int *)(puVar7 + 2)) < 0) {
            FUN_18000ab60((longlong *)&local_b8,iVar8);
          }
          _Source = local_b8;
          if (uVar13 < uVar15) {
            FUN_180032c60(local_b8,(longlong)iVar8,&DAT_18005910c,(longlong)iVar8);
          }
          else {
            memmove_s(local_b8,(longlong)iVar8,(void *)(uVar15 + (longlong)local_b8),(longlong)iVar8
                     );
          }
          if ((iVar8 < 0) || (*(int *)((longlong)_Source + -0xc) < iVar8)) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7ff8ffa9);
          }
          *(int *)(_Source + -2) = iVar8;
          *(undefined1 *)((longlong)iVar8 + (longlong)_Source) = 0;
        }
        break;
      case 5:
        lVar10 = -1;
        pcVar14 = "C1Pro";
        do {
          if (lVar10 == 0) break;
          lVar10 = lVar10 + -1;
          cVar3 = *pcVar14;
          pcVar14 = pcVar14 + 1;
        } while (cVar3 != '\0');
        iVar8 = ~(uint)lVar10 - 1;
        if (iVar8 == 0) {
          plVar4 = (longlong *)*puVar7;
          if (*(int *)(puVar7 + 1) != 0) {
            if (*(int *)(puVar7 + 2) < 0) {
              if (*(int *)((longlong)puVar7 + 0xc) < 0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7ff8ffa9);
              }
              *(undefined4 *)(puVar7 + 1) = 0;
              *(char *)_Source = '\0';
            }
            else {
              LOCK();
              piVar1 = (int *)(puVar7 + 2);
              iVar8 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar8 + -1 < 1) {
                (**(code **)(*(longlong *)*puVar7 + 8))();
              }
              lVar10 = (**(code **)(*plVar4 + 0x18))(plVar4);
              _Source = (ulonglong *)(lVar10 + 0x18);
              uVar9 = local_b0;
              local_b8 = _Source;
            }
          }
        }
        else {
          uVar13 = *(uint *)(puVar7 + 1);
          uVar15 = (longlong)&DAT_1800590e4 - (longlong)_Source;
          if ((int)(*(int *)((longlong)puVar7 + 0xc) - iVar8 | 1U - *(int *)(puVar7 + 2)) < 0) {
            FUN_18000ab60((longlong *)&local_b8,iVar8);
          }
          _Source = local_b8;
          if (uVar13 < uVar15) {
            FUN_180032c60(local_b8,(longlong)iVar8,&DAT_1800590e4,(longlong)iVar8);
          }
          else {
            memmove_s(local_b8,(longlong)iVar8,(void *)(uVar15 + (longlong)local_b8),(longlong)iVar8
                     );
          }
          if ((iVar8 < 0) || (*(int *)((longlong)_Source + -0xc) < iVar8)) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7ff8ffa9);
          }
          *(int *)(_Source + -2) = iVar8;
          *(undefined1 *)((longlong)iVar8 + (longlong)_Source) = 0;
        }
        break;
      case 6:
        lVar10 = -1;
        pcVar14 = "C1ProLt";
        do {
          if (lVar10 == 0) break;
          lVar10 = lVar10 + -1;
          cVar3 = *pcVar14;
          pcVar14 = pcVar14 + 1;
        } while (cVar3 != '\0');
        iVar8 = ~(uint)lVar10 - 1;
        if (iVar8 == 0) {
          plVar4 = (longlong *)*puVar7;
          if (*(int *)(puVar7 + 1) != 0) {
            if (*(int *)(puVar7 + 2) < 0) {
              if (*(int *)((longlong)puVar7 + 0xc) < 0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7ff8ffa9);
              }
              *(undefined4 *)(puVar7 + 1) = 0;
              *(char *)_Source = '\0';
            }
            else {
              LOCK();
              piVar1 = (int *)(puVar7 + 2);
              iVar8 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar8 + -1 < 1) {
                (**(code **)(*(longlong *)*puVar7 + 8))();
              }
              lVar10 = (**(code **)(*plVar4 + 0x18))(plVar4);
              _Source = (ulonglong *)(lVar10 + 0x18);
              uVar9 = local_b0;
              local_b8 = _Source;
            }
          }
        }
        else {
          uVar13 = *(uint *)(puVar7 + 1);
          uVar15 = (longlong)&DAT_1800590f0 - (longlong)_Source;
          if ((int)(*(int *)((longlong)puVar7 + 0xc) - iVar8 | 1U - *(int *)(puVar7 + 2)) < 0) {
            FUN_18000ab60((longlong *)&local_b8,iVar8);
          }
          _Source = local_b8;
          if (uVar13 < uVar15) {
            FUN_180032c60(local_b8,(longlong)iVar8,&DAT_1800590f0,(longlong)iVar8);
          }
          else {
            memmove_s(local_b8,(longlong)iVar8,(void *)(uVar15 + (longlong)local_b8),(longlong)iVar8
                     );
          }
          if ((iVar8 < 0) || (*(int *)((longlong)_Source + -0xc) < iVar8)) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7ff8ffa9);
          }
          *(int *)(_Source + -2) = iVar8;
          *(undefined1 *)((longlong)iVar8 + (longlong)_Source) = 0;
        }
        break;
      default:
        lVar10 = -1;
        pcVar14 = "Mx";
        do {
          if (lVar10 == 0) break;
          lVar10 = lVar10 + -1;
          cVar3 = *pcVar14;
          pcVar14 = pcVar14 + 1;
        } while (cVar3 != '\0');
        iVar8 = ~(uint)lVar10 - 1;
        if (iVar8 == 0) {
          plVar4 = (longlong *)*puVar7;
          if (*(int *)(puVar7 + 1) != 0) {
            if (*(int *)(puVar7 + 2) < 0) {
              if (*(int *)((longlong)puVar7 + 0xc) < 0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7ff8ffa9);
              }
              *(undefined4 *)(puVar7 + 1) = 0;
              *(char *)_Source = '\0';
            }
            else {
              LOCK();
              piVar1 = (int *)(puVar7 + 2);
              iVar8 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar8 + -1 < 1) {
                (**(code **)(*(longlong *)*puVar7 + 8))();
              }
              lVar10 = (**(code **)(*plVar4 + 0x18))(plVar4);
              _Source = (ulonglong *)(lVar10 + 0x18);
              uVar9 = local_b0;
              local_b8 = _Source;
            }
          }
        }
        else {
          uVar13 = *(uint *)(puVar7 + 1);
          uVar15 = (longlong)&DAT_180059110 - (longlong)_Source;
          if ((int)(*(int *)((longlong)puVar7 + 0xc) - iVar8 | 1U - *(int *)(puVar7 + 2)) < 0) {
            FUN_18000ab60((longlong *)&local_b8,iVar8);
          }
          _Source = local_b8;
          if (uVar13 < uVar15) {
            FUN_180032c60(local_b8,(longlong)iVar8,&DAT_180059110,(longlong)iVar8);
          }
          else {
            memmove_s(local_b8,(longlong)iVar8,(void *)(uVar15 + (longlong)local_b8),(longlong)iVar8
                     );
          }
          if ((iVar8 < 0) || (*(int *)((longlong)_Source + -0xc) < iVar8)) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7ff8ffa9);
          }
          *(int *)(_Source + -2) = iVar8;
          *(undefined1 *)((longlong)iVar8 + (longlong)_Source) = 0;
        }
      }
      strncpy(&DAT_1800737e8 + lVar12,(char *)_Source,8);
      (&DAT_1800737ef)[lVar12] = 0;
      FUN_180032bb0(&DAT_1800737c8 + lVar12,(byte *)"%s-%u",_Source,(ulonglong)uVar9);
      (&DAT_1800737e7)[lVar12] = 0;
      (&DAT_1800737b8)[uVar11 * 0x12a] = local_a0;
      *(uint *)(&DAT_1800737bc + lVar12) = local_9c;
      *(uint *)(&DAT_1800737f8 + lVar12) = local_a0;
      *(uint *)(&DAT_1800737fc + lVar12) = local_9c;
      if ((local_a0 < 0x51) && (local_9c < 0x51)) {
        *(uint *)(&DAT_1800737f8 + lVar12) = local_a0 * 4;
        *(uint *)(&DAT_1800737fc + lVar12) = local_9c * 4;
      }
      if ((local_a0 < 0xa1) && (local_9c < 0xa1)) {
        *(int *)(&DAT_1800737f8 + lVar12) = *(int *)(&DAT_1800737f8 + lVar12) * 2;
        *(int *)(&DAT_1800737fc + lVar12) = *(int *)(&DAT_1800737fc + lVar12) * 2;
      }
      *(undefined4 *)(&DAT_1800737f0 + lVar12) = local_98;
      *(undefined4 *)(&DAT_1800737f4 + lVar12) = local_98;
      *(undefined4 *)(&DAT_180073780 + lVar12) = 2;
      FUN_18000d5f0((&DAT_180073750)[uVar11 * 0x95],2);
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 100) = 1;
      lVar12 = (&DAT_180073750)[uVar11 * 0x95];
      EnterCriticalSection((LPCRITICAL_SECTION)(lVar12 + 0x238));
      memcpy(&DAT_180099000,&DAT_18005cde0,0xa1c);
      lVar10 = 0;
      do {
        uVar9 = *(int *)((longlong)&DAT_180099004 + lVar10) -
                *(int *)((longlong)&DAT_180099000 + lVar10);
        *(uint *)((longlong)&DAT_180099a20 + lVar10) = ((uVar9 >> 1) + 0x1000000) / uVar9;
        uVar9 = *(int *)((longlong)&DAT_180099008 + lVar10) -
                *(int *)((longlong)&DAT_180099004 + lVar10);
        *(uint *)((longlong)&DAT_180099a24 + lVar10) = ((uVar9 >> 1) + 0x1000000) / uVar9;
        lVar10 = lVar10 + 8;
      } while (lVar10 < 0xa18);
      DAT_180073748 = (undefined4)(0x7fffffff / (longlong)DAT_18009a434);
      *(undefined4 *)(lVar12 + 0x68) = 7;
      LeaveCriticalSection((LPCRITICAL_SECTION)(lVar12 + 0x238));
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x50) = 200;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 8) = 0;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x10) = 0;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x14) = 20000;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x18) = 100000;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x1c) = 0;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x20) = 0xff;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x24) = 5;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x70) = 1;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x8c) = 1;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x6c) = 1;
      if (local_44 == _DAT_180057598) {
        *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xa4) = 0;
        *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xa8) = 0;
        *(int *)((&DAT_180073750)[lVar16 * 0x95] + 0xac) = local_40 * 0x32;
        *(int *)((&DAT_180073750)[lVar16 * 0x95] + 0xb0) = local_3f * 0x32;
        *(int *)((&DAT_180073750)[lVar16 * 0x95] + 0xb4) = local_3e * 0x32;
        *(int *)((&DAT_180073750)[lVar16 * 0x95] + 0xb8) = local_3d * 0x32;
        *(int *)((&DAT_180073750)[lVar16 * 0x95] + 0xbc) = local_3c * 0x32;
        *(int *)((&DAT_180073750)[lVar16 * 0x95] + 0xc0) = local_3b * 0x32;
        *(int *)((&DAT_180073750)[lVar16 * 0x95] + 0xc4) = local_3a * 0x32;
        *(int *)((&DAT_180073750)[lVar16 * 0x95] + 200) = local_39 * 0x32;
      }
      else {
        *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xa4) = local_48;
        *(float *)((&DAT_180073750)[uVar11 * 0x95] + 0xa8) = local_44;
        lVar12 = (&DAT_180073750)[uVar11 * 0x95];
        *(undefined4 *)(lVar12 + 0xac) = 0;
        *(undefined4 *)(lVar12 + 0xb0) = 0;
        *(undefined4 *)(lVar12 + 0xb4) = 0;
        *(undefined4 *)(lVar12 + 0xb8) = 0;
        *(undefined4 *)(lVar12 + 0xbc) = 0;
        *(undefined4 *)(lVar12 + 0xc0) = 0;
        *(undefined4 *)(lVar12 + 0xc4) = 0;
        *(undefined4 *)(lVar12 + 200) = 0;
      }
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xcc) = 2;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xd0) = 0x41200000;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xd4) = 0x3f800000;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xd8) = 0x41a00000;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xdc) = 0x3ecccccd;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xe0) = 0x41a00000;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xe4) = 0;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xe8) = 0;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xec) = 0;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xf0) = 0;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xf4) = 0x3f7fa57f;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xf8) = 0x3f800000;
      LOCK();
      puVar2 = _Source + -1;
      uVar11 = *puVar2;
      *(int *)puVar2 = (int)*puVar2 + -1;
      UNLOCK();
      if ((int)uVar11 + -1 < 1) {
        (**(code **)(*(longlong *)_Source[-3] + 8))();
      }
      uVar5 = 1;
    }
  }
  return uVar5;
}


==================================================================

########## TARGET 18001d2d0 ##########
callers (1):
  180009b50 FUN_180009b50

### CALLER FUNC 180009b50 (875 bytes) name=FUN_180009b50

undefined8 FUN_180009b50(uint param_1,uint *param_2,longlong param_3,int param_4)

{
  LPCWSTR pWVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  LPVOID pvVar5;
  ulonglong uVar6;
  undefined8 uVar7;
  longlong lVar8;
  ulonglong uVar9;
  LPCWSTR local_res10;
  uint local_50;
  uint local_4c;
  uint local_48;
  uint local_44;
  uint local_40;
  uint local_3c;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  
  uVar9 = (ulonglong)param_1;
  if (((param_2 != (uint *)0x0) && (param_3 != 0)) && (param_4 == 2)) {
    lVar8 = uVar9 * 0x4a8;
    uVar2 = *param_2;
    if ((((uVar2 == (&DAT_1800737b8)[uVar9 * 0x12a]) &&
         (uVar3 = param_2[1], uVar3 == *(uint *)(&DAT_1800737bc + lVar8))) &&
        (((uVar2 & 3) == 0 && (((param_2[2] & 3) == 0 && ((param_2[4] & 3) == 0)))))) &&
       ((uVar2 <= param_2[2] &&
        ((((uVar3 <= param_2[3] && (uVar3 != 0)) && (param_2[3] != 0)) && (param_2[5] != 0)))))) {
      if (*(int *)(&DAT_180073778 + lVar8) != 0) {
        SetLastError(0xe4ae000a);
        return 0;
      }
      if (*(int *)((&DAT_180073758)[uVar9 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
        return 0;
      }
      *(undefined4 *)(&DAT_18007377c + lVar8) = 2;
      *(undefined4 *)(&DAT_180073bf4 + lVar8) = 0;
      *(undefined4 *)(&DAT_180073bf0 + lVar8) = 0;
      *(uint *)(&DAT_180073798 + lVar8) = *param_2;
      *(uint *)(&DAT_18007379c + lVar8) = param_2[1];
      *(uint *)(&DAT_1800737a0 + lVar8) = param_2[2];
      *(uint *)(&DAT_1800737a4 + lVar8) = param_2[3];
      *(uint *)(&DAT_1800737a8 + lVar8) = param_2[4];
      *(uint *)(&DAT_1800737ac + lVar8) = param_2[5];
      uVar2 = *param_2 * param_2[1] * 2;
      if (*(LPVOID *)(&DAT_180073788 + lVar8) != (LPVOID)0x0) {
        thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar8));
        *(undefined8 *)(&DAT_180073788 + lVar8) = 0;
      }
      pvVar5 = thunk_FUN_18001eb74((ulonglong)uVar2 + 0x98);
      *(LPVOID *)(&DAT_180073788 + lVar8) = pvVar5;
      if (pvVar5 == (LPVOID)0x0) {
        SetLastError(0xe4ae0002);
        return 0;
      }
      local_50 = *param_2;
      local_4c = param_2[1];
      local_48 = param_2[2];
      local_44 = param_2[3];
      local_40 = param_2[4];
      local_3c = param_2[5];
      local_38 = 4;
      local_34 = 1;
      local_30 = 1;
      local_2c = 5;
      uVar6 = FUN_18001e4c0((&DAT_180073758)[uVar9 * 0x95]);
      if ((int)uVar6 == 0) {
        SetLastError(0xe4ae0008);
        return 0;
      }
      iVar4 = FUN_18000bce0((&DAT_180073750)[uVar9 * 0x95],&local_50);
      if (iVar4 == 0) {
        if (*(LPVOID *)(&DAT_180073788 + lVar8) != (LPVOID)0x0) {
          thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar8));
          *(undefined8 *)(&DAT_180073788 + lVar8) = 0;
        }
        SetLastError(0xe4ae0003);
        return 0;
      }
      FUN_18001e3c0((&DAT_180073758)[uVar9 * 0x95],(longlong *)&local_res10);
      iVar4 = FUN_18000f130((&DAT_180073750)[uVar9 * 0x95],local_res10);
      if (iVar4 == 0) {
        SetLastError(0xe4ae0009);
        LOCK();
        pWVar1 = local_res10 + -4;
        iVar4 = *(int *)pWVar1;
        *(int *)pWVar1 = *(int *)pWVar1 + -1;
        UNLOCK();
        if (iVar4 + -1 < 1) {
          (**(code **)(**(longlong **)(local_res10 + -0xc) + 8))();
        }
        return 0;
      }
      FUN_180002f50(param_1);
      if (*(int *)((longlong)(&DAT_180073758)[uVar9 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
      }
      else {
        uVar7 = FUN_18001d2d0((void *)(&DAT_180073758)[uVar9 * 0x95],uVar2,
                              *(longlong *)(&DAT_180073788 + lVar8));
        if ((int)uVar7 != 0) {
          *(longlong *)(&DAT_180073790 + lVar8) = param_3;
          *(undefined4 *)(&DAT_180073bec + lVar8) = 0xffffffff;
          *(undefined4 *)(&DAT_180073778 + lVar8) = 1;
          LOCK();
          pWVar1 = local_res10 + -4;
          iVar4 = *(int *)pWVar1;
          *(int *)pWVar1 = *(int *)pWVar1 + -1;
          UNLOCK();
          if (iVar4 + -1 < 1) {
            (**(code **)(**(longlong **)(local_res10 + -0xc) + 8))();
          }
          return 1;
        }
      }
      if (*(LPVOID *)(&DAT_180073788 + lVar8) != (LPVOID)0x0) {
        thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar8));
        *(undefined8 *)(&DAT_180073788 + lVar8) = 0;
      }
      SetLastError(0xe4ae0008);
      LOCK();
      pWVar1 = local_res10 + -4;
      iVar4 = *(int *)pWVar1;
      *(int *)pWVar1 = *(int *)pWVar1 + -1;
      UNLOCK();
      if (iVar4 + -1 < 1) {
        (**(code **)(**(longlong **)(local_res10 + -0xc) + 8))();
      }
      return 0;
    }
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

########## TARGET 18001d520 ##########
callers (7):
  1800023f0 MAG_Free
  180002790 MAG_DisLinkCamera
  180002d40 MAG_StopProcessImage
  18001c400 FUN_18001c400
  18001c590 FUN_18001c590
  18001c840 FUN_18001c840
  18001d2d0 FUN_18001d2d0

### CALLER FUNC 1800023f0 (410 bytes) name=MAG_Free

void MAG_Free(uint param_1)

{
  int *piVar1;
  ulonglong uVar2;
  longlong lVar3;
  uint uVar4;
  
                    /* 0x23f0  8  MAG_Free */
  if (0x80 < param_1) {
                    /* WARNING: Could not recover jumptable at 0x000180002405. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    SetLastError(0xe4ae0001);
    return;
  }
  uVar2 = (ulonglong)param_1;
  lVar3 = uVar2 * 0x4a8;
  if (((((&DAT_180073758)[uVar2 * 0x95] == 0) || ((&DAT_180073750)[uVar2 * 0x95] == 0)) ||
      ((&DAT_180073760)[uVar2 * 0x95] == 0)) || ((&DAT_180073768)[uVar2 * 0x95] == 0)) {
    SetLastError(0xe4ae0001);
  }
  else {
    if (*(int *)(&DAT_180073778 + lVar3) != 0) {
      MAG_StopProcessImage(param_1);
    }
    uVar4 = 0;
    if (*(LPVOID *)(&DAT_180073788 + lVar3) != (LPVOID)0x0) {
      thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar3));
      *(undefined8 *)(&DAT_180073788 + lVar3) = 0;
    }
    if (*(int *)((&DAT_180073758)[uVar2 * 0x95] + 0x18) != 0) {
      FUN_18001d520((&DAT_180073758)[uVar2 * 0x95]);
    }
    lVar3 = (&DAT_180073758)[uVar2 * 0x95];
    if (*(int *)(lVar3 + 0x14) != 0) {
      if (*(int *)(lVar3 + 0x18) != 0) {
        FUN_18001d520(lVar3);
      }
      FUN_180001470(lVar3 + 0x80);
      if (*(int *)(lVar3 + 0x2cf0) != 0) {
        piVar1 = (int *)(lVar3 + 0x13c);
        do {
          if (*piVar1 != 0) {
            *piVar1 = 0;
          }
          uVar4 = uVar4 + 1;
          piVar1 = piVar1 + 0x16;
        } while (uVar4 < *(uint *)(lVar3 + 0x2cf0));
      }
      (**(code **)(*(longlong *)(lVar3 + 0x80) + 0x28))(lVar3 + 0x80);
      if (*(HWND *)(lVar3 + 0x20) != (HWND)0x0) {
        PostMessageW(*(HWND *)(lVar3 + 0x20),0x111,0x83e9,0);
      }
      if (*(longlong *)(lVar3 + 0x38) != 0) {
        usb_release_interface(*(longlong *)(lVar3 + 0x38),0);
        usb_close(*(undefined8 *)(lVar3 + 0x38));
        *(undefined8 *)(lVar3 + 0x38) = 0;
      }
      *(undefined8 *)(lVar3 + 0x30) = 0;
      *(undefined4 *)(lVar3 + 0x14) = 0;
    }
    if (*(int *)((&DAT_180073758)[uVar2 * 0x95] + 0x10) != 0) {
      FUN_18001c590((&DAT_180073758)[uVar2 * 0x95]);
      return;
    }
  }
  return;
}


==================================================================

### CALLER FUNC 180002790 (325 bytes) name=MAG_DisLinkCamera

void MAG_DisLinkCamera(uint param_1)

{
  longlong lVar1;
  int *piVar2;
  uint uVar3;
  ulonglong uVar4;
  
                    /* 0x2790  4  MAG_DisLinkCamera */
  if (0x80 < param_1) {
                    /* WARNING: Could not recover jumptable at 0x0001800027a5. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    SetLastError(0xe4ae0001);
    return;
  }
  uVar4 = (ulonglong)param_1;
  if (((((&DAT_180073758)[uVar4 * 0x95] != 0) && ((&DAT_180073750)[uVar4 * 0x95] != 0)) &&
      ((&DAT_180073760)[uVar4 * 0x95] != 0)) && ((&DAT_180073768)[uVar4 * 0x95] != 0)) {
    if (*(int *)(&DAT_180073778 + uVar4 * 0x4a8) != 0) {
      MAG_StopProcessImage(param_1);
    }
    lVar1 = (&DAT_180073758)[uVar4 * 0x95];
    if (*(int *)(lVar1 + 0x18) != 0) {
      FUN_18001d520(lVar1);
    }
    FUN_180001470(lVar1 + 0x80);
    uVar3 = 0;
    if (*(int *)(lVar1 + 0x2cf0) != 0) {
      piVar2 = (int *)(lVar1 + 0x13c);
      do {
        if (*piVar2 != 0) {
          *piVar2 = 0;
        }
        uVar3 = uVar3 + 1;
        piVar2 = piVar2 + 0x16;
      } while (uVar3 < *(uint *)(lVar1 + 0x2cf0));
    }
    (**(code **)(*(longlong *)(lVar1 + 0x80) + 0x28))(lVar1 + 0x80);
    if (*(HWND *)(lVar1 + 0x20) != (HWND)0x0) {
      PostMessageW(*(HWND *)(lVar1 + 0x20),0x111,0x83e9,0);
    }
    if (*(longlong *)(lVar1 + 0x38) != 0) {
      usb_release_interface(*(longlong *)(lVar1 + 0x38),0);
      usb_close(*(undefined8 *)(lVar1 + 0x38));
      *(undefined8 *)(lVar1 + 0x38) = 0;
    }
    *(undefined8 *)(lVar1 + 0x30) = 0;
    *(undefined4 *)(lVar1 + 0x14) = 0;
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x0001800028ce. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  SetLastError(0xe4ae0001);
  return;
}


==================================================================

### CALLER FUNC 180002d40 (514 bytes) name=MAG_StopProcessImage

void MAG_StopProcessImage(uint param_1)

{
  longlong lVar1;
  longlong *plVar2;
  ulonglong uVar3;
  longlong lVar4;
  
                    /* 0x2d40  63  MAG_StopProcessImage */
  if (0x80 < param_1) {
                    /* WARNING: Could not recover jumptable at 0x000180002d55. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    SetLastError(0xe4ae0001);
    return;
  }
  uVar3 = (ulonglong)param_1;
  lVar4 = uVar3 * 0x4a8;
  if (((((&DAT_180073758)[uVar3 * 0x95] != 0) && ((&DAT_180073750)[uVar3 * 0x95] != 0)) &&
      ((&DAT_180073760)[uVar3 * 0x95] != 0)) && ((&DAT_180073768)[uVar3 * 0x95] != 0)) {
    if ((*(int *)((&DAT_180073768)[uVar3 * 0x95] + 0x48) != 0) ||
       (*(int *)((&DAT_180073768)[uVar3 * 0x95] + 0x44) != 0)) {
      lVar1 = (&DAT_180073768)[uVar3 * 0x95];
      FUN_180001470(lVar1 + 8);
      if (*(int *)(lVar1 + 0x48) != 0) {
        *(undefined4 *)(lVar1 + 0x4d8) = 0;
        SetEvent(*(HANDLE *)(lVar1 + 0x4e8));
        if (*(longlong *)(lVar1 + 0x4e0) != 0) {
          WaitForSingleObject(*(HANDLE *)(*(longlong *)(lVar1 + 0x4e0) + 0x58),0xffffffff);
          plVar2 = *(longlong **)(lVar1 + 0x4e0);
          if (plVar2 != (longlong *)0x0) {
            (**(code **)(*plVar2 + 8))(plVar2,1);
          }
          *(undefined8 *)(lVar1 + 0x4e0) = 0;
        }
        CloseHandle(*(HANDLE *)(lVar1 + 0x4e8));
        *(undefined4 *)(lVar1 + 0x48) = 0;
      }
      if (*(int *)(lVar1 + 0x44) != 0) {
        *(undefined4 *)(lVar1 + 0x44) = 0;
      }
      (**(code **)(*(longlong *)(lVar1 + 0x50) + 0x98))(lVar1 + 0x50);
      *(undefined4 *)(lVar1 + 0x40) = 0;
      (**(code **)(*(longlong *)(lVar1 + 8) + 0x28))(lVar1 + 8);
    }
    lVar1 = (&DAT_180073760)[uVar3 * 0x95];
    if (*(int *)(lVar1 + 0x44) != 0) {
      FUN_180001470(lVar1 + 8);
      *(undefined4 *)(lVar1 + 0x40) = 0;
      *(undefined4 *)(lVar1 + 0x44) = 0;
      if (*(longlong *)(lVar1 + 0x50) != 0) {
        AVIStreamRelease();
        *(undefined8 *)(lVar1 + 0x50) = 0;
      }
      if (*(longlong *)(lVar1 + 0x48) != 0) {
        AVIStreamRelease();
        *(undefined8 *)(lVar1 + 0x48) = 0;
      }
      if (*(longlong *)(lVar1 + 0x58) != 0) {
        AVIFileRelease();
        *(undefined8 *)(lVar1 + 0x58) = 0;
      }
      AVIFileExit();
      (**(code **)(*(longlong *)(lVar1 + 8) + 0x28))(lVar1 + 8);
    }
    if (*(int *)((&DAT_180073758)[uVar3 * 0x95] + 0x18) != 0) {
      FUN_18001d520((&DAT_180073758)[uVar3 * 0x95]);
    }
    lVar1 = (&DAT_180073750)[uVar3 * 0x95];
    *(undefined4 *)(&DAT_180073778 + lVar4) = 0;
    *(undefined4 *)(&DAT_18007377c + lVar4) = 0;
    *(undefined8 *)(&DAT_180073790 + lVar4) = 0;
    FUN_18000c2b0(lVar1);
    if (*(LPVOID *)(&DAT_180073788 + lVar4) != (LPVOID)0x0) {
      thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar4));
      *(undefined8 *)(&DAT_180073788 + lVar4) = 0;
    }
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x000180002f3b. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  SetLastError(0xe4ae0001);
  return;
}


==================================================================

### CALLER FUNC 18001c400 (325 bytes) name=FUN_18001c400

void FUN_18001c400(undefined8 *param_1)

{
  int *piVar1;
  uint uVar2;
  
  *param_1 = CNetComm::vftable;
  uVar2 = 0;
  *(undefined4 *)(param_1 + 2) = 0;
  if (*(int *)(param_1 + 3) != 0) {
    FUN_18001d520((longlong)param_1);
  }
  if (*(int *)((longlong)param_1 + 0x14) != 0) {
    if (*(int *)(param_1 + 3) != 0) {
      FUN_18001d520((longlong)param_1);
    }
    FUN_180001470((longlong)(param_1 + 0x10));
    if (*(int *)(param_1 + 0x59e) != 0) {
      piVar1 = (int *)((longlong)param_1 + 0x13c);
      do {
        if (*piVar1 != 0) {
          *piVar1 = 0;
        }
        uVar2 = uVar2 + 1;
        piVar1 = piVar1 + 0x16;
      } while (uVar2 < *(uint *)(param_1 + 0x59e));
    }
    (**(code **)(param_1[0x10] + 0x28))(param_1 + 0x10);
    if ((HWND)param_1[4] != (HWND)0x0) {
      PostMessageW((HWND)param_1[4],0x111,0x83e9,0);
    }
    if (param_1[7] != 0) {
      usb_release_interface(param_1[7],0);
      usb_close(param_1[7]);
      param_1[7] = 0;
    }
    param_1[6] = 0;
    *(undefined4 *)((longlong)param_1 + 0x14) = 0;
  }
  *(undefined4 *)(param_1 + 0x59e) = 0;
  CloseHandle((HANDLE)param_1[0x5a2]);
  param_1[0x17] = CCriticalSection::vftable;
  DeleteCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x19));
  CSyncObject::~CSyncObject((CSyncObject *)(param_1 + 0x17));
  param_1[0x10] = CCriticalSection::vftable;
  DeleteCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x12));
  CSyncObject::~CSyncObject((CSyncObject *)(param_1 + 0x10));
  return;
}


==================================================================

### CALLER FUNC 18001c590 (223 bytes) name=FUN_18001c590

void FUN_18001c590(longlong param_1)

{
  int *piVar1;
  uint uVar2;
  
  uVar2 = 0;
  *(undefined4 *)(param_1 + 0x10) = 0;
  if (*(int *)(param_1 + 0x18) != 0) {
    FUN_18001d520(param_1);
  }
  if (*(int *)(param_1 + 0x14) != 0) {
    if (*(int *)(param_1 + 0x18) != 0) {
      FUN_18001d520(param_1);
    }
    FUN_180001470(param_1 + 0x80);
    if (*(int *)(param_1 + 0x2cf0) != 0) {
      piVar1 = (int *)(param_1 + 0x13c);
      do {
        if (*piVar1 != 0) {
          *piVar1 = 0;
        }
        uVar2 = uVar2 + 1;
        piVar1 = piVar1 + 0x16;
      } while (uVar2 < *(uint *)(param_1 + 0x2cf0));
    }
    (**(code **)(*(longlong *)(param_1 + 0x80) + 0x28))(param_1 + 0x80);
    if (*(HWND *)(param_1 + 0x20) != (HWND)0x0) {
      PostMessageW(*(HWND *)(param_1 + 0x20),0x111,0x83e9,0);
    }
    if (*(longlong *)(param_1 + 0x38) != 0) {
      usb_release_interface(*(longlong *)(param_1 + 0x38),0);
      usb_close(*(undefined8 *)(param_1 + 0x38));
      *(undefined8 *)(param_1 + 0x38) = 0;
    }
    *(undefined8 *)(param_1 + 0x30) = 0;
    *(undefined4 *)(param_1 + 0x14) = 0;
  }
  *(undefined4 *)(param_1 + 0x2cf0) = 0;
  return;
}


==================================================================

### CALLER FUNC 18001c840 (183 bytes) name=FUN_18001c840

void FUN_18001c840(longlong param_1)

{
  int *piVar1;
  uint uVar2;
  
  if (*(int *)(param_1 + 0x18) != 0) {
    FUN_18001d520(param_1);
  }
  FUN_180001470(param_1 + 0x80);
  uVar2 = 0;
  if (*(int *)(param_1 + 0x2cf0) != 0) {
    piVar1 = (int *)(param_1 + 0x13c);
    do {
      if (*piVar1 != 0) {
        *piVar1 = 0;
      }
      uVar2 = uVar2 + 1;
      piVar1 = piVar1 + 0x16;
    } while (uVar2 < *(uint *)(param_1 + 0x2cf0));
  }
  (**(code **)(*(longlong *)(param_1 + 0x80) + 0x28))(param_1 + 0x80);
  if (*(HWND *)(param_1 + 0x20) != (HWND)0x0) {
    PostMessageW(*(HWND *)(param_1 + 0x20),0x111,0x83e9,0);
  }
  if (*(longlong *)(param_1 + 0x38) != 0) {
    usb_release_interface(*(longlong *)(param_1 + 0x38),0);
    usb_close(*(undefined8 *)(param_1 + 0x38));
    *(undefined8 *)(param_1 + 0x38) = 0;
  }
  *(undefined4 *)(param_1 + 0x14) = 0;
  *(undefined8 *)(param_1 + 0x30) = 0;
  return;
}


==================================================================

### CALLER FUNC 18001d2d0 (578 bytes) name=FUN_18001d2d0

undefined8 FUN_18001d2d0(void *param_1,undefined4 param_2,longlong param_3)

{
  LPVOID pvVar1;
  LPVOID pvVar2;
  CWinThread *pCVar3;
  undefined8 uVar4;
  uint local_res8 [2];
  
  if (*(int *)((longlong)param_1 + 0x18) != 0) {
    SetLastError(0xe4ae000a);
    return 0;
  }
  if (param_3 != 0) {
    *(undefined4 *)((longlong)param_1 + 0x2d18) = param_2;
    *(undefined4 *)((longlong)param_1 + 8) = 0;
    *(undefined4 *)((longlong)param_1 + 0xc) = 0;
    if (*(LPVOID *)((longlong)param_1 + 0x2d20) != (LPVOID)0x0) {
      thunk_FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x2d20));
      *(undefined8 *)((longlong)param_1 + 0x2d20) = 0;
    }
    pvVar1 = thunk_FUN_18001eb74((ulonglong)*(uint *)((longlong)param_1 + 0x2d18) * 2 + 0xb0);
    *(LPVOID *)((longlong)param_1 + 0x2d20) = pvVar1;
    if (*(LPVOID *)((longlong)param_1 + 0x2d28) != (LPVOID)0x0) {
      thunk_FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x2d28));
      *(undefined8 *)((longlong)param_1 + 0x2d28) = 0;
    }
    pvVar2 = thunk_FUN_18001eb74((ulonglong)*(uint *)((longlong)param_1 + 0x2d18) + 0x4c);
    pvVar1 = *(LPVOID *)((longlong)param_1 + 0x2d20);
    *(LPVOID *)((longlong)param_1 + 0x2d28) = pvVar2;
    if ((pvVar1 == (LPVOID)0x0) || (pvVar2 == (LPVOID)0x0)) {
      if (pvVar1 != (LPVOID)0x0) {
        thunk_FUN_180034a70(pvVar1);
        *(undefined8 *)((longlong)param_1 + 0x2d20) = 0;
      }
      if (*(LPVOID *)((longlong)param_1 + 0x2d28) != (LPVOID)0x0) {
        thunk_FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x2d28));
        *(undefined8 *)((longlong)param_1 + 0x2d28) = 0;
      }
      SetLastError(0xe4ae0002);
    }
    else {
      *(longlong *)((longlong)param_1 + 0x2d30) = param_3;
      *(code **)((longlong)param_1 + 0x2d38) = FUN_180009ee0;
      ResetEvent(*(HANDLE *)((longlong)param_1 + 0x2d10));
      *(undefined4 *)((longlong)param_1 + 0x2d0c) = 1;
      pCVar3 = AfxBeginThread(FUN_18001d610,param_1,-1,0,4,(_SECURITY_ATTRIBUTES *)0x0);
      *(CWinThread **)((longlong)param_1 + 0x2d00) = pCVar3;
      *(undefined4 *)(pCVar3 + 0x50) = 0;
      ResumeThread(*(HANDLE *)(*(longlong *)((longlong)param_1 + 0x2d00) + 0x58));
      *(undefined4 *)((longlong)param_1 + 0x2d08) = 1;
      pCVar3 = AfxBeginThread(FUN_18001d930,param_1,0,0,4,(_SECURITY_ATTRIBUTES *)0x0);
      *(CWinThread **)((longlong)param_1 + 0x2cf8) = pCVar3;
      *(undefined4 *)(pCVar3 + 0x50) = 0;
      ResumeThread(*(HANDLE *)(*(longlong *)((longlong)param_1 + 0x2cf8) + 0x58));
      Sleep(0x32);
      local_res8[0] = 0x6bb6b673;
      if (*(int *)((longlong)param_1 + 0x14) == 0) {
        SetLastError(0xe4ae0005);
      }
      else {
        uVar4 = FUN_18001c670((longlong)param_1,local_res8,4);
        if ((int)uVar4 != 0) {
          *(undefined4 *)((longlong)param_1 + 0x18) = 1;
          return 1;
        }
      }
      FUN_18001d520((longlong)param_1);
    }
    return 0;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

########## TARGET 18000ca30 ##########
callers (4):
  180005cd0 MAG_LoadBufferedDDT
  1800078d0 MAG_LoadFIR
  180009ee0 FUN_180009ee0
  18000a410 FUN_18000a410

### CALLER FUNC 180005cd0 (1660 bytes) name=MAG_LoadBufferedDDT

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8
MAG_LoadBufferedDDT(uint param_1,ulonglong param_2,void *param_3,ulonglong param_4,
                   undefined *param_5,undefined8 param_6)

{
  uint uVar1;
  longlong lVar2;
  int iVar3;
  DWORD dwErrCode;
  uint *in_RDX;
  ulonglong uVar4;
  ulonglong uVar5;
  longlong lVar6;
  undefined8 uVar7;
  undefined1 auStackY_428 [32];
  uint local_3f8;
  uint local_3f4;
  uint local_3f0;
  uint local_3ec;
  uint local_3e8;
  uint local_3e4;
  undefined4 local_3e0;
  undefined4 local_3dc;
  undefined4 local_3d8;
  undefined4 local_3d4;
  int local_3c8;
  int iStack_3c4;
  uint local_3c0;
  uint uStack_3bc;
  uint local_3b8;
  undefined4 local_3b4;
  int local_3b0;
  undefined4 local_3ac;
  undefined4 local_3a8;
  undefined4 local_3a4;
  undefined4 local_3a0;
  undefined4 local_39c;
  char local_398 [32];
  char local_378 [32];
  undefined8 local_358;
  undefined4 local_350;
  undefined4 local_34c;
  undefined8 local_348;
  undefined8 local_340;
  CHAR local_338 [556];
  undefined4 local_10c;
  undefined4 local_104;
  undefined4 local_100;
  undefined4 local_fc;
  uint local_f8;
  undefined4 local_f4;
  undefined4 local_f0;
  undefined4 local_ec;
  undefined4 local_e8;
  undefined4 local_e4;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined4 local_d8;
  undefined4 local_d4;
  undefined4 local_74;
  undefined4 local_70;
  int local_6c;
  undefined4 local_68;
  int local_64;
  int local_60;
  int local_5c;
  int local_58;
  ulonglong local_48;
  
                    /* 0x5cd0  36  MAG_LoadBufferedDDT */
  local_48 = DAT_18006cea0 ^ (ulonglong)auStackY_428;
  uVar4 = param_4 & 0xffffffff;
  uVar5 = (ulonglong)param_1;
  if (param_1 < 0x81) {
    lVar6 = uVar5 * 0x4a8;
    if (((((((&DAT_180073758)[uVar5 * 0x95] != 0) && ((&DAT_180073750)[uVar5 * 0x95] != 0)) &&
          ((&DAT_180073760)[uVar5 * 0x95] != 0)) &&
         (((&DAT_180073768)[uVar5 * 0x95] != 0 && (in_RDX != (uint *)0x0)))) && ((*in_RDX & 3) == 0)
        ) && ((((in_RDX[2] & 3) == 0 && ((in_RDX[4] & 3) == 0)) && (*in_RDX <= in_RDX[2])))) {
      if (((((in_RDX[1] <= in_RDX[3]) && (in_RDX[1] != 0)) && (in_RDX[3] != 0)) &&
          ((in_RDX[5] != 0 && (param_3 != (void *)0x0)))) && (0x374 < (uint)param_4)) {
        if (*(int *)((&DAT_180073758)[uVar5 * 0x95] + 0x14) == 0) {
          *(undefined8 *)(&DAT_180073770 + lVar6) = param_6;
          memcpy(&local_3c8,param_3,0x374);
          if (local_3c8 == 0x374) {
            if ((local_3c0 != *in_RDX) || (uStack_3bc != in_RDX[1])) {
              *in_RDX = local_3c0;
              in_RDX[2] = local_3c0;
              in_RDX[4] = 0x10;
              in_RDX[1] = uStack_3bc;
              in_RDX[3] = uStack_3bc;
              in_RDX[5] = uStack_3bc;
            }
            *(uint *)(&DAT_180073798 + lVar6) = *in_RDX;
            *(uint *)(&DAT_18007379c + lVar6) = in_RDX[1];
            *(uint *)(&DAT_1800737a0 + lVar6) = in_RDX[2];
            *(uint *)(&DAT_1800737a4 + lVar6) = in_RDX[3];
            *(uint *)(&DAT_1800737a8 + lVar6) = in_RDX[4];
            *(uint *)(&DAT_1800737ac + lVar6) = in_RDX[5];
            if ((((iStack_3c4 == 0x10003) || (iStack_3c4 == 0x10002)) || (iStack_3c4 == 0x10000)) ||
               (iStack_3c4 == 0x10001)) {
              if ((DAT_180073744 != 0) && (local_58 != DAT_180073744)) {
                dwErrCode = 0xe4ae000c;
                goto LAB_180006322;
              }
              if ((ulonglong)(uStack_3bc * local_3c0) * 2 + 0x374 <= uVar4) {
                *(int *)(&DAT_1800737b4 + lVar6) = local_58;
                (&DAT_1800737b0)[uVar5 * 0x12a] = local_350;
                FUN_1800357d0((ulonglong *)(&DAT_1800737b8 + uVar5 * 0x12a),0,0x48);
                (&DAT_1800737b8)[uVar5 * 0x12a] = *in_RDX;
                *(uint *)(&DAT_1800737bc + lVar6) = in_RDX[1];
                *(uint *)(&DAT_1800737f8 + lVar6) = in_RDX[2];
                uVar1 = in_RDX[3];
                *(undefined4 *)(&DAT_1800737f0 + lVar6) = 1;
                *(uint *)(&DAT_1800737fc + lVar6) = uVar1;
                *(undefined4 *)(&DAT_1800737f4 + lVar6) = 1;
                *(undefined4 *)(&DAT_1800737c0 + lVar6) = local_3a0;
                *(undefined4 *)(&DAT_1800737c4 + lVar6) = local_39c;
                strncpy(&DAT_1800737c8 + lVar6,local_378,0x20);
                (&DAT_1800737e7)[lVar6] = 0;
                strncpy(&DAT_1800737e8 + lVar6,local_398,8);
                *(undefined8 *)(&DAT_180073818 + lVar6) = local_348;
                *(int *)(&DAT_180073800 + lVar6) = local_3b0;
                *(undefined8 *)(&DAT_180073820 + lVar6) = local_340;
                *(undefined4 *)(&DAT_180073828 + lVar6) = local_34c;
                *(undefined4 *)(&DAT_180073804 + lVar6) = local_3ac;
                uVar7 = 0x374;
                *(undefined4 *)(&DAT_180073808 + lVar6) = local_3a8;
                (&DAT_1800737ef)[lVar6] = 0;
                *(undefined4 *)(&DAT_18007380c + lVar6) = local_3a4;
                *(undefined8 *)(&DAT_180073810 + lVar6) = local_358;
                memcpy((void *)(lVar6 + 0x18007382c),&local_3c8,0x374);
                local_3f4 = in_RDX[1];
                local_3f8 = *in_RDX;
                local_3f0 = in_RDX[2];
                local_3ec = in_RDX[3];
                local_3e8 = in_RDX[4];
                local_3e4 = in_RDX[5];
                local_3e0 = 4;
                local_3dc = 1;
                *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 8) = 0;
                local_3d8 = 1;
                *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xc) = 0;
                local_3d4 = 5;
                *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x70) = 1;
                *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x8c) = 1;
                *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x6c) = 1;
                if (0x10001 < iStack_3c4) {
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x24) = local_dc;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x48) = local_d8;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x4c) = local_d4;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x10) = local_f0;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x14) = local_ec;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x18) = local_e8;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x1c) = local_e4;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x20) = local_e0;
                  lVar2 = (&DAT_180073750)[uVar5 * 0x95];
                  *(undefined4 *)(&DAT_180073780 + lVar6) = local_10c;
                  FUN_18000d5f0(lVar2,local_10c);
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xd4) = local_104;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xd8) = local_100;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xf4) = local_fc;
                  param_2 = (ulonglong)local_f8;
                  *(uint *)((&DAT_180073750)[uVar5 * 0x95] + 0xf8) = local_f8;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xd0) = local_f4;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xdc) = 0x3ecccccd;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xe0) = 0x41a00000;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xe4) = 0;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xe8) = 0;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xec) = 0;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xf0) = 0;
                }
                FUN_180014fe0((&DAT_180073750)[uVar5 * 0x95],
                              (float *)((&DAT_180073750)[uVar5 * 0x95] + 0xd0));
                iVar3 = FUN_18000bce0((&DAT_180073750)[uVar5 * 0x95],&local_3f8);
                if (iVar3 != 0) {
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 100) = local_68;
                  FUN_180015500((&DAT_180073750)[uVar5 * 0x95],local_64);
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xa4) = local_74;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xa8) = local_70;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x5c) = local_3ac;
                  *(int *)((&DAT_180073750)[uVar5 * 0x95] + 0x60) = local_3b0;
                  if ((local_60 == 0) || (local_5c == 0)) {
                    *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x54) = local_3ac;
                    local_5c = local_3b0;
                  }
                  else {
                    *(int *)((&DAT_180073750)[uVar5 * 0x95] + 0x54) = local_60;
                  }
                  *(int *)((&DAT_180073750)[uVar5 * 0x95] + 0x58) = local_5c;
                  FUN_180018a20((&DAT_180073750)[uVar5 * 0x95],local_338,uVar7,param_4);
                  uVar7 = FUN_180018d50((&DAT_180073750)[uVar5 * 0x95],local_6c,local_3b8,local_3b4)
                  ;
                  if ((int)uVar7 != 0) {
                    FUN_18000ca30((&DAT_180073750)[uVar5 * 0x95],param_2,1,1,1);
                    if (param_5 != (undefined *)0x0) {
                      (*(code *)param_5)(uVar5,local_3b0,0,0);
                    }
                    return 1;
                  }
                }
                goto LAB_180005dc9;
              }
            }
            goto LAB_18000631d;
          }
        }
LAB_180005dc9:
        dwErrCode = 0xe4ae0003;
        goto LAB_180006322;
      }
    }
  }
LAB_18000631d:
  dwErrCode = 0xe4ae0001;
LAB_180006322:
  SetLastError(dwErrCode);
  return 0;
}


==================================================================

### CALLER FUNC 1800078d0 (2145 bytes) name=MAG_LoadFIR

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8
MAG_LoadFIR(uint param_1,uint *param_2,LPCWSTR param_3,undefined *param_4,undefined8 param_5)

{
  void *_Src;
  int iVar1;
  undefined8 uVar2;
  __uint64 _Var3;
  LPVOID pvVar4;
  __time64_t _Var5;
  uint uVar6;
  uint uVar7;
  size_t sVar8;
  ulonglong uVar9;
  ulonglong uVar10;
  longlong lVar11;
  uint uVar12;
  ulonglong uVar13;
  undefined4 uVar14;
  undefined4 uVar15;
  undefined1 auStackY_138 [32];
  CFile local_100 [32];
  uint local_e0;
  uint local_dc;
  uint local_d8;
  uint local_d4;
  uint local_d0;
  uint local_cc;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined4 local_c0;
  undefined4 local_bc;
  code *local_b8;
  size_t local_b0;
  undefined8 local_a0 [2];
  undefined8 local_90;
  undefined1 local_88 [4];
  undefined4 local_84;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78;
  undefined4 local_74;
  ulonglong local_70;
  ulonglong local_48;
  
                    /* 0x78d0  38  MAG_LoadFIR */
  local_90 = 0xfffffffffffffffe;
  local_48 = DAT_18006cea0 ^ (ulonglong)auStackY_138;
  uVar13 = (ulonglong)param_1;
  local_b8 = (code *)param_4;
  if (param_1 < 0x81) {
    lVar11 = uVar13 * 0x4a8;
    if (((((&DAT_180073758)[uVar13 * 0x95] != 0) && ((&DAT_180073750)[uVar13 * 0x95] != 0)) &&
        ((&DAT_180073760)[uVar13 * 0x95] != 0)) && ((&DAT_180073768)[uVar13 * 0x95] != 0)) {
      if (*(int *)((&DAT_180073758)[uVar13 * 0x95] + 0x14) != 0) {
        SetLastError(0xe4ae0003);
        return 0;
      }
      if (((param_2 != (uint *)0x0) && ((*param_2 & 3) == 0)) &&
         (((param_2[2] & 3) == 0 && (((param_2[4] & 3) == 0 && (*param_2 <= param_2[2])))))) {
        if ((param_2[1] <= param_2[3]) &&
           (((param_2[1] != 0 && (param_2[3] != 0)) && (param_2[5] != 0)))) {
          FUN_180020138((undefined8 *)local_100);
          uVar2 = FUN_180020a6c((longlong)local_100,param_3,0x30,0);
          if ((int)uVar2 == 0) {
            SetLastError(0xe4ae0009);
            FUN_1800203a4(local_100);
            return 0;
          }
          _Var3 = CFile::GetLength(local_100);
          sVar8 = _Var3 & 0xffffffff;
          if (0x600040 < (uint)_Var3) {
            sVar8 = 0x600040;
          }
          if (*(LPVOID *)(&DAT_180073788 + lVar11) != (LPVOID)0x0) {
            thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar11));
            *(undefined8 *)(&DAT_180073788 + lVar11) = 0;
          }
          uVar9 = 0;
          local_b0 = sVar8;
          pvVar4 = thunk_FUN_18001eb74(sVar8);
          *(LPVOID *)(&DAT_180073788 + lVar11) = pvVar4;
          if (pvVar4 == (LPVOID)0x0) {
            CFile::Close(local_100);
            SetLastError(0xe4ae0002);
            FUN_1800203a4(local_100);
            return 0;
          }
          FUN_18001ef2c(local_a0);
          FUN_18001fd6c((longlong)local_100,*(LPVOID *)(&DAT_180073788 + lVar11),(DWORD)sVar8);
          FUN_18001ef94();
          CFile::Close(local_100);
          _Src = *(void **)(&DAT_180073788 + lVar11);
          *(undefined8 *)(&DAT_180073770 + lVar11) = param_5;
          memcpy(local_88,_Src,0x40);
          uVar6 = (uint)local_70 & 0xffff;
          uVar10 = local_70 >> 0x10 & 0xffff;
          uVar12 = (uint)uVar10;
          if (local_b0 < (longlong)(int)(uVar12 * uVar6) * 2 + 0x40U) {
            SetLastError(0xe4ae0009);
            FUN_1800203a4(local_100);
            return 0;
          }
          if ((uVar6 != *param_2) || (uVar12 != param_2[1])) {
            *param_2 = uVar6;
            param_2[1] = uVar12;
            param_2[2] = uVar6;
            param_2[3] = uVar12;
            param_2[4] = 0x10;
            param_2[5] = uVar12;
          }
          *(uint *)(&DAT_180073798 + lVar11) = *param_2;
          *(uint *)(&DAT_18007379c + lVar11) = param_2[1];
          *(uint *)(&DAT_1800737a0 + lVar11) = param_2[2];
          *(uint *)(&DAT_1800737a4 + lVar11) = param_2[3];
          *(uint *)(&DAT_1800737a8 + lVar11) = param_2[4];
          *(uint *)(&DAT_1800737ac + lVar11) = param_2[5];
          (&DAT_1800737b0)[uVar13 * 0x12a] = 0;
          *(undefined4 *)(&DAT_1800737b4 + lVar11) = 0;
          FUN_1800357d0((ulonglong *)(&DAT_1800737b8 + uVar13 * 0x12a),0,0x48);
          (&DAT_1800737b8)[uVar13 * 0x12a] = *param_2;
          *(uint *)(&DAT_1800737bc + lVar11) = param_2[1];
          *(uint *)(&DAT_1800737f8 + lVar11) = param_2[2];
          *(uint *)(&DAT_1800737fc + lVar11) = param_2[3];
          *(undefined4 *)(&DAT_1800737f0 + lVar11) = 1;
          *(undefined4 *)(&DAT_1800737f4 + lVar11) = 1;
          *(undefined4 *)(&DAT_1800737c0 + lVar11) = 0;
          *(undefined4 *)(&DAT_1800737c4 + lVar11) = 0;
          FUN_180032bb0(&DAT_1800737c8 + lVar11,(byte *)"FIR-%d*%d",(ulonglong)uVar6,uVar10);
          strncpy(&DAT_1800737e8 + lVar11,"FIR",8);
          *(undefined4 *)(&DAT_180073800 + lVar11) = 20000;
          *(undefined4 *)(&DAT_180073804 + lVar11) = 0x5014;
          *(undefined4 *)(&DAT_180073808 + lVar11) = 0;
          *(undefined4 *)(&DAT_18007380c + lVar11) = 0;
          _Var5 = _time64((__time64_t *)0x0);
          *(__time64_t *)(&DAT_180073810 + lVar11) = _Var5;
          *(undefined8 *)(&DAT_180073818 + lVar11) = 0;
          *(undefined8 *)(&DAT_180073820 + lVar11) = 0;
          *(undefined4 *)(&DAT_180073828 + lVar11) = 0;
          local_e0 = *param_2;
          local_dc = param_2[1];
          local_d8 = param_2[2];
          local_d4 = param_2[3];
          local_d0 = param_2[4];
          local_cc = param_2[5];
          local_c8 = 4;
          local_c4 = 1;
          local_c0 = 1;
          local_bc = 5;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 8) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xc) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x70) = 1;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x8c) = 1;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x6c) = 1;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x24) = 5;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x48) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x4c) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x10) = 0;
          *(undefined4 *)(&DAT_180073780 + lVar11) = 2;
          FUN_18000d5f0((&DAT_180073750)[uVar13 * 0x95],2);
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xd4) = local_80;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xd8) = local_78;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xf8) = local_84;
          uVar15 = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xd0) = local_7c;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xdc) = local_74;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xe0) = 0x41a00000;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xe4) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xe8) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xec) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xf0) = 0;
          FUN_180014fe0((&DAT_180073750)[uVar13 * 0x95],
                        (float *)((&DAT_180073750)[uVar13 * 0x95] + 0xd0));
          iVar1 = FUN_18000bce0((&DAT_180073750)[uVar13 * 0x95],&local_e0);
          if (iVar1 == 0) {
            SetLastError(0xe4ae0003);
            FUN_1800203a4(local_100);
            return 0;
          }
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 100) = 0;
          lVar11 = (&DAT_180073750)[uVar13 * 0x95];
          EnterCriticalSection((LPCRITICAL_SECTION)(lVar11 + 0x238));
          memcpy(&DAT_180099000,&DAT_18005cde0,0xa1c);
          uVar10 = uVar9;
          do {
            uVar7 = (&DAT_180099004)[uVar10] - (&DAT_180099000)[uVar10];
            (&DAT_180099a20)[uVar10] = ((uVar7 >> 1) + 0x1000000) / uVar7;
            uVar7 = (&DAT_180099008)[uVar10] - (&DAT_180099004)[uVar10];
            (&DAT_180099a24)[uVar10] = ((uVar7 >> 1) + 0x1000000) / uVar7;
            uVar10 = uVar10 + 2;
          } while ((longlong)uVar10 < 0x286);
          DAT_180073748 = (undefined4)(0x7fffffff / (longlong)DAT_18009a434);
          *(undefined4 *)(lVar11 + 0x68) = 7;
          LeaveCriticalSection((LPCRITICAL_SECTION)(lVar11 + 0x238));
          lVar11 = uVar13 * 0x4a8;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xa4) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xa8) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x5c) =
               *(undefined4 *)(&DAT_180073804 + lVar11);
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x60) =
               *(undefined4 *)(&DAT_180073800 + lVar11);
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x54) =
               *(undefined4 *)(&DAT_180073804 + lVar11);
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x58) =
               *(undefined4 *)(&DAT_180073800 + lVar11);
          uVar2 = FUN_180018d50((&DAT_180073750)[uVar13 * 0x95],4,8,0xffff3cb0);
          if ((int)uVar2 != 0) {
            uVar10 = uVar9;
            uVar14 = local_7c;
            if (0 < (int)(uVar12 * uVar6)) {
              do {
                iVar1 = FUN_180001e40((&DAT_180073750)[(longlong)(int)param_1 * 0x95],
                                      *(short *)((longlong)_Src + uVar9 * 2 + 0x40) * 10);
                *(short *)((longlong)_Src + uVar9 * 2 + 0x40) = (short)iVar1;
                uVar7 = (int)uVar10 + 1;
                uVar9 = uVar9 + 1;
                uVar10 = (ulonglong)uVar7;
              } while ((int)uVar7 < (int)(uVar12 * uVar6));
            }
            FUN_18000ca30((&DAT_180073750)[uVar13 * 0x95],CONCAT44(uVar15,uVar14),1,1,1);
            if (local_b8 != (code *)0x0) {
              (*local_b8)(param_1,*(undefined4 *)(&DAT_180073800 + uVar13 * 0x4a8),0,0);
            }
            FUN_1800203a4(local_100);
            return 1;
          }
          SetLastError(0xe4ae0003);
          FUN_1800203a4(local_100);
          return 0;
        }
      }
      SetLastError(0xe4ae0001);
      return 0;
    }
    SetLastError(0xe4ae0001);
  }
  else {
    SetLastError(0xe4ae0001);
  }
  return 0;
}


==================================================================

### CALLER FUNC 180009ee0 (1300 bytes) name=FUN_180009ee0

void FUN_180009ee0(uint param_1,longlong param_2)

{
  char cVar1;
  longlong lVar2;
  bool bVar3;
  uint uVar4;
  DWORD DVar5;
  int iVar6;
  __time64_t _Var7;
  ulonglong uVar8;
  byte *pbVar9;
  undefined7 extraout_var;
  uint uVar10;
  ulonglong uVar11;
  longlong lVar12;
  uint uVar13;
  int iVar14;
  undefined8 in_XMM1_Qa;
  uint local_res10 [2];
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  __time64_t local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  
  uVar11 = (ulonglong)param_1;
  lVar12 = uVar11 * 0x4a8;
  if (*(int *)(&DAT_180073778 + lVar12) == 0) {
    return;
  }
  if ((*(uint *)(param_2 + 0xc) & 3) != 0) {
    if (*(int *)(param_2 + 0x14) != (&DAT_1800737b8)[uVar11 * 0x12a]) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737bc + lVar12)) {
      return;
    }
  }
  if ((*(uint *)(param_2 + 0xc) & 4) != 0) {
    if (*(int *)(param_2 + 0x14) != *(int *)(&DAT_1800737f8 + lVar12)) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737fc + lVar12)) {
      return;
    }
  }
  _Var7 = _time64((__time64_t *)0x0);
  *(int *)(&DAT_180073bf0 + lVar12) = *(int *)(&DAT_180073bf0 + lVar12) + 1;
  lVar2 = (&DAT_180073758)[uVar11 * 0x95];
  *(__time64_t *)(&DAT_180073810 + lVar12) = _Var7;
  *(undefined8 *)(&DAT_180073818 + lVar12) = 0;
  *(undefined8 *)(&DAT_180073820 + lVar12) = 0;
  *(undefined4 *)(&DAT_180073828 + lVar12) = 0;
  cVar1 = *(char *)(lVar2 + 0x2d47);
  if ((cVar1 == '\x01') || (cVar1 == '\x02')) {
    if (*(uint *)(&DAT_180073bf0 + lVar12) < 0x14) {
      return;
    }
  }
  else if ((cVar1 == '\x04') && (*(uint *)(&DAT_180073bf0 + lVar12) < 8)) {
    return;
  }
  *(int *)(param_2 + 0x28) = *(int *)(param_2 + 0x28) + (int)*(short *)(lVar2 + 0x2d86);
  *(int *)(param_2 + 0x2c) = *(int *)(param_2 + 0x2c) + (int)*(short *)(lVar2 + 0x2d86);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x60) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x5c) = *(undefined4 *)(param_2 + 0x2c);
  iVar6 = *(int *)(&DAT_180073bec + lVar12);
  *(undefined4 *)(&DAT_180073800 + lVar12) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)(&DAT_180073804 + lVar12) = *(undefined4 *)(param_2 + 0x2c);
  if (iVar6 < 0) {
    FUN_180002f50(param_1);
    return;
  }
  uVar10 = iVar6 + 1;
  *(uint *)(&DAT_180073bec + lVar12) = uVar10;
  uVar13 = *(uint *)(lVar2 + 0x2d88);
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,
                  *(int *)(lVar2 + 0x2d8c) + uVar13 + *(int *)(lVar2 + 0x2d78));
    return;
  }
  uVar4 = *(int *)(lVar2 + 0x2d78) + uVar13;
  if (uVar10 <= uVar4) {
    if (uVar10 == uVar4) {
      if (*(int *)((&DAT_180073758)[uVar11 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
      }
      else {
        local_res10[0] = 0x6bb6b672;
        local_res10[1] = 1;
        FUN_18001c670((&DAT_180073758)[uVar11 * 0x95],local_res10,8);
      }
    }
    FUN_18000c620((&DAT_180073750)[uVar11 * 0x95],(ushort *)(param_2 + 0x4c),
                  (uint)(*(int *)(&DAT_180073bec + lVar12) == *(int *)(lVar2 + 0x2d88) + 1));
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],*(int *)(&DAT_180073bec + lVar12) + -1,
                  *(int *)(lVar2 + 0x2d8c) + *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d88));
    return;
  }
  uVar13 = *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d8c) + uVar13;
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,uVar13);
    return;
  }
  iVar14 = 0;
  switch(cVar1) {
  case '\0':
  case '\x03':
  case '\x05':
  case '\x06':
    if ((*(int *)(&DAT_180073bf4 + lVar12) == 0) && (iVar14 = 0, uVar10 == 0x4b)) {
      *(undefined4 *)(&DAT_180073bf4 + lVar12) = 1;
      iVar14 = iVar6 + -0x49;
    }
    iVar6 = 0x1e;
    break;
  case '\x01':
  case '\x02':
  case '\x04':
    if ((*(uint *)(&DAT_180073bf4 + lVar12) < 5) && (iVar14 = 0, uVar10 == 0x82 - uVar13)) {
      iVar14 = 1;
      *(uint *)(&DAT_180073bf4 + lVar12) = *(uint *)(&DAT_180073bf4 + lVar12) + 1;
    }
    iVar6 = 100;
    break;
  default:
    iVar6 = 100;
    goto LAB_18000a1d2;
  }
  if (iVar14 == 0) {
LAB_18000a1d2:
    if ((uVar10 < uVar13 + *(int *)(lVar2 + 0x2d90)) &&
       ((uVar10 < iVar6 + uVar13 ||
        (uVar13 = *(int *)((&DAT_180073750)[uVar11 * 0x95] + 0x54) - *(int *)(param_2 + 0x2c),
        uVar10 = (int)uVar13 >> 0x1f, (uVar13 ^ uVar10) - uVar10 <= *(uint *)(lVar2 + 0x2d94)))))
    goto LAB_18000a20a;
  }
  FUN_180002f50(param_1);
LAB_18000a20a:
  uVar8 = FUN_18000ca30((&DAT_180073750)[uVar11 * 0x95],in_XMM1_Qa,0,1,0);
  if ((uVar8 & 1) != 0) {
    if ((*(int *)((&DAT_180073768)[uVar11 * 0x95] + 0x44) != 0) &&
       (*(int *)(&DAT_180073ba4 + lVar12) = *(int *)(&DAT_180073ba4 + lVar12) + 1,
       *(int *)(&DAT_180073ba8 + lVar12) <= *(int *)(&DAT_180073ba4 + lVar12))) {
      *(undefined4 *)(&DAT_180073ba4 + lVar12) = 0;
      local_50 = 0;
      local_48 = 0;
      local_40 = 0;
      local_38 = 0;
      local_30 = 0;
      local_68 = 0x1010000000040;
      local_60 = *(undefined8 *)(&DAT_180073800 + lVar12);
      local_58 = *(undefined8 *)(&DAT_180073808 + lVar12);
      local_50 = _time64((__time64_t *)0x0);
      DVar5 = GetTickCount();
      local_48 = CONCAT44(*(undefined4 *)(param_2 + 0x38),DVar5);
      FUN_18001b1b0((&DAT_180073768)[uVar11 * 0x95],(longlong)&local_68,0x40,
                    *(longlong *)((&DAT_180073750)[uVar11 * 0x95] + 0x270),
                    *(int *)(param_2 + 0x18) * *(int *)(param_2 + 0x14) * 2);
    }
    if (*(int *)((&DAT_180073760)[uVar11 * 0x95] + 0x44) != 0) {
      pbVar9 = (byte *)FUN_1800110a0((&DAT_180073750)[uVar11 * 0x95]);
      lVar2 = (&DAT_180073750)[uVar11 * 0x95];
      if (((pbVar9 != (byte *)0x0) && (lVar2 + 0x6c8 != 0)) &&
         (iVar6 = (uint)*(ushort *)(lVar2 + 0x6d6) * *(int *)(lVar2 + 0x6d0) *
                  *(int *)(lVar2 + 0x6cc), iVar6 = iVar6 + (iVar6 >> 0x1f & 7U),
         uVar13 = iVar6 >> 0x1f,
         bVar3 = FUN_180001cd0((&DAT_180073760)[uVar11 * 0x95],pbVar9,(iVar6 >> 3 ^ uVar13) - uVar13
                               ,lVar2 + 0x6c8), (int)CONCAT71(extraout_var,bVar3) == 0)) {
        FUN_180001c50((&DAT_180073760)[uVar11 * 0x95]);
      }
    }
    if (*(code **)(&DAT_180073790 + lVar12) != (code *)0x0) {
      (**(code **)(&DAT_180073790 + lVar12))
                (param_1,*(undefined4 *)(param_2 + 0x28),*(undefined4 *)(param_2 + 0x38),
                 *(undefined4 *)(param_2 + 0x44),2,*(undefined8 *)(&DAT_180073770 + lVar12));
    }
  }
  return;
}


==================================================================

### CALLER FUNC 18000a410 (496 bytes) name=FUN_18000a410

void FUN_18000a410(uint param_1,undefined8 param_2,longlong param_3)

{
  undefined4 uVar1;
  longlong lVar2;
  bool bVar3;
  int iVar4;
  undefined8 uVar5;
  undefined7 extraout_var;
  uint uVar6;
  ulonglong uVar7;
  longlong lVar8;
  byte *pbVar9;
  
  uVar1 = *(undefined4 *)(param_3 + 8);
  uVar7 = (ulonglong)param_1;
  lVar8 = uVar7 * 0x4a8;
  *(undefined4 *)(&DAT_180073800 + lVar8) = uVar1;
  *(undefined4 *)(&DAT_180073804 + lVar8) = *(undefined4 *)(param_3 + 0xc);
  *(undefined4 *)(&DAT_180073808 + lVar8) = *(undefined4 *)(param_3 + 0x10);
  *(undefined4 *)(&DAT_18007380c + lVar8) = *(undefined4 *)(param_3 + 0x14);
  *(undefined8 *)(&DAT_180073810 + lVar8) = *(undefined8 *)(param_3 + 0x18);
  *(undefined8 *)(&DAT_180073818 + lVar8) = *(undefined8 *)(param_3 + 0x28);
  *(undefined8 *)(&DAT_180073820 + lVar8) = *(undefined8 *)(param_3 + 0x30);
  *(undefined4 *)(&DAT_180073828 + lVar8) = *(undefined4 *)(param_3 + 0x38);
  *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x60) = uVar1;
  *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x5c) = *(undefined4 *)(&DAT_180073804 + lVar8);
  if (*(int *)(&DAT_180073ba0 + lVar8) < *(int *)(param_3 + 0x24)) {
    EnterCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar7 * 0x95] + 0x238));
    *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x58) =
         *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x60);
    *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x54) =
         *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x5c);
    LeaveCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar7 * 0x95] + 0x238));
  }
  lVar2 = (&DAT_180073750)[uVar7 * 0x95];
  pbVar9 = (byte *)0x0;
  *(undefined4 *)(&DAT_180073ba0 + lVar8) = *(undefined4 *)(param_3 + 0x24);
  uVar5 = FUN_18000ca30(lVar2,param_2,1,1,0);
  if ((int)uVar5 != 0) {
    if (*(int *)((&DAT_180073760)[uVar7 * 0x95] + 0x44) != 0) {
      lVar2 = (&DAT_180073750)[uVar7 * 0x95];
      if ((*(int *)(lVar2 + 0x228) != 0) && (*(int *)(lVar2 + 0x234) != 0)) {
        if (*(int *)(lVar2 + 0x4203c) == 0) {
          FUN_180010e80(lVar2);
        }
        pbVar9 = *(byte **)(lVar2 + 0x2a0);
      }
      lVar2 = (&DAT_180073750)[uVar7 * 0x95];
      if ((pbVar9 != (byte *)0x0) && (lVar2 + 0x6c8 != 0)) {
        iVar4 = (uint)*(ushort *)(lVar2 + 0x6d6) * *(int *)(lVar2 + 0x6d0) * *(int *)(lVar2 + 0x6cc)
        ;
        iVar4 = iVar4 + (iVar4 >> 0x1f & 7U);
        uVar6 = iVar4 >> 0x1f;
        bVar3 = FUN_180001cd0((&DAT_180073760)[uVar7 * 0x95],pbVar9,(iVar4 >> 3 ^ uVar6) - uVar6,
                              lVar2 + 0x6c8);
        if ((int)CONCAT71(extraout_var,bVar3) == 0) {
          FUN_180001c50((&DAT_180073760)[uVar7 * 0x95]);
        }
      }
    }
    if (*(code **)(&DAT_180073790 + lVar8) != (code *)0x0) {
      (**(code **)(&DAT_180073790 + lVar8))
                (param_1,*(undefined4 *)(param_3 + 8),*(undefined4 *)(param_3 + 0x24),0,2,
                 *(undefined8 *)(&DAT_180073770 + lVar8));
    }
  }
  return;
}


==================================================================

########## TARGET 1800110a0 ##########
callers (1):
  180009ee0 FUN_180009ee0

### CALLER FUNC 180009ee0 (1300 bytes) name=FUN_180009ee0

void FUN_180009ee0(uint param_1,longlong param_2)

{
  char cVar1;
  longlong lVar2;
  bool bVar3;
  uint uVar4;
  DWORD DVar5;
  int iVar6;
  __time64_t _Var7;
  ulonglong uVar8;
  byte *pbVar9;
  undefined7 extraout_var;
  uint uVar10;
  ulonglong uVar11;
  longlong lVar12;
  uint uVar13;
  int iVar14;
  undefined8 in_XMM1_Qa;
  uint local_res10 [2];
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  __time64_t local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  
  uVar11 = (ulonglong)param_1;
  lVar12 = uVar11 * 0x4a8;
  if (*(int *)(&DAT_180073778 + lVar12) == 0) {
    return;
  }
  if ((*(uint *)(param_2 + 0xc) & 3) != 0) {
    if (*(int *)(param_2 + 0x14) != (&DAT_1800737b8)[uVar11 * 0x12a]) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737bc + lVar12)) {
      return;
    }
  }
  if ((*(uint *)(param_2 + 0xc) & 4) != 0) {
    if (*(int *)(param_2 + 0x14) != *(int *)(&DAT_1800737f8 + lVar12)) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737fc + lVar12)) {
      return;
    }
  }
  _Var7 = _time64((__time64_t *)0x0);
  *(int *)(&DAT_180073bf0 + lVar12) = *(int *)(&DAT_180073bf0 + lVar12) + 1;
  lVar2 = (&DAT_180073758)[uVar11 * 0x95];
  *(__time64_t *)(&DAT_180073810 + lVar12) = _Var7;
  *(undefined8 *)(&DAT_180073818 + lVar12) = 0;
  *(undefined8 *)(&DAT_180073820 + lVar12) = 0;
  *(undefined4 *)(&DAT_180073828 + lVar12) = 0;
  cVar1 = *(char *)(lVar2 + 0x2d47);
  if ((cVar1 == '\x01') || (cVar1 == '\x02')) {
    if (*(uint *)(&DAT_180073bf0 + lVar12) < 0x14) {
      return;
    }
  }
  else if ((cVar1 == '\x04') && (*(uint *)(&DAT_180073bf0 + lVar12) < 8)) {
    return;
  }
  *(int *)(param_2 + 0x28) = *(int *)(param_2 + 0x28) + (int)*(short *)(lVar2 + 0x2d86);
  *(int *)(param_2 + 0x2c) = *(int *)(param_2 + 0x2c) + (int)*(short *)(lVar2 + 0x2d86);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x60) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x5c) = *(undefined4 *)(param_2 + 0x2c);
  iVar6 = *(int *)(&DAT_180073bec + lVar12);
  *(undefined4 *)(&DAT_180073800 + lVar12) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)(&DAT_180073804 + lVar12) = *(undefined4 *)(param_2 + 0x2c);
  if (iVar6 < 0) {
    FUN_180002f50(param_1);
    return;
  }
  uVar10 = iVar6 + 1;
  *(uint *)(&DAT_180073bec + lVar12) = uVar10;
  uVar13 = *(uint *)(lVar2 + 0x2d88);
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,
                  *(int *)(lVar2 + 0x2d8c) + uVar13 + *(int *)(lVar2 + 0x2d78));
    return;
  }
  uVar4 = *(int *)(lVar2 + 0x2d78) + uVar13;
  if (uVar10 <= uVar4) {
    if (uVar10 == uVar4) {
      if (*(int *)((&DAT_180073758)[uVar11 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
      }
      else {
        local_res10[0] = 0x6bb6b672;
        local_res10[1] = 1;
        FUN_18001c670((&DAT_180073758)[uVar11 * 0x95],local_res10,8);
      }
    }
    FUN_18000c620((&DAT_180073750)[uVar11 * 0x95],(ushort *)(param_2 + 0x4c),
                  (uint)(*(int *)(&DAT_180073bec + lVar12) == *(int *)(lVar2 + 0x2d88) + 1));
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],*(int *)(&DAT_180073bec + lVar12) + -1,
                  *(int *)(lVar2 + 0x2d8c) + *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d88));
    return;
  }
  uVar13 = *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d8c) + uVar13;
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,uVar13);
    return;
  }
  iVar14 = 0;
  switch(cVar1) {
  case '\0':
  case '\x03':
  case '\x05':
  case '\x06':
    if ((*(int *)(&DAT_180073bf4 + lVar12) == 0) && (iVar14 = 0, uVar10 == 0x4b)) {
      *(undefined4 *)(&DAT_180073bf4 + lVar12) = 1;
      iVar14 = iVar6 + -0x49;
    }
    iVar6 = 0x1e;
    break;
  case '\x01':
  case '\x02':
  case '\x04':
    if ((*(uint *)(&DAT_180073bf4 + lVar12) < 5) && (iVar14 = 0, uVar10 == 0x82 - uVar13)) {
      iVar14 = 1;
      *(uint *)(&DAT_180073bf4 + lVar12) = *(uint *)(&DAT_180073bf4 + lVar12) + 1;
    }
    iVar6 = 100;
    break;
  default:
    iVar6 = 100;
    goto LAB_18000a1d2;
  }
  if (iVar14 == 0) {
LAB_18000a1d2:
    if ((uVar10 < uVar13 + *(int *)(lVar2 + 0x2d90)) &&
       ((uVar10 < iVar6 + uVar13 ||
        (uVar13 = *(int *)((&DAT_180073750)[uVar11 * 0x95] + 0x54) - *(int *)(param_2 + 0x2c),
        uVar10 = (int)uVar13 >> 0x1f, (uVar13 ^ uVar10) - uVar10 <= *(uint *)(lVar2 + 0x2d94)))))
    goto LAB_18000a20a;
  }
  FUN_180002f50(param_1);
LAB_18000a20a:
  uVar8 = FUN_18000ca30((&DAT_180073750)[uVar11 * 0x95],in_XMM1_Qa,0,1,0);
  if ((uVar8 & 1) != 0) {
    if ((*(int *)((&DAT_180073768)[uVar11 * 0x95] + 0x44) != 0) &&
       (*(int *)(&DAT_180073ba4 + lVar12) = *(int *)(&DAT_180073ba4 + lVar12) + 1,
       *(int *)(&DAT_180073ba8 + lVar12) <= *(int *)(&DAT_180073ba4 + lVar12))) {
      *(undefined4 *)(&DAT_180073ba4 + lVar12) = 0;
      local_50 = 0;
      local_48 = 0;
      local_40 = 0;
      local_38 = 0;
      local_30 = 0;
      local_68 = 0x1010000000040;
      local_60 = *(undefined8 *)(&DAT_180073800 + lVar12);
      local_58 = *(undefined8 *)(&DAT_180073808 + lVar12);
      local_50 = _time64((__time64_t *)0x0);
      DVar5 = GetTickCount();
      local_48 = CONCAT44(*(undefined4 *)(param_2 + 0x38),DVar5);
      FUN_18001b1b0((&DAT_180073768)[uVar11 * 0x95],(longlong)&local_68,0x40,
                    *(longlong *)((&DAT_180073750)[uVar11 * 0x95] + 0x270),
                    *(int *)(param_2 + 0x18) * *(int *)(param_2 + 0x14) * 2);
    }
    if (*(int *)((&DAT_180073760)[uVar11 * 0x95] + 0x44) != 0) {
      pbVar9 = (byte *)FUN_1800110a0((&DAT_180073750)[uVar11 * 0x95]);
      lVar2 = (&DAT_180073750)[uVar11 * 0x95];
      if (((pbVar9 != (byte *)0x0) && (lVar2 + 0x6c8 != 0)) &&
         (iVar6 = (uint)*(ushort *)(lVar2 + 0x6d6) * *(int *)(lVar2 + 0x6d0) *
                  *(int *)(lVar2 + 0x6cc), iVar6 = iVar6 + (iVar6 >> 0x1f & 7U),
         uVar13 = iVar6 >> 0x1f,
         bVar3 = FUN_180001cd0((&DAT_180073760)[uVar11 * 0x95],pbVar9,(iVar6 >> 3 ^ uVar13) - uVar13
                               ,lVar2 + 0x6c8), (int)CONCAT71(extraout_var,bVar3) == 0)) {
        FUN_180001c50((&DAT_180073760)[uVar11 * 0x95]);
      }
    }
    if (*(code **)(&DAT_180073790 + lVar12) != (code *)0x0) {
      (**(code **)(&DAT_180073790 + lVar12))
                (param_1,*(undefined4 *)(param_2 + 0x28),*(undefined4 *)(param_2 + 0x38),
                 *(undefined4 *)(param_2 + 0x44),2,*(undefined8 *)(&DAT_180073770 + lVar12));
    }
  }
  return;
}


==================================================================

########## TARGET 18001b1b0 ##########
callers (1):
  180009ee0 FUN_180009ee0

### CALLER FUNC 180009ee0 (1300 bytes) name=FUN_180009ee0

void FUN_180009ee0(uint param_1,longlong param_2)

{
  char cVar1;
  longlong lVar2;
  bool bVar3;
  uint uVar4;
  DWORD DVar5;
  int iVar6;
  __time64_t _Var7;
  ulonglong uVar8;
  byte *pbVar9;
  undefined7 extraout_var;
  uint uVar10;
  ulonglong uVar11;
  longlong lVar12;
  uint uVar13;
  int iVar14;
  undefined8 in_XMM1_Qa;
  uint local_res10 [2];
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  __time64_t local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  
  uVar11 = (ulonglong)param_1;
  lVar12 = uVar11 * 0x4a8;
  if (*(int *)(&DAT_180073778 + lVar12) == 0) {
    return;
  }
  if ((*(uint *)(param_2 + 0xc) & 3) != 0) {
    if (*(int *)(param_2 + 0x14) != (&DAT_1800737b8)[uVar11 * 0x12a]) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737bc + lVar12)) {
      return;
    }
  }
  if ((*(uint *)(param_2 + 0xc) & 4) != 0) {
    if (*(int *)(param_2 + 0x14) != *(int *)(&DAT_1800737f8 + lVar12)) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737fc + lVar12)) {
      return;
    }
  }
  _Var7 = _time64((__time64_t *)0x0);
  *(int *)(&DAT_180073bf0 + lVar12) = *(int *)(&DAT_180073bf0 + lVar12) + 1;
  lVar2 = (&DAT_180073758)[uVar11 * 0x95];
  *(__time64_t *)(&DAT_180073810 + lVar12) = _Var7;
  *(undefined8 *)(&DAT_180073818 + lVar12) = 0;
  *(undefined8 *)(&DAT_180073820 + lVar12) = 0;
  *(undefined4 *)(&DAT_180073828 + lVar12) = 0;
  cVar1 = *(char *)(lVar2 + 0x2d47);
  if ((cVar1 == '\x01') || (cVar1 == '\x02')) {
    if (*(uint *)(&DAT_180073bf0 + lVar12) < 0x14) {
      return;
    }
  }
  else if ((cVar1 == '\x04') && (*(uint *)(&DAT_180073bf0 + lVar12) < 8)) {
    return;
  }
  *(int *)(param_2 + 0x28) = *(int *)(param_2 + 0x28) + (int)*(short *)(lVar2 + 0x2d86);
  *(int *)(param_2 + 0x2c) = *(int *)(param_2 + 0x2c) + (int)*(short *)(lVar2 + 0x2d86);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x60) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x5c) = *(undefined4 *)(param_2 + 0x2c);
  iVar6 = *(int *)(&DAT_180073bec + lVar12);
  *(undefined4 *)(&DAT_180073800 + lVar12) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)(&DAT_180073804 + lVar12) = *(undefined4 *)(param_2 + 0x2c);
  if (iVar6 < 0) {
    FUN_180002f50(param_1);
    return;
  }
  uVar10 = iVar6 + 1;
  *(uint *)(&DAT_180073bec + lVar12) = uVar10;
  uVar13 = *(uint *)(lVar2 + 0x2d88);
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,
                  *(int *)(lVar2 + 0x2d8c) + uVar13 + *(int *)(lVar2 + 0x2d78));
    return;
  }
  uVar4 = *(int *)(lVar2 + 0x2d78) + uVar13;
  if (uVar10 <= uVar4) {
    if (uVar10 == uVar4) {
      if (*(int *)((&DAT_180073758)[uVar11 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
      }
      else {
        local_res10[0] = 0x6bb6b672;
        local_res10[1] = 1;
        FUN_18001c670((&DAT_180073758)[uVar11 * 0x95],local_res10,8);
      }
    }
    FUN_18000c620((&DAT_180073750)[uVar11 * 0x95],(ushort *)(param_2 + 0x4c),
                  (uint)(*(int *)(&DAT_180073bec + lVar12) == *(int *)(lVar2 + 0x2d88) + 1));
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],*(int *)(&DAT_180073bec + lVar12) + -1,
                  *(int *)(lVar2 + 0x2d8c) + *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d88));
    return;
  }
  uVar13 = *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d8c) + uVar13;
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,uVar13);
    return;
  }
  iVar14 = 0;
  switch(cVar1) {
  case '\0':
  case '\x03':
  case '\x05':
  case '\x06':
    if ((*(int *)(&DAT_180073bf4 + lVar12) == 0) && (iVar14 = 0, uVar10 == 0x4b)) {
      *(undefined4 *)(&DAT_180073bf4 + lVar12) = 1;
      iVar14 = iVar6 + -0x49;
    }
    iVar6 = 0x1e;
    break;
  case '\x01':
  case '\x02':
  case '\x04':
    if ((*(uint *)(&DAT_180073bf4 + lVar12) < 5) && (iVar14 = 0, uVar10 == 0x82 - uVar13)) {
      iVar14 = 1;
      *(uint *)(&DAT_180073bf4 + lVar12) = *(uint *)(&DAT_180073bf4 + lVar12) + 1;
    }
    iVar6 = 100;
    break;
  default:
    iVar6 = 100;
    goto LAB_18000a1d2;
  }
  if (iVar14 == 0) {
LAB_18000a1d2:
    if ((uVar10 < uVar13 + *(int *)(lVar2 + 0x2d90)) &&
       ((uVar10 < iVar6 + uVar13 ||
        (uVar13 = *(int *)((&DAT_180073750)[uVar11 * 0x95] + 0x54) - *(int *)(param_2 + 0x2c),
        uVar10 = (int)uVar13 >> 0x1f, (uVar13 ^ uVar10) - uVar10 <= *(uint *)(lVar2 + 0x2d94)))))
    goto LAB_18000a20a;
  }
  FUN_180002f50(param_1);
LAB_18000a20a:
  uVar8 = FUN_18000ca30((&DAT_180073750)[uVar11 * 0x95],in_XMM1_Qa,0,1,0);
  if ((uVar8 & 1) != 0) {
    if ((*(int *)((&DAT_180073768)[uVar11 * 0x95] + 0x44) != 0) &&
       (*(int *)(&DAT_180073ba4 + lVar12) = *(int *)(&DAT_180073ba4 + lVar12) + 1,
       *(int *)(&DAT_180073ba8 + lVar12) <= *(int *)(&DAT_180073ba4 + lVar12))) {
      *(undefined4 *)(&DAT_180073ba4 + lVar12) = 0;
      local_50 = 0;
      local_48 = 0;
      local_40 = 0;
      local_38 = 0;
      local_30 = 0;
      local_68 = 0x1010000000040;
      local_60 = *(undefined8 *)(&DAT_180073800 + lVar12);
      local_58 = *(undefined8 *)(&DAT_180073808 + lVar12);
      local_50 = _time64((__time64_t *)0x0);
      DVar5 = GetTickCount();
      local_48 = CONCAT44(*(undefined4 *)(param_2 + 0x38),DVar5);
      FUN_18001b1b0((&DAT_180073768)[uVar11 * 0x95],(longlong)&local_68,0x40,
                    *(longlong *)((&DAT_180073750)[uVar11 * 0x95] + 0x270),
                    *(int *)(param_2 + 0x18) * *(int *)(param_2 + 0x14) * 2);
    }
    if (*(int *)((&DAT_180073760)[uVar11 * 0x95] + 0x44) != 0) {
      pbVar9 = (byte *)FUN_1800110a0((&DAT_180073750)[uVar11 * 0x95]);
      lVar2 = (&DAT_180073750)[uVar11 * 0x95];
      if (((pbVar9 != (byte *)0x0) && (lVar2 + 0x6c8 != 0)) &&
         (iVar6 = (uint)*(ushort *)(lVar2 + 0x6d6) * *(int *)(lVar2 + 0x6d0) *
                  *(int *)(lVar2 + 0x6cc), iVar6 = iVar6 + (iVar6 >> 0x1f & 7U),
         uVar13 = iVar6 >> 0x1f,
         bVar3 = FUN_180001cd0((&DAT_180073760)[uVar11 * 0x95],pbVar9,(iVar6 >> 3 ^ uVar13) - uVar13
                               ,lVar2 + 0x6c8), (int)CONCAT71(extraout_var,bVar3) == 0)) {
        FUN_180001c50((&DAT_180073760)[uVar11 * 0x95]);
      }
    }
    if (*(code **)(&DAT_180073790 + lVar12) != (code *)0x0) {
      (**(code **)(&DAT_180073790 + lVar12))
                (param_1,*(undefined4 *)(param_2 + 0x28),*(undefined4 *)(param_2 + 0x38),
                 *(undefined4 *)(param_2 + 0x44),2,*(undefined8 *)(&DAT_180073770 + lVar12));
    }
  }
  return;
}


==================================================================

########## TARGET 180001cd0 ##########
callers (2):
  180009ee0 FUN_180009ee0
  18000a410 FUN_18000a410

### CALLER FUNC 180009ee0 (1300 bytes) name=FUN_180009ee0

void FUN_180009ee0(uint param_1,longlong param_2)

{
  char cVar1;
  longlong lVar2;
  bool bVar3;
  uint uVar4;
  DWORD DVar5;
  int iVar6;
  __time64_t _Var7;
  ulonglong uVar8;
  byte *pbVar9;
  undefined7 extraout_var;
  uint uVar10;
  ulonglong uVar11;
  longlong lVar12;
  uint uVar13;
  int iVar14;
  undefined8 in_XMM1_Qa;
  uint local_res10 [2];
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  __time64_t local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  
  uVar11 = (ulonglong)param_1;
  lVar12 = uVar11 * 0x4a8;
  if (*(int *)(&DAT_180073778 + lVar12) == 0) {
    return;
  }
  if ((*(uint *)(param_2 + 0xc) & 3) != 0) {
    if (*(int *)(param_2 + 0x14) != (&DAT_1800737b8)[uVar11 * 0x12a]) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737bc + lVar12)) {
      return;
    }
  }
  if ((*(uint *)(param_2 + 0xc) & 4) != 0) {
    if (*(int *)(param_2 + 0x14) != *(int *)(&DAT_1800737f8 + lVar12)) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737fc + lVar12)) {
      return;
    }
  }
  _Var7 = _time64((__time64_t *)0x0);
  *(int *)(&DAT_180073bf0 + lVar12) = *(int *)(&DAT_180073bf0 + lVar12) + 1;
  lVar2 = (&DAT_180073758)[uVar11 * 0x95];
  *(__time64_t *)(&DAT_180073810 + lVar12) = _Var7;
  *(undefined8 *)(&DAT_180073818 + lVar12) = 0;
  *(undefined8 *)(&DAT_180073820 + lVar12) = 0;
  *(undefined4 *)(&DAT_180073828 + lVar12) = 0;
  cVar1 = *(char *)(lVar2 + 0x2d47);
  if ((cVar1 == '\x01') || (cVar1 == '\x02')) {
    if (*(uint *)(&DAT_180073bf0 + lVar12) < 0x14) {
      return;
    }
  }
  else if ((cVar1 == '\x04') && (*(uint *)(&DAT_180073bf0 + lVar12) < 8)) {
    return;
  }
  *(int *)(param_2 + 0x28) = *(int *)(param_2 + 0x28) + (int)*(short *)(lVar2 + 0x2d86);
  *(int *)(param_2 + 0x2c) = *(int *)(param_2 + 0x2c) + (int)*(short *)(lVar2 + 0x2d86);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x60) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x5c) = *(undefined4 *)(param_2 + 0x2c);
  iVar6 = *(int *)(&DAT_180073bec + lVar12);
  *(undefined4 *)(&DAT_180073800 + lVar12) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)(&DAT_180073804 + lVar12) = *(undefined4 *)(param_2 + 0x2c);
  if (iVar6 < 0) {
    FUN_180002f50(param_1);
    return;
  }
  uVar10 = iVar6 + 1;
  *(uint *)(&DAT_180073bec + lVar12) = uVar10;
  uVar13 = *(uint *)(lVar2 + 0x2d88);
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,
                  *(int *)(lVar2 + 0x2d8c) + uVar13 + *(int *)(lVar2 + 0x2d78));
    return;
  }
  uVar4 = *(int *)(lVar2 + 0x2d78) + uVar13;
  if (uVar10 <= uVar4) {
    if (uVar10 == uVar4) {
      if (*(int *)((&DAT_180073758)[uVar11 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
      }
      else {
        local_res10[0] = 0x6bb6b672;
        local_res10[1] = 1;
        FUN_18001c670((&DAT_180073758)[uVar11 * 0x95],local_res10,8);
      }
    }
    FUN_18000c620((&DAT_180073750)[uVar11 * 0x95],(ushort *)(param_2 + 0x4c),
                  (uint)(*(int *)(&DAT_180073bec + lVar12) == *(int *)(lVar2 + 0x2d88) + 1));
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],*(int *)(&DAT_180073bec + lVar12) + -1,
                  *(int *)(lVar2 + 0x2d8c) + *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d88));
    return;
  }
  uVar13 = *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d8c) + uVar13;
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,uVar13);
    return;
  }
  iVar14 = 0;
  switch(cVar1) {
  case '\0':
  case '\x03':
  case '\x05':
  case '\x06':
    if ((*(int *)(&DAT_180073bf4 + lVar12) == 0) && (iVar14 = 0, uVar10 == 0x4b)) {
      *(undefined4 *)(&DAT_180073bf4 + lVar12) = 1;
      iVar14 = iVar6 + -0x49;
    }
    iVar6 = 0x1e;
    break;
  case '\x01':
  case '\x02':
  case '\x04':
    if ((*(uint *)(&DAT_180073bf4 + lVar12) < 5) && (iVar14 = 0, uVar10 == 0x82 - uVar13)) {
      iVar14 = 1;
      *(uint *)(&DAT_180073bf4 + lVar12) = *(uint *)(&DAT_180073bf4 + lVar12) + 1;
    }
    iVar6 = 100;
    break;
  default:
    iVar6 = 100;
    goto LAB_18000a1d2;
  }
  if (iVar14 == 0) {
LAB_18000a1d2:
    if ((uVar10 < uVar13 + *(int *)(lVar2 + 0x2d90)) &&
       ((uVar10 < iVar6 + uVar13 ||
        (uVar13 = *(int *)((&DAT_180073750)[uVar11 * 0x95] + 0x54) - *(int *)(param_2 + 0x2c),
        uVar10 = (int)uVar13 >> 0x1f, (uVar13 ^ uVar10) - uVar10 <= *(uint *)(lVar2 + 0x2d94)))))
    goto LAB_18000a20a;
  }
  FUN_180002f50(param_1);
LAB_18000a20a:
  uVar8 = FUN_18000ca30((&DAT_180073750)[uVar11 * 0x95],in_XMM1_Qa,0,1,0);
  if ((uVar8 & 1) != 0) {
    if ((*(int *)((&DAT_180073768)[uVar11 * 0x95] + 0x44) != 0) &&
       (*(int *)(&DAT_180073ba4 + lVar12) = *(int *)(&DAT_180073ba4 + lVar12) + 1,
       *(int *)(&DAT_180073ba8 + lVar12) <= *(int *)(&DAT_180073ba4 + lVar12))) {
      *(undefined4 *)(&DAT_180073ba4 + lVar12) = 0;
      local_50 = 0;
      local_48 = 0;
      local_40 = 0;
      local_38 = 0;
      local_30 = 0;
      local_68 = 0x1010000000040;
      local_60 = *(undefined8 *)(&DAT_180073800 + lVar12);
      local_58 = *(undefined8 *)(&DAT_180073808 + lVar12);
      local_50 = _time64((__time64_t *)0x0);
      DVar5 = GetTickCount();
      local_48 = CONCAT44(*(undefined4 *)(param_2 + 0x38),DVar5);
      FUN_18001b1b0((&DAT_180073768)[uVar11 * 0x95],(longlong)&local_68,0x40,
                    *(longlong *)((&DAT_180073750)[uVar11 * 0x95] + 0x270),
                    *(int *)(param_2 + 0x18) * *(int *)(param_2 + 0x14) * 2);
    }
    if (*(int *)((&DAT_180073760)[uVar11 * 0x95] + 0x44) != 0) {
      pbVar9 = (byte *)FUN_1800110a0((&DAT_180073750)[uVar11 * 0x95]);
      lVar2 = (&DAT_180073750)[uVar11 * 0x95];
      if (((pbVar9 != (byte *)0x0) && (lVar2 + 0x6c8 != 0)) &&
         (iVar6 = (uint)*(ushort *)(lVar2 + 0x6d6) * *(int *)(lVar2 + 0x6d0) *
                  *(int *)(lVar2 + 0x6cc), iVar6 = iVar6 + (iVar6 >> 0x1f & 7U),
         uVar13 = iVar6 >> 0x1f,
         bVar3 = FUN_180001cd0((&DAT_180073760)[uVar11 * 0x95],pbVar9,(iVar6 >> 3 ^ uVar13) - uVar13
                               ,lVar2 + 0x6c8), (int)CONCAT71(extraout_var,bVar3) == 0)) {
        FUN_180001c50((&DAT_180073760)[uVar11 * 0x95]);
      }
    }
    if (*(code **)(&DAT_180073790 + lVar12) != (code *)0x0) {
      (**(code **)(&DAT_180073790 + lVar12))
                (param_1,*(undefined4 *)(param_2 + 0x28),*(undefined4 *)(param_2 + 0x38),
                 *(undefined4 *)(param_2 + 0x44),2,*(undefined8 *)(&DAT_180073770 + lVar12));
    }
  }
  return;
}


==================================================================

### CALLER FUNC 18000a410 (496 bytes) name=FUN_18000a410

void FUN_18000a410(uint param_1,undefined8 param_2,longlong param_3)

{
  undefined4 uVar1;
  longlong lVar2;
  bool bVar3;
  int iVar4;
  undefined8 uVar5;
  undefined7 extraout_var;
  uint uVar6;
  ulonglong uVar7;
  longlong lVar8;
  byte *pbVar9;
  
  uVar1 = *(undefined4 *)(param_3 + 8);
  uVar7 = (ulonglong)param_1;
  lVar8 = uVar7 * 0x4a8;
  *(undefined4 *)(&DAT_180073800 + lVar8) = uVar1;
  *(undefined4 *)(&DAT_180073804 + lVar8) = *(undefined4 *)(param_3 + 0xc);
  *(undefined4 *)(&DAT_180073808 + lVar8) = *(undefined4 *)(param_3 + 0x10);
  *(undefined4 *)(&DAT_18007380c + lVar8) = *(undefined4 *)(param_3 + 0x14);
  *(undefined8 *)(&DAT_180073810 + lVar8) = *(undefined8 *)(param_3 + 0x18);
  *(undefined8 *)(&DAT_180073818 + lVar8) = *(undefined8 *)(param_3 + 0x28);
  *(undefined8 *)(&DAT_180073820 + lVar8) = *(undefined8 *)(param_3 + 0x30);
  *(undefined4 *)(&DAT_180073828 + lVar8) = *(undefined4 *)(param_3 + 0x38);
  *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x60) = uVar1;
  *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x5c) = *(undefined4 *)(&DAT_180073804 + lVar8);
  if (*(int *)(&DAT_180073ba0 + lVar8) < *(int *)(param_3 + 0x24)) {
    EnterCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar7 * 0x95] + 0x238));
    *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x58) =
         *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x60);
    *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x54) =
         *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x5c);
    LeaveCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar7 * 0x95] + 0x238));
  }
  lVar2 = (&DAT_180073750)[uVar7 * 0x95];
  pbVar9 = (byte *)0x0;
  *(undefined4 *)(&DAT_180073ba0 + lVar8) = *(undefined4 *)(param_3 + 0x24);
  uVar5 = FUN_18000ca30(lVar2,param_2,1,1,0);
  if ((int)uVar5 != 0) {
    if (*(int *)((&DAT_180073760)[uVar7 * 0x95] + 0x44) != 0) {
      lVar2 = (&DAT_180073750)[uVar7 * 0x95];
      if ((*(int *)(lVar2 + 0x228) != 0) && (*(int *)(lVar2 + 0x234) != 0)) {
        if (*(int *)(lVar2 + 0x4203c) == 0) {
          FUN_180010e80(lVar2);
        }
        pbVar9 = *(byte **)(lVar2 + 0x2a0);
      }
      lVar2 = (&DAT_180073750)[uVar7 * 0x95];
      if ((pbVar9 != (byte *)0x0) && (lVar2 + 0x6c8 != 0)) {
        iVar4 = (uint)*(ushort *)(lVar2 + 0x6d6) * *(int *)(lVar2 + 0x6d0) * *(int *)(lVar2 + 0x6cc)
        ;
        iVar4 = iVar4 + (iVar4 >> 0x1f & 7U);
        uVar6 = iVar4 >> 0x1f;
        bVar3 = FUN_180001cd0((&DAT_180073760)[uVar7 * 0x95],pbVar9,(iVar4 >> 3 ^ uVar6) - uVar6,
                              lVar2 + 0x6c8);
        if ((int)CONCAT71(extraout_var,bVar3) == 0) {
          FUN_180001c50((&DAT_180073760)[uVar7 * 0x95]);
        }
      }
    }
    if (*(code **)(&DAT_180073790 + lVar8) != (code *)0x0) {
      (**(code **)(&DAT_180073790 + lVar8))
                (param_1,*(undefined4 *)(param_3 + 8),*(undefined4 *)(param_3 + 0x24),0,2,
                 *(undefined8 *)(&DAT_180073770 + lVar8));
    }
  }
  return;
}


==================================================================

########## TARGET 180001c50 ##########
callers (2):
  180009ee0 FUN_180009ee0
  18000a410 FUN_18000a410

### CALLER FUNC 180009ee0 (1300 bytes) name=FUN_180009ee0

void FUN_180009ee0(uint param_1,longlong param_2)

{
  char cVar1;
  longlong lVar2;
  bool bVar3;
  uint uVar4;
  DWORD DVar5;
  int iVar6;
  __time64_t _Var7;
  ulonglong uVar8;
  byte *pbVar9;
  undefined7 extraout_var;
  uint uVar10;
  ulonglong uVar11;
  longlong lVar12;
  uint uVar13;
  int iVar14;
  undefined8 in_XMM1_Qa;
  uint local_res10 [2];
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  __time64_t local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  
  uVar11 = (ulonglong)param_1;
  lVar12 = uVar11 * 0x4a8;
  if (*(int *)(&DAT_180073778 + lVar12) == 0) {
    return;
  }
  if ((*(uint *)(param_2 + 0xc) & 3) != 0) {
    if (*(int *)(param_2 + 0x14) != (&DAT_1800737b8)[uVar11 * 0x12a]) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737bc + lVar12)) {
      return;
    }
  }
  if ((*(uint *)(param_2 + 0xc) & 4) != 0) {
    if (*(int *)(param_2 + 0x14) != *(int *)(&DAT_1800737f8 + lVar12)) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737fc + lVar12)) {
      return;
    }
  }
  _Var7 = _time64((__time64_t *)0x0);
  *(int *)(&DAT_180073bf0 + lVar12) = *(int *)(&DAT_180073bf0 + lVar12) + 1;
  lVar2 = (&DAT_180073758)[uVar11 * 0x95];
  *(__time64_t *)(&DAT_180073810 + lVar12) = _Var7;
  *(undefined8 *)(&DAT_180073818 + lVar12) = 0;
  *(undefined8 *)(&DAT_180073820 + lVar12) = 0;
  *(undefined4 *)(&DAT_180073828 + lVar12) = 0;
  cVar1 = *(char *)(lVar2 + 0x2d47);
  if ((cVar1 == '\x01') || (cVar1 == '\x02')) {
    if (*(uint *)(&DAT_180073bf0 + lVar12) < 0x14) {
      return;
    }
  }
  else if ((cVar1 == '\x04') && (*(uint *)(&DAT_180073bf0 + lVar12) < 8)) {
    return;
  }
  *(int *)(param_2 + 0x28) = *(int *)(param_2 + 0x28) + (int)*(short *)(lVar2 + 0x2d86);
  *(int *)(param_2 + 0x2c) = *(int *)(param_2 + 0x2c) + (int)*(short *)(lVar2 + 0x2d86);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x60) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x5c) = *(undefined4 *)(param_2 + 0x2c);
  iVar6 = *(int *)(&DAT_180073bec + lVar12);
  *(undefined4 *)(&DAT_180073800 + lVar12) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)(&DAT_180073804 + lVar12) = *(undefined4 *)(param_2 + 0x2c);
  if (iVar6 < 0) {
    FUN_180002f50(param_1);
    return;
  }
  uVar10 = iVar6 + 1;
  *(uint *)(&DAT_180073bec + lVar12) = uVar10;
  uVar13 = *(uint *)(lVar2 + 0x2d88);
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,
                  *(int *)(lVar2 + 0x2d8c) + uVar13 + *(int *)(lVar2 + 0x2d78));
    return;
  }
  uVar4 = *(int *)(lVar2 + 0x2d78) + uVar13;
  if (uVar10 <= uVar4) {
    if (uVar10 == uVar4) {
      if (*(int *)((&DAT_180073758)[uVar11 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
      }
      else {
        local_res10[0] = 0x6bb6b672;
        local_res10[1] = 1;
        FUN_18001c670((&DAT_180073758)[uVar11 * 0x95],local_res10,8);
      }
    }
    FUN_18000c620((&DAT_180073750)[uVar11 * 0x95],(ushort *)(param_2 + 0x4c),
                  (uint)(*(int *)(&DAT_180073bec + lVar12) == *(int *)(lVar2 + 0x2d88) + 1));
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],*(int *)(&DAT_180073bec + lVar12) + -1,
                  *(int *)(lVar2 + 0x2d8c) + *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d88));
    return;
  }
  uVar13 = *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d8c) + uVar13;
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,uVar13);
    return;
  }
  iVar14 = 0;
  switch(cVar1) {
  case '\0':
  case '\x03':
  case '\x05':
  case '\x06':
    if ((*(int *)(&DAT_180073bf4 + lVar12) == 0) && (iVar14 = 0, uVar10 == 0x4b)) {
      *(undefined4 *)(&DAT_180073bf4 + lVar12) = 1;
      iVar14 = iVar6 + -0x49;
    }
    iVar6 = 0x1e;
    break;
  case '\x01':
  case '\x02':
  case '\x04':
    if ((*(uint *)(&DAT_180073bf4 + lVar12) < 5) && (iVar14 = 0, uVar10 == 0x82 - uVar13)) {
      iVar14 = 1;
      *(uint *)(&DAT_180073bf4 + lVar12) = *(uint *)(&DAT_180073bf4 + lVar12) + 1;
    }
    iVar6 = 100;
    break;
  default:
    iVar6 = 100;
    goto LAB_18000a1d2;
  }
  if (iVar14 == 0) {
LAB_18000a1d2:
    if ((uVar10 < uVar13 + *(int *)(lVar2 + 0x2d90)) &&
       ((uVar10 < iVar6 + uVar13 ||
        (uVar13 = *(int *)((&DAT_180073750)[uVar11 * 0x95] + 0x54) - *(int *)(param_2 + 0x2c),
        uVar10 = (int)uVar13 >> 0x1f, (uVar13 ^ uVar10) - uVar10 <= *(uint *)(lVar2 + 0x2d94)))))
    goto LAB_18000a20a;
  }
  FUN_180002f50(param_1);
LAB_18000a20a:
  uVar8 = FUN_18000ca30((&DAT_180073750)[uVar11 * 0x95],in_XMM1_Qa,0,1,0);
  if ((uVar8 & 1) != 0) {
    if ((*(int *)((&DAT_180073768)[uVar11 * 0x95] + 0x44) != 0) &&
       (*(int *)(&DAT_180073ba4 + lVar12) = *(int *)(&DAT_180073ba4 + lVar12) + 1,
       *(int *)(&DAT_180073ba8 + lVar12) <= *(int *)(&DAT_180073ba4 + lVar12))) {
      *(undefined4 *)(&DAT_180073ba4 + lVar12) = 0;
      local_50 = 0;
      local_48 = 0;
      local_40 = 0;
      local_38 = 0;
      local_30 = 0;
      local_68 = 0x1010000000040;
      local_60 = *(undefined8 *)(&DAT_180073800 + lVar12);
      local_58 = *(undefined8 *)(&DAT_180073808 + lVar12);
      local_50 = _time64((__time64_t *)0x0);
      DVar5 = GetTickCount();
      local_48 = CONCAT44(*(undefined4 *)(param_2 + 0x38),DVar5);
      FUN_18001b1b0((&DAT_180073768)[uVar11 * 0x95],(longlong)&local_68,0x40,
                    *(longlong *)((&DAT_180073750)[uVar11 * 0x95] + 0x270),
                    *(int *)(param_2 + 0x18) * *(int *)(param_2 + 0x14) * 2);
    }
    if (*(int *)((&DAT_180073760)[uVar11 * 0x95] + 0x44) != 0) {
      pbVar9 = (byte *)FUN_1800110a0((&DAT_180073750)[uVar11 * 0x95]);
      lVar2 = (&DAT_180073750)[uVar11 * 0x95];
      if (((pbVar9 != (byte *)0x0) && (lVar2 + 0x6c8 != 0)) &&
         (iVar6 = (uint)*(ushort *)(lVar2 + 0x6d6) * *(int *)(lVar2 + 0x6d0) *
                  *(int *)(lVar2 + 0x6cc), iVar6 = iVar6 + (iVar6 >> 0x1f & 7U),
         uVar13 = iVar6 >> 0x1f,
         bVar3 = FUN_180001cd0((&DAT_180073760)[uVar11 * 0x95],pbVar9,(iVar6 >> 3 ^ uVar13) - uVar13
                               ,lVar2 + 0x6c8), (int)CONCAT71(extraout_var,bVar3) == 0)) {
        FUN_180001c50((&DAT_180073760)[uVar11 * 0x95]);
      }
    }
    if (*(code **)(&DAT_180073790 + lVar12) != (code *)0x0) {
      (**(code **)(&DAT_180073790 + lVar12))
                (param_1,*(undefined4 *)(param_2 + 0x28),*(undefined4 *)(param_2 + 0x38),
                 *(undefined4 *)(param_2 + 0x44),2,*(undefined8 *)(&DAT_180073770 + lVar12));
    }
  }
  return;
}


==================================================================

### CALLER FUNC 18000a410 (496 bytes) name=FUN_18000a410

void FUN_18000a410(uint param_1,undefined8 param_2,longlong param_3)

{
  undefined4 uVar1;
  longlong lVar2;
  bool bVar3;
  int iVar4;
  undefined8 uVar5;
  undefined7 extraout_var;
  uint uVar6;
  ulonglong uVar7;
  longlong lVar8;
  byte *pbVar9;
  
  uVar1 = *(undefined4 *)(param_3 + 8);
  uVar7 = (ulonglong)param_1;
  lVar8 = uVar7 * 0x4a8;
  *(undefined4 *)(&DAT_180073800 + lVar8) = uVar1;
  *(undefined4 *)(&DAT_180073804 + lVar8) = *(undefined4 *)(param_3 + 0xc);
  *(undefined4 *)(&DAT_180073808 + lVar8) = *(undefined4 *)(param_3 + 0x10);
  *(undefined4 *)(&DAT_18007380c + lVar8) = *(undefined4 *)(param_3 + 0x14);
  *(undefined8 *)(&DAT_180073810 + lVar8) = *(undefined8 *)(param_3 + 0x18);
  *(undefined8 *)(&DAT_180073818 + lVar8) = *(undefined8 *)(param_3 + 0x28);
  *(undefined8 *)(&DAT_180073820 + lVar8) = *(undefined8 *)(param_3 + 0x30);
  *(undefined4 *)(&DAT_180073828 + lVar8) = *(undefined4 *)(param_3 + 0x38);
  *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x60) = uVar1;
  *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x5c) = *(undefined4 *)(&DAT_180073804 + lVar8);
  if (*(int *)(&DAT_180073ba0 + lVar8) < *(int *)(param_3 + 0x24)) {
    EnterCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar7 * 0x95] + 0x238));
    *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x58) =
         *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x60);
    *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x54) =
         *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x5c);
    LeaveCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar7 * 0x95] + 0x238));
  }
  lVar2 = (&DAT_180073750)[uVar7 * 0x95];
  pbVar9 = (byte *)0x0;
  *(undefined4 *)(&DAT_180073ba0 + lVar8) = *(undefined4 *)(param_3 + 0x24);
  uVar5 = FUN_18000ca30(lVar2,param_2,1,1,0);
  if ((int)uVar5 != 0) {
    if (*(int *)((&DAT_180073760)[uVar7 * 0x95] + 0x44) != 0) {
      lVar2 = (&DAT_180073750)[uVar7 * 0x95];
      if ((*(int *)(lVar2 + 0x228) != 0) && (*(int *)(lVar2 + 0x234) != 0)) {
        if (*(int *)(lVar2 + 0x4203c) == 0) {
          FUN_180010e80(lVar2);
        }
        pbVar9 = *(byte **)(lVar2 + 0x2a0);
      }
      lVar2 = (&DAT_180073750)[uVar7 * 0x95];
      if ((pbVar9 != (byte *)0x0) && (lVar2 + 0x6c8 != 0)) {
        iVar4 = (uint)*(ushort *)(lVar2 + 0x6d6) * *(int *)(lVar2 + 0x6d0) * *(int *)(lVar2 + 0x6cc)
        ;
        iVar4 = iVar4 + (iVar4 >> 0x1f & 7U);
        uVar6 = iVar4 >> 0x1f;
        bVar3 = FUN_180001cd0((&DAT_180073760)[uVar7 * 0x95],pbVar9,(iVar4 >> 3 ^ uVar6) - uVar6,
                              lVar2 + 0x6c8);
        if ((int)CONCAT71(extraout_var,bVar3) == 0) {
          FUN_180001c50((&DAT_180073760)[uVar7 * 0x95]);
        }
      }
    }
    if (*(code **)(&DAT_180073790 + lVar8) != (code *)0x0) {
      (**(code **)(&DAT_180073790 + lVar8))
                (param_1,*(undefined4 *)(param_3 + 8),*(undefined4 *)(param_3 + 0x24),0,2,
                 *(undefined8 *)(&DAT_180073770 + lVar8));
    }
  }
  return;
}


==================================================================

########## TARGET 18001c670 ##########
callers (8):
  180002f50 FUN_180002f50
  180002ff0 MAG_TriggerFFC
  180009ee0 FUN_180009ee0
  18001d2d0 FUN_18001d2d0
  18001d520 FUN_18001d520
  18001d6e0 FUN_18001d6e0
  18001df10 FUN_18001df10
  18001e100 FUN_18001e100

### CALLER FUNC 180002f50 (155 bytes) name=FUN_180002f50

undefined8 FUN_180002f50(uint param_1)

{
  undefined8 uVar1;
  ulonglong uVar2;
  uint local_res10 [6];
  
  uVar2 = (ulonglong)param_1;
  if (*(int *)((&DAT_180073758)[uVar2 * 0x95] + 0x14) == 0) {
    SetLastError(0xe4ae0005);
    return 0;
  }
  local_res10[0] = 0x6bb6b672;
  local_res10[1] = 0;
  uVar1 = FUN_18001c670((&DAT_180073758)[uVar2 * 0x95],local_res10,8);
  if ((int)uVar1 == 0) {
    return uVar1;
  }
  *(undefined4 *)((&DAT_180073750)[uVar2 * 0x95] + 0x58) =
       *(undefined4 *)((&DAT_180073750)[uVar2 * 0x95] + 0x60);
  *(undefined4 *)((&DAT_180073750)[uVar2 * 0x95] + 0x54) =
       *(undefined4 *)((&DAT_180073750)[uVar2 * 0x95] + 0x5c);
  *(undefined4 *)(&DAT_180073bec + uVar2 * 0x4a8) = 0;
  return 1;
}


==================================================================

### CALLER FUNC 180002ff0 (230 bytes) name=MAG_TriggerFFC

bool MAG_TriggerFFC(uint param_1)

{
  longlong lVar1;
  undefined8 uVar2;
  ulonglong uVar3;
  bool bVar4;
  uint local_res10 [2];
  
                    /* 0x2ff0  64  MAG_TriggerFFC */
  if (param_1 < 0x81) {
    uVar3 = (ulonglong)param_1;
    lVar1 = (&DAT_180073758)[uVar3 * 0x95];
    if ((((lVar1 != 0) && ((&DAT_180073750)[uVar3 * 0x95] != 0)) &&
        ((&DAT_180073760)[uVar3 * 0x95] != 0)) && ((&DAT_180073768)[uVar3 * 0x95] != 0)) {
      if (*(int *)(lVar1 + 0x14) == 0) {
        SetLastError(0xe4ae0005);
        return false;
      }
      local_res10[0] = 0x6bb6b672;
      local_res10[1] = 0;
      uVar2 = FUN_18001c670(lVar1,local_res10,8);
      bVar4 = (int)uVar2 != 0;
      if (bVar4) {
        *(undefined4 *)((&DAT_180073750)[uVar3 * 0x95] + 0x58) =
             *(undefined4 *)((&DAT_180073750)[uVar3 * 0x95] + 0x60);
        *(undefined4 *)((&DAT_180073750)[uVar3 * 0x95] + 0x54) =
             *(undefined4 *)((&DAT_180073750)[uVar3 * 0x95] + 0x5c);
        *(undefined4 *)(&DAT_180073bec + uVar3 * 0x4a8) = 0;
      }
      return bVar4;
    }
  }
  SetLastError(0xe4ae0001);
  return false;
}


==================================================================

### CALLER FUNC 180009ee0 (1300 bytes) name=FUN_180009ee0

void FUN_180009ee0(uint param_1,longlong param_2)

{
  char cVar1;
  longlong lVar2;
  bool bVar3;
  uint uVar4;
  DWORD DVar5;
  int iVar6;
  __time64_t _Var7;
  ulonglong uVar8;
  byte *pbVar9;
  undefined7 extraout_var;
  uint uVar10;
  ulonglong uVar11;
  longlong lVar12;
  uint uVar13;
  int iVar14;
  undefined8 in_XMM1_Qa;
  uint local_res10 [2];
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  __time64_t local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  
  uVar11 = (ulonglong)param_1;
  lVar12 = uVar11 * 0x4a8;
  if (*(int *)(&DAT_180073778 + lVar12) == 0) {
    return;
  }
  if ((*(uint *)(param_2 + 0xc) & 3) != 0) {
    if (*(int *)(param_2 + 0x14) != (&DAT_1800737b8)[uVar11 * 0x12a]) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737bc + lVar12)) {
      return;
    }
  }
  if ((*(uint *)(param_2 + 0xc) & 4) != 0) {
    if (*(int *)(param_2 + 0x14) != *(int *)(&DAT_1800737f8 + lVar12)) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737fc + lVar12)) {
      return;
    }
  }
  _Var7 = _time64((__time64_t *)0x0);
  *(int *)(&DAT_180073bf0 + lVar12) = *(int *)(&DAT_180073bf0 + lVar12) + 1;
  lVar2 = (&DAT_180073758)[uVar11 * 0x95];
  *(__time64_t *)(&DAT_180073810 + lVar12) = _Var7;
  *(undefined8 *)(&DAT_180073818 + lVar12) = 0;
  *(undefined8 *)(&DAT_180073820 + lVar12) = 0;
  *(undefined4 *)(&DAT_180073828 + lVar12) = 0;
  cVar1 = *(char *)(lVar2 + 0x2d47);
  if ((cVar1 == '\x01') || (cVar1 == '\x02')) {
    if (*(uint *)(&DAT_180073bf0 + lVar12) < 0x14) {
      return;
    }
  }
  else if ((cVar1 == '\x04') && (*(uint *)(&DAT_180073bf0 + lVar12) < 8)) {
    return;
  }
  *(int *)(param_2 + 0x28) = *(int *)(param_2 + 0x28) + (int)*(short *)(lVar2 + 0x2d86);
  *(int *)(param_2 + 0x2c) = *(int *)(param_2 + 0x2c) + (int)*(short *)(lVar2 + 0x2d86);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x60) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x5c) = *(undefined4 *)(param_2 + 0x2c);
  iVar6 = *(int *)(&DAT_180073bec + lVar12);
  *(undefined4 *)(&DAT_180073800 + lVar12) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)(&DAT_180073804 + lVar12) = *(undefined4 *)(param_2 + 0x2c);
  if (iVar6 < 0) {
    FUN_180002f50(param_1);
    return;
  }
  uVar10 = iVar6 + 1;
  *(uint *)(&DAT_180073bec + lVar12) = uVar10;
  uVar13 = *(uint *)(lVar2 + 0x2d88);
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,
                  *(int *)(lVar2 + 0x2d8c) + uVar13 + *(int *)(lVar2 + 0x2d78));
    return;
  }
  uVar4 = *(int *)(lVar2 + 0x2d78) + uVar13;
  if (uVar10 <= uVar4) {
    if (uVar10 == uVar4) {
      if (*(int *)((&DAT_180073758)[uVar11 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
      }
      else {
        local_res10[0] = 0x6bb6b672;
        local_res10[1] = 1;
        FUN_18001c670((&DAT_180073758)[uVar11 * 0x95],local_res10,8);
      }
    }
    FUN_18000c620((&DAT_180073750)[uVar11 * 0x95],(ushort *)(param_2 + 0x4c),
                  (uint)(*(int *)(&DAT_180073bec + lVar12) == *(int *)(lVar2 + 0x2d88) + 1));
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],*(int *)(&DAT_180073bec + lVar12) + -1,
                  *(int *)(lVar2 + 0x2d8c) + *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d88));
    return;
  }
  uVar13 = *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d8c) + uVar13;
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,uVar13);
    return;
  }
  iVar14 = 0;
  switch(cVar1) {
  case '\0':
  case '\x03':
  case '\x05':
  case '\x06':
    if ((*(int *)(&DAT_180073bf4 + lVar12) == 0) && (iVar14 = 0, uVar10 == 0x4b)) {
      *(undefined4 *)(&DAT_180073bf4 + lVar12) = 1;
      iVar14 = iVar6 + -0x49;
    }
    iVar6 = 0x1e;
    break;
  case '\x01':
  case '\x02':
  case '\x04':
    if ((*(uint *)(&DAT_180073bf4 + lVar12) < 5) && (iVar14 = 0, uVar10 == 0x82 - uVar13)) {
      iVar14 = 1;
      *(uint *)(&DAT_180073bf4 + lVar12) = *(uint *)(&DAT_180073bf4 + lVar12) + 1;
    }
    iVar6 = 100;
    break;
  default:
    iVar6 = 100;
    goto LAB_18000a1d2;
  }
  if (iVar14 == 0) {
LAB_18000a1d2:
    if ((uVar10 < uVar13 + *(int *)(lVar2 + 0x2d90)) &&
       ((uVar10 < iVar6 + uVar13 ||
        (uVar13 = *(int *)((&DAT_180073750)[uVar11 * 0x95] + 0x54) - *(int *)(param_2 + 0x2c),
        uVar10 = (int)uVar13 >> 0x1f, (uVar13 ^ uVar10) - uVar10 <= *(uint *)(lVar2 + 0x2d94)))))
    goto LAB_18000a20a;
  }
  FUN_180002f50(param_1);
LAB_18000a20a:
  uVar8 = FUN_18000ca30((&DAT_180073750)[uVar11 * 0x95],in_XMM1_Qa,0,1,0);
  if ((uVar8 & 1) != 0) {
    if ((*(int *)((&DAT_180073768)[uVar11 * 0x95] + 0x44) != 0) &&
       (*(int *)(&DAT_180073ba4 + lVar12) = *(int *)(&DAT_180073ba4 + lVar12) + 1,
       *(int *)(&DAT_180073ba8 + lVar12) <= *(int *)(&DAT_180073ba4 + lVar12))) {
      *(undefined4 *)(&DAT_180073ba4 + lVar12) = 0;
      local_50 = 0;
      local_48 = 0;
      local_40 = 0;
      local_38 = 0;
      local_30 = 0;
      local_68 = 0x1010000000040;
      local_60 = *(undefined8 *)(&DAT_180073800 + lVar12);
      local_58 = *(undefined8 *)(&DAT_180073808 + lVar12);
      local_50 = _time64((__time64_t *)0x0);
      DVar5 = GetTickCount();
      local_48 = CONCAT44(*(undefined4 *)(param_2 + 0x38),DVar5);
      FUN_18001b1b0((&DAT_180073768)[uVar11 * 0x95],(longlong)&local_68,0x40,
                    *(longlong *)((&DAT_180073750)[uVar11 * 0x95] + 0x270),
                    *(int *)(param_2 + 0x18) * *(int *)(param_2 + 0x14) * 2);
    }
    if (*(int *)((&DAT_180073760)[uVar11 * 0x95] + 0x44) != 0) {
      pbVar9 = (byte *)FUN_1800110a0((&DAT_180073750)[uVar11 * 0x95]);
      lVar2 = (&DAT_180073750)[uVar11 * 0x95];
      if (((pbVar9 != (byte *)0x0) && (lVar2 + 0x6c8 != 0)) &&
         (iVar6 = (uint)*(ushort *)(lVar2 + 0x6d6) * *(int *)(lVar2 + 0x6d0) *
                  *(int *)(lVar2 + 0x6cc), iVar6 = iVar6 + (iVar6 >> 0x1f & 7U),
         uVar13 = iVar6 >> 0x1f,
         bVar3 = FUN_180001cd0((&DAT_180073760)[uVar11 * 0x95],pbVar9,(iVar6 >> 3 ^ uVar13) - uVar13
                               ,lVar2 + 0x6c8), (int)CONCAT71(extraout_var,bVar3) == 0)) {
        FUN_180001c50((&DAT_180073760)[uVar11 * 0x95]);
      }
    }
    if (*(code **)(&DAT_180073790 + lVar12) != (code *)0x0) {
      (**(code **)(&DAT_180073790 + lVar12))
                (param_1,*(undefined4 *)(param_2 + 0x28),*(undefined4 *)(param_2 + 0x38),
                 *(undefined4 *)(param_2 + 0x44),2,*(undefined8 *)(&DAT_180073770 + lVar12));
    }
  }
  return;
}


==================================================================

### CALLER FUNC 18001d2d0 (578 bytes) name=FUN_18001d2d0

undefined8 FUN_18001d2d0(void *param_1,undefined4 param_2,longlong param_3)

{
  LPVOID pvVar1;
  LPVOID pvVar2;
  CWinThread *pCVar3;
  undefined8 uVar4;
  uint local_res8 [2];
  
  if (*(int *)((longlong)param_1 + 0x18) != 0) {
    SetLastError(0xe4ae000a);
    return 0;
  }
  if (param_3 != 0) {
    *(undefined4 *)((longlong)param_1 + 0x2d18) = param_2;
    *(undefined4 *)((longlong)param_1 + 8) = 0;
    *(undefined4 *)((longlong)param_1 + 0xc) = 0;
    if (*(LPVOID *)((longlong)param_1 + 0x2d20) != (LPVOID)0x0) {
      thunk_FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x2d20));
      *(undefined8 *)((longlong)param_1 + 0x2d20) = 0;
    }
    pvVar1 = thunk_FUN_18001eb74((ulonglong)*(uint *)((longlong)param_1 + 0x2d18) * 2 + 0xb0);
    *(LPVOID *)((longlong)param_1 + 0x2d20) = pvVar1;
    if (*(LPVOID *)((longlong)param_1 + 0x2d28) != (LPVOID)0x0) {
      thunk_FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x2d28));
      *(undefined8 *)((longlong)param_1 + 0x2d28) = 0;
    }
    pvVar2 = thunk_FUN_18001eb74((ulonglong)*(uint *)((longlong)param_1 + 0x2d18) + 0x4c);
    pvVar1 = *(LPVOID *)((longlong)param_1 + 0x2d20);
    *(LPVOID *)((longlong)param_1 + 0x2d28) = pvVar2;
    if ((pvVar1 == (LPVOID)0x0) || (pvVar2 == (LPVOID)0x0)) {
      if (pvVar1 != (LPVOID)0x0) {
        thunk_FUN_180034a70(pvVar1);
        *(undefined8 *)((longlong)param_1 + 0x2d20) = 0;
      }
      if (*(LPVOID *)((longlong)param_1 + 0x2d28) != (LPVOID)0x0) {
        thunk_FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x2d28));
        *(undefined8 *)((longlong)param_1 + 0x2d28) = 0;
      }
      SetLastError(0xe4ae0002);
    }
    else {
      *(longlong *)((longlong)param_1 + 0x2d30) = param_3;
      *(code **)((longlong)param_1 + 0x2d38) = FUN_180009ee0;
      ResetEvent(*(HANDLE *)((longlong)param_1 + 0x2d10));
      *(undefined4 *)((longlong)param_1 + 0x2d0c) = 1;
      pCVar3 = AfxBeginThread(FUN_18001d610,param_1,-1,0,4,(_SECURITY_ATTRIBUTES *)0x0);
      *(CWinThread **)((longlong)param_1 + 0x2d00) = pCVar3;
      *(undefined4 *)(pCVar3 + 0x50) = 0;
      ResumeThread(*(HANDLE *)(*(longlong *)((longlong)param_1 + 0x2d00) + 0x58));
      *(undefined4 *)((longlong)param_1 + 0x2d08) = 1;
      pCVar3 = AfxBeginThread(FUN_18001d930,param_1,0,0,4,(_SECURITY_ATTRIBUTES *)0x0);
      *(CWinThread **)((longlong)param_1 + 0x2cf8) = pCVar3;
      *(undefined4 *)(pCVar3 + 0x50) = 0;
      ResumeThread(*(HANDLE *)(*(longlong *)((longlong)param_1 + 0x2cf8) + 0x58));
      Sleep(0x32);
      local_res8[0] = 0x6bb6b673;
      if (*(int *)((longlong)param_1 + 0x14) == 0) {
        SetLastError(0xe4ae0005);
      }
      else {
        uVar4 = FUN_18001c670((longlong)param_1,local_res8,4);
        if ((int)uVar4 != 0) {
          *(undefined4 *)((longlong)param_1 + 0x18) = 1;
          return 1;
        }
      }
      FUN_18001d520((longlong)param_1);
    }
    return 0;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### CALLER FUNC 18001d520 (240 bytes) name=FUN_18001d520

void FUN_18001d520(longlong param_1)

{
  longlong *plVar1;
  uint local_res8 [2];
  
  if (*(int *)(param_1 + 0x14) != 0) {
    local_res8[0] = 0x6bb6b674;
    FUN_18001c670(param_1,local_res8,4);
  }
  *(undefined4 *)(param_1 + 0x2d08) = 0;
  if (*(longlong *)(param_1 + 0x2cf8) != 0) {
    WaitForSingleObject(*(HANDLE *)(*(longlong *)(param_1 + 0x2cf8) + 0x58),0xffffffff);
    plVar1 = *(longlong **)(param_1 + 0x2cf8);
    if (plVar1 != (longlong *)0x0) {
      (**(code **)(*plVar1 + 8))(plVar1,1);
    }
    *(undefined8 *)(param_1 + 0x2cf8) = 0;
  }
  *(undefined4 *)(param_1 + 0x2d0c) = 0;
  SetEvent(*(HANDLE *)(param_1 + 0x2d10));
  if (*(longlong *)(param_1 + 0x2d00) != 0) {
    WaitForSingleObject(*(HANDLE *)(*(longlong *)(param_1 + 0x2d00) + 0x58),0xffffffff);
    plVar1 = *(longlong **)(param_1 + 0x2d00);
    if (plVar1 != (longlong *)0x0) {
      (**(code **)(*plVar1 + 8))(plVar1,1);
    }
    *(undefined8 *)(param_1 + 0x2d00) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x2d20) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x2d20));
    *(undefined8 *)(param_1 + 0x2d20) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x2d28) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x2d28));
    *(undefined8 *)(param_1 + 0x2d28) = 0;
  }
  *(undefined4 *)(param_1 + 0x18) = 0;
  return;
}


==================================================================

### CALLER FUNC 18001d6e0 (589 bytes) name=FUN_18001d6e0

undefined8 FUN_18001d6e0(longlong param_1,undefined8 *param_2,undefined8 *param_3,uint param_4)

{
  DWORD DVar1;
  DWORD DVar2;
  undefined8 uVar3;
  int iVar4;
  int iVar5;
  uint local_res10 [2];
  
  if ((param_2 == (undefined8 *)0x0) || (param_3 == (undefined8 *)0x0)) {
    SetLastError(0xe4ae0001);
    return 0;
  }
  *(undefined8 *)(param_1 + 0x2d40) = 0;
  *(undefined8 *)(param_1 + 0x2d48) = 0;
  *(undefined8 *)(param_1 + 0x2d50) = 0;
  *(undefined8 *)(param_1 + 0x2d58) = 0;
  *(undefined8 *)(param_1 + 0x2d60) = 0;
  *(undefined8 *)(param_1 + 0x2d68) = 0;
  *(undefined8 *)(param_1 + 0x2d70) = 0;
  *(undefined8 *)(param_1 + 0x2d78) = 0;
  *(undefined8 *)(param_1 + 0x2d80) = 0;
  *(undefined8 *)(param_1 + 0x2d88) = 0;
  *(undefined8 *)(param_1 + 0x2d90) = 0;
  *(undefined8 *)(param_1 + 0x2d98) = 0;
  *(undefined8 *)(param_1 + 0x2da0) = 0;
  iVar5 = 0;
  *(undefined8 *)(param_1 + 0x2da8) = 0;
  local_res10[0] = 0x6bb6b66b;
  if (*(int *)(param_1 + 0x14) == 0) {
    SetLastError(0xe4ae0005);
    iVar4 = 0;
  }
  else {
    uVar3 = FUN_18001c670(param_1,local_res10,4);
    iVar4 = (int)uVar3;
  }
  local_res10[0] = 0x6bb6b66c;
  if (*(int *)(param_1 + 0x14) == 0) {
    SetLastError(0xe4ae0005);
  }
  else {
    uVar3 = FUN_18001c670(param_1,local_res10,4);
    iVar5 = (int)uVar3;
  }
  if ((iVar4 != 0) && (iVar5 != 0)) {
    DVar1 = GetTickCount();
    do {
      Sleep(10);
      if ((*(int *)(param_1 + 0x2d50) != 0) && (*(int *)(param_1 + 0x2d78) != 0)) break;
      DVar2 = GetTickCount();
    } while (DVar2 - DVar1 < param_4);
    if ((*(int *)(param_1 + 0x2d50) != 0) && (*(int *)(param_1 + 0x2d78) != 0)) {
      *param_2 = *(undefined8 *)(param_1 + 0x2d40);
      param_2[1] = *(undefined8 *)(param_1 + 0x2d48);
      param_2[2] = *(undefined8 *)(param_1 + 0x2d50);
      param_2[3] = *(undefined8 *)(param_1 + 0x2d58);
      param_2[4] = *(undefined8 *)(param_1 + 0x2d60);
      param_2[5] = *(undefined8 *)(param_1 + 0x2d68);
      param_2[6] = *(undefined8 *)(param_1 + 0x2d70);
      *param_3 = *(undefined8 *)(param_1 + 0x2d78);
      param_3[1] = *(undefined8 *)(param_1 + 0x2d80);
      param_3[2] = *(undefined8 *)(param_1 + 0x2d88);
      param_3[3] = *(undefined8 *)(param_1 + 0x2d90);
      param_3[4] = *(undefined8 *)(param_1 + 0x2d98);
      param_3[5] = *(undefined8 *)(param_1 + 0x2da0);
      param_3[6] = *(undefined8 *)(param_1 + 0x2da8);
      return 1;
    }
    SetLastError(0xe4ae0008);
  }
  return 0;
}


==================================================================

### CALLER FUNC 18001df10 (427 bytes) name=FUN_18001df10

bool FUN_18001df10(longlong param_1,longlong *param_2)

{
  int *piVar1;
  int iVar2;
  ulonglong uVar3;
  longlong lVar4;
  undefined8 uVar5;
  __uint64 _Var6;
  bool bVar7;
  uint local_res8 [2];
  longlong *local_res10;
  uint local_40;
  CFile local_30 [40];
  
  local_res10 = param_2;
  if (*(int *)(param_1 + 0x14) == 0) {
    SetLastError(0xe4ae0005);
  }
  else {
    *(undefined8 *)(param_1 + 0x2db0) = 0;
    *(undefined8 *)(param_1 + 0x2db8) = 0;
    local_res8[0] = 0x6bb6b66f;
    if (*(int *)(param_1 + 0x14) == 0) {
      SetLastError(0xe4ae0005);
    }
    else {
      uVar5 = FUN_18001c670(param_1,local_res8,4);
      if (((int)uVar5 != 0) && (*(int *)(param_1 + 0x2db0) != 0)) {
        uVar3 = *(ulonglong *)(param_1 + 0x2db0);
        local_40 = (uint)uVar3;
        if (0x3f00000 < local_40) {
          lVar4 = *param_2;
          LOCK();
          piVar1 = (int *)(lVar4 + -8);
          iVar2 = *piVar1;
          *piVar1 = *piVar1 + -1;
          UNLOCK();
          if (iVar2 + -1 < 1) {
            (**(code **)(**(longlong **)(lVar4 + -0x18) + 8))();
          }
          return false;
        }
        FUN_180020138((undefined8 *)local_30);
        uVar5 = FUN_180020a6c((longlong)local_30,(LPCWSTR)*param_2,0x40,0);
        if ((int)uVar5 == 0) {
          FUN_1800203a4(local_30);
          lVar4 = *param_2;
          LOCK();
          piVar1 = (int *)(lVar4 + -8);
          iVar2 = *piVar1;
          *piVar1 = *piVar1 + -1;
          UNLOCK();
          if (iVar2 + -1 < 1) {
            (**(code **)(**(longlong **)(lVar4 + -0x18) + 8))();
          }
          return true;
        }
        _Var6 = CFile::GetLength(local_30);
        bVar7 = _Var6 != (uVar3 & 0xffffffff);
        CFile::Close(local_30);
        FUN_1800203a4(local_30);
        lVar4 = *param_2;
        LOCK();
        piVar1 = (int *)(lVar4 + -8);
        iVar2 = *piVar1;
        *piVar1 = *piVar1 + -1;
        UNLOCK();
        if (0 < iVar2 + -1) {
          return bVar7;
        }
        (**(code **)(**(longlong **)(lVar4 + -0x18) + 8))();
        return bVar7;
      }
    }
  }
  lVar4 = *param_2;
  LOCK();
  piVar1 = (int *)(lVar4 + -8);
  iVar2 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar2 + -1 < 1) {
    (**(code **)(**(longlong **)(lVar4 + -0x18) + 8))();
  }
  return true;
}


==================================================================

### CALLER FUNC 18001e100 (533 bytes) name=FUN_18001e100

bool FUN_18001e100(longlong param_1,longlong *param_2)

{
  int *piVar1;
  uint uVar2;
  longlong lVar3;
  uint uVar4;
  LPVOID pvVar5;
  int iVar6;
  undefined8 uVar7;
  LPVOID pvVar8;
  bool bVar9;
  uint local_res18 [2];
  LPVOID local_res20;
  undefined8 local_68 [2];
  CFile local_58 [40];
  
  *(undefined8 *)(param_1 + 0x2db0) = 0;
  *(undefined8 *)(param_1 + 0x2db8) = 0;
  local_res18[0] = 0x6bb6b670;
  if (*(int *)(param_1 + 0x14) == 0) {
    SetLastError(0xe4ae0005);
  }
  else {
    uVar7 = FUN_18001c670(param_1,local_res18,4);
    if ((((int)uVar7 != 0) && (*(int *)(param_1 + 0x2db0) != 0)) &&
       (*(uint *)(param_1 + 0x2db0) < 0x3f00001)) {
      uVar2 = *(uint *)(param_1 + 0x2db0);
      pvVar8 = thunk_FUN_18001eb74((longlong)(int)uVar2);
      uVar4 = uVar2;
      pvVar5 = pvVar8;
      local_res20 = pvVar8;
      if (pvVar8 == (LPVOID)0x0) {
        lVar3 = *param_2;
        LOCK();
        piVar1 = (int *)(lVar3 + -8);
        iVar6 = *piVar1;
        *piVar1 = *piVar1 + -1;
        UNLOCK();
        if (iVar6 + -1 < 1) {
          (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
        }
        return false;
      }
      while ((0 < (int)uVar4 &&
             (iVar6 = usb_bulk_read(*(undefined8 *)(param_1 + 0x38),0x84,pvVar5,uVar4,20000),
             0 < iVar6))) {
        uVar4 = uVar4 - iVar6;
        pvVar5 = (LPVOID)((longlong)pvVar5 + (longlong)iVar6);
      }
      if (uVar4 != 0) {
        thunk_FUN_180034a70(pvVar8);
        usb_strerror();
        lVar3 = *param_2;
        LOCK();
        piVar1 = (int *)(lVar3 + -8);
        iVar6 = *piVar1;
        *piVar1 = *piVar1 + -1;
        UNLOCK();
        if (iVar6 + -1 < 1) {
          (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
        }
        return false;
      }
      FUN_180020138((undefined8 *)local_58);
      uVar7 = FUN_180020a6c((longlong)local_58,(LPCWSTR)*param_2,0x1021,0);
      bVar9 = (int)uVar7 != 0;
      if (bVar9) {
        FUN_18001ef2c(local_68);
        CFile::Write(local_58,pvVar8,uVar2);
        FUN_18001ef94();
        CFile::Close(local_58);
      }
      thunk_FUN_180034a70(pvVar8);
      FUN_1800203a4(local_58);
      lVar3 = *param_2;
      LOCK();
      piVar1 = (int *)(lVar3 + -8);
      iVar6 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
      if (0 < iVar6 + -1) {
        return bVar9;
      }
      (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
      return bVar9;
    }
  }
  lVar3 = *param_2;
  LOCK();
  piVar1 = (int *)(lVar3 + -8);
  iVar6 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar6 + -1 < 1) {
    (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
  }
  return false;
}


==================================================================

