### EXPORT FUNC 180001000 (67 bytes) name=FUN_180001000

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_180001000(void)

{
  FUN_180002ab0((ulonglong *)&DAT_180016060,1);
  _DAT_180016068 = DAT_180016060;
  *DAT_180016060 = 0x7e;
  _DAT_180016068 = _DAT_180016068 + 1;
  atexit(FUN_18000e300);
  return;
}


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

### EXPORT FUNC 180001050 (79 bytes) name=FUN_180001050

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_180001050(void)

{
  FUN_180002ab0((ulonglong *)&DAT_180016000,8);
  _DAT_180016008 = DAT_180016000;
  *DAT_180016000 = 0x339393939393902;
  _DAT_180016008 = _DAT_180016008 + 1;
  atexit(FUN_18000e370);
  return;
}


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

### EXPORT FUNC 1800010a0 (79 bytes) name=FUN_1800010a0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_1800010a0(void)

{
  FUN_180002ab0((ulonglong *)&DAT_180016018,8);
  _DAT_180016020 = DAT_180016018;
  *DAT_180016018 = 0x334313231323102;
  _DAT_180016020 = _DAT_180016020 + 1;
  atexit(FUN_18000e3e0);
  return;
}


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

### EXPORT FUNC 1800010f0 (67 bytes) name=FUN_1800010f0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_1800010f0(void)

{
  FUN_180002ab0((ulonglong *)&DAT_180016090,1);
  _DAT_180016098 = DAT_180016090;
  *DAT_180016090 = 0x13;
  _DAT_180016098 = _DAT_180016098 + 1;
  atexit(FUN_18000e450);
  return;
}


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

### EXPORT FUNC 180001140 (67 bytes) name=FUN_180001140

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_180001140(void)

{
  FUN_180002ab0((ulonglong *)&DAT_180016078,1);
  _DAT_180016080 = DAT_180016078;
  *DAT_180016078 = 0x12;
  _DAT_180016080 = _DAT_180016080 + 1;
  atexit(FUN_18000e4c0);
  return;
}


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

### EXPORT FUNC 180001190 (92 bytes) name=FUN_180001190

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_180001190(void)

{
  void *pvVar1;
  undefined4 local_res8;
  undefined2 local_resc;
  
  local_res8 = 0x70757766;
  local_resc = 0xa0d;
  FUN_180002ab0((ulonglong *)&DAT_180016030,6);
  pvVar1 = DAT_180016030;
  memmove(DAT_180016030,&local_res8,6);
  _DAT_180016038 = (longlong)pvVar1 + 6;
  atexit(FUN_18000e530);
  return;
}


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

### EXPORT FUNC 1800011f0 (90 bytes) name=FUN_1800011f0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_1800011f0(void)

{
  void *pvVar1;
  undefined4 local_res8;
  undefined1 local_resc;
  
  local_res8 = 0xd726576;
  local_resc = 10;
  FUN_180002ab0((ulonglong *)&DAT_1800160a8,5);
  pvVar1 = DAT_1800160a8;
  memmove(DAT_1800160a8,&local_res8,5);
  _DAT_1800160b0 = (longlong)pvVar1 + 5;
  atexit(FUN_18000e5a0);
  return;
}


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

### EXPORT FUNC 180001250 (67 bytes) name=FUN_180001250

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_180001250(void)

{
  FUN_180002ab0((ulonglong *)&DAT_180016048,1);
  _DAT_180016050 = DAT_180016048;
  *DAT_180016048 = 4;
  _DAT_180016050 = _DAT_180016050 + 1;
  atexit(FUN_18000e610);
  return;
}


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

### EXPORT FUNC 1800012a0 (45 bytes) name=FUN_1800012a0

void FUN_1800012a0(void)

{
  FUN_180002610(&DAT_180015060,"SCANNER_NORMAL",0xe);
  atexit(FUN_18000e6f0);
  return;
}


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

### EXPORT FUNC 1800012d0 (45 bytes) name=FUN_1800012d0

void FUN_1800012d0(void)

{
  FUN_180002610(&DAT_1800150a0,"SCANNER_OFFLINE",0xf);
  atexit(FUN_18000e760);
  return;
}


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

### EXPORT FUNC 180001300 (45 bytes) name=FUN_180001300

void FUN_180001300(void)

{
  FUN_180002610(&DAT_1800151e0,"SCANNER_DATA_EXCEED",0x13);
  atexit(FUN_18000e7d0);
  return;
}


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

### EXPORT FUNC 180001330 (45 bytes) name=FUN_180001330

void FUN_180001330(void)

{
  FUN_180002610(&DAT_180015180,"SCANNER_FILTED_QR",0x11);
  atexit(FUN_18000e840);
  return;
}


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

### EXPORT FUNC 180001360 (45 bytes) name=FUN_180001360

void FUN_180001360(void)

{
  FUN_180002610(&DAT_1800150e0,"SCANNER_FILTED_EAN8",0x13);
  atexit(FUN_18000e8b0);
  return;
}


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

### EXPORT FUNC 180001390 (45 bytes) name=FUN_180001390

void FUN_180001390(void)

{
  FUN_180002610(&DAT_180015160,"SCANNER_FILTED_EAN13",0x14);
  atexit(FUN_18000e920);
  return;
}


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

### EXPORT FUNC 1800013c0 (45 bytes) name=FUN_1800013c0

void FUN_1800013c0(void)

{
  FUN_180002610(&DAT_1800151c0,"SCANNER_FILTED_C39",0x12);
  atexit(FUN_18000e990);
  return;
}


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

### EXPORT FUNC 1800013f0 (45 bytes) name=FUN_1800013f0

void FUN_1800013f0(void)

{
  FUN_180002610(&DAT_180015120,"SCANNER_FILTED_C128",0x13);
  atexit(FUN_18000ea00);
  return;
}


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

### EXPORT FUNC 180001420 (45 bytes) name=FUN_180001420

void FUN_180001420(void)

{
  FUN_180002610(&DAT_1800150c0,"SCANNER_FILTED_GS1",0x12);
  atexit(FUN_18000ea70);
  return;
}


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

### EXPORT FUNC 180001450 (45 bytes) name=FUN_180001450

void FUN_180001450(void)

{
  FUN_180002610(&DAT_180015140,"SCANNER_FILTED_UPA",0x12);
  atexit(FUN_18000eae0);
  return;
}


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

### EXPORT FUNC 180001480 (45 bytes) name=FUN_180001480

void FUN_180001480(void)

{
  FUN_180002610(&DAT_180015100,"SCANNER_FILTED_UPB",0x12);
  atexit(FUN_18000eb50);
  return;
}


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

### EXPORT FUNC 1800014b0 (45 bytes) name=FUN_1800014b0

void FUN_1800014b0(void)

{
  FUN_180002610(&DAT_1800151a0,"SCANNER_FILTED_UPE",0x12);
  atexit(FUN_18000ebc0);
  return;
}


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

### EXPORT FUNC 1800014e0 (45 bytes) name=FUN_1800014e0

void FUN_1800014e0(void)

{
  FUN_180002610(&DAT_180015040,"SCANNER_FILTED_COUPON",0x15);
  atexit(FUN_18000ec30);
  return;
}


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

### EXPORT FUNC 180001510 (45 bytes) name=FUN_180001510

void FUN_180001510(void)

{
  FUN_180002610(&DAT_180015080,"SCANNER_FILTED_WWW",0x12);
  atexit(FUN_18000eca0);
  return;
}


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

### EXPORT FUNC 180001540 (6 bytes) name=FUN_180001540

undefined8 FUN_180001540(void)

{
  return 1;
}


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

### EXPORT FUNC 180001550 (116 bytes) name=FUN_180001550

void FUN_180001550(undefined4 *param_1)

{
  int iVar1;
  
  iVar1 = MAG_IsProcessingImage(param_1[4]);
  if (iVar1 != 0) {
    MAG_StopProcessImage(param_1[4]);
  }
  iVar1 = MAG_IsLinked(param_1[4]);
  if (iVar1 != 0) {
    MAG_DisLinkCamera(param_1[4]);
  }
  iVar1 = MAG_IsInitialized(param_1[4]);
  if (iVar1 != 0) {
    MAG_Free(param_1[4]);
    *param_1 = 0;
  }
  iVar1 = MAG_IsChannelAvailable(param_1[4]);
  if (iVar1 != 0) {
    MAG_DelChannel(param_1[4]);
    param_1[4] = 0xffffffff;
  }
  return;
}


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

### EXPORT FUNC 1800015d0 (121 bytes) name=FUN_1800015d0

int FUN_1800015d0(int *param_1)

{
  int iVar1;
  uint uVar2;
  
  if (*param_1 != 0) {
    return 1;
  }
  uVar2 = param_1[4];
  if (0x80 < uVar2) {
    uVar2 = 0;
    do {
      iVar1 = MAG_IsChannelAvailable(uVar2);
      if (iVar1 == 0) {
        MAG_NewChannel(uVar2);
        param_1[4] = uVar2;
        goto LAB_180001626;
      }
      uVar2 = uVar2 + 1;
    } while ((int)uVar2 < 0x81);
    uVar2 = param_1[4];
LAB_180001626:
    if (0x80 < uVar2) goto LAB_18000163c;
  }
  iVar1 = MAG_Initialize(uVar2,*(undefined8 *)(param_1 + 2));
  *param_1 = iVar1;
LAB_18000163c:
  return *param_1;
}


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

### EXPORT FUNC 180001650 (51 bytes) name=FUN_180001650

undefined8 * FUN_180001650(undefined8 *param_1,longlong param_2)

{
  *param_1 = std::exception::vftable;
  param_1[1] = 0;
  param_1[2] = 0;
  __std_exception_copy(param_2 + 8);
  return param_1;
}


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

### EXPORT FUNC 1800016b0 (19 bytes) name=FUN_1800016b0

char * FUN_1800016b0(longlong param_1)

{
  char *pcVar1;
  
  pcVar1 = "Unknown exception";
  if (*(char **)(param_1 + 8) != (char *)0x0) {
    pcVar1 = *(char **)(param_1 + 8);
  }
  return pcVar1;
}


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

### EXPORT FUNC 1800016d0 (67 bytes) name=FUN_1800016d0

undefined8 * FUN_1800016d0(undefined8 *param_1,ulonglong param_2)

{
  *param_1 = std::exception::vftable;
  __std_exception_destroy(param_1 + 1);
  if ((param_2 & 1) != 0) {
    free(param_1);
  }
  return param_1;
}


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

### EXPORT FUNC 180001720 (33 bytes) name=FUN_180001720

undefined8 * FUN_180001720(undefined8 *param_1)

{
  param_1[2] = 0;
  param_1[1] = "bad array new length";
  *param_1 = std::bad_array_new_length::vftable;
  return param_1;
}


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

### EXPORT FUNC 180001750 (31 bytes) name=FUN_180001750

void FUN_180001750(void)

{
  undefined8 local_28 [5];
  
  FUN_180001720(local_28);
                    /* WARNING: Subroutine does not return */
  _CxxThrowException(local_28,(ThrowInfo *)&DAT_180013340);
}


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

### EXPORT FUNC 180001770 (61 bytes) name=FUN_180001770

undefined8 * FUN_180001770(undefined8 *param_1,longlong param_2)

{
  *param_1 = std::exception::vftable;
  param_1[1] = 0;
  param_1[2] = 0;
  __std_exception_copy(param_2 + 8);
  *param_1 = std::bad_array_new_length::vftable;
  return param_1;
}


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

### EXPORT FUNC 1800017b0 (61 bytes) name=FUN_1800017b0

undefined8 * FUN_1800017b0(undefined8 *param_1,longlong param_2)

{
  *param_1 = std::exception::vftable;
  param_1[1] = 0;
  param_1[2] = 0;
  __std_exception_copy(param_2 + 8);
  *param_1 = std::bad_alloc::vftable;
  return param_1;
}


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

### EXPORT FUNC 1800017f0 (3068 bytes) name=FUN_1800017f0

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Type propagation algorithm not settling */

void FUN_1800017f0(longlong param_1,longlong *param_2,longlong param_3)

{
  undefined1 uVar1;
  undefined1 *puVar2;
  int iVar3;
  ulonglong uVar4;
  undefined8 uVar5;
  void *pvVar6;
  undefined1 *puVar7;
  byte *pbVar8;
  longlong lVar9;
  longlong lVar10;
  undefined1 *puVar11;
  uint uVar12;
  ulonglong uVar13;
  ulonglong uVar14;
  ulonglong uVar15;
  ulonglong uVar16;
  ulonglong uVar17;
  bool bVar18;
  undefined1 auStack_88 [32];
  undefined1 local_68;
  uint local_64;
  undefined8 local_58 [2];
  ulonglong local_48;
  ulonglong local_40;
  ulonglong local_38;
  
  local_38 = DAT_180015010 ^ (ulonglong)auStack_88;
  iVar3 = *(int *)(param_1 + 0x4c);
  if (iVar3 == 1) {
    if (param_2[1] - *param_2 != 1) {
      return;
    }
    if (*(char *)*param_2 != '\x06') {
      return;
    }
    *(undefined1 *)(param_1 + 0x48) = 1;
    iVar3 = _Cnd_broadcast(param_1 + 0x58);
    if (iVar3 == 0) {
      return;
    }
    std::_Throw_C_error(iVar3);
    return;
  }
  if (iVar3 == 2) {
    if (param_2[1] - *param_2 != 1) {
      return;
    }
    if (*(char *)*param_2 != '\x06') {
      return;
    }
    *(undefined1 *)(param_1 + 0x48) = 1;
    iVar3 = _Cnd_broadcast(param_1 + 0x58);
    if (iVar3 == 0) {
      return;
    }
    std::_Throw_C_error(iVar3);
    return;
  }
  if (iVar3 == 3) {
    if (param_2[1] - *param_2 != 1) {
      return;
    }
    if (*(char *)*param_2 != '\x06') {
      return;
    }
    *(undefined1 *)(param_1 + 0x48) = 1;
    iVar3 = _Cnd_broadcast(param_1 + 0x58);
    if (iVar3 == 0) {
      return;
    }
    std::_Throw_C_error(iVar3);
    return;
  }
  if (iVar3 == 4) {
    uVar16 = 0;
    local_64 = 0;
    lVar9 = *param_2;
    if (param_2[1] != lVar9) {
      lVar10 = *(longlong *)(param_1 + 0x40);
      uVar15 = uVar16;
      uVar14 = uVar16;
      do {
        local_68 = *(undefined1 *)(lVar9 + uVar14);
        uVar4 = *(ulonglong *)(param_1 + 0x38);
        uVar12 = (uint)uVar15;
        if ((((int)lVar10 + (int)uVar4 & 0xfU) == 0) &&
           (*(ulonglong *)(param_1 + 0x30) <= lVar10 + 0x10U >> 4)) {
          FUN_1800028d0(param_1 + 0x20);
          uVar4 = *(ulonglong *)(param_1 + 0x38);
          lVar10 = *(longlong *)(param_1 + 0x40);
          uVar12 = local_64;
        }
        uVar4 = *(longlong *)(param_1 + 0x30) * 0x10 - 1U & uVar4;
        *(ulonglong *)(param_1 + 0x38) = uVar4;
        uVar4 = uVar4 + lVar10;
        lVar9 = (*(longlong *)(param_1 + 0x30) - 1U & uVar4 >> 4) * 8;
        lVar10 = *(longlong *)(param_1 + 0x28);
        if (*(longlong *)(lVar10 + lVar9) == 0) {
          uVar5 = FUN_18000c554(0x10);
          *(undefined8 *)(lVar9 + *(longlong *)(param_1 + 0x28)) = uVar5;
          lVar10 = *(longlong *)(param_1 + 0x28);
          uVar12 = local_64;
        }
        *(undefined1 *)((ulonglong)((uint)uVar4 & 0xf) + *(longlong *)(lVar9 + lVar10)) = local_68;
        *(longlong *)(param_1 + 0x40) = *(longlong *)(param_1 + 0x40) + 1;
        lVar10 = *(longlong *)(param_1 + 0x40);
        local_64 = uVar12 + 1;
        uVar15 = (ulonglong)local_64;
        uVar14 = uVar14 + 1;
        lVar9 = *param_2;
      } while ((ulonglong)(longlong)(int)local_64 < (ulonglong)(param_2[1] - lVar9));
    }
    local_48 = 0;
    local_40 = 0xf;
    local_58[0]._0_1_ = 0;
    uVar15 = *(ulonglong *)(param_1 + 0x38);
    uVar17 = *(longlong *)(param_1 + 0x40) + uVar15;
    uVar14 = local_48;
    uVar4 = local_40;
    for (; local_48 = uVar14, local_40 = uVar4, uVar15 != uVar17; uVar15 = uVar15 + 1) {
      uVar13 = (ulonglong)((uint)uVar15 & 0xf);
      uVar1 = *(undefined1 *)
               (uVar13 + *(longlong *)
                          (*(longlong *)(param_1 + 0x28) +
                          (*(longlong *)(param_1 + 0x30) - 1U & uVar15 >> 4) * 8));
      if (uVar14 < uVar4) {
        local_48 = uVar14 + 1;
        puVar11 = (undefined1 *)local_58;
        if (0xf < uVar4) {
          puVar11 = (undefined1 *)CONCAT71(local_58[0]._1_7_,(undefined1)local_58[0]);
        }
        puVar11[uVar14] = uVar1;
        puVar11[uVar14 + 1] = 0;
      }
      else {
        FUN_180002770(local_58,uVar13,uVar14,uVar1);
      }
      uVar14 = local_48;
      uVar4 = local_40;
    }
    puVar11 = (undefined1 *)CONCAT71(local_58[0]._1_7_,(undefined1)local_58[0]);
    puVar7 = (undefined1 *)local_58;
    if (0xf < uVar4) {
      puVar7 = puVar11;
    }
    if ((4 < uVar14) &&
       (pvVar6 = memchr(puVar7,0x4d,uVar14 - 4), uVar15 = uVar16, pvVar6 != (void *)0x0)) {
LAB_180001ac0:
      do {
        uVar17 = uVar15 + 1;
        if (*(byte *)((longlong)pvVar6 + uVar15) == (&DAT_18000f758)[uVar15]) {
          uVar15 = uVar17;
          uVar12 = 0;
          if (uVar17 != 5) goto LAB_180001ac0;
        }
        else {
          uVar12 = -(uint)(*(byte *)((longlong)pvVar6 + uVar15) < (byte)(&DAT_18000f758)[uVar15]) |
                   1;
        }
        if (uVar12 == 0) {
          if ((longlong)pvVar6 - (longlong)puVar7 != -1) {
            *(undefined1 *)(param_1 + 0x48) = 1;
            iVar3 = _Cnd_broadcast(param_1 + 0x58);
            if (iVar3 != 0) {
              std::_Throw_C_error(iVar3);
            }
          }
          break;
        }
        pvVar6 = memchr((void *)((longlong)pvVar6 + 1),0x4d,
                        (size_t)(puVar7 + ((uVar14 - 4) - ((longlong)pvVar6 + 1))));
        uVar15 = uVar16;
        if (pvVar6 == (void *)0x0) break;
      } while( true );
    }
    if (uVar4 < 0x10) {
      return;
    }
    if (uVar4 + 1 < 0x1000) goto LAB_1800020b1;
    puVar7 = puVar11 + (-8 - (longlong)*(undefined1 **)(puVar11 + 0xfffffffffffffff8));
    puVar11 = *(undefined1 **)(puVar11 + 0xfffffffffffffff8);
  }
  else if (iVar3 == 6) {
    uVar16 = 0;
    local_64 = 0;
    lVar9 = *param_2;
    if (param_2[1] != lVar9) {
      param_3 = *(longlong *)(param_1 + 0x40);
      uVar15 = uVar16;
      uVar14 = uVar16;
      do {
        local_68 = *(undefined1 *)(lVar9 + uVar14);
        uVar4 = *(ulonglong *)(param_1 + 0x38);
        uVar12 = (uint)uVar15;
        if ((((int)param_3 + (int)uVar4 & 0xfU) == 0) &&
           (*(ulonglong *)(param_1 + 0x30) <= param_3 + 0x10U >> 4)) {
          FUN_1800028d0(param_1 + 0x20);
          uVar4 = *(ulonglong *)(param_1 + 0x38);
          param_3 = *(longlong *)(param_1 + 0x40);
          uVar12 = local_64;
        }
        uVar4 = *(longlong *)(param_1 + 0x30) * 0x10 - 1U & uVar4;
        *(ulonglong *)(param_1 + 0x38) = uVar4;
        uVar4 = param_3 + uVar4;
        lVar9 = (*(longlong *)(param_1 + 0x30) - 1U & uVar4 >> 4) * 8;
        lVar10 = *(longlong *)(param_1 + 0x28);
        if (*(longlong *)(lVar10 + lVar9) == 0) {
          uVar5 = FUN_18000c554(0x10);
          *(undefined8 *)(lVar9 + *(longlong *)(param_1 + 0x28)) = uVar5;
          lVar10 = *(longlong *)(param_1 + 0x28);
          uVar12 = local_64;
        }
        *(undefined1 *)((ulonglong)((uint)uVar4 & 0xf) + *(longlong *)(lVar9 + lVar10)) = local_68;
        *(longlong *)(param_1 + 0x40) = *(longlong *)(param_1 + 0x40) + 1;
        param_3 = *(longlong *)(param_1 + 0x40);
        local_64 = uVar12 + 1;
        uVar15 = (ulonglong)local_64;
        uVar14 = uVar14 + 1;
        lVar9 = *param_2;
      } while ((ulonglong)(longlong)(int)local_64 < (ulonglong)(param_2[1] - lVar9));
    }
    local_48 = 0;
    local_40 = 0xf;
    local_58[0]._0_1_ = 0;
    uVar15 = *(ulonglong *)(param_1 + 0x38);
    uVar17 = *(longlong *)(param_1 + 0x40) + uVar15;
    uVar14 = local_48;
    uVar4 = local_40;
    for (; local_48 = uVar14, local_40 = uVar4, uVar15 != uVar17; uVar15 = uVar15 + 1) {
      uVar13 = (ulonglong)((uint)uVar15 & 0xf);
      uVar1 = *(undefined1 *)
               (uVar13 + *(longlong *)
                          (*(longlong *)(param_1 + 0x28) +
                          (uVar15 >> 4 & *(longlong *)(param_1 + 0x30) - 1U) * 8));
      if (uVar14 < uVar4) {
        local_48 = uVar14 + 1;
        puVar11 = (undefined1 *)local_58;
        if (0xf < uVar4) {
          puVar11 = (undefined1 *)CONCAT71(local_58[0]._1_7_,(undefined1)local_58[0]);
        }
        puVar11[uVar14] = uVar1;
        puVar11[uVar14 + 1] = 0;
      }
      else {
        FUN_180002770(local_58,uVar13,param_3,uVar1);
      }
      uVar14 = local_48;
      uVar4 = local_40;
    }
    puVar11 = (undefined1 *)CONCAT71(local_58[0]._1_7_,(undefined1)local_58[0]);
    puVar7 = (undefined1 *)local_58;
    if (0xf < uVar4) {
      puVar7 = puVar11;
    }
    if ((4 < uVar14) &&
       (pvVar6 = memchr(puVar7,0x4d,uVar14 - 4), uVar15 = uVar16, pvVar6 != (void *)0x0)) {
LAB_180001d40:
      do {
        uVar17 = uVar15 + 1;
        if (*(byte *)((longlong)pvVar6 + uVar15) == (&DAT_18000f758)[uVar15]) {
          uVar15 = uVar17;
          uVar12 = 0;
          if (uVar17 != 5) goto LAB_180001d40;
        }
        else {
          uVar12 = -(uint)(*(byte *)((longlong)pvVar6 + uVar15) < (byte)(&DAT_18000f758)[uVar15]) |
                   1;
        }
        if (uVar12 == 0) {
          if ((longlong)pvVar6 - (longlong)puVar7 != -1) {
            puVar7 = (undefined1 *)local_58;
            if (0xf < uVar4) {
              puVar7 = puVar11;
            }
            if (2 < uVar14) {
              pbVar8 = memchr(puVar7,0x76,uVar14 - 2);
              goto joined_r0x000180001dc2;
            }
          }
          break;
        }
        pvVar6 = memchr((void *)((longlong)pvVar6 + 1),0x4d,
                        (size_t)(puVar7 + ((uVar14 - 4) - ((longlong)pvVar6 + 1))));
        uVar15 = uVar16;
        if (pvVar6 == (void *)0x0) break;
      } while( true );
    }
LAB_180001e27:
    if (uVar4 < 0x10) {
      return;
    }
    if (uVar4 + 1 < 0x1000) goto LAB_1800020b1;
    puVar7 = puVar11 + (-8 - (longlong)*(undefined1 **)(puVar11 + 0xfffffffffffffff8));
    puVar11 = *(undefined1 **)(puVar11 + 0xfffffffffffffff8);
  }
  else {
    if (iVar3 == 5) {
      uVar16 = 0;
      local_64 = 0;
      lVar9 = *param_2;
      if (param_2[1] != lVar9) {
        param_3 = *(longlong *)(param_1 + 0x40);
        uVar15 = uVar16;
        do {
          local_68 = *(undefined1 *)(lVar9 + uVar15);
          uVar14 = *(ulonglong *)(param_1 + 0x38);
          uVar12 = (uint)uVar16;
          if ((((int)param_3 + (int)uVar14 & 0xfU) == 0) &&
             (*(ulonglong *)(param_1 + 0x30) <= param_3 + 0x10U >> 4)) {
            FUN_1800028d0(param_1 + 0x20);
            uVar14 = *(ulonglong *)(param_1 + 0x38);
            param_3 = *(longlong *)(param_1 + 0x40);
            uVar12 = local_64;
          }
          uVar14 = *(longlong *)(param_1 + 0x30) * 0x10 - 1U & uVar14;
          *(ulonglong *)(param_1 + 0x38) = uVar14;
          uVar14 = param_3 + uVar14;
          lVar9 = (*(longlong *)(param_1 + 0x30) - 1U & uVar14 >> 4) * 8;
          lVar10 = *(longlong *)(param_1 + 0x28);
          if (*(longlong *)(lVar10 + lVar9) == 0) {
            uVar5 = FUN_18000c554(0x10);
            *(undefined8 *)(lVar9 + *(longlong *)(param_1 + 0x28)) = uVar5;
            lVar10 = *(longlong *)(param_1 + 0x28);
            uVar12 = local_64;
          }
          *(undefined1 *)((ulonglong)((uint)uVar14 & 0xf) + *(longlong *)(lVar9 + lVar10)) =
               local_68;
          *(longlong *)(param_1 + 0x40) = *(longlong *)(param_1 + 0x40) + 1;
          param_3 = *(longlong *)(param_1 + 0x40);
          local_64 = uVar12 + 1;
          uVar16 = (ulonglong)local_64;
          uVar15 = uVar15 + 1;
          lVar9 = *param_2;
        } while ((ulonglong)(longlong)(int)local_64 < (ulonglong)(param_2[1] - lVar9));
      }
      local_48 = 0;
      local_40 = 0xf;
      local_58[0]._0_1_ = 0;
      uVar16 = *(ulonglong *)(param_1 + 0x38);
      uVar4 = *(longlong *)(param_1 + 0x40) + uVar16;
      uVar15 = local_48;
      uVar14 = local_40;
      for (; local_48 = uVar15, local_40 = uVar14, uVar16 != uVar4; uVar16 = uVar16 + 1) {
        uVar17 = (ulonglong)((uint)uVar16 & 0xf);
        uVar1 = *(undefined1 *)
                 (uVar17 + *(longlong *)
                            (*(longlong *)(param_1 + 0x28) +
                            (uVar16 >> 4 & *(longlong *)(param_1 + 0x30) - 1U) * 8));
        if (uVar15 < uVar14) {
          local_48 = uVar15 + 1;
          puVar11 = (undefined1 *)local_58;
          if (0xf < uVar14) {
            puVar11 = (undefined1 *)CONCAT71(local_58[0]._1_7_,(undefined1)local_58[0]);
          }
          puVar11[uVar15] = uVar1;
          puVar11[uVar15 + 1] = 0;
        }
        else {
          FUN_180002770(local_58,uVar17,param_3,uVar1);
        }
        uVar15 = local_48;
        uVar14 = local_40;
      }
      puVar11 = (undefined1 *)CONCAT71(local_58[0]._1_7_,(undefined1)local_58[0]);
      puVar7 = (undefined1 *)local_58;
      if (0xf < uVar14) {
        puVar7 = puVar11;
      }
      if (0x16 < uVar15) {
        for (pvVar6 = memchr(puVar7,0x55,uVar15 - 0x16); pvVar6 != (void *)0x0;
            pvVar6 = memchr((void *)((longlong)pvVar6 + 1),0x55,
                            (size_t)(puVar7 + ((uVar15 - 0x16) - ((longlong)pvVar6 + 1))))) {
          iVar3 = memcmp(pvVar6,"Use Ymodem to send file",0x17);
          if (iVar3 == 0) {
            if ((longlong)pvVar6 - (longlong)puVar7 != -1) {
              *(undefined1 *)(param_1 + 0x48) = 1;
              iVar3 = _Cnd_broadcast(param_1 + 0x58);
              if (iVar3 != 0) {
                std::_Throw_C_error(iVar3);
              }
            }
            break;
          }
        }
      }
      if (uVar14 < 0x10) {
        return;
      }
      if (uVar14 + 1 < 0x1000) goto LAB_1800020b1;
      puVar2 = *(undefined1 **)(puVar11 + 0xfffffffffffffff8);
      lVar9 = (longlong)puVar11 - (longlong)puVar2;
    }
    else {
      if (iVar3 == 7) {
        if (param_2[1] - *param_2 != 1) {
          return;
        }
        if (*(char *)*param_2 != '\x06') {
          return;
        }
        *(undefined1 *)(param_1 + 0x48) = 1;
        iVar3 = _Cnd_broadcast(param_1 + 0x58);
        if (iVar3 == 0) {
          return;
        }
        std::_Throw_C_error(iVar3);
        return;
      }
      if (iVar3 == 8) {
        if (param_2[1] - *param_2 != 1) {
          return;
        }
        if (*(char *)*param_2 != '\x06') {
          return;
        }
        *(undefined1 *)(param_1 + 0x48) = 1;
        iVar3 = _Cnd_broadcast(param_1 + 0x58);
        if (iVar3 == 0) {
          return;
        }
        std::_Throw_C_error(iVar3);
        return;
      }
      if (iVar3 == 9) {
        if (param_2[1] - *param_2 != 1) {
          return;
        }
        if (*(char *)*param_2 != '\x06') {
          return;
        }
        *(undefined1 *)(param_1 + 0x48) = 1;
        iVar3 = _Cnd_broadcast(param_1 + 0x58);
        if (iVar3 == 0) {
          return;
        }
        std::_Throw_C_error(iVar3);
        return;
      }
      if (iVar3 != 10) {
        return;
      }
      uVar16 = 0;
      local_64 = 0;
      lVar9 = *param_2;
      if (param_2[1] != lVar9) {
        lVar10 = *(longlong *)(param_1 + 0x40);
        uVar15 = uVar16;
        do {
          local_68 = *(undefined1 *)(lVar9 + uVar15);
          uVar14 = *(ulonglong *)(param_1 + 0x38);
          uVar12 = (uint)uVar16;
          if ((((int)uVar14 + (int)lVar10 & 0xfU) == 0) &&
             (*(ulonglong *)(param_1 + 0x30) <= lVar10 + 0x10U >> 4)) {
            FUN_1800028d0(param_1 + 0x20);
            uVar14 = *(ulonglong *)(param_1 + 0x38);
            lVar10 = *(longlong *)(param_1 + 0x40);
            uVar12 = local_64;
          }
          uVar14 = *(longlong *)(param_1 + 0x30) * 0x10 - 1U & uVar14;
          *(ulonglong *)(param_1 + 0x38) = uVar14;
          uVar14 = uVar14 + lVar10;
          lVar9 = (uVar14 >> 4 & *(longlong *)(param_1 + 0x30) - 1U) * 8;
          lVar10 = *(longlong *)(param_1 + 0x28);
          if (*(longlong *)(lVar10 + lVar9) == 0) {
            uVar5 = FUN_18000c554(0x10);
            *(undefined8 *)(lVar9 + *(longlong *)(param_1 + 0x28)) = uVar5;
            lVar10 = *(longlong *)(param_1 + 0x28);
            uVar12 = local_64;
          }
          *(undefined1 *)((ulonglong)((uint)uVar14 & 0xf) + *(longlong *)(lVar10 + lVar9)) =
               local_68;
          *(longlong *)(param_1 + 0x40) = *(longlong *)(param_1 + 0x40) + 1;
          lVar10 = *(longlong *)(param_1 + 0x40);
          local_64 = uVar12 + 1;
          uVar16 = (ulonglong)local_64;
          uVar15 = uVar15 + 1;
          lVar9 = *param_2;
        } while ((ulonglong)(longlong)(int)local_64 < (ulonglong)(param_2[1] - lVar9));
      }
      local_48 = 0;
      local_40 = 0xf;
      local_58[0]._0_1_ = 0;
      uVar16 = *(ulonglong *)(param_1 + 0x38);
      uVar4 = *(longlong *)(param_1 + 0x40) + uVar16;
      uVar15 = local_48;
      uVar14 = local_40;
      for (; local_48 = uVar15, local_40 = uVar14, uVar16 != uVar4; uVar16 = uVar16 + 1) {
        uVar17 = (ulonglong)((uint)uVar16 & 0xf);
        uVar1 = *(undefined1 *)
                 (uVar17 + *(longlong *)
                            (*(longlong *)(param_1 + 0x28) +
                            (uVar16 >> 4 & *(longlong *)(param_1 + 0x30) - 1U) * 8));
        if (uVar15 < uVar14) {
          local_48 = uVar15 + 1;
          puVar11 = (undefined1 *)local_58;
          if (0xf < uVar14) {
            puVar11 = (undefined1 *)CONCAT71(local_58[0]._1_7_,(undefined1)local_58[0]);
          }
          puVar11[uVar15] = uVar1;
          puVar11[uVar15 + 1] = 0;
        }
        else {
          FUN_180002770(local_58,uVar17,lVar9,uVar1);
        }
        uVar15 = local_48;
        uVar14 = local_40;
      }
      puVar11 = (undefined1 *)CONCAT71(local_58[0]._1_7_,(undefined1)local_58[0]);
      puVar7 = (undefined1 *)local_58;
      if (0xf < uVar14) {
        puVar7 = puVar11;
      }
      if (0x25 < uVar15) {
        for (pvVar6 = memchr(puVar7,0x46,uVar15 - 0x25); pvVar6 != (void *)0x0;
            pvVar6 = memchr((void *)((longlong)pvVar6 + 1),0x46,
                            (size_t)(puVar7 + ((uVar15 - 0x25) - ((longlong)pvVar6 + 1))))) {
          iVar3 = memcmp(pvVar6,"Firmware upgrade success, rebooting...",0x26);
          if (iVar3 == 0) {
            if ((longlong)pvVar6 - (longlong)puVar7 != -1) {
              *(undefined1 *)(param_1 + 0x48) = 1;
              iVar3 = _Cnd_broadcast(param_1 + 0x58);
              if (iVar3 != 0) {
                std::_Throw_C_error(iVar3);
              }
            }
            break;
          }
        }
      }
      if (uVar14 < 0x10) {
        return;
      }
      if (uVar14 + 1 < 0x1000) goto LAB_1800020b1;
      puVar2 = *(undefined1 **)(puVar11 + 0xfffffffffffffff8);
      lVar9 = (longlong)puVar11 - (longlong)puVar2;
    }
    puVar7 = (undefined1 *)(lVar9 - 8);
    puVar11 = puVar2;
  }
  if ((undefined1 *)0x1f < puVar7) {
                    /* WARNING: Subroutine does not return */
    _invalid_parameter_noinfo_noreturn();
  }
LAB_1800020b1:
  free(puVar11);
  return;
joined_r0x000180001dc2:
  if (pbVar8 == (byte *)0x0) goto LAB_180001e27;
  bVar18 = *pbVar8 < 0x76;
  if (((*pbVar8 == 0x76) && (bVar18 = pbVar8[1] < 0x65, pbVar8[1] == 0x65)) &&
     (bVar18 = pbVar8[2] < 0x72, pbVar8[2] == 0x72)) {
    uVar12 = 0;
  }
  else {
    uVar12 = -(uint)bVar18 | 1;
  }
  if (uVar12 == 0) {
    if ((longlong)pbVar8 - (longlong)puVar7 != -1) {
      *(undefined1 *)(param_1 + 0x48) = 1;
      iVar3 = _Cnd_broadcast(param_1 + 0x58);
      if (iVar3 != 0) {
        std::_Throw_C_error(iVar3);
      }
    }
    goto LAB_180001e27;
  }
  pbVar8 = memchr(pbVar8 + 1,0x76,(size_t)(puVar7 + ((uVar14 - 2) - (longlong)(pbVar8 + 1))));
  goto joined_r0x000180001dc2;
}


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

### EXPORT FUNC 1800023f0 (39 bytes) name=FUN_1800023f0

void FUN_1800023f0(undefined8 *param_1)

{
  void *_Memory;
  
  FUN_180002550((longlong)param_1);
  _Memory = (void *)*param_1;
  *param_1 = 0;
  free(_Memory);
  return;
}


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

### EXPORT FUNC 180002420 (87 bytes) name=FUN_180002420

void FUN_180002420(longlong *param_1)

{
  void *pvVar1;
  void *_Memory;
  
  pvVar1 = (void *)*param_1;
  if (pvVar1 != (void *)0x0) {
    _Memory = pvVar1;
    if ((0xfff < (ulonglong)(param_1[2] - (longlong)pvVar1)) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
    *param_1 = 0;
    param_1[1] = 0;
    param_1[2] = 0;
  }
  return;
}


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

### EXPORT FUNC 180002480 (38 bytes) name=FUN_180002480

void FUN_180002480(undefined8 *param_1)

{
  int iVar1;
  
  if (*(char *)(param_1 + 1) != '\0') {
    iVar1 = _Mtx_unlock(*param_1);
    if (iVar1 != 0) {
      std::_Throw_C_error(iVar1);
    }
  }
  return;
}


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

### EXPORT FUNC 1800024b0 (94 bytes) name=FUN_1800024b0

void FUN_1800024b0(longlong *param_1)

{
  void *pvVar1;
  void *_Memory;
  
  if (0xf < (ulonglong)param_1[3]) {
    pvVar1 = (void *)*param_1;
    _Memory = pvVar1;
    if ((0xfff < param_1[3] + 1U) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  param_1[2] = 0;
  param_1[3] = 0xf;
  *(undefined1 *)param_1 = 0;
  return;
}


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

### EXPORT FUNC 180002510 (59 bytes) name=FUN_180002510

longlong * FUN_180002510(longlong *param_1,void *param_2)

{
  size_t sVar1;
  
  param_1[2] = 0;
  param_1[3] = 0xf;
  sVar1 = 0xffffffffffffffff;
  *(undefined1 *)param_1 = 0;
  do {
    sVar1 = sVar1 + 1;
  } while (*(char *)((longlong)param_2 + sVar1) != '\0');
  FUN_180002610(param_1,param_2,sVar1);
  return param_1;
}


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

### EXPORT FUNC 180002550 (180 bytes) name=FUN_180002550

void FUN_180002550(longlong param_1)

{
  void *pvVar1;
  void *_Memory;
  longlong lVar2;
  
  lVar2 = *(longlong *)(param_1 + 0x20);
  if (lVar2 != 0) {
    do {
      lVar2 = lVar2 + -1;
      *(longlong *)(param_1 + 0x20) = lVar2;
    } while (lVar2 != 0);
    *(undefined8 *)(param_1 + 0x18) = 0;
  }
  lVar2 = *(longlong *)(param_1 + 0x10);
  while (lVar2 != 0) {
    lVar2 = lVar2 + -1;
    pvVar1 = *(void **)(*(longlong *)(param_1 + 8) + lVar2 * 8);
    if (pvVar1 != (void *)0x0) {
      free(pvVar1);
    }
  }
  pvVar1 = *(void **)(param_1 + 8);
  if (pvVar1 != (void *)0x0) {
    _Memory = pvVar1;
    if ((0xfff < (ulonglong)(*(longlong *)(param_1 + 0x10) << 3)) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  *(undefined8 *)(param_1 + 0x10) = 0;
  *(undefined8 *)(param_1 + 8) = 0;
  return;
}


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

### EXPORT FUNC 180002610 (346 bytes) name=FUN_180002610

longlong * FUN_180002610(longlong *param_1,void *param_2,size_t param_3)

{
  ulonglong uVar1;
  ulonglong uVar2;
  void *pvVar3;
  longlong lVar4;
  ulonglong uVar5;
  size_t sVar6;
  void *_Memory;
  void *_Dst;
  longlong *_Dst_00;
  ulonglong uVar7;
  
  uVar2 = param_1[3];
  if (param_3 <= uVar2) {
    _Dst_00 = param_1;
    if (0xf < uVar2) {
      _Dst_00 = (longlong *)*param_1;
    }
    param_1[2] = param_3;
    memmove(_Dst_00,param_2,param_3);
    *(undefined1 *)(param_3 + (longlong)_Dst_00) = 0;
    return param_1;
  }
  if (0x7fffffffffffffff < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_180002b40();
  }
  uVar5 = param_3 | 0xf;
  uVar7 = 0x7fffffffffffffff;
  if (((uVar5 < 0x8000000000000000) && (uVar2 <= 0x7fffffffffffffff - (uVar2 >> 1))) &&
     (uVar1 = (uVar2 >> 1) + uVar2, uVar7 = uVar5, uVar5 < uVar1)) {
    uVar7 = uVar1;
  }
  sVar6 = uVar7 + 1;
  if (uVar7 == 0xffffffffffffffff) {
    sVar6 = 0xffffffffffffffff;
  }
  if (sVar6 < 0x1000) {
    if (sVar6 == 0) {
      _Dst = (void *)0x0;
    }
    else {
      _Dst = (void *)FUN_18000c554(sVar6);
    }
  }
  else {
    if (sVar6 + 0x27 <= sVar6) {
                    /* WARNING: Subroutine does not return */
      FUN_180001750();
    }
    lVar4 = FUN_18000c554(sVar6 + 0x27);
    if (lVar4 == 0) goto LAB_18000275a;
    _Dst = (void *)(lVar4 + 0x27U & 0xffffffffffffffe0);
    *(longlong *)((longlong)_Dst - 8) = lVar4;
  }
  param_1[2] = param_3;
  param_1[3] = uVar7;
  memcpy(_Dst,param_2,param_3);
  *(undefined1 *)(param_3 + (longlong)_Dst) = 0;
  if (0xf < uVar2) {
    pvVar3 = (void *)*param_1;
    _Memory = pvVar3;
    if ((0xfff < uVar2 + 1) &&
       (_Memory = *(void **)((longlong)pvVar3 + -8),
       0x1f < (ulonglong)((longlong)pvVar3 + (-8 - (longlong)_Memory)))) {
LAB_18000275a:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  *param_1 = (longlong)_Dst;
  return param_1;
}


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

### EXPORT FUNC 180002770 (348 bytes) name=FUN_180002770

undefined8 *
FUN_180002770(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined1 param_4)

{
  ulonglong uVar1;
  size_t _Size;
  ulonglong uVar2;
  void *_Src;
  longlong lVar3;
  ulonglong uVar4;
  size_t sVar5;
  ulonglong uVar6;
  void *_Memory;
  void *_Dst;
  
  _Size = param_1[2];
  if (_Size == 0x7fffffffffffffff) {
                    /* WARNING: Subroutine does not return */
    FUN_180002b40();
  }
  uVar2 = param_1[3];
  uVar4 = _Size + 1 | 0xf;
  uVar6 = 0x7fffffffffffffff;
  if (((uVar4 < 0x8000000000000000) && (uVar2 <= 0x7fffffffffffffff - (uVar2 >> 1))) &&
     (uVar1 = (uVar2 >> 1) + uVar2, uVar6 = uVar4, uVar4 < uVar1)) {
    uVar6 = uVar1;
  }
  sVar5 = uVar6 + 1;
  if (uVar6 == 0xffffffffffffffff) {
    sVar5 = 0xffffffffffffffff;
  }
  if (sVar5 < 0x1000) {
    if (sVar5 == 0) {
      _Dst = (void *)0x0;
    }
    else {
      _Dst = (void *)FUN_18000c554(sVar5);
    }
  }
  else {
    if (sVar5 + 0x27 <= sVar5) {
                    /* WARNING: Subroutine does not return */
      FUN_180001750();
    }
    lVar3 = FUN_18000c554(sVar5 + 0x27);
    if (lVar3 == 0) goto LAB_18000288c;
    _Dst = (void *)(lVar3 + 0x27U & 0xffffffffffffffe0);
    *(longlong *)((longlong)_Dst - 8) = lVar3;
  }
  param_1[2] = _Size + 1;
  param_1[3] = uVar6;
  if (uVar2 < 0x10) {
    memcpy(_Dst,param_1,_Size);
    *(undefined1 *)((longlong)_Dst + _Size) = param_4;
    *(undefined1 *)((longlong)_Dst + _Size + 1) = 0;
  }
  else {
    _Src = (void *)*param_1;
    memcpy(_Dst,_Src,_Size);
    *(undefined1 *)((longlong)_Dst + _Size) = param_4;
    *(undefined1 *)((longlong)_Dst + _Size + 1) = 0;
    _Memory = _Src;
    if ((0xfff < uVar2 + 1) &&
       (_Memory = *(void **)((longlong)_Src + -8),
       0x1f < (ulonglong)((longlong)_Src + (-8 - (longlong)_Memory)))) {
LAB_18000288c:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  *param_1 = _Dst;
  return param_1;
}


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

### EXPORT FUNC 1800028d0 (469 bytes) name=FUN_1800028d0

void FUN_1800028d0(longlong param_1)

{
  code *pcVar1;
  ulonglong uVar2;
  longlong lVar3;
  void *_Memory;
  size_t sVar4;
  void *pvVar5;
  size_t sVar6;
  ulonglong uVar7;
  void *_Dst;
  ulonglong uVar8;
  
  uVar8 = *(ulonglong *)(param_1 + 0x10);
  uVar2 = 1;
  if (uVar8 != 0) {
    uVar2 = uVar8;
  }
  for (; (uVar7 = uVar2 - uVar8, uVar7 == 0 || (uVar2 < 8)); uVar2 = uVar2 * 2) {
    if (0x7ffffffffffffff - uVar2 < uVar2) {
      FUN_180002b60();
      pcVar1 = (code *)swi(3);
      (*pcVar1)();
      return;
    }
  }
  uVar8 = *(ulonglong *)(param_1 + 0x18) >> 4;
  if (0x1fffffffffffffff < uVar2) {
LAB_180002a9b:
                    /* WARNING: Subroutine does not return */
    FUN_180001750();
  }
  uVar2 = uVar2 * 8;
  if (uVar2 < 0x1000) {
    if (uVar2 == 0) {
      _Dst = (void *)0x0;
    }
    else {
      _Dst = (void *)FUN_18000c554(uVar2);
    }
  }
  else {
    if (uVar2 + 0x27 <= uVar2) goto LAB_180002a9b;
    lVar3 = FUN_18000c554(uVar2 + 0x27);
    if (lVar3 == 0) goto LAB_180002a94;
    _Dst = (void *)(lVar3 + 0x27U & 0xffffffffffffffe0);
    *(longlong *)((longlong)_Dst - 8) = lVar3;
  }
  sVar6 = uVar8 * 8;
  pvVar5 = (void *)(*(longlong *)(param_1 + 8) + sVar6);
  sVar4 = (*(longlong *)(param_1 + 0x10) * 8 - (longlong)pvVar5) + *(longlong *)(param_1 + 8);
  memmove((void *)(sVar6 + (longlong)_Dst),pvVar5,sVar4);
  pvVar5 = (void *)(sVar4 + (longlong)(sVar6 + (longlong)_Dst));
  if (uVar7 < uVar8) {
    sVar4 = uVar7 * 8;
    memmove(pvVar5,*(void **)(param_1 + 8),sVar4);
    pvVar5 = (void *)(sVar4 + *(longlong *)(param_1 + 8));
    sVar6 = (*(longlong *)(param_1 + 8) - (longlong)pvVar5) + sVar6;
    memmove(_Dst,pvVar5,sVar6);
    pvVar5 = (void *)(sVar6 + (longlong)_Dst);
  }
  else {
    memmove(pvVar5,*(void **)(param_1 + 8),sVar6);
    memset((void *)(sVar6 + (longlong)pvVar5),0,(uVar7 - uVar8) * 8);
    pvVar5 = _Dst;
    sVar4 = sVar6;
  }
  memset(pvVar5,0,sVar4);
  pvVar5 = *(void **)(param_1 + 8);
  if (pvVar5 != (void *)0x0) {
    _Memory = pvVar5;
    if ((0xfff < (ulonglong)(*(longlong *)(param_1 + 0x10) << 3)) &&
       (_Memory = *(void **)((longlong)pvVar5 + -8),
       0x1f < (ulonglong)((longlong)pvVar5 + (-8 - (longlong)_Memory)))) {
LAB_180002a94:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  *(longlong *)(param_1 + 0x10) = *(longlong *)(param_1 + 0x10) + uVar7;
  *(void **)(param_1 + 8) = _Dst;
  return;
}


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

### EXPORT FUNC 180002ab0 (134 bytes) name=FUN_180002ab0

void FUN_180002ab0(ulonglong *param_1,ulonglong param_2)

{
  longlong lVar1;
  ulonglong uVar2;
  
  if (0x7fffffffffffffff < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_180002b80();
  }
  if (param_2 < 0x1000) {
    if (param_2 == 0) {
      uVar2 = 0;
    }
    else {
      uVar2 = FUN_18000c554(param_2);
    }
  }
  else {
    if (param_2 + 0x27 <= param_2) {
                    /* WARNING: Subroutine does not return */
      FUN_180001750();
    }
    lVar1 = FUN_18000c554(param_2 + 0x27);
    if (lVar1 == 0) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    uVar2 = lVar1 + 0x27U & 0xffffffffffffffe0;
    *(longlong *)(uVar2 - 8) = lVar1;
  }
  *param_1 = uVar2;
  param_1[1] = uVar2;
  param_1[2] = uVar2 + param_2;
  return;
}


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

### EXPORT FUNC 180002b40 (18 bytes) name=FUN_180002b40

void FUN_180002b40(void)

{
  code *pcVar1;
  
  std::_Xlength_error("string too long");
  pcVar1 = (code *)swi(3);
  (*pcVar1)();
  return;
}


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

### EXPORT FUNC 180002b60 (18 bytes) name=FUN_180002b60

void FUN_180002b60(void)

{
  code *pcVar1;
  
  std::_Xlength_error("deque<T> too long");
  pcVar1 = (code *)swi(3);
  (*pcVar1)();
  return;
}


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

### EXPORT FUNC 180002b80 (18 bytes) name=FUN_180002b80

void FUN_180002b80(void)

{
  code *pcVar1;
  
  std::_Xlength_error("vector too long");
  pcVar1 = (code *)swi(3);
  (*pcVar1)();
  return;
}


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

### EXPORT FUNC 180002ba0 (239 bytes) name=FUN_180002ba0

void FUN_180002ba0(ulonglong *param_1,ulonglong param_2)

{
  void *pvVar1;
  longlong lVar2;
  void *_Memory;
  ulonglong uVar3;
  ulonglong uVar4;
  ulonglong uVar5;
  
  if (0x7fffffffffffffff < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_180002b80();
  }
  pvVar1 = (void *)*param_1;
  uVar3 = param_1[2] - (longlong)pvVar1;
  uVar5 = param_2;
  if ((uVar3 <= 0x7fffffffffffffff - (uVar3 >> 1)) &&
     (uVar5 = (uVar3 >> 1) + uVar3, uVar5 < param_2)) {
    uVar5 = param_2;
  }
  uVar4 = 0;
  if (pvVar1 != (void *)0x0) {
    _Memory = pvVar1;
    if ((0xfff < uVar3) &&
       (_Memory = *(void **)((longlong)pvVar1 - 8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) goto LAB_180002c50;
    free(_Memory);
    *param_1 = 0;
    param_1[1] = 0;
    param_1[2] = 0;
  }
  if (uVar5 < 0x1000) {
    if (uVar5 != 0) {
      uVar4 = FUN_18000c554(uVar5);
    }
  }
  else {
    if (uVar5 + 0x27 <= uVar5) {
                    /* WARNING: Subroutine does not return */
      FUN_180001750();
    }
    lVar2 = FUN_18000c554(uVar5 + 0x27);
    if (lVar2 == 0) {
LAB_180002c50:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    uVar4 = lVar2 + 0x27U & 0xffffffffffffffe0;
    *(longlong *)(uVar4 - 8) = lVar2;
  }
  *param_1 = uVar4;
  param_1[1] = uVar4;
  param_1[2] = uVar4 + uVar5;
  return;
}


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

### EXPORT FUNC 180002ca0 (248 bytes) name=FUN_180002ca0

void FUN_180002ca0(longlong *param_1)

{
  void *pvVar1;
  void *pvVar2;
  
  if (0xf < (ulonglong)param_1[0xb]) {
    pvVar1 = (void *)param_1[8];
    pvVar2 = pvVar1;
    if ((0xfff < param_1[0xb] + 1U) &&
       (pvVar2 = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)pvVar2)))) goto LAB_180002d92;
    free(pvVar2);
  }
  param_1[10] = 0;
  param_1[0xb] = 0xf;
  *(undefined1 *)(param_1 + 8) = 0;
  if (0xf < (ulonglong)param_1[7]) {
    pvVar1 = (void *)param_1[4];
    pvVar2 = pvVar1;
    if ((0xfff < param_1[7] + 1U) &&
       (pvVar2 = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)pvVar2)))) goto LAB_180002d92;
    free(pvVar2);
  }
  param_1[6] = 0;
  param_1[7] = 0xf;
  *(undefined1 *)(param_1 + 4) = 0;
  if (0xf < (ulonglong)param_1[3]) {
    pvVar1 = (void *)*param_1;
    pvVar2 = pvVar1;
    if ((0xfff < param_1[3] + 1U) &&
       (pvVar2 = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)pvVar2)))) {
LAB_180002d92:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(pvVar2);
  }
  param_1[2] = 0;
  param_1[3] = 0xf;
  *(undefined1 *)param_1 = 0;
  return;
}


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

### EXPORT FUNC 180002da0 (177 bytes) name=FUN_180002da0

void FUN_180002da0(longlong *param_1)

{
  longlong *plVar1;
  longlong *plVar2;
  
  plVar1 = (longlong *)*param_1;
  if (plVar1 != (longlong *)0x0) {
    plVar2 = (longlong *)param_1[1];
    if (plVar1 != plVar2) {
      do {
        FUN_180002ca0(plVar1);
        plVar1 = plVar1 + 0xc;
      } while (plVar1 != plVar2);
      plVar1 = (longlong *)*param_1;
    }
    plVar2 = plVar1;
    if ((0xfff < (ulonglong)(((param_1[2] - (longlong)plVar1) / 0x60) * 0x60)) &&
       (plVar2 = (longlong *)plVar1[-1],
       0x1f < (ulonglong)((longlong)plVar1 + (-8 - (longlong)plVar2)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(plVar2);
    *param_1 = 0;
    param_1[1] = 0;
    param_1[2] = 0;
  }
  return;
}


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

### EXPORT FUNC 180002e60 (201 bytes) name=FUN_180002e60

undefined8 * FUN_180002e60(undefined8 *param_1,undefined8 *param_2)

{
  ulonglong uVar1;
  ulonglong uVar2;
  undefined8 uVar3;
  longlong lVar4;
  void *_Dst;
  ulonglong uVar5;
  
  _Dst = (void *)0x0;
  param_1[2] = 0;
  param_1[3] = 0;
  uVar2 = param_2[2];
  if (0xf < (ulonglong)param_2[3]) {
    param_2 = (undefined8 *)*param_2;
  }
  if (uVar2 < 0x10) {
    uVar3 = param_2[1];
    uVar5 = 0xf;
    *param_1 = *param_2;
    param_1[1] = uVar3;
  }
  else {
    uVar5 = uVar2 | 0xf;
    if (0x7fffffffffffffff < uVar5) {
      uVar5 = 0x7fffffffffffffff;
    }
    uVar1 = uVar5 + 1;
    if (uVar1 < 0x1000) {
      if (uVar1 != 0) {
        _Dst = (void *)FUN_18000c554(uVar1);
      }
    }
    else {
      if (uVar5 + 0x28 <= uVar1) {
                    /* WARNING: Subroutine does not return */
        FUN_180001750();
      }
      lVar4 = FUN_18000c554(uVar5 + 0x28);
      if (lVar4 == 0) {
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      _Dst = (void *)(lVar4 + 0x27U & 0xffffffffffffffe0);
      *(longlong *)((longlong)_Dst - 8) = lVar4;
    }
    *param_1 = _Dst;
    memcpy(_Dst,param_2,uVar2 + 1);
  }
  param_1[2] = uVar2;
  param_1[3] = uVar5;
  return param_1;
}


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

### EXPORT FUNC 180002f30 (49 bytes) name=FUN_180002f30

void FUN_180002f30(undefined8 param_1,longlong *param_2,longlong *param_3)

{
  for (; param_2 != param_3; param_2 = param_2 + 0xc) {
    FUN_180002ca0(param_2);
  }
  return;
}


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

### EXPORT FUNC 180002f70 (66 bytes) name=deallocate

/* Library Function - Multiple Matches With Same Base Name
    public: void __cdecl std::allocator<struct `protected: int __cdecl GSI1::readHash(unsigned
   short,long,long) __ptr64'::`2'::FileSymbolInfo>::deallocate(struct `protected: int __cdecl
   GSI1::readHash(unsigned short,long,long) __ptr64'::`2'::FileSymbolInfo * __ptr64 const,unsigned
   __int64) __ptr64
    public: void __cdecl std::allocator<struct GSISymbolEntry>::deallocate(struct GSISymbolEntry *
   __ptr64 const,unsigned __int64) __ptr64
   
   Library: Visual Studio 2019 Release */

void deallocate(undefined8 param_1,void *param_2,longlong param_3)

{
  void *_Memory;
  
  _Memory = param_2;
  if ((0xfff < (ulonglong)(param_3 * 0x60)) &&
     (_Memory = *(void **)((longlong)param_2 + -8),
     0x1f < (ulonglong)((longlong)param_2 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
    _invalid_parameter_noinfo_noreturn();
  }
  free(_Memory);
  return;
}


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

### EXPORT FUNC 180002fc0 (8 bytes) name=FUN_180002fc0

undefined * FUN_180002fc0(void)

{
  return &DAT_180015fe0;
}


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

### EXPORT FUNC 180002fd0 (2014 bytes) name=FUN_180002fd0

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

longlong * FUN_180002fd0(longlong *param_1)

{
  undefined8 *puVar1;
  code *pcVar2;
  void *pvVar3;
  BOOL BVar4;
  LSTATUS LVar5;
  uint uVar6;
  int iVar7;
  HDEVINFO DeviceInfoSet;
  HKEY hKey;
  wchar_t *pwVar8;
  longlong *plVar9;
  void *pvVar10;
  ulonglong uVar11;
  WCHAR *pWVar12;
  DWORD MemberIndex;
  undefined1 auStackY_7c8 [32];
  WCHAR local_780;
  undefined6 uStack_77e;
  undefined8 local_770;
  ulonglong local_768;
  WCHAR local_760;
  undefined6 uStack_75e;
  undefined8 local_750;
  ulonglong local_748;
  longlong *local_740;
  undefined8 *local_738;
  DWORD local_730;
  DWORD local_72c;
  DWORD local_728 [2];
  longlong local_720 [2];
  size_t local_710;
  ulonglong local_708;
  longlong local_700 [2];
  size_t local_6f0;
  ulonglong local_6e8;
  longlong local_6e0 [2];
  size_t local_6d0;
  ulonglong local_6c8;
  _SP_DEVINFO_DATA local_6c0;
  undefined1 local_698 [16];
  undefined8 local_688;
  undefined8 local_680;
  undefined1 local_678 [16];
  undefined8 local_668;
  undefined8 local_660;
  undefined1 local_658 [16];
  undefined8 local_648;
  undefined8 local_640;
  wchar_t local_638 [256];
  short local_438 [256];
  short local_238 [256];
  ulonglong local_38;
  
  local_38 = DAT_180015010 ^ (ulonglong)auStackY_7c8;
  MemberIndex = 0;
  *param_1 = 0;
  param_1[1] = 0;
  *param_1 = 0;
  param_1[1] = 0;
  param_1[2] = 0;
  local_740 = param_1;
  DeviceInfoSet = SetupDiGetClassDevsW((GUID *)&DAT_18000f7e8,(PCWSTR)0x0,(HWND)0x0,2);
  local_6c0.cbSize = 0x20;
  do {
    do {
      do {
        BVar4 = SetupDiEnumDeviceInfo(DeviceInfoSet,MemberIndex,&local_6c0);
        if (BVar4 == 0) {
          SetupDiDestroyDeviceInfoList(DeviceInfoSet);
          return param_1;
        }
        MemberIndex = MemberIndex + 1;
        hKey = SetupDiOpenDevRegKey(DeviceInfoSet,&local_6c0,1,0,1,0x20019);
        local_730 = 0x100;
        LVar5 = RegQueryValueExW(hKey,L"PortName",(LPDWORD)0x0,(LPDWORD)0x0,(LPBYTE)local_638,
                                 &local_730);
        RegCloseKey(hKey);
      } while (LVar5 != 0);
      uVar6 = local_730 - 1;
      if (uVar6 < 0x100) {
        if (0x1ff < (ulonglong)uVar6 * 2) goto LAB_1800037ae;
        local_638[uVar6] = L'\0';
      }
      else {
        local_638[0] = L'\0';
      }
      pwVar8 = wcsstr(local_638,L"LPT");
    } while (pwVar8 != (wchar_t *)0x0);
    local_72c = 0;
    BVar4 = SetupDiGetDeviceRegistryPropertyW
                      (DeviceInfoSet,&local_6c0,0xc,(PDWORD)0x0,(PBYTE)local_438,0x100,&local_72c);
    if ((BVar4 == 1) && (local_72c != 0)) {
      if (0x1ff < (ulonglong)(local_72c - 1) * 2) goto LAB_1800037ae;
      local_438[local_72c - 1] = 0;
    }
    else {
      local_438[0] = 0;
    }
    local_728[0] = 0;
    BVar4 = SetupDiGetDeviceRegistryPropertyW
                      (DeviceInfoSet,&local_6c0,1,(PDWORD)0x0,(PBYTE)local_238,0x100,local_728);
    if ((BVar4 == 1) && (local_728[0] != 0)) {
      if (0x1ff < (ulonglong)(local_728[0] - 1) * 2) {
LAB_1800037ae:
        __report_rangecheckfailure();
        pcVar2 = (code *)swi(3);
        plVar9 = (longlong *)(*pcVar2)();
        return plVar9;
      }
      local_238[local_728[0] - 1] = 0;
    }
    else {
      local_238[0] = 0;
    }
    local_770 = 0;
    local_768 = 7;
    local_780 = L'\0';
    uVar11 = 0xffffffffffffffff;
    do {
      uVar11 = uVar11 + 1;
    } while (local_638[uVar11] != L'\0');
    FUN_180003830((longlong *)&local_780,local_638,uVar11);
    pWVar12 = &local_780;
    if (7 < local_768) {
      pWVar12 = (LPCWSTR)CONCAT62(uStack_77e,local_780);
    }
    iVar7 = WideCharToMultiByte(0xfde9,0,pWVar12,(int)local_770,(LPSTR)0x0,0,(LPCSTR)0x0,(LPBOOL)0x0
                               );
    local_6d0 = 0;
    local_6c8 = 0xf;
    local_6e0[0]._0_1_ = 0;
    FUN_1800039a0(local_6e0,(longlong)iVar7);
    plVar9 = local_6e0;
    if (0xf < local_6c8) {
      plVar9 = (longlong *)CONCAT71(local_6e0[0]._1_7_,(undefined1)local_6e0[0]);
    }
    pWVar12 = &local_780;
    if (7 < local_768) {
      pWVar12 = (LPCWSTR)CONCAT62(uStack_77e,local_780);
    }
    WideCharToMultiByte(0xfde9,0,pWVar12,(int)local_770,(LPSTR)plVar9,iVar7,(LPCSTR)0x0,(LPBOOL)0x0)
    ;
    if (7 < local_768) {
      pvVar3 = (void *)CONCAT62(uStack_77e,local_780);
      pvVar10 = pvVar3;
      if ((0xfff < local_768 * 2 + 2) &&
         (pvVar10 = *(void **)((longlong)pvVar3 + -8),
         0x1f < (ulonglong)((longlong)pvVar3 + (-8 - (longlong)pvVar10)))) {
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(pvVar10);
    }
    local_770 = 0;
    local_768 = 7;
    local_780 = L'\0';
    local_750 = 0;
    local_748 = 7;
    local_760 = L'\0';
    uVar11 = 0xffffffffffffffff;
    do {
      uVar11 = uVar11 + 1;
    } while (local_438[uVar11] != 0);
    FUN_180003830((longlong *)&local_760,local_438,uVar11);
    pWVar12 = &local_760;
    if (7 < local_748) {
      pWVar12 = (LPCWSTR)CONCAT62(uStack_75e,local_760);
    }
    iVar7 = WideCharToMultiByte(0xfde9,0,pWVar12,(int)local_750,(LPSTR)0x0,0,(LPCSTR)0x0,(LPBOOL)0x0
                               );
    local_6f0 = 0;
    local_6e8 = 0xf;
    local_700[0]._0_1_ = 0;
    FUN_1800039a0(local_700,(longlong)iVar7);
    plVar9 = local_700;
    if (0xf < local_6e8) {
      plVar9 = (longlong *)CONCAT71(local_700[0]._1_7_,(undefined1)local_700[0]);
    }
    pWVar12 = &local_760;
    if (7 < local_748) {
      pWVar12 = (LPCWSTR)CONCAT62(uStack_75e,local_760);
    }
    WideCharToMultiByte(0xfde9,0,pWVar12,(int)local_750,(LPSTR)plVar9,iVar7,(LPCSTR)0x0,(LPBOOL)0x0)
    ;
    if (7 < local_748) {
      pvVar3 = (void *)CONCAT62(uStack_75e,local_760);
      pvVar10 = pvVar3;
      if ((0xfff < local_748 * 2 + 2) &&
         (pvVar10 = *(void **)((longlong)pvVar3 + -8),
         0x1f < (ulonglong)((longlong)pvVar3 + (-8 - (longlong)pvVar10)))) {
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(pvVar10);
    }
    local_750 = 0;
    local_748 = 7;
    local_760 = L'\0';
    local_770 = 0;
    local_768 = 7;
    local_780 = L'\0';
    uVar11 = 0xffffffffffffffff;
    do {
      uVar11 = uVar11 + 1;
    } while (local_238[uVar11] != 0);
    FUN_180003830((longlong *)&local_780,local_238,uVar11);
    pWVar12 = &local_780;
    if (7 < local_768) {
      pWVar12 = (LPCWSTR)CONCAT62(uStack_77e,local_780);
    }
    iVar7 = WideCharToMultiByte(0xfde9,0,pWVar12,(int)local_770,(LPSTR)0x0,0,(LPCSTR)0x0,(LPBOOL)0x0
                               );
    local_710 = 0;
    local_708 = 0xf;
    local_720[0]._0_1_ = 0;
    FUN_1800039a0(local_720,(longlong)iVar7);
    plVar9 = local_720;
    if (0xf < local_708) {
      plVar9 = (longlong *)CONCAT71(local_720[0]._1_7_,(undefined1)local_720[0]);
    }
    pWVar12 = &local_780;
    if (7 < local_768) {
      pWVar12 = (LPCWSTR)CONCAT62(uStack_77e,local_780);
    }
    WideCharToMultiByte(0xfde9,0,pWVar12,(int)local_770,(LPSTR)plVar9,iVar7,(LPCSTR)0x0,(LPBOOL)0x0)
    ;
    if (7 < local_768) {
      pvVar3 = (void *)CONCAT62(uStack_77e,local_780);
      pvVar10 = pvVar3;
      if ((0xfff < local_768 * 2 + 2) &&
         (pvVar10 = *(void **)((longlong)pvVar3 + -8),
         0x1f < (ulonglong)((longlong)pvVar3 + (-8 - (longlong)pvVar10)))) {
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(pvVar10);
    }
    local_688 = 0;
    local_680 = 0xf;
    local_698[0] = 0;
    local_668 = 0;
    local_660 = 0xf;
    local_678[0] = 0;
    local_648 = 0;
    local_640 = 0xf;
    local_658[0] = 0;
    plVar9 = local_6e0;
    if (0xf < local_6c8) {
      plVar9 = (longlong *)CONCAT71(local_6e0[0]._1_7_,(undefined1)local_6e0[0]);
    }
    FUN_180002610((longlong *)local_698,plVar9,local_6d0);
    plVar9 = local_700;
    if (0xf < local_6e8) {
      plVar9 = (longlong *)CONCAT71(local_700[0]._1_7_,(undefined1)local_700[0]);
    }
    FUN_180002610((longlong *)local_678,plVar9,local_6f0);
    plVar9 = local_720;
    if (0xf < local_708) {
      plVar9 = (longlong *)CONCAT71(local_720[0]._1_7_,(undefined1)local_720[0]);
    }
    FUN_180002610((longlong *)local_658,plVar9,local_710);
    puVar1 = (undefined8 *)param_1[1];
    if (puVar1 == (undefined8 *)param_1[2]) {
      FUN_180003b00(param_1,puVar1,(undefined8 *)local_698);
    }
    else {
      local_738 = puVar1;
      FUN_180002e60(puVar1,(undefined8 *)local_698);
      FUN_180002e60(puVar1 + 4,(undefined8 *)local_678);
      FUN_180002e60(puVar1 + 8,(undefined8 *)local_658);
      param_1[1] = param_1[1] + 0x60;
    }
    FUN_180002ca0((longlong *)local_698);
    if (0xf < local_708) {
      pvVar3 = (void *)CONCAT71(local_720[0]._1_7_,(undefined1)local_720[0]);
      pvVar10 = pvVar3;
      if ((0xfff < local_708 + 1) &&
         (pvVar10 = *(void **)((longlong)pvVar3 + -8),
         0x1f < (ulonglong)((longlong)pvVar3 + (-8 - (longlong)pvVar10)))) {
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(pvVar10);
    }
    local_710 = 0;
    local_708 = 0xf;
    local_720[0]._0_1_ = 0;
    if (0xf < local_6e8) {
      pvVar3 = (void *)CONCAT71(local_700[0]._1_7_,(undefined1)local_700[0]);
      pvVar10 = pvVar3;
      if ((0xfff < local_6e8 + 1) &&
         (pvVar10 = *(void **)((longlong)pvVar3 + -8),
         0x1f < (ulonglong)((longlong)pvVar3 + (-8 - (longlong)pvVar10)))) {
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(pvVar10);
    }
    local_6f0 = 0;
    local_6e8 = 0xf;
    local_700[0]._0_1_ = 0;
    if (0xf < local_6c8) {
      pvVar3 = (void *)CONCAT71(local_6e0[0]._1_7_,(undefined1)local_6e0[0]);
      pvVar10 = pvVar3;
      if ((0xfff < local_6c8 + 1) &&
         (pvVar10 = *(void **)((longlong)pvVar3 + -8),
         0x1f < (ulonglong)((longlong)pvVar3 + (-8 - (longlong)pvVar10)))) {
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(pvVar10);
    }
  } while( true );
}


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

### EXPORT FUNC 1800037c0 (97 bytes) name=FUN_1800037c0

void FUN_1800037c0(longlong *param_1)

{
  void *pvVar1;
  void *_Memory;
  
  if (7 < (ulonglong)param_1[3]) {
    pvVar1 = (void *)*param_1;
    _Memory = pvVar1;
    if ((0xfff < param_1[3] * 2 + 2U) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  param_1[3] = 7;
  param_1[2] = 0;
  *(undefined2 *)param_1 = 0;
  return;
}


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

### EXPORT FUNC 180003830 (358 bytes) name=FUN_180003830

longlong * FUN_180003830(longlong *param_1,void *param_2,ulonglong param_3)

{
  ulonglong uVar1;
  ulonglong uVar2;
  void *pvVar3;
  longlong lVar4;
  ulonglong uVar5;
  void *_Memory;
  ulonglong uVar6;
  longlong *_Dst;
  void *_Dst_00;
  
  uVar2 = param_1[3];
  if (uVar2 < param_3) {
    if (0x7ffffffffffffffe < param_3) {
                    /* WARNING: Subroutine does not return */
      FUN_180002b40();
    }
    uVar5 = param_3 | 7;
    uVar6 = 0x7ffffffffffffffe;
    if (((uVar5 < 0x7fffffffffffffff) && (uVar2 <= 0x7ffffffffffffffe - (uVar2 >> 1))) &&
       (uVar1 = (uVar2 >> 1) + uVar2, uVar6 = uVar5, uVar5 < uVar1)) {
      uVar6 = uVar1;
    }
    if (0x7fffffffffffffff < uVar6 + 1) {
LAB_180003993:
                    /* WARNING: Subroutine does not return */
      FUN_180001750();
    }
    uVar5 = (uVar6 + 1) * 2;
    _Dst_00 = (void *)0x0;
    if (uVar5 < 0x1000) {
      if (uVar5 != 0) {
        _Dst_00 = (void *)FUN_18000c554(uVar5);
      }
    }
    else {
      if (uVar5 + 0x27 <= uVar5) goto LAB_180003993;
      lVar4 = FUN_18000c554(uVar5 + 0x27);
      if (lVar4 == 0) goto LAB_180003986;
      _Dst_00 = (void *)(lVar4 + 0x27U & 0xffffffffffffffe0);
      *(longlong *)((longlong)_Dst_00 - 8) = lVar4;
    }
    param_1[3] = uVar6;
    param_1[2] = param_3;
    memcpy(_Dst_00,param_2,param_3 * 2);
    *(undefined2 *)(param_3 * 2 + (longlong)_Dst_00) = 0;
    if (7 < uVar2) {
      pvVar3 = (void *)*param_1;
      _Memory = pvVar3;
      if ((0xfff < uVar2 * 2 + 2) &&
         (_Memory = *(void **)((longlong)pvVar3 + -8),
         0x1f < (ulonglong)((longlong)pvVar3 + (-8 - (longlong)_Memory)))) {
LAB_180003986:
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(_Memory);
    }
    *param_1 = (longlong)_Dst_00;
  }
  else {
    _Dst = param_1;
    if (7 < uVar2) {
      _Dst = (longlong *)*param_1;
    }
    param_1[2] = param_3;
    memmove(_Dst,param_2,param_3 * 2);
    *(undefined2 *)(param_3 * 2 + (longlong)_Dst) = 0;
  }
  return param_1;
}


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

### EXPORT FUNC 1800039a0 (349 bytes) name=FUN_1800039a0

longlong * FUN_1800039a0(longlong *param_1,ulonglong param_2)

{
  ulonglong uVar1;
  ulonglong uVar2;
  void *pvVar3;
  longlong lVar4;
  ulonglong uVar5;
  size_t sVar6;
  void *_Memory;
  longlong *_Dst;
  ulonglong uVar7;
  void *_Dst_00;
  
  uVar2 = param_1[3];
  if (param_2 <= uVar2) {
    _Dst = param_1;
    if (0xf < uVar2) {
      _Dst = (longlong *)*param_1;
    }
    param_1[2] = param_2;
    memset(_Dst,0,param_2);
    *(undefined1 *)(param_2 + (longlong)_Dst) = 0;
    return param_1;
  }
  if (0x7fffffffffffffff < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_180002b40();
  }
  uVar5 = param_2 | 0xf;
  uVar7 = 0x7fffffffffffffff;
  if (((uVar5 < 0x8000000000000000) && (uVar2 <= 0x7fffffffffffffff - (uVar2 >> 1))) &&
     (uVar1 = (uVar2 >> 1) + uVar2, uVar7 = uVar5, uVar5 < uVar1)) {
    uVar7 = uVar1;
  }
  sVar6 = uVar7 + 1;
  if (uVar7 == 0xffffffffffffffff) {
    sVar6 = 0xffffffffffffffff;
  }
  if (sVar6 < 0x1000) {
    if (sVar6 == 0) {
      _Dst_00 = (void *)0x0;
    }
    else {
      _Dst_00 = (void *)FUN_18000c554(sVar6);
    }
  }
  else {
    if (sVar6 + 0x27 <= sVar6) {
                    /* WARNING: Subroutine does not return */
      FUN_180001750();
    }
    lVar4 = FUN_18000c554(sVar6 + 0x27);
    if (lVar4 == 0) goto LAB_180003aed;
    _Dst_00 = (void *)(lVar4 + 0x27U & 0xffffffffffffffe0);
    *(longlong *)((longlong)_Dst_00 - 8) = lVar4;
  }
  param_1[2] = param_2;
  param_1[3] = uVar7;
  memset(_Dst_00,0,param_2);
  *(undefined1 *)((longlong)_Dst_00 + param_2) = 0;
  if (0xf < uVar2) {
    pvVar3 = (void *)*param_1;
    _Memory = pvVar3;
    if ((0xfff < uVar2 + 1) &&
       (_Memory = *(void **)((longlong)pvVar3 + -8),
       0x1f < (ulonglong)((longlong)pvVar3 + (-8 - (longlong)_Memory)))) {
LAB_180003aed:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  *param_1 = (longlong)_Dst_00;
  return param_1;
}


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

### EXPORT FUNC 180003b00 (580 bytes) name=FUN_180003b00

undefined8 * FUN_180003b00(longlong *param_1,undefined8 *param_2,undefined8 *param_3)

{
  ulonglong uVar1;
  longlong lVar2;
  ulonglong uVar3;
  longlong lVar4;
  undefined8 *puVar5;
  longlong lVar6;
  undefined8 *puVar7;
  longlong *plVar8;
  longlong *plVar9;
  undefined8 *puVar10;
  undefined8 *puVar11;
  undefined8 *puVar12;
  ulonglong uVar13;
  
  lVar4 = *param_1;
  lVar6 = ((longlong)param_2 - lVar4) / 6 + ((longlong)param_2 - lVar4 >> 0x3f);
  lVar2 = (param_1[1] - lVar4) / 0x60;
  if (lVar2 == 0x2aaaaaaaaaaaaaa) {
                    /* WARNING: Subroutine does not return */
    FUN_180002b80();
  }
  uVar1 = lVar2 + 1;
  uVar13 = (param_1[2] - lVar4) / 0x60;
  uVar3 = uVar1;
  if ((uVar13 <= 0x2aaaaaaaaaaaaaa - (uVar13 >> 1)) &&
     (uVar3 = (uVar13 >> 1) + uVar13, uVar3 < uVar1)) {
    uVar3 = uVar1;
  }
  if (0x2aaaaaaaaaaaaaa < uVar3) {
LAB_180003d3b:
                    /* WARNING: Subroutine does not return */
    FUN_180001750();
  }
  uVar13 = uVar3 * 0x60;
  if (uVar13 < 0x1000) {
    if (uVar13 == 0) {
      puVar10 = (undefined8 *)0x0;
    }
    else {
      puVar10 = (undefined8 *)FUN_18000c554(uVar13);
    }
  }
  else {
    if (uVar13 + 0x27 <= uVar13) goto LAB_180003d3b;
    lVar4 = FUN_18000c554(uVar13 + 0x27);
    if (lVar4 == 0) goto LAB_180003d34;
    puVar10 = (undefined8 *)(lVar4 + 0x27U & 0xffffffffffffffe0);
    puVar10[-1] = lVar4;
  }
  puVar12 = puVar10 + ((lVar6 >> 4) - (lVar6 >> 0x3f)) * 0xc;
  FUN_180002e60(puVar12,param_3);
  FUN_180002e60(puVar12 + 4,param_3 + 4);
  FUN_180002e60(puVar12 + 8,param_3 + 8);
  puVar7 = (undefined8 *)param_1[1];
  puVar5 = (undefined8 *)*param_1;
  puVar11 = puVar10;
  if (param_2 != puVar7) {
    FUN_180003d50(puVar5,param_2,puVar10);
    puVar5 = param_2;
    puVar7 = (undefined8 *)param_1[1];
    puVar11 = puVar12 + 0xc;
  }
  FUN_180003d50(puVar5,puVar7,puVar11);
  plVar8 = (longlong *)*param_1;
  if (plVar8 != (longlong *)0x0) {
    plVar9 = (longlong *)param_1[1];
    if (plVar8 != plVar9) {
      do {
        FUN_180002ca0(plVar8);
        plVar8 = plVar8 + 0xc;
      } while (plVar8 != plVar9);
      plVar8 = (longlong *)*param_1;
    }
    plVar9 = plVar8;
    if ((0xfff < (ulonglong)(((param_1[2] - (longlong)plVar8) / 0x60) * 0x60)) &&
       (plVar9 = (longlong *)plVar8[-1],
       0x1f < (ulonglong)((longlong)plVar8 + (-8 - (longlong)plVar9)))) {
LAB_180003d34:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(plVar9);
  }
  *param_1 = (longlong)puVar10;
  param_1[1] = (longlong)(puVar10 + uVar1 * 0xc);
  param_1[2] = (longlong)(puVar10 + uVar3 * 0xc);
  return puVar12;
}


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

### EXPORT FUNC 180003d50 (202 bytes) name=FUN_180003d50

void FUN_180003d50(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)

{
  undefined8 *puVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  undefined8 uVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  
  if (param_1 != param_2) {
    puVar5 = param_3;
    puVar6 = param_1 + 7;
    do {
      *(undefined8 *)((longlong)param_3 + (-0x28 - (longlong)param_1) + (longlong)puVar6) = 0;
      *(undefined8 *)((longlong)param_3 + (-0x20 - (longlong)param_1) + (longlong)puVar6) = 0;
      uVar4 = puVar6[-6];
      puVar1 = puVar6 + 0xc;
      puVar2 = puVar6 + 5;
      *puVar5 = puVar6[-7];
      puVar5[1] = uVar4;
      uVar4 = puVar6[-4];
      puVar5[2] = puVar6[-5];
      puVar5[3] = uVar4;
      puVar6[-5] = 0;
      puVar5 = puVar5 + 0xc;
      puVar6[-4] = 0xf;
      *(undefined1 *)(puVar6 + -7) = 0;
      *(undefined8 *)((longlong)param_3 + (-0x68 - (longlong)param_1) + (longlong)puVar1) = 0;
      *(undefined8 *)((longlong)param_3 + (-0x60 - (longlong)param_1) + (longlong)puVar1) = 0;
      uVar4 = puVar6[-2];
      puVar3 = (undefined8 *)((longlong)param_3 + (-0x78 - (longlong)param_1) + (longlong)puVar1);
      *puVar3 = puVar6[-3];
      puVar3[1] = uVar4;
      uVar4 = *puVar6;
      puVar3 = (undefined8 *)((longlong)param_3 + (-0x68 - (longlong)param_1) + (longlong)puVar1);
      *puVar3 = puVar6[-1];
      puVar3[1] = uVar4;
      puVar6[-1] = 0;
      *puVar6 = 0xf;
      *(undefined1 *)(puVar6 + -3) = 0;
      *(undefined8 *)((longlong)param_3 + (-0x48 - (longlong)param_1) + (longlong)puVar1) = 0;
      *(undefined8 *)((longlong)param_3 + (-0x40 - (longlong)param_1) + (longlong)puVar1) = 0;
      uVar4 = puVar6[2];
      puVar3 = (undefined8 *)((longlong)param_3 + (-0x58 - (longlong)param_1) + (longlong)puVar1);
      *puVar3 = puVar6[1];
      puVar3[1] = uVar4;
      uVar4 = puVar6[4];
      puVar3 = (undefined8 *)((longlong)param_3 + (-0x48 - (longlong)param_1) + (longlong)puVar1);
      *puVar3 = puVar6[3];
      puVar3[1] = uVar4;
      puVar6[3] = 0;
      puVar6[4] = 0xf;
      *(undefined1 *)(puVar6 + 1) = 0;
      puVar6 = puVar1;
    } while (puVar2 != param_2);
  }
  return;
}


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

### EXPORT FUNC 180003e20 (100 bytes) name=FUN_180003e20

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

undefined8 * FUN_180003e20(undefined8 *param_1,undefined8 param_2)

{
  undefined1 auStack_48 [32];
  undefined8 local_28;
  undefined1 local_20;
  ulonglong local_18;
  
  local_18 = DAT_180015010 ^ (ulonglong)auStack_48;
  local_20 = 1;
  *param_1 = std::exception::vftable;
  param_1[1] = 0;
  param_1[2] = 0;
  local_28 = param_2;
  __std_exception_copy(&local_28);
  *param_1 = std::invalid_argument::vftable;
  return param_1;
}


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

### EXPORT FUNC 180003e90 (668 bytes) name=FUN_180003e90

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

undefined8 * FUN_180003e90(undefined8 *param_1)

{
  longlong *plVar1;
  basic_ostream<char,std::char_traits<char>_> *pbVar2;
  void *pvVar3;
  void *pvVar4;
  size_t sVar5;
  undefined1 auStack_188 [32];
  undefined4 local_168;
  undefined1 local_160;
  undefined7 uStack_15f;
  undefined8 uStack_158;
  undefined8 local_150;
  ulonglong uStack_148;
  undefined8 *local_140;
  int iStack_12c;
  undefined *local_128 [2];
  undefined *local_118;
  undefined **local_110;
  basic_iostream<char,std::char_traits<char>_> local_108 [16];
  longlong *local_f8;
  longlong *local_f0;
  longlong *local_d8;
  ulonglong *local_d0;
  int *local_c0;
  ulonglong local_a8;
  uint local_a0;
  basic_ios<char,std::char_traits<char>_> local_90 [104];
  ulonglong local_28;
  ulonglong uVar6;
  
  local_28 = DAT_180015010 ^ (ulonglong)auStack_188;
  local_168 = 0;
  param_1[1] = 0;
  param_1[2] = 0;
  *param_1 = serial::SerialException::vftable;
  plVar1 = param_1 + 3;
  param_1[5] = 0;
  param_1[6] = 0xf;
  *(undefined1 *)plVar1 = 0;
  local_140 = param_1;
  memset(local_128,0,0xf8);
  local_128[0] = &DAT_18000fcb8;
  local_118 = &DAT_18000fba8;
  std::basic_ios<char,std::char_traits<char>_>::basic_ios<char,std::char_traits<char>_>(local_90);
  local_168 = 1;
  std::basic_iostream<char,std::char_traits<char>_>::basic_iostream<char,std::char_traits<char>_>
            ((basic_iostream<char,std::char_traits<char>_> *)local_128,
             (basic_streambuf<char,std::char_traits<char>_> *)&local_110);
  *(undefined ***)((longlong)local_128 + (longlong)*(int *)(local_128[0] + 4)) =
       std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>_>::vftable;
  *(int *)((longlong)&iStack_12c + (longlong)*(int *)(local_128[0] + 4)) =
       *(int *)(local_128[0] + 4) + -0x98;
  std::basic_streambuf<char,std::char_traits<char>_>::basic_streambuf<char,std::char_traits<char>_>
            ((basic_streambuf<char,std::char_traits<char>_> *)&local_110);
  local_110 = std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char>_>::vftable;
  local_a8 = 0;
  local_a0 = 0;
  pbVar2 = FUN_180006310((basic_ostream<char,std::char_traits<char>_> *)&local_118,
                         "SerialException ");
  pbVar2 = FUN_180006310(pbVar2,"Serial port already open.");
  FUN_180006310(pbVar2," failed.");
  local_150 = 0;
  uStack_148 = 0xf;
  local_160 = 0;
  local_168 = 5;
  if (((local_a0 & 2) == 0) && (uVar6 = *local_d0, uVar6 != 0)) {
    pvVar4 = (void *)*local_f0;
    if (uVar6 < local_a8) {
      uVar6 = local_a8;
    }
    sVar5 = uVar6 - (longlong)pvVar4;
LAB_18000401b:
    FUN_180002610((longlong *)&local_160,pvVar4,sVar5);
  }
  else if (((local_a0 & 4) == 0) && (*local_d8 != 0)) {
    pvVar4 = (void *)*local_f8;
    sVar5 = ((longlong)*local_c0 - (longlong)pvVar4) + *local_d8;
    goto LAB_18000401b;
  }
  if (plVar1 == (longlong *)&local_160) {
    if (0xf < uStack_148) {
      pvVar3 = (void *)CONCAT71(uStack_15f,local_160);
      pvVar4 = pvVar3;
      if ((0xfff < uStack_148 + 1) &&
         (pvVar4 = *(void **)((longlong)pvVar3 + -8),
         0x1f < (ulonglong)((longlong)pvVar3 + (-8 - (longlong)pvVar4)))) goto LAB_1800040b7;
      free(pvVar4);
    }
  }
  else {
    if (0xf < (ulonglong)param_1[6]) {
      pvVar4 = (void *)*plVar1;
      pvVar3 = pvVar4;
      if ((0xfff < param_1[6] + 1) &&
         (pvVar3 = *(void **)((longlong)pvVar4 + -8),
         0x1f < (ulonglong)((longlong)pvVar4 + (-8 - (longlong)pvVar3)))) {
LAB_1800040b7:
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(pvVar3);
    }
    param_1[6] = 0xf;
    *(undefined1 *)plVar1 = 0;
    *plVar1 = CONCAT71(uStack_15f,local_160);
    param_1[4] = uStack_158;
    param_1[5] = local_150;
    param_1[6] = uStack_148;
  }
  *(undefined ***)((longlong)local_128 + (longlong)*(int *)(local_128[0] + 4)) =
       std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>_>::vftable;
  *(int *)((longlong)&iStack_12c + (longlong)*(int *)(local_128[0] + 4)) =
       *(int *)(local_128[0] + 4) + -0x98;
  FUN_180005f90((basic_streambuf<char,std::char_traits<char>_> *)&local_110);
  std::basic_iostream<char,std::char_traits<char>_>::~basic_iostream<char,std::char_traits<char>_>
            (local_108);
  std::basic_ios<char,std::char_traits<char>_>::~basic_ios<char,std::char_traits<char>_>(local_90);
  return param_1;
}


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

### EXPORT FUNC 180004130 (53 bytes) name=FUN_180004130

undefined8 * FUN_180004130(undefined8 *param_1,longlong param_2)

{
  param_1[1] = 0;
  param_1[2] = 0;
  *param_1 = serial::SerialException::vftable;
  FUN_180002e60(param_1 + 3,(undefined8 *)(param_2 + 0x18));
  return param_1;
}


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

### EXPORT FUNC 180004170 (126 bytes) name=FUN_180004170

void FUN_180004170(undefined8 *param_1)

{
  void *pvVar1;
  void *_Memory;
  
  *param_1 = serial::SerialException::vftable;
  if (0xf < (ulonglong)param_1[6]) {
    pvVar1 = (void *)param_1[3];
    _Memory = pvVar1;
    if ((0xfff < param_1[6] + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  param_1[5] = 0;
  param_1[6] = 0xf;
  *(undefined1 *)(param_1 + 3) = 0;
  *param_1 = std::exception::vftable;
                    /* WARNING: Could not recover jumptable at 0x0001800041e1. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  __std_exception_destroy(param_1 + 1);
  return;
}


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

### EXPORT FUNC 1800041f0 (15 bytes) name=FUN_1800041f0

longlong * FUN_1800041f0(longlong param_1)

{
  longlong *plVar1;
  
  plVar1 = (longlong *)(param_1 + 0x18);
  if (0xf < *(ulonglong *)(param_1 + 0x30)) {
    plVar1 = (longlong *)*plVar1;
  }
  return plVar1;
}


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

### EXPORT FUNC 180004200 (159 bytes) name=FUN_180004200

undefined8 * FUN_180004200(undefined8 *param_1,uint param_2)

{
  void *pvVar1;
  void *_Memory;
  
  *param_1 = serial::SerialException::vftable;
  if (0xf < (ulonglong)param_1[6]) {
    pvVar1 = (void *)param_1[3];
    _Memory = pvVar1;
    if ((0xfff < param_1[6] + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  param_1[5] = 0;
  param_1[6] = 0xf;
  *(undefined1 *)(param_1 + 3) = 0;
  *param_1 = std::exception::vftable;
  __std_exception_destroy(param_1 + 1);
  if ((param_2 & 1) != 0) {
    free(param_1);
  }
  return param_1;
}


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

### EXPORT FUNC 1800042a0 (95 bytes) name=FUN_1800042a0

void FUN_1800042a0(longlong *param_1)

{
  basic_ios<char,std::char_traits<char>_> *this;
  
  this = (basic_ios<char,std::char_traits<char>_> *)(param_1 + 0x13);
  *(undefined ***)(this + (longlong)*(int *)(*param_1 + 4) + -0x98) =
       std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>_>::vftable;
  *(int *)(this + (longlong)*(int *)(*param_1 + 4) + -0x9c) = *(int *)(*param_1 + 4) + -0x98;
  FUN_180005f90((basic_streambuf<char,std::char_traits<char>_> *)(param_1 + 3));
  std::basic_iostream<char,std::char_traits<char>_>::~basic_iostream<char,std::char_traits<char>_>
            ((basic_iostream<char,std::char_traits<char>_> *)(param_1 + 4));
                    /* WARNING: Could not recover jumptable at 0x0001800042f8. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  std::basic_ios<char,std::char_traits<char>_>::~basic_ios<char,std::char_traits<char>_>(this);
  return;
}


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

### EXPORT FUNC 180004300 (13 bytes) name=FUN_180004300

void FUN_180004300(void *param_1)

{
  memset(param_1,0,0xf8);
  return;
}


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

### EXPORT FUNC 180004310 (843 bytes) name=FUN_180004310

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

undefined8 * FUN_180004310(undefined8 *param_1,longlong *param_2,undefined4 param_3,char *param_4)

{
  longlong *plVar1;
  basic_ostream<char,std::char_traits<char>_> *pbVar2;
  basic_ostream<char,struct_std::char_traits<char>_> *pbVar3;
  void *pvVar4;
  void *pvVar5;
  char *pcVar6;
  size_t sVar7;
  undefined1 auStack_1b8 [32];
  undefined4 local_198;
  undefined1 local_190;
  undefined7 uStack_18f;
  undefined8 uStack_188;
  undefined8 local_180;
  ulonglong uStack_178;
  undefined8 *local_168;
  undefined8 local_150;
  undefined *local_148 [2];
  undefined *local_138;
  undefined **local_130;
  basic_iostream<char,std::char_traits<char>_> local_128 [16];
  longlong *local_118;
  longlong *local_110;
  longlong *local_f8;
  ulonglong *local_f0;
  int *local_e0;
  ulonglong local_c8;
  uint local_c0;
  basic_ios<char,std::char_traits<char>_> local_b0 [104];
  ulonglong local_48;
  ulonglong uVar8;
  
  local_48 = DAT_180015010 ^ (ulonglong)auStack_1b8;
  local_198 = 0;
  param_1[1] = 0;
  param_1[2] = 0;
  *param_1 = serial::IOException::vftable;
  local_168 = param_1;
  local_150 = param_2;
  FUN_180002e60(param_1 + 3,param_2);
  *(undefined4 *)(param_1 + 7) = param_3;
  plVar1 = param_1 + 8;
  param_1[10] = 0;
  param_1[0xb] = 0xf;
  *(undefined1 *)plVar1 = 0;
  *(undefined4 *)(param_1 + 0xc) = 0;
  memset(local_148,0,0xf8);
  local_148[0] = &DAT_18000fcb8;
  local_138 = &DAT_18000fba8;
  std::basic_ios<char,std::char_traits<char>_>::basic_ios<char,std::char_traits<char>_>(local_b0);
  local_198 = 1;
  std::basic_iostream<char,std::char_traits<char>_>::basic_iostream<char,std::char_traits<char>_>
            ((basic_iostream<char,std::char_traits<char>_> *)local_148,
             (basic_streambuf<char,std::char_traits<char>_> *)&local_130);
  *(undefined ***)((longlong)local_148 + (longlong)*(int *)(local_148[0] + 4)) =
       std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>_>::vftable;
  *(int *)((longlong)local_148 + (longlong)*(int *)(local_148[0] + 4) + -4) =
       *(int *)(local_148[0] + 4) + -0x98;
  std::basic_streambuf<char,std::char_traits<char>_>::basic_streambuf<char,std::char_traits<char>_>
            ((basic_streambuf<char,std::char_traits<char>_> *)&local_130);
  local_130 = std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char>_>::vftable;
  local_c8 = 0;
  local_c0 = 0;
  pbVar2 = FUN_180006310((basic_ostream<char,std::char_traits<char>_> *)&local_138,"IO Exception: ")
  ;
  FUN_180006310(pbVar2,param_4);
  pbVar2 = FUN_180006310((basic_ostream<char,std::char_traits<char>_> *)&local_138,", file ");
  pcVar6 = (char *)(param_1 + 3);
  if (0xf < (ulonglong)param_1[6]) {
    pcVar6 = (char *)param_1[3];
  }
  pbVar2 = FUN_180006920(pbVar2,pcVar6,param_1[5]);
  pbVar2 = FUN_180006310(pbVar2,", line ");
  pbVar3 = std::basic_ostream<char,std::char_traits<char>_>::operator<<
                     (pbVar2,*(int *)(param_1 + 7));
  FUN_180006310((basic_ostream<char,std::char_traits<char>_> *)pbVar3,".");
  local_180 = 0;
  uStack_178 = 0xf;
  local_190 = 0;
  local_198 = 5;
  if (((local_c0 & 2) == 0) && (uVar8 = *local_f0, uVar8 != 0)) {
    pvVar4 = (void *)*local_110;
    if (uVar8 < local_c8) {
      uVar8 = local_c8;
    }
    sVar7 = uVar8 - (longlong)pvVar4;
LAB_1800044fe:
    FUN_180002610((longlong *)&local_190,pvVar4,sVar7);
  }
  else if (((local_c0 & 4) == 0) && (*local_f8 != 0)) {
    pvVar4 = (void *)*local_118;
    sVar7 = ((longlong)*local_e0 - (longlong)pvVar4) + *local_f8;
    goto LAB_1800044fe;
  }
  if (plVar1 == (longlong *)&local_190) {
    if (0xf < uStack_178) {
      pvVar5 = (void *)CONCAT71(uStack_18f,local_190);
      pvVar4 = pvVar5;
      if ((0xfff < uStack_178 + 1) &&
         (pvVar4 = *(void **)((longlong)pvVar5 + -8),
         0x1f < (ulonglong)((longlong)pvVar5 + (-8 - (longlong)pvVar4)))) goto LAB_18000459b;
      free(pvVar4);
    }
  }
  else {
    if (0xf < (ulonglong)param_1[0xb]) {
      pvVar4 = (void *)*plVar1;
      pvVar5 = pvVar4;
      if ((0xfff < param_1[0xb] + 1) &&
         (pvVar5 = *(void **)((longlong)pvVar4 + -8),
         0x1f < (ulonglong)((longlong)pvVar4 + (-8 - (longlong)pvVar5)))) {
LAB_18000459b:
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(pvVar5);
    }
    param_1[0xb] = 0xf;
    *(undefined1 *)plVar1 = 0;
    *plVar1 = CONCAT71(uStack_18f,local_190);
    param_1[9] = uStack_188;
    param_1[10] = local_180;
    param_1[0xb] = uStack_178;
  }
  *(undefined ***)((longlong)local_148 + (longlong)*(int *)(local_148[0] + 4)) =
       std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>_>::vftable;
  *(int *)((longlong)local_148 + (longlong)*(int *)(local_148[0] + 4) + -4) =
       *(int *)(local_148[0] + 4) + -0x98;
  FUN_180005f90((basic_streambuf<char,std::char_traits<char>_> *)&local_130);
  std::basic_iostream<char,std::char_traits<char>_>::~basic_iostream<char,std::char_traits<char>_>
            (local_128);
  std::basic_ios<char,std::char_traits<char>_>::~basic_ios<char,std::char_traits<char>_>(local_b0);
  if (0xf < (ulonglong)param_2[3]) {
    pvVar4 = (void *)*param_2;
    pvVar5 = pvVar4;
    if ((0xfff < param_2[3] + 1U) &&
       (pvVar5 = *(void **)((longlong)pvVar4 + -8),
       0x1f < (ulonglong)((longlong)pvVar4 + (-8 - (longlong)pvVar5)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(pvVar5);
  }
  param_2[2] = 0;
  param_2[3] = 0xf;
  *(undefined1 *)param_2 = 0;
  return param_1;
}


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

### EXPORT FUNC 180004660 (205 bytes) name=FUN_180004660

void FUN_180004660(undefined8 *param_1)

{
  void *pvVar1;
  void *pvVar2;
  
  *param_1 = serial::IOException::vftable;
  if (0xf < (ulonglong)param_1[0xb]) {
    pvVar1 = (void *)param_1[8];
    pvVar2 = pvVar1;
    if ((0xfff < param_1[0xb] + 1) &&
       (pvVar2 = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)pvVar2)))) goto LAB_180004727;
    free(pvVar2);
  }
  param_1[10] = 0;
  param_1[0xb] = 0xf;
  *(undefined1 *)(param_1 + 8) = 0;
  if (0xf < (ulonglong)param_1[6]) {
    pvVar1 = (void *)param_1[3];
    pvVar2 = pvVar1;
    if ((0xfff < param_1[6] + 1) &&
       (pvVar2 = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)pvVar2)))) {
LAB_180004727:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(pvVar2);
  }
  param_1[5] = 0;
  param_1[6] = 0xf;
  *(undefined1 *)(param_1 + 3) = 0;
  *param_1 = std::exception::vftable;
                    /* WARNING: Could not recover jumptable at 0x000180004720. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  __std_exception_destroy(param_1 + 1);
  return;
}


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

### EXPORT FUNC 180004730 (97 bytes) name=FUN_180004730

undefined8 * FUN_180004730(undefined8 *param_1,longlong param_2)

{
  param_1[1] = 0;
  param_1[2] = 0;
  *param_1 = serial::IOException::vftable;
  param_1[5] = 0;
  param_1[6] = 0xf;
  *(undefined1 *)(param_1 + 3) = 0;
  *(undefined4 *)(param_1 + 7) = *(undefined4 *)(param_2 + 0x38);
  FUN_180002e60(param_1 + 8,(undefined8 *)(param_2 + 0x40));
  *(undefined4 *)(param_1 + 0xc) = *(undefined4 *)(param_2 + 0x60);
  return param_1;
}


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

### EXPORT FUNC 1800047a0 (15 bytes) name=FUN_1800047a0

longlong * FUN_1800047a0(longlong param_1)

{
  longlong *plVar1;
  
  plVar1 = (longlong *)(param_1 + 0x40);
  if (0xf < *(ulonglong *)(param_1 + 0x58)) {
    plVar1 = (longlong *)*plVar1;
  }
  return plVar1;
}


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

### EXPORT FUNC 1800047b0 (238 bytes) name=FUN_1800047b0

undefined8 * FUN_1800047b0(undefined8 *param_1,uint param_2)

{
  void *pvVar1;
  void *pvVar2;
  
  *param_1 = serial::IOException::vftable;
  if (0xf < (ulonglong)param_1[0xb]) {
    pvVar1 = (void *)param_1[8];
    pvVar2 = pvVar1;
    if ((0xfff < param_1[0xb] + 1) &&
       (pvVar2 = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)pvVar2)))) goto LAB_180004898;
    free(pvVar2);
  }
  param_1[10] = 0;
  param_1[0xb] = 0xf;
  *(undefined1 *)(param_1 + 8) = 0;
  if (0xf < (ulonglong)param_1[6]) {
    pvVar1 = (void *)param_1[3];
    pvVar2 = pvVar1;
    if ((0xfff < param_1[6] + 1) &&
       (pvVar2 = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)pvVar2)))) {
LAB_180004898:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(pvVar2);
  }
  param_1[5] = 0;
  param_1[6] = 0xf;
  *(undefined1 *)(param_1 + 3) = 0;
  *param_1 = std::exception::vftable;
  __std_exception_destroy(param_1 + 1);
  if ((param_2 & 1) != 0) {
    free(param_1);
  }
  return param_1;
}


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

### EXPORT FUNC 1800048a0 (667 bytes) name=FUN_1800048a0

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

undefined8 * FUN_1800048a0(undefined8 *param_1,char *param_2)

{
  longlong *plVar1;
  basic_ostream<char,std::char_traits<char>_> *pbVar2;
  void *pvVar3;
  void *pvVar4;
  size_t sVar5;
  undefined1 auStack_198 [32];
  undefined4 local_178;
  undefined1 local_170;
  undefined7 uStack_16f;
  undefined8 uStack_168;
  undefined8 local_160;
  ulonglong uStack_158;
  undefined8 *local_150;
  int iStack_13c;
  undefined *local_138 [2];
  undefined *local_128;
  undefined **local_120;
  basic_iostream<char,std::char_traits<char>_> local_118 [16];
  longlong *local_108;
  longlong *local_100;
  longlong *local_e8;
  ulonglong *local_e0;
  int *local_d0;
  ulonglong local_b8;
  uint local_b0;
  basic_ios<char,std::char_traits<char>_> local_a0 [104];
  ulonglong local_38;
  ulonglong uVar6;
  
  local_38 = DAT_180015010 ^ (ulonglong)auStack_198;
  local_178 = 0;
  param_1[1] = 0;
  param_1[2] = 0;
  *param_1 = serial::PortNotOpenedException::vftable;
  plVar1 = param_1 + 3;
  param_1[5] = 0;
  param_1[6] = 0xf;
  *(undefined1 *)plVar1 = 0;
  local_150 = param_1;
  memset(local_138,0,0xf8);
  local_138[0] = &DAT_18000fcb8;
  local_128 = &DAT_18000fba8;
  std::basic_ios<char,std::char_traits<char>_>::basic_ios<char,std::char_traits<char>_>(local_a0);
  local_178 = 1;
  std::basic_iostream<char,std::char_traits<char>_>::basic_iostream<char,std::char_traits<char>_>
            ((basic_iostream<char,std::char_traits<char>_> *)local_138,
             (basic_streambuf<char,std::char_traits<char>_> *)&local_120);
  *(undefined ***)((longlong)local_138 + (longlong)*(int *)(local_138[0] + 4)) =
       std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>_>::vftable;
  *(int *)((longlong)&iStack_13c + (longlong)*(int *)(local_138[0] + 4)) =
       *(int *)(local_138[0] + 4) + -0x98;
  std::basic_streambuf<char,std::char_traits<char>_>::basic_streambuf<char,std::char_traits<char>_>
            ((basic_streambuf<char,std::char_traits<char>_> *)&local_120);
  local_120 = std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char>_>::vftable;
  local_b8 = 0;
  local_b0 = 0;
  pbVar2 = FUN_180006310((basic_ostream<char,std::char_traits<char>_> *)&local_128,
                         "PortNotOpenedException ");
  pbVar2 = FUN_180006310(pbVar2,param_2);
  FUN_180006310(pbVar2," failed.");
  local_160 = 0;
  uStack_158 = 0xf;
  local_170 = 0;
  local_178 = 5;
  if (((local_b0 & 2) == 0) && (uVar6 = *local_e0, uVar6 != 0)) {
    pvVar4 = (void *)*local_100;
    if (uVar6 < local_b8) {
      uVar6 = local_b8;
    }
    sVar5 = uVar6 - (longlong)pvVar4;
LAB_180004a2b:
    FUN_180002610((longlong *)&local_170,pvVar4,sVar5);
  }
  else if (((local_b0 & 4) == 0) && (*local_e8 != 0)) {
    pvVar4 = (void *)*local_108;
    sVar5 = ((longlong)*local_d0 - (longlong)pvVar4) + *local_e8;
    goto LAB_180004a2b;
  }
  if (plVar1 == (longlong *)&local_170) {
    if (0xf < uStack_158) {
      pvVar3 = (void *)CONCAT71(uStack_16f,local_170);
      pvVar4 = pvVar3;
      if ((0xfff < uStack_158 + 1) &&
         (pvVar4 = *(void **)((longlong)pvVar3 + -8),
         0x1f < (ulonglong)((longlong)pvVar3 + (-8 - (longlong)pvVar4)))) goto LAB_180004ac7;
      free(pvVar4);
    }
  }
  else {
    if (0xf < (ulonglong)param_1[6]) {
      pvVar4 = (void *)*plVar1;
      pvVar3 = pvVar4;
      if ((0xfff < param_1[6] + 1) &&
         (pvVar3 = *(void **)((longlong)pvVar4 + -8),
         0x1f < (ulonglong)((longlong)pvVar4 + (-8 - (longlong)pvVar3)))) {
LAB_180004ac7:
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(pvVar3);
    }
    param_1[6] = 0xf;
    *(undefined1 *)plVar1 = 0;
    *plVar1 = CONCAT71(uStack_16f,local_170);
    param_1[4] = uStack_168;
    param_1[5] = local_160;
    param_1[6] = uStack_158;
  }
  *(undefined ***)((longlong)local_138 + (longlong)*(int *)(local_138[0] + 4)) =
       std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>_>::vftable;
  *(int *)((longlong)&iStack_13c + (longlong)*(int *)(local_138[0] + 4)) =
       *(int *)(local_138[0] + 4) + -0x98;
  FUN_180005f90((basic_streambuf<char,std::char_traits<char>_> *)&local_120);
  std::basic_iostream<char,std::char_traits<char>_>::~basic_iostream<char,std::char_traits<char>_>
            (local_118);
  std::basic_ios<char,std::char_traits<char>_>::~basic_ios<char,std::char_traits<char>_>(local_a0);
  return param_1;
}


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

### EXPORT FUNC 180004b40 (53 bytes) name=FUN_180004b40

undefined8 * FUN_180004b40(undefined8 *param_1,longlong param_2)

{
  param_1[1] = 0;
  param_1[2] = 0;
  *param_1 = serial::PortNotOpenedException::vftable;
  FUN_180002e60(param_1 + 3,(undefined8 *)(param_2 + 0x18));
  return param_1;
}


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

### EXPORT FUNC 180004b80 (126 bytes) name=FUN_180004b80

void FUN_180004b80(undefined8 *param_1)

{
  void *pvVar1;
  void *_Memory;
  
  *param_1 = serial::PortNotOpenedException::vftable;
  if (0xf < (ulonglong)param_1[6]) {
    pvVar1 = (void *)param_1[3];
    _Memory = pvVar1;
    if ((0xfff < param_1[6] + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  param_1[5] = 0;
  param_1[6] = 0xf;
  *(undefined1 *)(param_1 + 3) = 0;
  *param_1 = std::exception::vftable;
                    /* WARNING: Could not recover jumptable at 0x000180004bf1. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  __std_exception_destroy(param_1 + 1);
  return;
}


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

### EXPORT FUNC 180004c00 (159 bytes) name=FUN_180004c00

undefined8 * FUN_180004c00(undefined8 *param_1,uint param_2)

{
  void *pvVar1;
  void *_Memory;
  
  *param_1 = serial::PortNotOpenedException::vftable;
  if (0xf < (ulonglong)param_1[6]) {
    pvVar1 = (void *)param_1[3];
    _Memory = pvVar1;
    if ((0xfff < param_1[6] + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  param_1[5] = 0;
  param_1[6] = 0xf;
  *(undefined1 *)(param_1 + 3) = 0;
  *param_1 = std::exception::vftable;
  __std_exception_destroy(param_1 + 1);
  if ((param_2 & 1) != 0) {
    free(param_1);
  }
  return param_1;
}


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

### EXPORT FUNC 180004ca0 (744 bytes) name=FUN_180004ca0

undefined8 * FUN_180004ca0(undefined8 *param_1,undefined8 *param_2)

{
  ulonglong *puVar1;
  longlong lVar2;
  ulonglong uVar3;
  ulonglong uVar4;
  undefined8 uVar5;
  short *psVar6;
  ulonglong uVar7;
  void *_Dst;
  undefined8 *puVar8;
  longlong lVar9;
  undefined8 *puVar10;
  
  _Dst = (void *)0x0;
  if (*(int *)(*(longlong *)((longlong)ThreadLocalStoragePointer + (ulonglong)_tls_index * 8) + 4) <
      DAT_1800160e0) {
    _Init_thread_header(&DAT_1800160e0);
    if (DAT_1800160e0 == -1) {
      DAT_1800160d0 = 0;
      DAT_1800160d8 = 7;
      DAT_1800160c0._0_2_ = 0;
      FUN_180003830(&DAT_1800160c0,L"\\\\.\\",4);
      atexit(FUN_18000e680);
      _Init_thread_footer(&DAT_1800160e0);
    }
  }
  psVar6 = (short *)&DAT_1800160c0;
  if (7 < DAT_1800160d8) {
    psVar6 = (short *)CONCAT62(DAT_1800160c0._2_6_,(undefined2)DAT_1800160c0);
  }
  puVar8 = param_2;
  if (7 < (ulonglong)param_2[3]) {
    puVar8 = (undefined8 *)*param_2;
  }
  puVar1 = param_2 + 2;
  uVar3 = *puVar1;
  uVar7 = uVar3;
  if (DAT_1800160d0 < uVar3) {
    uVar7 = DAT_1800160d0;
  }
  if (uVar7 != 0) {
    lVar9 = (longlong)puVar8 - (longlong)psVar6;
    do {
      if (*(short *)(lVar9 + (longlong)psVar6) != *psVar6) goto LAB_180004e80;
      psVar6 = psVar6 + 1;
      uVar7 = uVar7 - 1;
    } while (uVar7 != 0);
  }
  if ((uVar3 < DAT_1800160d0) || (uVar3 != DAT_1800160d0)) {
LAB_180004e80:
    param_1[2] = 0;
    param_1[3] = 7;
    *(undefined2 *)param_1 = 0;
    FUN_180006860(param_1,DAT_1800160d0 + *puVar1);
    uVar3 = DAT_1800160d0;
    puVar8 = &DAT_1800160c0;
    if (7 < DAT_1800160d8) {
      puVar8 = (undefined8 *)CONCAT62(DAT_1800160c0._2_6_,(undefined2)DAT_1800160c0);
    }
    lVar9 = param_1[2];
    uVar7 = param_1[3];
    if (uVar7 - lVar9 < DAT_1800160d0) {
      FUN_1800066a0(param_1,DAT_1800160d0,uVar7,puVar8,DAT_1800160d0);
    }
    else {
      lVar2 = lVar9 + DAT_1800160d0;
      param_1[2] = lVar2;
      puVar10 = param_1;
      if (7 < uVar7) {
        puVar10 = (undefined8 *)*param_1;
      }
      memmove((void *)((longlong)puVar10 + lVar9 * 2),puVar8,uVar3 * 2);
      *(undefined2 *)((longlong)puVar10 + lVar2 * 2) = 0;
    }
    if (7 < (ulonglong)param_2[3]) {
      param_2 = (undefined8 *)*param_2;
    }
    uVar3 = *puVar1;
    lVar9 = param_1[2];
    uVar7 = param_1[3];
    if (uVar7 - lVar9 < uVar3) {
      FUN_1800066a0(param_1,uVar3,uVar7,param_2,uVar3);
    }
    else {
      param_1[2] = lVar9 + uVar3;
      puVar8 = param_1;
      if (7 < uVar7) {
        puVar8 = (undefined8 *)*param_1;
      }
      memmove((void *)((longlong)puVar8 + lVar9 * 2),param_2,uVar3 * 2);
      *(undefined2 *)((longlong)puVar8 + (lVar9 + uVar3) * 2) = 0;
    }
  }
  else {
    param_1[2] = 0;
    param_1[3] = 0;
    uVar3 = *puVar1;
    if (7 < (ulonglong)param_2[3]) {
      param_2 = (undefined8 *)*param_2;
    }
    if (uVar3 < 8) {
      uVar5 = param_2[1];
      *param_1 = *param_2;
      param_1[1] = uVar5;
      param_1[2] = uVar3;
      param_1[3] = 7;
    }
    else {
      uVar7 = uVar3 | 7;
      if (0x7ffffffffffffffe < uVar7) {
        uVar7 = 0x7ffffffffffffffe;
      }
      if (0x7fffffffffffffff < uVar7 + 1) {
LAB_180004f84:
                    /* WARNING: Subroutine does not return */
        FUN_180001750();
      }
      uVar4 = (uVar7 + 1) * 2;
      if (uVar4 < 0x1000) {
        if (uVar4 != 0) {
          _Dst = (void *)FUN_18000c554(uVar4);
        }
      }
      else {
        if (uVar4 + 0x27 <= uVar4) goto LAB_180004f84;
        lVar9 = FUN_18000c554(uVar4 + 0x27);
        if (lVar9 == 0) {
                    /* WARNING: Subroutine does not return */
          _invalid_parameter_noinfo_noreturn();
        }
        _Dst = (void *)(lVar9 + 0x27U & 0xffffffffffffffe0);
        *(longlong *)((longlong)_Dst - 8) = lVar9;
      }
      *param_1 = _Dst;
      memcpy(_Dst,param_2,uVar3 * 2 + 2);
      param_1[2] = uVar3;
      param_1[3] = uVar7;
    }
  }
  return param_1;
}


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

### EXPORT FUNC 180004f90 (170 bytes) name=FUN_180004f90

undefined8 * FUN_180004f90(undefined8 *param_1,uint param_2)

{
  void *pvVar1;
  void *_Memory;
  
  *param_1 = serial::Serial::SerialImpl::vftable;
  FUN_180005790((longlong)param_1);
  CloseHandle((HANDLE)param_1[0xc]);
  CloseHandle((HANDLE)param_1[0xd]);
  if (7 < (ulonglong)param_1[4]) {
    pvVar1 = (void *)param_1[1];
    _Memory = pvVar1;
    if ((0xfff < param_1[4] * 2 + 2U) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  param_1[3] = 0;
  param_1[4] = 7;
  *(undefined2 *)(param_1 + 1) = 0;
  if ((param_2 & 1) != 0) {
    free(param_1);
  }
  return param_1;
}


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

### EXPORT FUNC 180005040 (760 bytes) name=FUN_180005040

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

void FUN_180005040(longlong param_1)

{
  DWORD DVar1;
  HANDLE pvVar2;
  longlong *plVar3;
  basic_ostream<char,std::char_traits<char>_> *pbVar4;
  longlong *plVar5;
  char *pcVar6;
  LPCWSTR ***ppppWVar7;
  undefined8 uVar8;
  undefined1 auStackY_258 [32];
  longlong local_208 [4];
  longlong local_1e8 [8];
  undefined8 local_1a8 [14];
  LPCWSTR **local_138 [3];
  undefined8 local_120;
  undefined *local_118 [2];
  undefined *local_108;
  undefined **local_100 [13];
  undefined8 local_98;
  undefined4 local_90;
  basic_ios<char,std::char_traits<char>_> local_80 [104];
  ulonglong local_18;
  
  local_18 = DAT_180015010 ^ (ulonglong)auStackY_258;
  if (*(longlong *)(param_1 + 0x18) == 0) {
    FUN_180003e20(local_208,"Empty port is invalid.");
                    /* WARNING: Subroutine does not return */
    _CxxThrowException(local_208,(ThrowInfo *)&DAT_180013448);
  }
  if (*(char *)(param_1 + 0x30) != '\x01') {
    FUN_180004ca0(local_138,(undefined8 *)(param_1 + 8));
    ppppWVar7 = local_138;
    if (7 < local_120) {
      ppppWVar7 = (LPCWSTR ***)local_138[0];
    }
    pvVar2 = CreateFileW((LPCWSTR)ppppWVar7,0xc0000000,0,(LPSECURITY_ATTRIBUTES)0x0,3,0x80,
                         (HANDLE)0x0);
    *(HANDLE *)(param_1 + 0x28) = pvVar2;
    if (pvVar2 == (HANDLE)0xffffffffffffffff) {
      DVar1 = GetLastError();
      memset(local_118,0,0xf8);
      local_118[0] = &DAT_18000fcb8;
      local_108 = &DAT_18000fba8;
      std::basic_ios<char,std::char_traits<char>_>::basic_ios<char,std::char_traits<char>_>
                (local_80);
      uVar8 = 0;
      std::basic_iostream<char,std::char_traits<char>_>::
      basic_iostream<char,std::char_traits<char>_>
                ((basic_iostream<char,std::char_traits<char>_> *)local_118,
                 (basic_streambuf<char,std::char_traits<char>_> *)local_100);
      *(undefined ***)((longlong)local_118 + (longlong)*(int *)(local_118[0] + 4)) =
           std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>_>::vftable;
      *(int *)((longlong)local_118 + (longlong)*(int *)(local_118[0] + 4) + -4) =
           *(int *)(local_118[0] + 4) + -0x98;
      std::basic_streambuf<char,std::char_traits<char>_>::
      basic_streambuf<char,std::char_traits<char>_>
                ((basic_streambuf<char,std::char_traits<char>_> *)local_100);
      local_100[0] = std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char>_>::
                     vftable;
      local_98 = 0;
      local_90 = 0;
      if (DVar1 == 2) {
        plVar3 = FUN_1800059c0(param_1,local_208,uVar8);
        pbVar4 = FUN_180006310((basic_ostream<char,std::char_traits<char>_> *)&local_108,
                               "Specified port, ");
        pbVar4 = (basic_ostream<char,std::char_traits<char>_> *)FUN_1800064e0(pbVar4,(char *)plVar3)
        ;
        FUN_180006310(pbVar4,", does not exist.");
        FUN_1800024b0(local_208);
        plVar3 = FUN_180006050((longlong)local_118,local_1e8);
        plVar5 = FUN_180002510(local_208,
                               "C:\\Users\\Derek\\source\\repos\\EloThermal-windows\\ThermalSDK\\serial\\impl\\win.cc"
                              );
        pcVar6 = (char *)FUN_1800061b0(plVar3);
        FUN_180004310(local_1a8,plVar5,0x53,pcVar6);
                    /* WARNING: Subroutine does not return */
        _CxxThrowException(local_1a8,(ThrowInfo *)&DAT_1800134b8);
      }
      pbVar4 = FUN_180006310((basic_ostream<char,std::char_traits<char>_> *)&local_108,
                             "Unknown error opening the serial port: ");
      std::basic_ostream<char,std::char_traits<char>_>::operator<<(pbVar4,DVar1);
      plVar3 = FUN_180006050((longlong)local_118,local_1e8);
      plVar5 = FUN_180002510(local_208,
                             "C:\\Users\\Derek\\source\\repos\\EloThermal-windows\\ThermalSDK\\serial\\impl\\win.cc"
                            );
      pcVar6 = (char *)FUN_1800061b0(plVar3);
      FUN_180004310(local_1a8,plVar5,0x56,pcVar6);
                    /* WARNING: Subroutine does not return */
      _CxxThrowException(local_1a8,(ThrowInfo *)&DAT_1800134b8);
    }
    FUN_1800053c0(param_1);
    *(undefined1 *)(param_1 + 0x30) = 1;
    if (7 < local_120) {
      ppppWVar7 = (LPCWSTR ***)local_138[0];
      if ((0xfff < local_120 * 2 + 2) &&
         (ppppWVar7 = (LPCWSTR ***)local_138[0][-1],
         0x1f < (ulonglong)((longlong)local_138[0] + (-8 - (longlong)ppppWVar7)))) {
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(ppppWVar7);
    }
    return;
  }
  FUN_180003e90(local_1e8);
                    /* WARNING: Subroutine does not return */
  _CxxThrowException(local_1e8,(ThrowInfo *)&DAT_1800133a0);
}


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

### EXPORT FUNC 180005340 (61 bytes) name=FUN_180005340

undefined8 * FUN_180005340(undefined8 *param_1,longlong param_2)

{
  *param_1 = std::exception::vftable;
  param_1[1] = 0;
  param_1[2] = 0;
  __std_exception_copy(param_2 + 8);
  *param_1 = std::invalid_argument::vftable;
  return param_1;
}


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

### EXPORT FUNC 180005380 (61 bytes) name=FUN_180005380

undefined8 * FUN_180005380(undefined8 *param_1,longlong param_2)

{
  *param_1 = std::exception::vftable;
  param_1[1] = 0;
  param_1[2] = 0;
  __std_exception_copy(param_2 + 8);
  *param_1 = std::logic_error::vftable;
  return param_1;
}


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

### EXPORT FUNC 1800053c0 (968 bytes) name=FUN_1800053c0

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

void FUN_1800053c0(longlong param_1)

{
  uint uVar1;
  int iVar2;
  BOOL BVar3;
  longlong *plVar4;
  undefined1 auStack_108 [40];
  longlong local_e0 [5];
  undefined8 local_b8 [14];
  _DCB local_48;
  _COMMTIMEOUTS local_28;
  ulonglong local_10;
  
  local_10 = DAT_180015010 ^ (ulonglong)auStack_108;
  if (*(HANDLE *)(param_1 + 0x28) == (HANDLE)0xffffffffffffffff) {
    plVar4 = FUN_180002510(local_e0,
                           "C:\\Users\\Derek\\source\\repos\\EloThermal-windows\\ThermalSDK\\serial\\impl\\win.cc"
                          );
    FUN_180004310(local_b8,plVar4,99,"Invalid file descriptor, is the serial port open?");
                    /* WARNING: Subroutine does not return */
    _CxxThrowException(local_b8,(ThrowInfo *)&DAT_1800134b8);
  }
  local_48.StopBits = '\0';
  local_48.XonChar = '\0';
  local_48.XoffChar = '\0';
  local_48.ErrorChar = '\0';
  local_48.EofChar = '\0';
  local_48.EvtChar = '\0';
  local_48.wReserved1 = 0;
  local_48.DCBlength = 0x1c;
  local_48.BaudRate = 0;
  local_48._8_4_ = 0;
  local_48.wReserved = 0;
  local_48.XonLim = 0;
  local_48.XoffLim = 0;
  local_48.ByteSize = '\0';
  local_48.Parity = '\0';
  BVar3 = GetCommState(*(HANDLE *)(param_1 + 0x28),&local_48);
  if (BVar3 == 0) {
    plVar4 = FUN_180002510(local_e0,
                           "C:\\Users\\Derek\\source\\repos\\EloThermal-windows\\ThermalSDK\\serial\\impl\\win.cc"
                          );
    FUN_180004310(local_b8,plVar4,0x6c,"Error getting the serial port state.");
                    /* WARNING: Subroutine does not return */
    _CxxThrowException(local_b8,(ThrowInfo *)&DAT_1800134b8);
  }
  uVar1 = *(uint *)(param_1 + 0x48);
  local_48.BaudRate = uVar1;
  if (uVar1 < 0x3841) {
    if (uVar1 == 0x3840) {
      local_48.BaudRate = 0x3840;
    }
    else if (uVar1 < 0x4b1) {
      if (uVar1 == 0x4b0) {
        local_48.BaudRate = 0x4b0;
      }
      else if (uVar1 == 0x6e) {
        local_48.BaudRate = 0x6e;
      }
      else if (uVar1 == 300) {
        local_48.BaudRate = 300;
      }
    }
    else if (uVar1 == 0x960) {
      local_48.BaudRate = 0x960;
    }
    else if (uVar1 == 0x12c0) {
      local_48.BaudRate = 0x12c0;
    }
  }
  else if (uVar1 < 0x1c201) {
    if (uVar1 == 0x1c200) {
      local_48.BaudRate = 0x1c200;
    }
    else if (uVar1 == 0x4b00) {
      local_48.BaudRate = 0x4b00;
    }
    else if (uVar1 == 0x9600) {
      local_48.BaudRate = 0x9600;
    }
  }
  else if (uVar1 == 0x1f400) {
    local_48.BaudRate = 0x1f400;
  }
  else if (uVar1 == 0x3e800) {
    local_48.BaudRate = 0x3e800;
  }
  iVar2 = *(int *)(param_1 + 0x50);
  if (iVar2 == 8) {
    local_48.ByteSize = '\b';
  }
  else if (iVar2 == 7) {
    local_48.ByteSize = '\a';
  }
  else if (iVar2 == 6) {
    local_48.ByteSize = '\x06';
  }
  else {
    if (iVar2 != 5) {
      FUN_180003e20(local_e0,"invalid char len");
                    /* WARNING: Subroutine does not return */
      _CxxThrowException(local_e0,(ThrowInfo *)&DAT_180013448);
    }
    local_48.ByteSize = '\x05';
  }
  iVar2 = *(int *)(param_1 + 0x54);
  if (iVar2 == 1) {
    local_48._20_8_ = local_48._20_8_ & 0xffffffffffffff00;
  }
  else if (iVar2 == 3) {
    local_48.StopBits = 1;
  }
  else {
    if (iVar2 != 2) {
      FUN_180003e20(local_e0,"invalid stop bit");
                    /* WARNING: Subroutine does not return */
      _CxxThrowException(local_e0,(ThrowInfo *)&DAT_180013448);
    }
    local_48.StopBits = 2;
  }
  iVar2 = *(int *)(param_1 + 0x4c);
  if ((((iVar2 != 0) && (iVar2 != 2)) && (iVar2 != 1)) && ((iVar2 != 3 && (iVar2 != 4)))) {
    FUN_180003e20(local_e0,"invalid parity");
                    /* WARNING: Subroutine does not return */
    _CxxThrowException(local_e0,(ThrowInfo *)&DAT_180013448);
  }
  local_48.Parity = (BYTE)iVar2;
  iVar2 = *(int *)(param_1 + 0x58);
  if (iVar2 == 0) {
    local_48._8_4_ = local_48._8_4_ & 0xffffccfb;
  }
  else if (iVar2 == 1) {
    local_48._8_4_ = local_48._8_4_ & 0xffffcffb | 0x300;
  }
  else if (iVar2 == 2) {
    local_48._8_4_ = local_48._8_4_ & 0xffffecff | 0x2004;
  }
  BVar3 = SetCommState(*(HANDLE *)(param_1 + 0x28),&local_48);
  if (BVar3 == 0) {
    CloseHandle(*(HANDLE *)(param_1 + 0x28));
    plVar4 = FUN_180002510(local_e0,
                           "C:\\Users\\Derek\\source\\repos\\EloThermal-windows\\ThermalSDK\\serial\\impl\\win.cc"
                          );
    FUN_180004310(local_b8,plVar4,0x106,"Error setting serial port settings.");
                    /* WARNING: Subroutine does not return */
    _CxxThrowException(local_b8,(ThrowInfo *)&DAT_1800134b8);
  }
  local_28.ReadIntervalTimeout = *(DWORD *)(param_1 + 0x34);
  local_28.ReadTotalTimeoutConstant = *(DWORD *)(param_1 + 0x38);
  local_28.ReadTotalTimeoutMultiplier = *(DWORD *)(param_1 + 0x3c);
  local_28.WriteTotalTimeoutConstant = *(DWORD *)(param_1 + 0x40);
  local_28.WriteTotalTimeoutMultiplier = *(DWORD *)(param_1 + 0x44);
  BVar3 = SetCommTimeouts(*(HANDLE *)(param_1 + 0x28),&local_28);
  if (BVar3 != 0) {
    return;
  }
  plVar4 = FUN_180002510(local_e0,
                         "C:\\Users\\Derek\\source\\repos\\EloThermal-windows\\ThermalSDK\\serial\\impl\\win.cc"
                        );
  FUN_180004310(local_b8,plVar4,0x111,"Error setting timeouts.");
                    /* WARNING: Subroutine does not return */
  _CxxThrowException(local_b8,(ThrowInfo *)&DAT_1800134b8);
}


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

### EXPORT FUNC 180005790 (244 bytes) name=FUN_180005790

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

void FUN_180005790(longlong param_1)

{
  BOOL BVar1;
  DWORD DVar2;
  basic_ostream<char,std::char_traits<char>_> *this;
  longlong *plVar3;
  longlong *plVar4;
  char *pcVar5;
  undefined1 auStack_1f8 [40];
  longlong local_1d0 [4];
  longlong local_1b0 [5];
  undefined8 local_188 [14];
  basic_iostream<char,std::char_traits<char>_> local_118 [16];
  basic_ostream<char,std::char_traits<char>_> local_108 [240];
  ulonglong local_18;
  
  local_18 = DAT_180015010 ^ (ulonglong)auStack_1f8;
  if (*(char *)(param_1 + 0x30) == '\x01') {
    if (*(HANDLE *)(param_1 + 0x28) != (HANDLE)0xffffffffffffffff) {
      BVar1 = CloseHandle(*(HANDLE *)(param_1 + 0x28));
      if (BVar1 == 0) {
        FUN_180004300(local_118);
        FUN_1800060f0(local_118);
        DVar2 = GetLastError();
        this = FUN_180006310(local_108,"Error while closing serial port: ");
        std::basic_ostream<char,std::char_traits<char>_>::operator<<(this,DVar2);
        plVar3 = FUN_180006050((longlong)local_118,local_1b0);
        plVar4 = FUN_180002510(local_1d0,
                               "C:\\Users\\Derek\\source\\repos\\EloThermal-windows\\ThermalSDK\\serial\\impl\\win.cc"
                              );
        pcVar5 = (char *)FUN_1800061b0(plVar3);
        FUN_180004310(local_188,plVar4,0x11f,pcVar5);
                    /* WARNING: Subroutine does not return */
        _CxxThrowException(local_188,(ThrowInfo *)&DAT_1800134b8);
      }
      *(undefined8 *)(param_1 + 0x28) = 0xffffffffffffffff;
    }
    *(undefined1 *)(param_1 + 0x30) = 0;
  }
  return;
}


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

### EXPORT FUNC 180005890 (291 bytes) name=FUN_180005890

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

DWORD FUN_180005890(longlong param_1,LPVOID param_2,DWORD param_3)

{
  BOOL BVar1;
  DWORD DVar2;
  basic_ostream<char,std::char_traits<char>_> *this;
  longlong *plVar3;
  longlong *plVar4;
  char *pcVar5;
  undefined1 auStackY_228 [32];
  longlong local_1f0 [4];
  longlong local_1d0 [7];
  undefined8 local_198 [14];
  DWORD local_128 [4];
  basic_iostream<char,std::char_traits<char>_> local_118 [16];
  basic_ostream<char,std::char_traits<char>_> local_108 [240];
  ulonglong local_18;
  
  local_18 = DAT_180015010 ^ (ulonglong)auStackY_228;
  if (*(char *)(param_1 + 0x30) == '\0') {
    FUN_1800048a0(local_1d0,"Serial::read");
                    /* WARNING: Subroutine does not return */
    _CxxThrowException(local_1d0,(ThrowInfo *)&DAT_1800134d8);
  }
  BVar1 = ReadFile(*(HANDLE *)(param_1 + 0x28),param_2,param_3,local_128,(LPOVERLAPPED)0x0);
  if (BVar1 != 0) {
    return local_128[0];
  }
  FUN_180004300(local_118);
  FUN_1800060f0(local_118);
  DVar2 = GetLastError();
  this = FUN_180006310(local_108,"Error while reading from the serial port: ");
  std::basic_ostream<char,std::char_traits<char>_>::operator<<(this,DVar2);
  plVar3 = FUN_180006050((longlong)local_118,local_1d0);
  plVar4 = FUN_180002510(local_1f0,
                         "C:\\Users\\Derek\\source\\repos\\EloThermal-windows\\ThermalSDK\\serial\\impl\\win.cc"
                        );
  pcVar5 = (char *)FUN_1800061b0(plVar3);
  FUN_180004310(local_198,plVar4,0x154,pcVar5);
                    /* WARNING: Subroutine does not return */
  _CxxThrowException(local_198,(ThrowInfo *)&DAT_1800134b8);
}


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

### EXPORT FUNC 1800059c0 (197 bytes) name=FUN_1800059c0

longlong * FUN_1800059c0(longlong param_1,longlong *param_2,undefined8 param_3)

{
  undefined1 uVar1;
  longlong lVar2;
  ulonglong uVar3;
  longlong *plVar4;
  undefined8 *puVar5;
  ulonglong uVar6;
  undefined8 *puVar7;
  bool bVar8;
  
  puVar7 = (undefined8 *)(param_1 + 8);
  bVar8 = 7 < *(ulonglong *)(param_1 + 0x20);
  puVar5 = puVar7;
  if (bVar8) {
    puVar5 = (undefined8 *)*puVar7;
  }
  lVar2 = *(longlong *)(param_1 + 0x18);
  if (bVar8) {
    puVar7 = (undefined8 *)*puVar7;
  }
  param_2[2] = 0;
  param_2[3] = 0xf;
  *(undefined1 *)param_2 = 0;
  uVar6 = ((longlong)puVar5 + lVar2 * 2) - (longlong)puVar7 >> 1;
  if (0xf < uVar6) {
    FUN_180006c50(param_2,uVar6);
    param_2[2] = 0;
  }
  for (; puVar7 != (undefined8 *)((longlong)puVar5 + lVar2 * 2);
      puVar7 = (undefined8 *)((longlong)puVar7 + 2)) {
    uVar1 = *(undefined1 *)puVar7;
    uVar6 = param_2[2];
    uVar3 = param_2[3];
    if (uVar6 < uVar3) {
      param_2[2] = uVar6 + 1;
      plVar4 = param_2;
      if (0xf < uVar3) {
        plVar4 = (longlong *)*param_2;
      }
      *(undefined1 *)((longlong)plVar4 + uVar6) = uVar1;
      *(undefined1 *)((longlong)plVar4 + uVar6 + 1) = 0;
    }
    else {
      FUN_180002770(param_2,uVar3,param_3,uVar1);
    }
  }
  return param_2;
}


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

### EXPORT FUNC 180005a90 (233 bytes) name=FUN_180005a90

ulonglong * FUN_180005a90(longlong param_1,ulonglong *param_2,longlong *param_3,byte param_4)

{
  longlong lVar1;
  int iVar2;
  longlong lVar3;
  ulonglong uVar4;
  longlong lVar5;
  longlong lVar6;
  undefined8 uVar7;
  ulonglong uVar8;
  
  uVar8 = param_3[1] + *param_3;
  lVar3 = **(longlong **)(param_1 + 0x38);
  uVar4 = **(ulonglong **)(param_1 + 0x40);
  if ((uVar4 != 0) && (*(ulonglong *)(param_1 + 0x68) < uVar4)) {
    *(ulonglong *)(param_1 + 0x68) = uVar4;
  }
  lVar5 = *(longlong *)(param_1 + 0x68);
  lVar6 = **(longlong **)(param_1 + 0x18);
  if (((ulonglong)(lVar5 - lVar6) < uVar8) ||
     ((uVar8 != 0 &&
      ((((param_4 & 1) != 0 && (lVar3 == 0)) || (((param_4 & 2) != 0 && (uVar4 == 0)))))))) {
    *param_2 = 0xffffffffffffffff;
  }
  else {
    lVar1 = lVar6 + uVar8;
    if (((param_4 & 1) != 0) && (lVar3 != 0)) {
      **(longlong **)(param_1 + 0x38) = lVar1;
      **(int **)(param_1 + 0x50) = (int)lVar5 - (int)lVar1;
    }
    if (((param_4 & 2) != 0) && (uVar4 != 0)) {
      iVar2 = **(int **)(param_1 + 0x58);
      uVar7 = **(undefined8 **)(param_1 + 0x40);
      **(longlong **)(param_1 + 0x20) = lVar6;
      **(longlong **)(param_1 + 0x40) = lVar1;
      **(int **)(param_1 + 0x58) = (iVar2 + (int)uVar7) - (int)lVar1;
    }
    *param_2 = uVar8;
  }
  param_2[1] = 0;
  param_2[2] = 0;
  return param_2;
}


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

### EXPORT FUNC 180005b80 (340 bytes) name=FUN_180005b80

ulonglong *
FUN_180005b80(longlong param_1,ulonglong *param_2,longlong param_3,int param_4,byte param_5)

{
  longlong lVar1;
  int iVar2;
  longlong lVar3;
  ulonglong uVar4;
  longlong lVar5;
  longlong lVar6;
  undefined8 uVar7;
  ulonglong uVar8;
  ulonglong uVar9;
  
  lVar3 = **(longlong **)(param_1 + 0x38);
  uVar4 = **(ulonglong **)(param_1 + 0x40);
  if ((uVar4 != 0) && (*(ulonglong *)(param_1 + 0x68) < uVar4)) {
    *(ulonglong *)(param_1 + 0x68) = uVar4;
  }
  lVar5 = *(longlong *)(param_1 + 0x68);
  lVar6 = **(longlong **)(param_1 + 0x18);
  uVar9 = lVar5 - lVar6;
  if (param_4 == 0) {
    uVar8 = 0;
LAB_180005c31:
    uVar8 = uVar8 + param_3;
    if ((uVar8 <= uVar9) &&
       ((uVar8 == 0 ||
        ((((param_5 & 1) == 0 || (lVar3 != 0)) && (((param_5 & 2) == 0 || (uVar4 != 0)))))))) {
      lVar1 = lVar6 + uVar8;
      if (((param_5 & 1) != 0) && (lVar3 != 0)) {
        **(longlong **)(param_1 + 0x38) = lVar1;
        **(int **)(param_1 + 0x50) = (int)lVar5 - (int)lVar1;
      }
      if (((param_5 & 2) != 0) && (uVar4 != 0)) {
        iVar2 = **(int **)(param_1 + 0x58);
        uVar7 = **(undefined8 **)(param_1 + 0x40);
        **(longlong **)(param_1 + 0x20) = lVar6;
        **(longlong **)(param_1 + 0x40) = lVar1;
        **(int **)(param_1 + 0x58) = (iVar2 + (int)uVar7) - (int)lVar1;
      }
      *param_2 = uVar8;
      goto LAB_180005cac;
    }
  }
  else if (param_4 == 1) {
    if ((param_5 & 3) != 3) {
      if ((param_5 & 1) == 0) {
        if (((param_5 & 2) != 0) && ((uVar4 != 0 || (lVar6 == 0)))) {
          uVar8 = uVar4 - lVar6;
          goto LAB_180005c31;
        }
      }
      else if ((lVar3 != 0) || (lVar6 == 0)) {
        uVar8 = lVar3 - lVar6;
        goto LAB_180005c31;
      }
    }
  }
  else {
    uVar8 = uVar9;
    if (param_4 == 2) goto LAB_180005c31;
  }
  *param_2 = 0xffffffffffffffff;
LAB_180005cac:
  param_2[1] = 0;
  param_2[2] = 0;
  return param_2;
}


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

### EXPORT FUNC 180005ce0 (104 bytes) name=FUN_180005ce0

ulonglong FUN_180005ce0(longlong param_1)

{
  undefined8 *puVar1;
  byte *pbVar2;
  byte *pbVar3;
  undefined8 uVar4;
  byte *pbVar5;
  
  puVar1 = *(undefined8 **)(param_1 + 0x38);
  pbVar2 = (byte *)*puVar1;
  if (pbVar2 != (byte *)0x0) {
    if (pbVar2 < pbVar2 + **(int **)(param_1 + 0x50)) {
      return (ulonglong)*pbVar2;
    }
    pbVar3 = (byte *)**(undefined8 **)(param_1 + 0x40);
    if ((pbVar3 != (byte *)0x0) && ((*(byte *)(param_1 + 0x70) & 4) == 0)) {
      pbVar5 = *(byte **)(param_1 + 0x68);
      if (*(byte **)(param_1 + 0x68) < pbVar3) {
        pbVar5 = pbVar3;
      }
      if (pbVar2 < pbVar5) {
        *(byte **)(param_1 + 0x68) = pbVar5;
        uVar4 = *puVar1;
        *puVar1 = uVar4;
        **(int **)(param_1 + 0x50) = (int)pbVar5 - (int)uVar4;
        return (ulonglong)*(byte *)**(undefined8 **)(param_1 + 0x38);
      }
    }
  }
  return 0xffffffff;
}


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

### EXPORT FUNC 180005d50 (82 bytes) name=FUN_180005d50

int FUN_180005d50(longlong param_1,int param_2)

{
  ulonglong uVar1;
  
  uVar1 = **(ulonglong **)(param_1 + 0x38);
  if (((uVar1 != 0) && (**(ulonglong **)(param_1 + 0x18) < uVar1)) &&
     ((param_2 == -1 ||
      (((char)param_2 == *(char *)(uVar1 - 1) || ((*(byte *)(param_1 + 0x70) & 2) == 0)))))) {
    **(int **)(param_1 + 0x50) = **(int **)(param_1 + 0x50) + 1;
    **(longlong **)(param_1 + 0x38) = **(longlong **)(param_1 + 0x38) + -1;
    if (param_2 == -1) {
      param_2 = 0;
    }
    else {
      *(char *)**(undefined8 **)(param_1 + 0x38) = (char)param_2;
    }
    return param_2;
  }
  return -1;
}


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

### EXPORT FUNC 180005db0 (478 bytes) name=FUN_180005db0

int FUN_180005db0(basic_streambuf<char,std::char_traits<char>_> *param_1,int param_2)

{
  void *_Src;
  undefined8 uVar1;
  uint uVar2;
  char *pcVar3;
  void *pvVar4;
  longlong lVar5;
  ulonglong uVar6;
  ulonglong _Size;
  
  if (((byte)param_1[0x70] & 2) != 0) {
    return -1;
  }
  if (param_2 == -1) {
    return 0;
  }
  uVar6 = **(ulonglong **)(param_1 + 0x40);
  if ((uVar6 != 0) && (uVar6 < (longlong)**(int **)(param_1 + 0x58) + uVar6)) {
    pcVar3 = std::basic_streambuf<char,std::char_traits<char>_>::_Pninc(param_1);
    *pcVar3 = (char)param_2;
    *(ulonglong *)(param_1 + 0x68) = uVar6 + 1;
    return param_2;
  }
  _Src = (void *)**(undefined8 **)(param_1 + 0x18);
  _Size = ((longlong)**(int **)(param_1 + 0x58) + uVar6) - (longlong)_Src;
  if (uVar6 == 0) {
    _Size = 0;
  }
  if (_Size < 0x20) {
    uVar6 = 0x20;
    pvVar4 = (void *)FUN_18000c554(0x20);
  }
  else {
    if (_Size < 0x3fffffff) {
      uVar6 = _Size * 2;
      if (uVar6 < 0x1000) {
        if (uVar6 == 0) {
          pvVar4 = (void *)0x0;
        }
        else {
          pvVar4 = (void *)FUN_18000c554(uVar6);
        }
        goto LAB_180005ea3;
      }
    }
    else {
      uVar6 = 0x7fffffff;
      if (0x7ffffffe < _Size) {
        return -1;
      }
    }
    if (uVar6 + 0x27 <= uVar6) {
                    /* WARNING: Subroutine does not return */
      FUN_180001750();
    }
    lVar5 = FUN_18000c554(uVar6 + 0x27);
    if (lVar5 == 0) goto LAB_180005f67;
    pvVar4 = (void *)(lVar5 + 0x27U & 0xffffffffffffffe0);
    *(longlong *)((longlong)pvVar4 - 8) = lVar5;
  }
LAB_180005ea3:
  memcpy(pvVar4,_Src,_Size);
  lVar5 = _Size + (longlong)pvVar4;
  *(longlong *)(param_1 + 0x68) = lVar5 + 1;
  **(undefined8 **)(param_1 + 0x20) = pvVar4;
  **(longlong **)(param_1 + 0x40) = lVar5;
  **(int **)(param_1 + 0x58) = ((int)pvVar4 - (int)lVar5) + (int)uVar6;
  if (((byte)param_1[0x70] & 4) == 0) {
    uVar1 = *(undefined8 *)(param_1 + 0x68);
    lVar5 = (**(longlong **)(param_1 + 0x38) - (longlong)_Src) + (longlong)pvVar4;
    **(undefined8 **)(param_1 + 0x18) = pvVar4;
    **(longlong **)(param_1 + 0x38) = lVar5;
    **(int **)(param_1 + 0x50) = (int)uVar1 - (int)lVar5;
  }
  else {
    **(undefined8 **)(param_1 + 0x18) = pvVar4;
    **(undefined8 **)(param_1 + 0x38) = 0;
    **(int **)(param_1 + 0x50) = (int)pvVar4;
  }
  uVar2 = *(uint *)(param_1 + 0x70);
  if ((uVar2 & 1) != 0) {
    pvVar4 = _Src;
    if ((0xfff < _Size) &&
       (pvVar4 = *(void **)((longlong)_Src + -8),
       0x1f < (ulonglong)((longlong)_Src + (-8 - (longlong)pvVar4)))) {
LAB_180005f67:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(pvVar4);
    uVar2 = *(uint *)(param_1 + 0x70);
  }
  *(uint *)(param_1 + 0x70) = uVar2 | 1;
  pcVar3 = std::basic_streambuf<char,std::char_traits<char>_>::_Pninc(param_1);
  *pcVar3 = (char)param_2;
  return param_2;
}


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

### EXPORT FUNC 180005f90 (182 bytes) name=FUN_180005f90

void FUN_180005f90(basic_streambuf<char,std::char_traits<char>_> *param_1)

{
  void *pvVar1;
  void *_Memory;
  longlong lVar2;
  
  *(undefined ***)param_1 =
       std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char>_>::vftable;
  if (((byte)param_1[0x70] & 1) != 0) {
    if (**(longlong **)(param_1 + 0x40) == 0) {
      lVar2 = (longlong)**(int **)(param_1 + 0x50) + **(longlong **)(param_1 + 0x38);
    }
    else {
      lVar2 = (longlong)**(int **)(param_1 + 0x58) + **(longlong **)(param_1 + 0x40);
    }
    pvVar1 = (void *)**(longlong **)(param_1 + 0x18);
    _Memory = pvVar1;
    if ((0xfff < (ulonglong)(lVar2 - (longlong)pvVar1)) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  **(undefined8 **)(param_1 + 0x18) = 0;
  **(undefined8 **)(param_1 + 0x38) = 0;
  **(undefined4 **)(param_1 + 0x50) = 0;
  **(undefined8 **)(param_1 + 0x20) = 0;
  **(undefined8 **)(param_1 + 0x40) = 0;
  **(undefined4 **)(param_1 + 0x58) = 0;
  *(uint *)(param_1 + 0x70) = *(uint *)(param_1 + 0x70) & 0xfffffffe;
  *(undefined8 *)(param_1 + 0x68) = 0;
                    /* WARNING: Could not recover jumptable at 0x000180006039. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  std::basic_streambuf<char,std::char_traits<char>_>::~basic_streambuf<char,std::char_traits<char>_>
            (param_1);
  return;
}


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

### EXPORT FUNC 180006050 (156 bytes) name=FUN_180006050

longlong * FUN_180006050(longlong param_1,longlong *param_2)

{
  ulonglong uVar1;
  void *pvVar2;
  ulonglong *puVar3;
  size_t sVar4;
  ulonglong local_20;
  longlong *local_18;
  
  local_18 = param_2;
  param_2[2] = 0;
  param_2[3] = 0xf;
  *(undefined1 *)param_2 = 0;
  if (((*(uint *)(param_1 + 0x88) & 2) == 0) &&
     (uVar1 = **(ulonglong **)(param_1 + 0x58), uVar1 != 0)) {
    pvVar2 = (void *)**(longlong **)(param_1 + 0x38);
    local_20 = uVar1;
    puVar3 = &local_20;
    if (uVar1 < *(ulonglong *)(param_1 + 0x80)) {
      puVar3 = (ulonglong *)(param_1 + 0x80);
    }
    sVar4 = *puVar3 - (longlong)pvVar2;
  }
  else {
    if ((*(uint *)(param_1 + 0x88) & 4) != 0) {
      return param_2;
    }
    if (**(longlong **)(param_1 + 0x50) == 0) {
      return param_2;
    }
    pvVar2 = (void *)**(longlong **)(param_1 + 0x30);
    sVar4 = ((longlong)**(int **)(param_1 + 0x68) - (longlong)pvVar2) +
            **(longlong **)(param_1 + 0x50);
  }
  FUN_180002610(param_2,pvVar2,sVar4);
  return param_2;
}


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

### EXPORT FUNC 1800060f0 (182 bytes) name=FUN_1800060f0

basic_iostream<char,std::char_traits<char>_> *
FUN_1800060f0(basic_iostream<char,std::char_traits<char>_> *param_1)

{
  basic_streambuf<char,std::char_traits<char>_> *this;
  
  *(undefined **)param_1 = &DAT_18000fcb8;
  *(undefined **)(param_1 + 0x10) = &DAT_18000fba8;
  std::basic_ios<char,std::char_traits<char>_>::basic_ios<char,std::char_traits<char>_>
            ((basic_ios<char,std::char_traits<char>_> *)(param_1 + 0x98));
  this = (basic_streambuf<char,std::char_traits<char>_> *)(param_1 + 0x18);
  std::basic_iostream<char,std::char_traits<char>_>::basic_iostream<char,std::char_traits<char>_>
            (param_1,this);
  *(undefined ***)(param_1 + *(int *)(*(longlong *)param_1 + 4)) =
       std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>_>::vftable;
  *(int *)(param_1 + (longlong)*(int *)(*(longlong *)param_1 + 4) + -4) =
       *(int *)(*(longlong *)param_1 + 4) + -0x98;
  std::basic_streambuf<char,std::char_traits<char>_>::basic_streambuf<char,std::char_traits<char>_>
            (this);
  *(undefined ***)this =
       std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char>_>::vftable;
  *(undefined8 *)(param_1 + 0x80) = 0;
  *(undefined4 *)(param_1 + 0x88) = 0;
  return param_1;
}


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

### EXPORT FUNC 1800061b0 (15 bytes) name=FUN_1800061b0

undefined8 * FUN_1800061b0(undefined8 *param_1)

{
  if (0xf < (ulonglong)param_1[3]) {
    return (undefined8 *)*param_1;
  }
  return param_1;
}


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

### EXPORT FUNC 1800061c0 (52 bytes) name=FUN_1800061c0

basic_streambuf<char,std::char_traits<char>_> *
FUN_1800061c0(basic_streambuf<char,std::char_traits<char>_> *param_1,uint param_2)

{
  FUN_180005f90(param_1);
  if ((param_2 & 1) != 0) {
    free(param_1);
  }
  return param_1;
}


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

### EXPORT FUNC 180006200 (146 bytes) name=FUN_180006200

basic_ios<char,std::char_traits<char>_> *
FUN_180006200(basic_ios<char,std::char_traits<char>_> *param_1,uint param_2)

{
  *(undefined ***)(param_1 + (longlong)*(int *)(*(longlong *)(param_1 + -0x98) + 4) + -0x98) =
       std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>_>::vftable;
  *(int *)(param_1 + (longlong)*(int *)(*(longlong *)(param_1 + -0x98) + 4) + -0x9c) =
       *(int *)(*(longlong *)(param_1 + -0x98) + 4) + -0x98;
  FUN_180005f90((basic_streambuf<char,std::char_traits<char>_> *)(param_1 + -0x80));
  std::basic_iostream<char,std::char_traits<char>_>::~basic_iostream<char,std::char_traits<char>_>
            ((basic_iostream<char,std::char_traits<char>_> *)(param_1 + -0x78));
  std::basic_ios<char,std::char_traits<char>_>::~basic_ios<char,std::char_traits<char>_>(param_1);
  if ((param_2 & 1) != 0) {
    free(param_1 + -0x98);
  }
  return param_1 + -0x98;
}


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

### EXPORT FUNC 1800062a0 (63 bytes) name=FUN_1800062a0

void FUN_1800062a0(longlong *param_1)

{
  longlong *plVar1;
  bool bVar2;
  
  bVar2 = std::uncaught_exception();
  if (!bVar2) {
    std::basic_ostream<char,std::char_traits<char>_>::_Osfx
              ((basic_ostream<char,std::char_traits<char>_> *)*param_1);
  }
  plVar1 = *(longlong **)((longlong)*(int *)(*(longlong *)*param_1 + 4) + 0x48 + *param_1);
  if (plVar1 != (longlong *)0x0) {
    (**(code **)(*plVar1 + 0x10))();
  }
  return;
}


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

### EXPORT FUNC 1800062e0 (36 bytes) name=FUN_1800062e0

void FUN_1800062e0(longlong *param_1)

{
  longlong *plVar1;
  
  plVar1 = *(longlong **)((longlong)*(int *)(*(longlong *)*param_1 + 4) + 0x48 + *param_1);
  if (plVar1 != (longlong *)0x0) {
    (**(code **)(*plVar1 + 0x10))();
  }
  return;
}


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

### EXPORT FUNC 180006310 (444 bytes) name=FUN_180006310

basic_ostream<char,std::char_traits<char>_> *
FUN_180006310(basic_ostream<char,std::char_traits<char>_> *param_1,char *param_2)

{
  longlong *plVar1;
  basic_ostream<char,std::char_traits<char>_> *this;
  bool bVar2;
  int iVar3;
  __int64 _Var4;
  longlong lVar5;
  int iVar6;
  longlong lVar7;
  longlong lVar8;
  
  iVar6 = 0;
  lVar8 = -1;
  do {
    lVar8 = lVar8 + 1;
  } while (param_2[lVar8] != '\0');
  lVar5 = *(longlong *)param_1;
  lVar7 = *(longlong *)(param_1 + (longlong)*(int *)(lVar5 + 4) + 0x28);
  if ((lVar7 < 1) || (lVar7 <= lVar8)) {
    lVar7 = 0;
  }
  else {
    lVar7 = lVar7 - lVar8;
  }
  plVar1 = *(longlong **)(param_1 + (longlong)*(int *)(lVar5 + 4) + 0x48);
  if (plVar1 != (longlong *)0x0) {
    (**(code **)(*plVar1 + 8))(plVar1);
    lVar5 = *(longlong *)param_1;
  }
  if (*(int *)(param_1 + (longlong)*(int *)(lVar5 + 4) + 0x10) == 0) {
    this = *(basic_ostream<char,std::char_traits<char>_> **)
            (param_1 + (longlong)*(int *)(lVar5 + 4) + 0x50);
    if ((this == (basic_ostream<char,std::char_traits<char>_> *)0x0) || (this == param_1)) {
      bVar2 = true;
    }
    else {
      std::basic_ostream<char,std::char_traits<char>_>::flush(this);
      lVar5 = *(longlong *)param_1;
      bVar2 = *(int *)(param_1 + (longlong)*(int *)(lVar5 + 4) + 0x10) == 0;
    }
  }
  else {
    bVar2 = false;
  }
  if (bVar2) {
    if ((*(uint *)(param_1 + (longlong)*(int *)(lVar5 + 4) + 0x18) & 0x1c0) != 0x40) {
      for (; 0 < lVar7; lVar7 = lVar7 + -1) {
        iVar3 = std::basic_streambuf<char,std::char_traits<char>_>::sputc
                          (*(basic_streambuf<char,std::char_traits<char>_> **)
                            (param_1 + (longlong)*(int *)(*(longlong *)param_1 + 4) + 0x48),
                           (char)param_1[(longlong)*(int *)(*(longlong *)param_1 + 4) + 0x58]);
        if (iVar3 == -1) goto LAB_180006459;
      }
      lVar5 = *(longlong *)param_1;
    }
    _Var4 = std::basic_streambuf<char,std::char_traits<char>_>::sputn
                      (*(basic_streambuf<char,std::char_traits<char>_> **)
                        (param_1 + (longlong)*(int *)(lVar5 + 4) + 0x48),param_2,lVar8);
    if (_Var4 == lVar8) {
      for (; 0 < lVar7; lVar7 = lVar7 + -1) {
        iVar3 = std::basic_streambuf<char,std::char_traits<char>_>::sputc
                          (*(basic_streambuf<char,std::char_traits<char>_> **)
                            (param_1 + (longlong)*(int *)(*(longlong *)param_1 + 4) + 0x48),
                           (char)param_1[(longlong)*(int *)(*(longlong *)param_1 + 4) + 0x58]);
        if (iVar3 == -1) goto LAB_180006459;
      }
    }
    else {
LAB_180006459:
      iVar6 = 4;
    }
    *(undefined8 *)(param_1 + (longlong)*(int *)(*(longlong *)param_1 + 4) + 0x28) = 0;
  }
  else {
    iVar6 = 4;
  }
  std::basic_ios<char,std::char_traits<char>_>::setstate
            ((basic_ios<char,std::char_traits<char>_> *)
             (param_1 + *(int *)(*(longlong *)param_1 + 4)),iVar6,false);
  bVar2 = std::uncaught_exception();
  if (!bVar2) {
    std::basic_ostream<char,std::char_traits<char>_>::_Osfx(param_1);
  }
  if (*(longlong **)(param_1 + (longlong)*(int *)(*(longlong *)param_1 + 4) + 0x48) !=
      (longlong *)0x0) {
    (**(code **)(**(longlong **)(param_1 + (longlong)*(int *)(*(longlong *)param_1 + 4) + 0x48) +
                0x10))();
  }
  return param_1;
}


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

### EXPORT FUNC 1800064e0 (25 bytes) name=FUN_1800064e0

void FUN_1800064e0(basic_ostream<char,std::char_traits<char>_> *param_1,char *param_2)

{
  char *pcVar1;
  
  pcVar1 = param_2;
  if (0xf < *(ulonglong *)(param_2 + 0x18)) {
    pcVar1 = *(char **)param_2;
  }
  FUN_180006920(param_1,pcVar1,*(ulonglong *)(param_2 + 0x10));
  return;
}


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

### EXPORT FUNC 180006500 (402 bytes) name=FUN_180006500

undefined8 *
FUN_180006500(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined2 param_4)

{
  ulonglong uVar1;
  longlong lVar2;
  ulonglong uVar3;
  void *_Src;
  size_t _Size;
  longlong lVar4;
  ulonglong uVar5;
  ulonglong uVar6;
  void *_Memory;
  void *_Dst;
  
  lVar2 = param_1[2];
  if (lVar2 == 0x7ffffffffffffffe) {
                    /* WARNING: Subroutine does not return */
    FUN_180002b40();
  }
  uVar3 = param_1[3];
  uVar5 = lVar2 + 1U | 7;
  uVar6 = 0x7ffffffffffffffe;
  if (((uVar5 < 0x7fffffffffffffff) && (uVar3 <= 0x7ffffffffffffffe - (uVar3 >> 1))) &&
     (uVar1 = (uVar3 >> 1) + uVar3, uVar6 = uVar5, uVar5 < uVar1)) {
    uVar6 = uVar1;
  }
  uVar5 = uVar6 + 1;
  if (uVar6 == 0xffffffffffffffff) {
    uVar5 = 0xffffffffffffffff;
  }
  if (0x7fffffffffffffff < uVar5) {
LAB_18000668f:
                    /* WARNING: Subroutine does not return */
    FUN_180001750();
  }
  uVar5 = uVar5 * 2;
  _Dst = (void *)0x0;
  if (uVar5 < 0x1000) {
    if (uVar5 != 0) {
      _Dst = (void *)FUN_18000c554(uVar5);
    }
  }
  else {
    if (uVar5 + 0x27 <= uVar5) goto LAB_18000668f;
    lVar4 = FUN_18000c554(uVar5 + 0x27);
    if (lVar4 == 0) goto LAB_18000664a;
    _Dst = (void *)(lVar4 + 0x27U & 0xffffffffffffffe0);
    *(longlong *)((longlong)_Dst - 8) = lVar4;
  }
  _Size = lVar2 * 2;
  param_1[2] = lVar2 + 1U;
  param_1[3] = uVar6;
  if (uVar3 < 8) {
    memcpy(_Dst,param_1,_Size);
    *(undefined2 *)(_Size + (longlong)_Dst) = param_4;
    *(undefined2 *)(_Size + 2 + (longlong)_Dst) = 0;
  }
  else {
    _Src = (void *)*param_1;
    memcpy(_Dst,_Src,_Size);
    *(undefined2 *)(_Size + (longlong)_Dst) = param_4;
    *(undefined2 *)(_Size + 2 + (longlong)_Dst) = 0;
    _Memory = _Src;
    if ((0xfff < uVar3 * 2 + 2) &&
       (_Memory = *(void **)((longlong)_Src + -8),
       0x1f < (ulonglong)((longlong)_Src + (-8 - (longlong)_Memory)))) {
LAB_18000664a:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  *param_1 = _Dst;
  return param_1;
}


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

### EXPORT FUNC 1800066a0 (433 bytes) name=FUN_1800066a0

undefined8 *
FUN_1800066a0(undefined8 *param_1,ulonglong param_2,undefined8 param_3,void *param_4,
             longlong param_5)

{
  ulonglong uVar1;
  undefined2 *puVar2;
  longlong lVar3;
  ulonglong uVar4;
  void *_Src;
  size_t _Size;
  longlong lVar5;
  ulonglong uVar6;
  void *_Dst;
  ulonglong uVar7;
  void *_Memory;
  
  lVar3 = param_1[2];
  if (0x7ffffffffffffffeU - lVar3 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_180002b40();
  }
  uVar4 = param_1[3];
  uVar6 = param_2 + lVar3 | 7;
  uVar7 = 0x7ffffffffffffffe;
  if (((uVar6 < 0x7fffffffffffffff) && (uVar4 <= 0x7ffffffffffffffe - (uVar4 >> 1))) &&
     (uVar1 = (uVar4 >> 1) + uVar4, uVar7 = uVar6, uVar6 < uVar1)) {
    uVar7 = uVar1;
  }
  uVar6 = uVar7 + 1;
  if (uVar7 == 0xffffffffffffffff) {
    uVar6 = 0xffffffffffffffff;
  }
  if (0x7fffffffffffffff < uVar6) {
LAB_18000684e:
                    /* WARNING: Subroutine does not return */
    FUN_180001750();
  }
  uVar6 = uVar6 * 2;
  _Dst = (void *)0x0;
  if (uVar6 < 0x1000) {
    if (uVar6 != 0) {
      _Dst = (void *)FUN_18000c554(uVar6);
    }
  }
  else {
    if (uVar6 + 0x27 <= uVar6) goto LAB_18000684e;
    lVar5 = FUN_18000c554(uVar6 + 0x27);
    if (lVar5 == 0) goto LAB_180006800;
    _Dst = (void *)(lVar5 + 0x27U & 0xffffffffffffffe0);
    *(longlong *)((longlong)_Dst - 8) = lVar5;
  }
  _Size = lVar3 * 2;
  param_1[2] = param_2 + lVar3;
  param_1[3] = uVar7;
  puVar2 = (undefined2 *)((longlong)_Dst + (param_5 + lVar3) * 2);
  if (uVar4 < 8) {
    memcpy(_Dst,param_1,_Size);
    memcpy((void *)(_Size + (longlong)_Dst),param_4,param_5 * 2);
    *puVar2 = 0;
  }
  else {
    _Src = (void *)*param_1;
    memcpy(_Dst,_Src,_Size);
    memcpy((void *)(_Size + (longlong)_Dst),param_4,param_5 * 2);
    *puVar2 = 0;
    _Memory = _Src;
    if ((0xfff < uVar4 * 2 + 2) &&
       (_Memory = *(void **)((longlong)_Src + -8),
       0x1f < (ulonglong)((longlong)_Src + (-8 - (longlong)_Memory)))) {
LAB_180006800:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  *param_1 = _Dst;
  return param_1;
}


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

### EXPORT FUNC 180006860 (179 bytes) name=FUN_180006860

void FUN_180006860(undefined8 *param_1,ulonglong param_2)

{
  ulonglong uVar1;
  ulonglong uVar2;
  void *_Src;
  void *_Memory;
  
  uVar1 = param_1[2];
  if (uVar1 <= param_2) {
    uVar2 = param_1[3];
    if (uVar2 != param_2) {
      if (uVar2 < param_2) {
        FUN_180006ae0(param_1,param_2 - uVar1);
        param_1[2] = uVar1;
        return;
      }
      if ((param_2 < 8) && (7 < uVar2)) {
        _Src = (void *)*param_1;
        memcpy(param_1,_Src,uVar1 * 2 + 2);
        _Memory = _Src;
        if ((0xfff < param_1[3] * 2 + 2U) &&
           (_Memory = *(void **)((longlong)_Src + -8),
           0x1f < (ulonglong)((longlong)_Src + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
          _invalid_parameter_noinfo_noreturn();
        }
        free(_Memory);
        param_1[3] = 7;
      }
    }
  }
  return;
}


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

### EXPORT FUNC 180006920 (433 bytes) name=FUN_180006920

basic_ostream<char,std::char_traits<char>_> *
FUN_180006920(basic_ostream<char,std::char_traits<char>_> *param_1,char *param_2,ulonglong param_3)

{
  longlong *plVar1;
  basic_ostream<char,std::char_traits<char>_> *this;
  bool bVar2;
  int iVar3;
  ulonglong uVar4;
  longlong lVar5;
  int iVar6;
  longlong lVar7;
  
  iVar6 = 0;
  lVar5 = *(longlong *)param_1;
  uVar4 = *(ulonglong *)(param_1 + (longlong)*(int *)(lVar5 + 4) + 0x28);
  if (((longlong)uVar4 < 1) || (uVar4 <= param_3)) {
    lVar7 = 0;
  }
  else {
    lVar7 = uVar4 - param_3;
  }
  plVar1 = *(longlong **)(param_1 + (longlong)*(int *)(lVar5 + 4) + 0x48);
  if (plVar1 != (longlong *)0x0) {
    (**(code **)(*plVar1 + 8))(plVar1);
    lVar5 = *(longlong *)param_1;
  }
  if (*(int *)(param_1 + (longlong)*(int *)(lVar5 + 4) + 0x10) == 0) {
    this = *(basic_ostream<char,std::char_traits<char>_> **)
            (param_1 + (longlong)*(int *)(lVar5 + 4) + 0x50);
    if ((this == (basic_ostream<char,std::char_traits<char>_> *)0x0) || (this == param_1)) {
      bVar2 = true;
    }
    else {
      std::basic_ostream<char,std::char_traits<char>_>::flush(this);
      lVar5 = *(longlong *)param_1;
      bVar2 = *(int *)(param_1 + (longlong)*(int *)(lVar5 + 4) + 0x10) == 0;
    }
  }
  else {
    bVar2 = false;
  }
  if (bVar2) {
    if ((*(uint *)(param_1 + (longlong)*(int *)(lVar5 + 4) + 0x18) & 0x1c0) != 0x40) {
      for (; lVar7 != 0; lVar7 = lVar7 + -1) {
        iVar3 = std::basic_streambuf<char,std::char_traits<char>_>::sputc
                          (*(basic_streambuf<char,std::char_traits<char>_> **)
                            (param_1 + (longlong)*(int *)(*(longlong *)param_1 + 4) + 0x48),
                           (char)param_1[(longlong)*(int *)(*(longlong *)param_1 + 4) + 0x58]);
        if (iVar3 == -1) {
          iVar6 = 4;
          goto LAB_180006a12;
        }
      }
      lVar5 = *(longlong *)param_1;
    }
    uVar4 = std::basic_streambuf<char,std::char_traits<char>_>::sputn
                      (*(basic_streambuf<char,std::char_traits<char>_> **)
                        (param_1 + (longlong)*(int *)(lVar5 + 4) + 0x48),param_2,param_3);
    if (uVar4 == param_3) {
LAB_180006a12:
      do {
        if (lVar7 == 0) goto LAB_180006a3a;
        iVar3 = std::basic_streambuf<char,std::char_traits<char>_>::sputc
                          (*(basic_streambuf<char,std::char_traits<char>_> **)
                            (param_1 + (longlong)*(int *)(*(longlong *)param_1 + 4) + 0x48),
                           (char)param_1[(longlong)*(int *)(*(longlong *)param_1 + 4) + 0x58]);
        if (iVar3 == -1) break;
        lVar7 = lVar7 + -1;
      } while( true );
    }
    iVar6 = 4;
LAB_180006a3a:
    *(undefined8 *)(param_1 + (longlong)*(int *)(*(longlong *)param_1 + 4) + 0x28) = 0;
  }
  else {
    iVar6 = 4;
  }
  std::basic_ios<char,std::char_traits<char>_>::setstate
            ((basic_ios<char,std::char_traits<char>_> *)
             (param_1 + *(int *)(*(longlong *)param_1 + 4)),iVar6,false);
  bVar2 = std::uncaught_exception();
  if (!bVar2) {
    std::basic_ostream<char,std::char_traits<char>_>::_Osfx(param_1);
  }
  if (*(longlong **)(param_1 + (longlong)*(int *)(*(longlong *)param_1 + 4) + 0x48) !=
      (longlong *)0x0) {
    (**(code **)(**(longlong **)(param_1 + (longlong)*(int *)(*(longlong *)param_1 + 4) + 0x48) +
                0x10))();
  }
  return param_1;
}


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

### EXPORT FUNC 180006ae0 (354 bytes) name=FUN_180006ae0

undefined8 * FUN_180006ae0(undefined8 *param_1,ulonglong param_2)

{
  ulonglong uVar1;
  size_t _Size;
  longlong lVar2;
  ulonglong uVar3;
  void *_Src;
  longlong lVar4;
  ulonglong uVar5;
  ulonglong uVar6;
  void *_Memory;
  void *_Dst;
  
  lVar2 = param_1[2];
  if (0x7ffffffffffffffeU - lVar2 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_180002b40();
  }
  uVar3 = param_1[3];
  uVar5 = param_2 + lVar2 | 7;
  uVar6 = 0x7ffffffffffffffe;
  if (((uVar5 < 0x7fffffffffffffff) && (uVar3 <= 0x7ffffffffffffffe - (uVar3 >> 1))) &&
     (uVar1 = (uVar3 >> 1) + uVar3, uVar6 = uVar5, uVar5 < uVar1)) {
    uVar6 = uVar1;
  }
  uVar5 = uVar6 + 1;
  if (uVar6 == 0xffffffffffffffff) {
    uVar5 = 0xffffffffffffffff;
  }
  if (0x7fffffffffffffff < uVar5) {
LAB_180006c3f:
                    /* WARNING: Subroutine does not return */
    FUN_180001750();
  }
  uVar5 = uVar5 * 2;
  if (uVar5 < 0x1000) {
    if (uVar5 == 0) {
      _Dst = (void *)0x0;
    }
    else {
      _Dst = (void *)FUN_18000c554(uVar5);
    }
  }
  else {
    if (uVar5 + 0x27 <= uVar5) goto LAB_180006c3f;
    lVar4 = FUN_18000c554(uVar5 + 0x27);
    if (lVar4 == 0) goto LAB_180006c0c;
    _Dst = (void *)(lVar4 + 0x27U & 0xffffffffffffffe0);
    *(longlong *)((longlong)_Dst - 8) = lVar4;
  }
  param_1[2] = param_2 + lVar2;
  _Size = lVar2 * 2 + 2;
  param_1[3] = uVar6;
  if (uVar3 < 8) {
    memcpy(_Dst,param_1,_Size);
  }
  else {
    _Src = (void *)*param_1;
    memcpy(_Dst,_Src,_Size);
    _Memory = _Src;
    if ((0xfff < uVar3 * 2 + 2) &&
       (_Memory = *(void **)((longlong)_Src + -8),
       0x1f < (ulonglong)((longlong)_Src + (-8 - (longlong)_Memory)))) {
LAB_180006c0c:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  *param_1 = _Dst;
  return param_1;
}


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

### EXPORT FUNC 180006c50 (324 bytes) name=FUN_180006c50

undefined8 * FUN_180006c50(undefined8 *param_1,ulonglong param_2)

{
  ulonglong uVar1;
  longlong lVar2;
  ulonglong uVar3;
  void *_Src;
  longlong lVar4;
  size_t sVar5;
  ulonglong uVar6;
  ulonglong uVar7;
  void *_Memory;
  void *_Dst;
  
  lVar2 = param_1[2];
  if (0x7fffffffffffffffU - lVar2 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_180002b40();
  }
  uVar3 = param_1[3];
  uVar6 = param_2 + lVar2 | 0xf;
  uVar7 = 0x7fffffffffffffff;
  if (((uVar6 < 0x8000000000000000) && (uVar3 <= 0x7fffffffffffffff - (uVar3 >> 1))) &&
     (uVar1 = (uVar3 >> 1) + uVar3, uVar7 = uVar6, uVar6 < uVar1)) {
    uVar7 = uVar1;
  }
  sVar5 = uVar7 + 1;
  if (uVar7 == 0xffffffffffffffff) {
    sVar5 = 0xffffffffffffffff;
  }
  if (sVar5 < 0x1000) {
    if (sVar5 == 0) {
      _Dst = (void *)0x0;
    }
    else {
      _Dst = (void *)FUN_18000c554(sVar5);
    }
  }
  else {
    if (sVar5 + 0x27 <= sVar5) {
                    /* WARNING: Subroutine does not return */
      FUN_180001750();
    }
    lVar4 = FUN_18000c554(sVar5 + 0x27);
    if (lVar4 == 0) goto LAB_180006d5e;
    _Dst = (void *)(lVar4 + 0x27U & 0xffffffffffffffe0);
    *(longlong *)((longlong)_Dst - 8) = lVar4;
  }
  param_1[2] = param_2 + lVar2;
  param_1[3] = uVar7;
  if (uVar3 < 0x10) {
    memcpy(_Dst,param_1,lVar2 + 1U);
  }
  else {
    _Src = (void *)*param_1;
    memcpy(_Dst,_Src,lVar2 + 1U);
    _Memory = _Src;
    if ((0xfff < uVar3 + 1) &&
       (_Memory = *(void **)((longlong)_Src + -8),
       0x1f < (ulonglong)((longlong)_Src + (-8 - (longlong)_Memory)))) {
LAB_180006d5e:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  *param_1 = _Dst;
  return param_1;
}


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

### EXPORT FUNC 180006da0 (99 bytes) name=FUN_180006da0

void FUN_180006da0(undefined8 *param_1)

{
  longlong *plVar1;
  void *pvVar2;
  void *_Memory;
  
  plVar1 = (longlong *)*param_1;
  if (plVar1 != (longlong *)0x0) {
    if (0xf < (ulonglong)plVar1[3]) {
      pvVar2 = (void *)*plVar1;
      _Memory = pvVar2;
      if ((0xfff < plVar1[3] + 1U) &&
         (_Memory = *(void **)((longlong)pvVar2 + -8),
         0x1f < (ulonglong)((longlong)pvVar2 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(_Memory);
    }
    plVar1[2] = 0;
    plVar1[3] = 0xf;
    *(undefined1 *)plVar1 = 0;
  }
  return;
}


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

### EXPORT FUNC 180006e10 (102 bytes) name=FUN_180006e10

void FUN_180006e10(undefined8 *param_1)

{
  longlong *plVar1;
  void *pvVar2;
  void *_Memory;
  
  plVar1 = (longlong *)*param_1;
  if (plVar1 != (longlong *)0x0) {
    if (7 < (ulonglong)plVar1[3]) {
      pvVar2 = (void *)*plVar1;
      _Memory = pvVar2;
      if ((0xfff < plVar1[3] * 2 + 2U) &&
         (_Memory = *(void **)((longlong)pvVar2 + -8),
         0x1f < (ulonglong)((longlong)pvVar2 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(_Memory);
    }
    plVar1[3] = 7;
    plVar1[2] = 0;
    *(undefined2 *)plVar1 = 0;
  }
  return;
}


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

### EXPORT FUNC 180006e78 (12 bytes) name=FUN_180006e78

void FUN_180006e78(longlong param_1,uint param_2)

{
  FUN_180006200((basic_ios<char,std::char_traits<char>_> *)(param_1 - *(int *)(param_1 + -4)),
                param_2);
  return;
}


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

### EXPORT FUNC 180006e90 (95 bytes) name=FUN_180006e90

void FUN_180006e90(longlong *param_1)

{
  BOOL BVar1;
  longlong *plVar2;
  longlong local_98 [4];
  undefined8 local_78 [15];
  
  BVar1 = ReleaseMutex(*(HANDLE *)(*param_1 + 0x60));
  if (BVar1 != 0) {
    return;
  }
  plVar2 = FUN_180002510(local_98,
                         "C:\\Users\\Derek\\source\\repos\\EloThermal-windows\\ThermalSDK\\serial\\impl\\win.cc"
                        );
  FUN_180004310(local_78,plVar2,0x271,"Error releasing read mutex.");
                    /* WARNING: Subroutine does not return */
  _CxxThrowException(local_78,(ThrowInfo *)&DAT_1800134b8);
}


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

### EXPORT FUNC 180006f50 (419 bytes) name=FUN_180006f50

undefined8 * FUN_180006f50(undefined8 *param_1,char *param_2,undefined8 param_3,undefined8 *param_4)

{
  undefined8 *puVar1;
  char cVar2;
  longlong lVar3;
  ulonglong uVar4;
  ulonglong uVar5;
  undefined8 *puVar6;
  undefined8 *puVar7;
  HANDLE pvVar8;
  char *pcVar9;
  undefined8 uVar10;
  
  *param_1 = serial::Serial::vftable;
  uVar10 = param_3;
  puVar6 = (undefined8 *)FUN_18000c554(0x70);
  *puVar6 = 0;
  puVar6[1] = 0;
  puVar6[2] = 0;
  puVar6[3] = 0;
  puVar6[4] = 0;
  puVar6[5] = 0;
  puVar6[6] = 0;
  puVar6[7] = 0;
  puVar6[8] = 0;
  puVar6[9] = 0;
  puVar6[10] = 0;
  puVar6[0xb] = 0;
  puVar6[0xc] = 0;
  puVar6[0xd] = 0;
  *puVar6 = serial::Serial::SerialImpl::vftable;
  pcVar9 = param_2;
  if (0xf < *(ulonglong *)(param_2 + 0x18)) {
    pcVar9 = *(char **)param_2;
  }
  lVar3 = *(longlong *)(param_2 + 0x10);
  if (0xf < *(ulonglong *)(param_2 + 0x18)) {
    param_2 = *(char **)param_2;
  }
  puVar1 = puVar6 + 1;
  puVar6[3] = 0;
  puVar6[4] = 7;
  *(undefined2 *)puVar1 = 0;
  FUN_180006860(puVar1,(longlong)(pcVar9 + lVar3) - (longlong)param_2);
  for (; param_2 != pcVar9 + lVar3; param_2 = param_2 + 1) {
    cVar2 = *param_2;
    uVar4 = puVar6[3];
    uVar5 = puVar6[4];
    if (uVar4 < uVar5) {
      puVar6[3] = uVar4 + 1;
      puVar7 = puVar1;
      if (7 < uVar5) {
        puVar7 = (undefined8 *)*puVar1;
      }
      *(short *)((longlong)puVar7 + uVar4 * 2) = (short)cVar2;
      *(undefined2 *)((longlong)puVar7 + uVar4 * 2 + 2) = 0;
    }
    else {
      FUN_180006500(puVar1,uVar5,uVar10,(short)cVar2);
    }
  }
  puVar6[5] = 0xffffffffffffffff;
  *(undefined1 *)(puVar6 + 6) = 0;
  *(undefined8 *)((longlong)puVar6 + 0x34) = 0;
  *(undefined8 *)((longlong)puVar6 + 0x3c) = 0;
  *(undefined4 *)((longlong)puVar6 + 0x44) = 0;
  *(int *)(puVar6 + 9) = (int)param_3;
  *(undefined4 *)((longlong)puVar6 + 0x4c) = 0;
  *(undefined4 *)(puVar6 + 10) = 8;
  *(undefined8 *)((longlong)puVar6 + 0x54) = 1;
  if (puVar6[3] != 0) {
    FUN_180005040((longlong)puVar6);
  }
  pvVar8 = CreateMutexW((LPSECURITY_ATTRIBUTES)0x0,0,(LPCWSTR)0x0);
  puVar6[0xc] = pvVar8;
  pvVar8 = CreateMutexW((LPSECURITY_ATTRIBUTES)0x0,0,(LPCWSTR)0x0);
  puVar6[0xd] = pvVar8;
  param_1[1] = puVar6;
  uVar10 = param_4[1];
  *(undefined8 *)((longlong)puVar6 + 0x34) = *param_4;
  *(undefined8 *)((longlong)puVar6 + 0x3c) = uVar10;
  *(undefined4 *)((longlong)puVar6 + 0x44) = *(undefined4 *)(param_4 + 2);
  if (*(char *)(puVar6 + 6) != '\0') {
    FUN_1800053c0((longlong)puVar6);
  }
  return param_1;
}


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

### EXPORT FUNC 180007100 (77 bytes) name=FUN_180007100

undefined8 * FUN_180007100(undefined8 *param_1,uint param_2)

{
  undefined8 *puVar1;
  
  *param_1 = serial::Serial::vftable;
  puVar1 = (undefined8 *)param_1[1];
  if (puVar1 != (undefined8 *)0x0) {
    (**(code **)*puVar1)(puVar1,1);
  }
  if ((param_2 & 1) != 0) {
    free(param_1);
  }
  return param_1;
}


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

### EXPORT FUNC 180007150 (298 bytes) name=FUN_180007150

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

DWORD FUN_180007150(longlong param_1,LPCVOID param_2,DWORD param_3)

{
  BOOL BVar1;
  DWORD DVar2;
  basic_ostream<char,std::char_traits<char>_> *this;
  longlong *plVar3;
  longlong *plVar4;
  char *pcVar5;
  undefined1 auStackY_248 [32];
  longlong local_210 [4];
  undefined8 local_1f0 [7];
  longlong local_1b8 [4];
  undefined8 local_198 [14];
  DWORD local_128 [4];
  basic_iostream<char,std::char_traits<char>_> local_118 [16];
  basic_ostream<char,std::char_traits<char>_> local_108 [240];
  ulonglong local_18;
  
  local_18 = DAT_180015010 ^ (ulonglong)auStackY_248;
  if (*(char *)(*(longlong *)(param_1 + 8) + 0x30) == '\0') {
    FUN_1800048a0(local_1f0,"Serial::write");
                    /* WARNING: Subroutine does not return */
    _CxxThrowException(local_1f0,(ThrowInfo *)&DAT_1800134d8);
  }
  BVar1 = WriteFile(*(HANDLE *)(*(longlong *)(param_1 + 8) + 0x28),param_2,param_3,local_128,
                    (LPOVERLAPPED)0x0);
  if (BVar1 != 0) {
    return local_128[0];
  }
  FUN_180004300(local_118);
  FUN_1800060f0(local_118);
  DVar2 = GetLastError();
  this = FUN_180006310(local_108,"Error while writing to the serial port: ");
  std::basic_ostream<char,std::char_traits<char>_>::operator<<(this,DVar2);
  plVar3 = FUN_180006050((longlong)local_118,local_1b8);
  plVar4 = FUN_180002510(local_210,
                         "C:\\Users\\Derek\\source\\repos\\EloThermal-windows\\ThermalSDK\\serial\\impl\\win.cc"
                        );
  pcVar5 = (char *)FUN_1800061b0(plVar3);
  FUN_180004310(local_198,plVar4,0x163,pcVar5);
                    /* WARNING: Subroutine does not return */
  _CxxThrowException(local_198,(ThrowInfo *)&DAT_1800134b8);
}


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

### EXPORT FUNC 180007280 (131 bytes) name=FUN_180007280

void FUN_180007280(longlong *param_1,longlong param_2,longlong param_3,longlong param_4)

{
  void *pvVar1;
  void *_Memory;
  
  pvVar1 = (void *)*param_1;
  if (pvVar1 != (void *)0x0) {
    _Memory = pvVar1;
    if ((0xfff < (ulonglong)(param_1[2] - (longlong)pvVar1)) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  *param_1 = param_2;
  param_1[1] = param_2 + param_3;
  param_1[2] = param_2 + param_4;
  return;
}


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

### EXPORT FUNC 180007310 (15 bytes) name=FUN_180007310

void FUN_180007310(undefined8 *param_1)

{
  (**(code **)*param_1)();
  return;
}


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

### EXPORT FUNC 180007320 (52 bytes) name=FUN_180007320

longlong * FUN_180007320(longlong *param_1,uint param_2)

{
  FUN_180007360(param_1);
  if ((param_2 & 1) != 0) {
    free(param_1);
  }
  return param_1;
}


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

### EXPORT FUNC 180007360 (138 bytes) name=FUN_180007360

void FUN_180007360(longlong *param_1)

{
  undefined8 *puVar1;
  char cVar2;
  
  *param_1 = (longlong)SerialPort::vftable;
  if ((param_1[4] != 0) && ((char)param_1[3] == '\x01')) {
    cVar2 = (**(code **)(*param_1 + 0x28))();
    if (cVar2 != '\0') {
      *(undefined1 *)(param_1 + 3) = 0;
      FUN_180005790(*(longlong *)(param_1[4] + 8));
      puVar1 = (undefined8 *)param_1[4];
      if (puVar1 != (undefined8 *)0x0) {
        (**(code **)*puVar1)(puVar1,1);
      }
      param_1[4] = 0;
    }
  }
  puVar1 = (undefined8 *)param_1[4];
  if (puVar1 != (undefined8 *)0x0) {
    (**(code **)*puVar1)(puVar1,1);
  }
  param_1[4] = 0;
  if ((int)param_1[2] != 0) {
                    /* WARNING: Subroutine does not return */
    terminate();
  }
  return;
}


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

### EXPORT FUNC 1800073f0 (289 bytes) name=FUN_1800073f0

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

ulonglong FUN_1800073f0(longlong *param_1,char *param_2,ulonglong param_3)

{
  char cVar1;
  undefined8 *puVar2;
  ulonglong uVar3;
  ulonglong extraout_RAX;
  undefined1 auStackY_98 [32];
  uintptr_t local_58;
  ulonglong uStack_50;
  undefined4 local_48;
  longlong *local_38;
  undefined8 *local_30;
  ulonglong local_28;
  
  local_28 = DAT_180015010 ^ (ulonglong)auStackY_98;
  local_38 = param_1;
  cVar1 = (**(code **)(*param_1 + 0x28))();
  if (cVar1 != '\0') {
    (**(code **)(*param_1 + 0x20))(param_1);
  }
  local_30 = (undefined8 *)FUN_18000c554(0x10);
  *local_30 = 0;
  local_30[1] = 0;
  local_58 = 0;
  uStack_50 = 0;
  local_48 = 0;
  puVar2 = FUN_180006f50(local_30,param_2,param_3 & 0xffffffff,&local_58);
  param_1[4] = (longlong)puVar2;
  local_30 = (undefined8 *)FUN_18000c554(0x10);
  *local_30 = param_1;
  local_30[1] = FUN_180007310;
  local_58 = _beginthreadex((void *)0x0,0,FUN_180007930,local_30,0,(uint *)&uStack_50);
  if (local_58 == 0) {
    uStack_50 = uStack_50 & 0xffffffff00000000;
    std::_Throw_Cpp_error(6);
    uVar3 = extraout_RAX & 0xffffffffffffff00;
  }
  else {
    if ((int)param_1[2] != 0) {
                    /* WARNING: Subroutine does not return */
      terminate();
    }
    param_1[1] = local_58;
    param_1[2] = uStack_50;
    uVar3 = CONCAT71((int7)(local_58 >> 8),1);
  }
  return uVar3;
}


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

### EXPORT FUNC 180007520 (69 bytes) name=FUN_180007520

void FUN_180007520(longlong *param_1)

{
  undefined8 *puVar1;
  char cVar2;
  
  cVar2 = (**(code **)(*param_1 + 0x28))();
  if (cVar2 != '\0') {
    *(undefined1 *)(param_1 + 3) = 0;
    FUN_180005790(*(longlong *)(param_1[4] + 8));
    puVar1 = (undefined8 *)param_1[4];
    if (puVar1 != (undefined8 *)0x0) {
      (**(code **)*puVar1)(puVar1,1);
    }
    param_1[4] = 0;
  }
  return;
}


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

### EXPORT FUNC 180007570 (19 bytes) name=FUN_180007570

ulonglong FUN_180007570(longlong param_1)

{
  ulonglong in_RAX;
  
  if (*(longlong *)(param_1 + 0x20) != 0) {
    in_RAX = 0;
    if (*(char *)(param_1 + 0x18) == '\x01') {
      return 1;
    }
  }
  return in_RAX & 0xffffffffffffff00;
}


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

### EXPORT FUNC 180007590 (292 bytes) name=FUN_180007590

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

DWORD FUN_180007590(longlong *param_1,LPCVOID param_2,DWORD param_3)

{
  longlong lVar1;
  longlong lVar2;
  char cVar3;
  DWORD DVar4;
  BOOL BVar5;
  longlong *plVar6;
  undefined1 auStack_168 [32];
  longlong local_148 [4];
  longlong local_128 [4];
  undefined8 local_108 [14];
  undefined8 local_98 [14];
  longlong local_28;
  ulonglong local_20;
  
  local_20 = DAT_180015010 ^ (ulonglong)auStack_168;
  cVar3 = (**(code **)(*param_1 + 0x28))();
  if (cVar3 == '\0') {
    DVar4 = 0xffffffff;
  }
  else {
    lVar1 = param_1[4];
    lVar2 = *(longlong *)(lVar1 + 8);
    local_28 = lVar2;
    DVar4 = WaitForSingleObject(*(HANDLE *)(lVar2 + 0x68),0xffffffff);
    if (DVar4 != 0) {
      plVar6 = FUN_180002510(local_148,
                             "C:\\Users\\Derek\\source\\repos\\EloThermal-windows\\ThermalSDK\\serial\\impl\\win.cc"
                            );
      FUN_180004310(local_108,plVar6,0x279,"Error claiming write mutex.");
                    /* WARNING: Subroutine does not return */
      _CxxThrowException(local_108,(ThrowInfo *)&DAT_1800134b8);
    }
    DVar4 = FUN_180007150(lVar1,param_2,param_3);
    BVar5 = ReleaseMutex(*(HANDLE *)(lVar2 + 0x68));
    if (BVar5 == 0) {
      plVar6 = FUN_180002510(local_128,
                             "C:\\Users\\Derek\\source\\repos\\EloThermal-windows\\ThermalSDK\\serial\\impl\\win.cc"
                            );
      FUN_180004310(local_98,plVar6,0x281,"Error releasing write mutex.");
                    /* WARNING: Subroutine does not return */
      _CxxThrowException(local_98,(ThrowInfo *)&DAT_1800134b8);
    }
  }
  return DVar4;
}


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

### EXPORT FUNC 1800076c0 (579 bytes) name=FUN_1800076c0

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

void FUN_1800076c0(longlong param_1)

{
  char cVar1;
  longlong lVar2;
  longlong lVar3;
  undefined8 *puVar4;
  DWORD DVar5;
  DWORD DVar6;
  BOOL BVar7;
  basic_ostream<char,std::char_traits<char>_> *this;
  longlong *plVar8;
  char *pcVar9;
  longlong *plVar10;
  undefined1 auStack_738 [32];
  longlong local_718 [4];
  longlong local_6f8 [4];
  longlong local_6d8 [4];
  longlong local_6b8 [4];
  undefined8 local_698 [14];
  undefined8 local_628 [14];
  undefined8 local_5b8 [14];
  longlong local_548;
  _COMSTAT local_540 [2];
  basic_iostream<char,std::char_traits<char>_> local_528 [16];
  basic_ostream<char,std::char_traits<char>_> local_518 [240];
  undefined1 local_428 [1024];
  ulonglong local_28;
  
  local_28 = DAT_180015010 ^ (ulonglong)auStack_738;
  *(undefined1 *)(param_1 + 0x18) = 1;
  cVar1 = *(char *)(param_1 + 0x18);
  do {
    if (cVar1 == '\0') {
      return;
    }
    lVar2 = *(longlong *)(*(longlong *)(param_1 + 0x20) + 8);
    if (*(char *)(lVar2 + 0x30) == '\0') {
      DVar6 = 0;
    }
    else {
      BVar7 = ClearCommError(*(HANDLE *)(lVar2 + 0x28),(LPDWORD)0x0,local_540);
      DVar6 = local_540[0].cbInQue;
      if (BVar7 == 0) {
        FUN_180004300(local_528);
        FUN_1800060f0(local_528);
        DVar6 = GetLastError();
        this = FUN_180006310(local_518,"Error while checking status of the serial port: ");
        std::basic_ostream<char,std::char_traits<char>_>::operator<<(this,DVar6);
        plVar10 = FUN_180006050((longlong)local_528,local_6b8);
        plVar8 = FUN_180002510(local_6d8,
                               "C:\\Users\\Derek\\source\\repos\\EloThermal-windows\\ThermalSDK\\serial\\impl\\win.cc"
                              );
        pcVar9 = (char *)FUN_1800061b0(plVar10);
        FUN_180004310(local_5b8,plVar8,0x138,pcVar9);
                    /* WARNING: Subroutine does not return */
        _CxxThrowException(local_5b8,(ThrowInfo *)&DAT_1800134b8);
      }
    }
    if (0 < (int)DVar6) {
      memset(local_428,0,0x400);
      if (0x400 < (int)DVar6) {
        DVar6 = 0x400;
      }
      lVar2 = *(longlong *)(param_1 + 0x20);
      lVar3 = *(longlong *)(lVar2 + 8);
      local_548 = lVar3;
      DVar5 = WaitForSingleObject(*(HANDLE *)(lVar3 + 0x60),0xffffffff);
      if (DVar5 != 0) {
        plVar10 = FUN_180002510(local_6f8,
                                "C:\\Users\\Derek\\source\\repos\\EloThermal-windows\\ThermalSDK\\serial\\impl\\win.cc"
                               );
        FUN_180004310(local_628,plVar10,0x269,"Error claiming read mutex.");
                    /* WARNING: Subroutine does not return */
        _CxxThrowException(local_628,(ThrowInfo *)&DAT_1800134b8);
      }
      DVar6 = FUN_180005890(*(longlong *)(lVar2 + 8),local_428,DVar6);
      BVar7 = ReleaseMutex(*(HANDLE *)(lVar3 + 0x60));
      if (BVar7 == 0) {
        plVar10 = FUN_180002510(local_718,
                                "C:\\Users\\Derek\\source\\repos\\EloThermal-windows\\ThermalSDK\\serial\\impl\\win.cc"
                               );
        FUN_180004310(local_698,plVar10,0x271,"Error releasing read mutex.");
                    /* WARNING: Subroutine does not return */
        _CxxThrowException(local_698,(ThrowInfo *)&DAT_1800134b8);
      }
      puVar4 = *(undefined8 **)(param_1 + 0x28);
      if (puVar4 != (undefined8 *)0x0) {
        (**(code **)*puVar4)(puVar4,local_428,DVar6);
      }
    }
    cVar1 = *(char *)(param_1 + 0x18);
  } while( true );
}


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

### EXPORT FUNC 180007930 (45 bytes) name=FUN_180007930

undefined8 FUN_180007930(undefined8 *param_1)

{
  (*(code *)param_1[1])(*param_1);
  _Cnd_do_broadcast_at_thread_exit();
  free(param_1);
  return 0;
}


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

### EXPORT FUNC 180007960 (85 bytes) name=FUN_180007960

void FUN_180007960(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  undefined8 uVar1;
  undefined8 *puVar2;
  undefined8 local_res10;
  undefined8 local_res18;
  undefined8 local_res20;
  
  local_res10 = param_2;
  local_res18 = param_3;
  local_res20 = param_4;
  uVar1 = __acrt_iob_func(1);
  puVar2 = (undefined8 *)FUN_180002fc0();
  __stdio_common_vfprintf(*puVar2,uVar1,param_1,0,&local_res10);
  return;
}


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

### EXPORT FUNC 1800079c0 (119 bytes) name=FUN_1800079c0

undefined8 * FUN_1800079c0(undefined8 *param_1,ulonglong param_2)

{
  void *_Memory;
  
  *param_1 = TCMVirtualDevice::vftable;
  _Mtx_destroy_in_situ(param_1 + 0x10);
  _Cnd_destroy_in_situ(param_1 + 7);
  FUN_180002550((longlong)(param_1 + 1));
  _Memory = (void *)param_1[1];
  param_1[1] = 0;
  free(_Memory);
  if ((param_2 & 1) != 0) {
    free(param_1);
  }
  return param_1;
}


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

### EXPORT FUNC 180007a40 (651 bytes) name=FUN_180007a40

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

ulonglong FUN_180007a40(longlong param_1,int param_2)

{
  longlong lVar1;
  byte bVar2;
  undefined8 *puVar3;
  code *pcVar4;
  bool bVar5;
  int iVar6;
  undefined8 *puVar7;
  ulonglong uVar8;
  longlong lVar9;
  void *_Memory;
  char *pcVar10;
  char cVar11;
  longlong *plVar12;
  void **ppvVar13;
  undefined1 auStack_88 [32];
  char local_68 [8];
  void *local_60;
  char *pcStack_58;
  char *local_50;
  undefined8 *local_48;
  undefined8 uStack_40;
  longlong local_38;
  int local_30;
  ulonglong local_28;
  
  local_28 = DAT_180015010 ^ (ulonglong)auStack_88;
  if (param_2 == 0) {
    uVar8 = CONCAT71((int7)(local_28 >> 8),1);
  }
  else {
    iVar6 = 0x80;
    if ((param_2 < 0x81) && (iVar6 = param_2, param_2 < -0x80)) {
      iVar6 = -0x80;
    }
    local_60 = (void *)0x0;
    pcStack_58 = (char *)0x0;
    local_50 = (char *)0x0;
    cVar11 = (char)iVar6;
    if (iVar6 < 0) {
      local_68[0] = '\x01';
      FUN_180007d30((longlong *)&local_60,(void *)0x0,local_68);
      local_68[0] = -cVar11;
      if (pcStack_58 == local_50) {
        pcVar10 = pcStack_58;
        FUN_180007d30((longlong *)&local_60,pcStack_58,local_68);
      }
      else {
        *pcStack_58 = local_68[0];
        pcVar10 = pcStack_58 + 1;
        pcStack_58 = pcVar10;
      }
    }
    else {
      local_68[0] = '\0';
      FUN_180007d30((longlong *)&local_60,(void *)0x0,local_68);
      local_68[0] = cVar11;
      if (pcStack_58 == local_50) {
        pcVar10 = pcStack_58;
        FUN_180007d30((longlong *)&local_60,pcStack_58,local_68);
      }
      else {
        *pcStack_58 = cVar11;
        pcVar10 = pcStack_58 + 1;
        pcStack_58 = pcVar10;
      }
    }
    *(undefined1 *)(param_1 + 0x30) = 0;
    puVar7 = (undefined8 *)FUN_18000c554(0x28);
    *puVar7 = 0;
    puVar7[1] = 0;
    puVar7[2] = 0;
    puVar7[3] = 0;
    puVar7[4] = 0;
    *puVar7 = FTDICommand::vftable;
    puVar7[1] = 0;
    puVar7[2] = 0;
    puVar7[3] = 0;
    ppvVar13 = &local_60;
    local_48 = puVar7;
    FUN_180009d70((longlong)puVar7,pcVar10,0x77,(longlong *)ppvVar13);
    puVar3 = *(undefined8 **)(param_1 + 0xd0);
    if (puVar3 != (undefined8 *)0x0) {
      ppvVar13 = (void **)*puVar3;
      (*ppvVar13[1])(puVar3,puVar7[1],puVar7[2] - puVar7[1]);
    }
    bVar5 = true;
    (**(code **)*puVar7)(puVar7,1);
    lVar1 = param_1 + 0x80;
    uStack_40 = 0;
    local_48 = (undefined8 *)lVar1;
    iVar6 = _Mtx_lock(lVar1);
    if (iVar6 != 0) {
      std::_Throw_C_error(iVar6);
      pcVar4 = (code *)swi(3);
      uVar8 = (*pcVar4)();
      return uVar8;
    }
    uStack_40 = CONCAT71(uStack_40._1_7_,1);
    lVar9 = _Xtime_get_ticks();
    lVar9 = (lVar9 + 1000000) * 100;
    local_38 = lVar9 / 1000000000;
    local_30 = (int)lVar9 + (int)local_38 * -1000000000;
    iVar6 = _Mtx_current_owns(lVar1);
    if (iVar6 == 0) {
      std::_Throw_Cpp_error(4);
      pcVar4 = (code *)swi(3);
      uVar8 = (*pcVar4)();
      return uVar8;
    }
    plVar12 = &local_38;
    lVar9 = lVar1;
    iVar6 = _Cnd_timedwait(param_1 + 0x38);
    if (iVar6 == 0) {
      bVar5 = false;
    }
    else if (iVar6 != 2) {
      std::_Throw_C_error(iVar6);
      pcVar4 = (code *)swi(3);
      uVar8 = (*pcVar4)();
      return uVar8;
    }
    if (DAT_180015ff0 != '\0') {
      if (bVar5) {
        FUN_180007960("EloMotorDevice timeout\n",lVar9,plVar12,ppvVar13);
      }
      else {
        FUN_180007960("EloMotorDevice:%d\n",(ulonglong)*(byte *)(param_1 + 0x30),plVar12,ppvVar13);
      }
    }
    bVar2 = *(byte *)(param_1 + 0x30);
    iVar6 = _Mtx_unlock(lVar1);
    if (iVar6 != 0) {
      std::_Throw_C_error(iVar6);
    }
    if (local_60 != (void *)0x0) {
      _Memory = local_60;
      if ((0xfff < (ulonglong)((longlong)local_50 - (longlong)local_60)) &&
         (_Memory = *(void **)((longlong)local_60 + -8),
         0x1f < (ulonglong)((longlong)local_60 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(_Memory);
    }
    uVar8 = (ulonglong)bVar2;
  }
  return uVar8;
}


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

### EXPORT FUNC 180007cd0 (17 bytes) name=FUN_180007cd0

undefined1 FUN_180007cd0(undefined8 param_1,char param_2,char param_3)

{
  if ((param_2 == '\x02') && (param_3 == 'w')) {
    return 1;
  }
  return 0;
}


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

### EXPORT FUNC 180007cf0 (57 bytes) name=FUN_180007cf0

void FUN_180007cf0(longlong param_1,longlong *param_2)

{
  longlong lVar1;
  int iVar2;
  
  lVar1 = *param_2;
  if ((*(char *)(lVar1 + 4) == '\x02') && (*(char *)(lVar1 + 5) == 'w')) {
    *(bool *)(param_1 + 0x30) = *(char *)(lVar1 + 8) == '\x01';
    iVar2 = _Cnd_broadcast(param_1 + 0x38);
    if (iVar2 != 0) {
      std::_Throw_C_error(iVar2);
    }
  }
  return;
}


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

### EXPORT FUNC 180007d30 (308 bytes) name=FUN_180007d30

undefined1 * FUN_180007d30(longlong *param_1,void *param_2,undefined1 *param_3)

{
  longlong lVar1;
  void *_Src;
  ulonglong uVar2;
  longlong lVar3;
  undefined1 *_Dst;
  ulonglong uVar4;
  ulonglong uVar5;
  undefined1 *_Dst_00;
  size_t _Size;
  undefined1 *puVar6;
  
  lVar1 = *param_1;
  if (param_1[1] - lVar1 == 0x7fffffffffffffff) {
                    /* WARNING: Subroutine does not return */
    FUN_180002b80();
  }
  uVar5 = (param_1[1] - lVar1) + 1;
  uVar2 = param_1[2] - lVar1;
  uVar4 = uVar5;
  if ((uVar2 <= 0x7fffffffffffffff - (uVar2 >> 1)) && (uVar4 = (uVar2 >> 1) + uVar2, uVar4 < uVar5))
  {
    uVar4 = uVar5;
  }
  if (uVar4 < 0x1000) {
    if (uVar4 == 0) {
      _Dst_00 = (undefined1 *)0x0;
    }
    else {
      _Dst_00 = (undefined1 *)FUN_18000c554(uVar4);
    }
  }
  else {
    if (uVar4 + 0x27 <= uVar4) {
                    /* WARNING: Subroutine does not return */
      FUN_180001750();
    }
    lVar3 = FUN_18000c554(uVar4 + 0x27);
    if (lVar3 == 0) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    _Dst_00 = (undefined1 *)(lVar3 + 0x27U & 0xffffffffffffffe0);
    *(longlong *)(_Dst_00 + -8) = lVar3;
  }
  puVar6 = _Dst_00 + ((longlong)param_2 - lVar1);
  *puVar6 = *param_3;
  _Src = (void *)*param_1;
  if (param_2 == (void *)param_1[1]) {
    _Size = param_1[1] - (longlong)_Src;
    _Dst = _Dst_00;
    param_2 = _Src;
  }
  else {
    memmove(_Dst_00,_Src,(longlong)param_2 - (longlong)_Src);
    _Dst = puVar6 + 1;
    _Size = param_1[1] - (longlong)param_2;
  }
  memmove(_Dst,param_2,_Size);
  FUN_180007280(param_1,(longlong)_Dst_00,uVar5,uVar4);
  return puVar6;
}


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

### EXPORT FUNC 180007e70 (119 bytes) name=FUN_180007e70

undefined8 * FUN_180007e70(undefined8 *param_1,ulonglong param_2)

{
  void *_Memory;
  
  *param_1 = TCMVirtualDevice::vftable;
  _Mtx_destroy_in_situ(param_1 + 0x10);
  _Cnd_destroy_in_situ(param_1 + 7);
  FUN_180002550((longlong)(param_1 + 1));
  _Memory = (void *)param_1[1];
  param_1[1] = 0;
  free(_Memory);
  if ((param_2 & 1) != 0) {
    free(param_1);
  }
  return param_1;
}


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

### EXPORT FUNC 180007ef0 (17 bytes) name=FUN_180007ef0

undefined1 FUN_180007ef0(undefined8 param_1,char param_2,char param_3)

{
  if ((param_2 == '\x02') && (param_3 == 'x')) {
    return 1;
  }
  return 0;
}


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

### EXPORT FUNC 180007f10 (60 bytes) name=FUN_180007f10

void FUN_180007f10(longlong param_1,longlong *param_2)

{
  longlong lVar1;
  undefined8 *puVar2;
  ulonglong uVar3;
  
  lVar1 = *param_2;
  if ((*(char *)(lVar1 + 4) == '\x02') && (*(char *)(lVar1 + 5) == 'x')) {
    if (*(char *)(lVar1 + 8) == '\0') {
      uVar3 = 0xffffffff;
    }
    else {
      uVar3 = (ulonglong)CONCAT11(*(undefined1 *)(lVar1 + 9),*(undefined1 *)(lVar1 + 10));
    }
    puVar2 = *(undefined8 **)(param_1 + 0xd8);
    if (puVar2 != (undefined8 *)0x0) {
                    /* WARNING: Could not recover jumptable at 0x000180007f48. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      (**(code **)*puVar2)(puVar2,uVar3);
      return;
    }
  }
  return;
}


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

### EXPORT FUNC 180007f50 (17 bytes) name=FUN_180007f50

undefined1 FUN_180007f50(undefined8 param_1,char param_2,char param_3)

{
  if ((param_2 == '\x02') && (param_3 == 'P')) {
    return 1;
  }
  return 0;
}


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

### EXPORT FUNC 180007f70 (57 bytes) name=FUN_180007f70

void FUN_180007f70(longlong param_1,longlong *param_2)

{
  longlong lVar1;
  int iVar2;
  
  lVar1 = *param_2;
  if ((*(char *)(lVar1 + 4) == '\x02') && (*(char *)(lVar1 + 5) == 'P')) {
    *(bool *)(param_1 + 0x30) = *(char *)(lVar1 + 8) == '\x01';
    iVar2 = _Cnd_broadcast(param_1 + 0x38);
    if (iVar2 != 0) {
      std::_Throw_C_error(iVar2);
    }
  }
  return;
}


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

### EXPORT FUNC 180007fb0 (17 bytes) name=FUN_180007fb0

undefined1 FUN_180007fb0(undefined8 param_1,char param_2,char param_3)

{
  if ((param_2 == '\x02') && (param_3 == '1')) {
    return 1;
  }
  return 0;
}


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

### EXPORT FUNC 180007fd0 (57 bytes) name=FUN_180007fd0

void FUN_180007fd0(longlong param_1,longlong *param_2)

{
  longlong lVar1;
  int iVar2;
  
  lVar1 = *param_2;
  if ((*(char *)(lVar1 + 4) == '\x02') && (*(char *)(lVar1 + 5) == '1')) {
    *(bool *)(param_1 + 0x30) = *(char *)(lVar1 + 8) == '\x01';
    iVar2 = _Cnd_broadcast(param_1 + 0x38);
    if (iVar2 != 0) {
      std::_Throw_C_error(iVar2);
    }
  }
  return;
}


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

### EXPORT FUNC 180008010 (17 bytes) name=FUN_180008010

undefined1 FUN_180008010(undefined8 param_1,char param_2,char param_3)

{
  if ((param_2 == '\x02') && (param_3 == 'A')) {
    return 1;
  }
  return 0;
}


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

### EXPORT FUNC 180008030 (57 bytes) name=FUN_180008030

void FUN_180008030(longlong param_1,longlong *param_2)

{
  longlong lVar1;
  int iVar2;
  
  lVar1 = *param_2;
  if ((*(char *)(lVar1 + 4) == '\x02') && (*(char *)(lVar1 + 5) == 'A')) {
    *(bool *)(param_1 + 0x30) = *(char *)(lVar1 + 8) == '\x01';
    iVar2 = _Cnd_broadcast(param_1 + 0x38);
    if (iVar2 != 0) {
      std::_Throw_C_error(iVar2);
    }
  }
  return;
}


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

### EXPORT FUNC 180008070 (52 bytes) name=FUN_180008070

undefined8 * FUN_180008070(undefined8 *param_1,uint param_2)

{
  FUN_1800080b0(param_1);
  if ((param_2 & 1) != 0) {
    free(param_1);
  }
  return param_1;
}


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

### EXPORT FUNC 1800080b0 (470 bytes) name=FUN_1800080b0

void FUN_1800080b0(undefined8 *param_1)

{
  undefined8 *_Memory;
  void *pvVar1;
  void *pvVar2;
  
  _Memory = (undefined8 *)param_1[0x1e];
  *param_1 = EloTCMScannerDevice::vftable;
  param_1[0x1b] = EloTCMScannerDevice::vftable;
  if (_Memory != (undefined8 *)0x0) {
    *_Memory = HoneywellUpdaterDevice::vftable;
    _Mtx_destroy_in_situ(_Memory + 0x14);
    _Cnd_destroy_in_situ(_Memory + 0xb);
    FUN_180002550((longlong)(_Memory + 4));
    pvVar1 = (void *)_Memory[4];
    _Memory[4] = 0;
    free(pvVar1);
    pvVar1 = (void *)_Memory[1];
    if (pvVar1 != (void *)0x0) {
      pvVar2 = pvVar1;
      if ((0xfff < (ulonglong)(_Memory[3] - (longlong)pvVar1)) &&
         (pvVar2 = *(void **)((longlong)pvVar1 + -8),
         0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)pvVar2)))) goto LAB_180008280;
      free(pvVar2);
      _Memory[1] = 0;
      _Memory[2] = 0;
      _Memory[3] = 0;
    }
    free(_Memory);
    param_1[0x1e] = 0;
  }
  pvVar1 = (void *)param_1[0x23];
  if (pvVar1 != (void *)0x0) {
    pvVar2 = pvVar1;
    if ((0xfff < (ulonglong)(param_1[0x25] - (longlong)pvVar1)) &&
       (pvVar2 = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)pvVar2)))) goto LAB_180008280;
    free(pvVar2);
    param_1[0x23] = 0;
    param_1[0x24] = 0;
    param_1[0x25] = 0;
  }
  if (0xf < (ulonglong)param_1[0x22]) {
    pvVar1 = (void *)param_1[0x1f];
    pvVar2 = pvVar1;
    if ((0xfff < param_1[0x22] + 1) &&
       (pvVar2 = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)pvVar2)))) {
LAB_180008280:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(pvVar2);
  }
  param_1[0x21] = 0;
  param_1[0x22] = 0xf;
  *(undefined1 *)(param_1 + 0x1f) = 0;
  *param_1 = TCMVirtualDevice::vftable;
  _Mtx_destroy_in_situ(param_1 + 0x10);
  _Cnd_destroy_in_situ(param_1 + 7);
  FUN_180002550((longlong)(param_1 + 1));
  pvVar1 = (void *)param_1[1];
  param_1[1] = 0;
  free(pvVar1);
  return;
}


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

### EXPORT FUNC 180008290 (50 bytes) name=FUN_180008290

ulonglong FUN_180008290(undefined8 param_1,char param_2,byte param_3)

{
  uint uVar1;
  ulonglong in_RAX;
  undefined7 in_register_00000081;
  
  if (param_2 == -0x7f) {
    if (param_3 == 3) {
LAB_1800082bf:
      return CONCAT71((int7)(in_RAX >> 8),1);
    }
  }
  else if (param_2 == '\x02') {
    uVar1 = (int)CONCAT71(in_register_00000081,param_3) - 0x60;
    in_RAX = (ulonglong)uVar1;
    if ((((byte)uVar1 < 0x10) && ((0xa3ffU >> (uVar1 & 0x1f) & 1) != 0)) ||
       ((byte)(param_3 - 8) < 4)) goto LAB_1800082bf;
  }
  return in_RAX & 0xffffffffffffff00;
}


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

### EXPORT FUNC 1800082d0 (1870 bytes) name=FUN_1800082d0

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

void FUN_1800082d0(longlong param_1,longlong *param_2)

{
  undefined1 *puVar1;
  undefined2 *puVar2;
  char cVar3;
  char cVar4;
  undefined1 uVar5;
  void *_Src;
  ulonglong uVar6;
  undefined *******pppppppuVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  int iVar10;
  undefined8 uVar11;
  undefined8 **ppuVar12;
  longlong lVar13;
  longlong lVar14;
  ulonglong uVar15;
  undefined ********ppppppppuVar16;
  ulonglong uVar17;
  undefined1 *puVar18;
  size_t sVar19;
  longlong lVar20;
  undefined1 auStack_a8 [32];
  undefined1 local_88 [8];
  undefined8 *local_80;
  undefined *******local_78;
  undefined *******pppppppuStack_70;
  undefined *******local_68;
  undefined *******local_60;
  undefined *******pppppppuStack_58;
  undefined1 *local_50;
  undefined1 *puStack_48;
  ulonglong local_40;
  ulonglong local_38;
  
  local_38 = DAT_180015010 ^ (ulonglong)auStack_a8;
  lVar20 = *param_2;
  cVar3 = *(char *)(lVar20 + 4);
  cVar4 = *(char *)(lVar20 + 5);
  lVar14 = 0;
  if (cVar3 == -0x7f) {
    if (cVar4 != '\x03') {
      return;
    }
LAB_180008341:
    local_50 = (undefined1 *)0x0;
    puStack_48 = (undefined1 *)0xf;
    local_60 = (undefined *******)((ulonglong)local_60 & 0xffffffffffffff00);
    lVar13 = 8;
    lVar20 = (longlong)(((int)param_2[1] - (int)lVar20) + -1);
    if (8 < lVar20) {
      do {
        puVar18 = local_50;
        if (local_50 < puStack_48) {
          ppppppppuVar16 = &local_60;
          if ((undefined1 *)0xf < puStack_48) {
            ppppppppuVar16 = (undefined ********)local_60;
          }
          puVar1 = (undefined1 *)((longlong)ppppppppuVar16 + (longlong)local_50);
          local_50 = local_50 + 1;
          *puVar1 = *(undefined1 *)(lVar13 + *param_2);
          ((undefined1 *)((longlong)ppppppppuVar16 + 1))[(longlong)puVar18] = 0;
        }
        else {
          FUN_180002770(&local_60,local_50,puStack_48,*(undefined1 *)(lVar13 + *param_2));
        }
        lVar13 = lVar13 + 1;
      } while (lVar13 < lVar20);
    }
    if (local_50 < puStack_48) {
      ppppppppuVar16 = &local_60;
      if ((undefined1 *)0xf < puStack_48) {
        ppppppppuVar16 = (undefined ********)local_60;
      }
      puVar2 = (undefined2 *)((longlong)ppppppppuVar16 + (longlong)local_50);
      local_50 = local_50 + 1;
      *puVar2 = 0;
    }
    else {
      FUN_180002770(&local_60,local_50,puStack_48,0);
    }
    if (*(code **)(param_1 + 0xe0) != (code *)0x0) {
      ppppppppuVar16 = &local_60;
      if ((undefined1 *)0xf < puStack_48) {
        ppppppppuVar16 = (undefined ********)local_60;
      }
      (**(code **)(param_1 + 0xe0))(ppppppppuVar16);
    }
    if ((cVar3 == '\x02') && (cVar4 == '`')) {
      local_78 = (undefined *******)0x0;
      pppppppuStack_70 = (undefined *******)0x0;
      local_68 = (undefined *******)0x0;
      local_88[0] = 1;
      uVar11 = 0;
      FUN_180007d30((longlong *)&local_78,(void *)0x0,local_88);
      puVar8 = (undefined8 *)FUN_18000c554(0x28);
      *puVar8 = 0;
      puVar8[1] = 0;
      puVar8[2] = 0;
      puVar8[3] = 0;
      puVar8[4] = 0;
      *puVar8 = FTDICommand::vftable;
      puVar8[1] = 0;
      puVar8[2] = 0;
      puVar8[3] = 0;
      local_80 = puVar8;
      FUN_180009d70((longlong)puVar8,uVar11,0x60,(longlong *)&local_78);
      if (*(longlong **)(param_1 + 0xd0) != (longlong *)0x0) {
        (**(code **)(**(longlong **)(param_1 + 0xd0) + 8))();
      }
      (**(code **)*puVar8)(puVar8,1);
      if ((undefined ********)local_78 != (undefined ********)0x0) {
        ppppppppuVar16 = (undefined ********)local_78;
        if ((0xfff < (ulonglong)((longlong)local_68 - (longlong)local_78)) &&
           (ppppppppuVar16 = (undefined ********)local_78[-1],
           (undefined1 *)0x1f < (undefined1 *)((longlong)local_78 + (-8 - (longlong)ppppppppuVar16))
           )) {
                    /* WARNING: Subroutine does not return */
          _invalid_parameter_noinfo_noreturn();
        }
        free(ppppppppuVar16);
      }
    }
    if ((undefined1 *)0xf < puStack_48) {
      ppppppppuVar16 = (undefined ********)local_60;
      if (((undefined1 *)0xfff < puStack_48 + 1) &&
         (ppppppppuVar16 = (undefined ********)local_60[-1],
         (undefined1 *)0x1f < (undefined1 *)((longlong)local_60 + (-8 - (longlong)ppppppppuVar16))))
      {
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(ppppppppuVar16);
    }
    if (cVar3 != '\x02') {
      return;
    }
  }
  else {
    if (cVar3 != '\x02') {
      return;
    }
    if (cVar4 == '`') goto LAB_180008341;
  }
  if ((byte)(cVar4 + 0x9fU) < 9) {
    *(bool *)(param_1 + 0x30) = *(char *)(*param_2 + 8) == '\x01';
    iVar10 = _Cnd_broadcast(param_1 + 0x38);
    if (iVar10 == 0) {
      return;
    }
    std::_Throw_C_error(iVar10);
    return;
  }
  if (cVar4 == '\b') {
    local_60 = (undefined *******)FTDICommand::vftable;
    pppppppuStack_58 = (undefined *******)0x0;
    local_50 = (undefined1 *)0x0;
    puStack_48 = (undefined1 *)0x0;
    _Src = (void *)*param_2;
    iVar10 = ((int)param_2[1] - (int)_Src) + -9;
    if (iVar10 < 0) {
      iVar10 = 0;
    }
    local_40 = (ulonglong)CONCAT24(*(undefined2 *)((longlong)_Src + 4),iVar10);
    uVar15 = param_2[1] - (longlong)_Src;
    if (uVar15 != 0) {
      FUN_180002ba0((ulonglong *)&pppppppuStack_58,uVar15);
    }
    pppppppuVar7 = pppppppuStack_58;
    uVar17 = uVar15;
    memmove(pppppppuStack_58,_Src,uVar15);
    local_50 = (undefined1 *)((longlong)pppppppuVar7 + uVar15);
    local_78 = (undefined *******)0x0;
    pppppppuStack_70 = (undefined *******)0x0;
    local_68 = (undefined *******)0x0;
    FUN_18000a360((longlong)&local_60,(longlong *)&local_78);
    pppppppuVar7 = pppppppuStack_70;
    puVar8 = (undefined8 *)(param_1 + 0xf8);
    *(undefined8 *)(param_1 + 0x108) = 0;
    puVar9 = puVar8;
    if (0xf < *(ulonglong *)(param_1 + 0x110)) {
      puVar9 = (undefined8 *)*puVar8;
    }
    *(undefined1 *)puVar9 = 0;
    for (ppppppppuVar16 = (undefined ********)local_78;
        ppppppppuVar16 != (undefined ********)pppppppuVar7;
        ppppppppuVar16 = (undefined ********)((longlong)ppppppppuVar16 + 1)) {
      uVar5 = *(undefined1 *)ppppppppuVar16;
      uVar15 = *(ulonglong *)(param_1 + 0x108);
      uVar6 = *(ulonglong *)(param_1 + 0x110);
      if (uVar15 < uVar6) {
        *(ulonglong *)(param_1 + 0x108) = uVar15 + 1;
        puVar9 = puVar8;
        if (0xf < uVar6) {
          puVar9 = (undefined8 *)*puVar8;
        }
        *(undefined1 *)((longlong)puVar9 + uVar15) = uVar5;
        *(undefined1 *)((longlong)puVar9 + uVar15 + 1) = 0;
      }
      else {
        FUN_180002770(puVar8,uVar6,uVar17,uVar5);
      }
    }
    iVar10 = _Cnd_broadcast(param_1 + 0x38);
    if (iVar10 != 0) {
      std::_Throw_C_error(iVar10);
    }
    if ((undefined ********)local_78 != (undefined ********)0x0) {
      ppppppppuVar16 = (undefined ********)local_78;
      if ((0xfff < (ulonglong)((longlong)local_68 - (longlong)local_78)) &&
         (ppppppppuVar16 = (undefined ********)local_78[-1],
         (undefined1 *)0x1f < (undefined1 *)((longlong)local_78 + (-8 - (longlong)ppppppppuVar16))))
      {
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(ppppppppuVar16);
      local_78 = (undefined *******)0x0;
      pppppppuStack_70 = (undefined *******)0x0;
      local_68 = (undefined *******)0x0;
    }
    if ((undefined ********)pppppppuStack_58 == (undefined ********)0x0) {
      return;
    }
    ppppppppuVar16 = (undefined ********)pppppppuStack_58;
    if ((0xfff < (ulonglong)((longlong)puStack_48 - (longlong)pppppppuStack_58)) &&
       (ppppppppuVar16 = (undefined ********)pppppppuStack_58[-1],
       (undefined1 *)0x1f <
       (undefined1 *)((longlong)pppppppuStack_58 + (-8 - (longlong)ppppppppuVar16)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    goto LAB_1800087fa;
  }
  if (cVar4 == '\t') {
    *(bool *)(param_1 + 0x30) = *(char *)(*param_2 + 8) == '\x01';
    iVar10 = _Cnd_broadcast(param_1 + 0x38);
    if (iVar10 == 0) {
      return;
    }
    std::_Throw_C_error(iVar10);
  }
  if (cVar4 == '\n') {
    *(bool *)(param_1 + 0x30) = *(char *)(*param_2 + 8) == '\x01';
    iVar10 = _Cnd_broadcast(param_1 + 0x38);
    if (iVar10 == 0) {
      return;
    }
    std::_Throw_C_error(iVar10);
  }
  if (cVar4 == '\v') {
    iVar10 = ((int)param_2[1] - (int)*param_2) + -9;
    local_78 = (undefined *******)0x0;
    pppppppuStack_70 = (undefined *******)0x0;
    local_68 = (undefined *******)0x0;
    if (0 < iVar10) {
      do {
        puVar18 = (undefined1 *)(*param_2 + 8 + lVar14);
        if (pppppppuStack_70 == local_68) {
          FUN_180007d30((longlong *)&local_78,pppppppuStack_70,puVar18);
        }
        else {
          *(undefined1 *)pppppppuStack_70 = *puVar18;
          pppppppuStack_70 = (undefined *******)((longlong)pppppppuStack_70 + 1);
        }
        lVar14 = lVar14 + 1;
      } while (lVar14 < iVar10);
    }
    (**(code **)**(undefined8 **)(param_1 + 0xf0))(*(undefined8 **)(param_1 + 0xf0),&local_78);
    if ((undefined ********)local_78 == (undefined ********)0x0) {
      return;
    }
    ppppppppuVar16 = (undefined ********)local_78;
    if ((0xfff < (ulonglong)((longlong)local_68 - (longlong)local_78)) &&
       (ppppppppuVar16 = (undefined ********)local_78[-1],
       (undefined1 *)0x1f < (undefined1 *)((longlong)local_78 + (-8 - (longlong)ppppppppuVar16)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    goto LAB_1800087fa;
  }
  if (cVar4 != 'o') {
    return;
  }
  uVar5 = *(undefined1 *)(*param_2 + 8);
  local_50 = (undefined1 *)0x0;
  puStack_48 = (undefined1 *)0xf;
  local_60 = (undefined *******)((ulonglong)local_60 & 0xffffffffffffff00);
  FUN_180002610((longlong *)&local_60,&PTR_18000fde8,0);
  switch(uVar5) {
  case 0x61:
    ppuVar12 = &DAT_180015180;
    sVar19 = DAT_180015190;
    if (0xf < DAT_180015198) {
      ppuVar12 = (undefined8 **)DAT_180015180;
    }
    break;
  case 0x62:
    ppuVar12 = &DAT_1800150e0;
    sVar19 = DAT_1800150f0;
    if (0xf < DAT_1800150f8) {
      ppuVar12 = (undefined8 **)DAT_1800150e0;
    }
    break;
  case 99:
    ppuVar12 = &DAT_180015160;
    sVar19 = DAT_180015170;
    if (0xf < DAT_180015178) {
      ppuVar12 = (undefined8 **)DAT_180015160;
    }
    break;
  case 100:
    ppuVar12 = &DAT_1800151c0;
    sVar19 = DAT_1800151d0;
    if (0xf < DAT_1800151d8) {
      ppuVar12 = (undefined8 **)DAT_1800151c0;
    }
    break;
  case 0x65:
    ppuVar12 = &DAT_180015120;
    sVar19 = DAT_180015130;
    if (0xf < DAT_180015138) {
      ppuVar12 = (undefined8 **)DAT_180015120;
    }
    break;
  case 0x66:
    ppuVar12 = &DAT_1800150c0;
    sVar19 = DAT_1800150d0;
    if (0xf < DAT_1800150d8) {
      ppuVar12 = (undefined8 **)DAT_1800150c0;
    }
    break;
  case 0x67:
    ppuVar12 = &DAT_180015140;
    sVar19 = DAT_180015150;
    if (0xf < DAT_180015158) {
      ppuVar12 = (undefined8 **)DAT_180015140;
    }
    break;
  case 0x68:
    ppuVar12 = &DAT_180015080;
    sVar19 = DAT_180015090;
    if (0xf < DAT_180015098) {
      ppuVar12 = (undefined8 **)DAT_180015080;
    }
    break;
  case 0x69:
    ppuVar12 = &DAT_1800151a0;
    sVar19 = DAT_1800151b0;
    if (0xf < DAT_1800151b8) {
      ppuVar12 = (undefined8 **)DAT_1800151a0;
    }
    break;
  default:
    goto switchD_180008858_default;
  }
  FUN_180002610((longlong *)&local_60,ppuVar12,sVar19);
switchD_180008858_default:
  if (puStack_48 < (undefined1 *)0x10) {
    return;
  }
  ppppppppuVar16 = (undefined ********)local_60;
  if (((undefined1 *)0xfff < puStack_48 + 1) &&
     (ppppppppuVar16 = (undefined ********)local_60[-1],
     (undefined1 *)0x1f < (undefined1 *)((longlong)local_60 + (-8 - (longlong)ppppppppuVar16)))) {
                    /* WARNING: Subroutine does not return */
    _invalid_parameter_noinfo_noreturn();
  }
LAB_1800087fa:
  free(ppppppppuVar16);
  return;
}


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

### EXPORT FUNC 180008a50 (395 bytes) name=FUN_180008a50

void FUN_180008a50(longlong param_1,undefined8 *param_2,ulonglong param_3,undefined8 param_4)

{
  longlong *plVar1;
  longlong lVar2;
  void *pvVar3;
  undefined8 *puVar4;
  void *local_48;
  void *pvStack_40;
  longlong local_38;
  void **local_30;
  undefined8 *local_28;
  
  local_48 = (void *)0x0;
  pvStack_40 = (void *)0x0;
  pvVar3 = (void *)0x0;
  local_38 = 0;
  puVar4 = (undefined8 *)*param_2;
  if (puVar4 != (undefined8 *)param_2[1]) {
    param_3 = (longlong)param_2[1] - (longlong)puVar4;
    if (param_3 < 0x1000) {
      if (param_3 != 0) {
        pvVar3 = (void *)FUN_18000c554(param_3);
      }
    }
    else {
      if (param_3 + 0x27 <= param_3) {
                    /* WARNING: Subroutine does not return */
        FUN_180001750();
      }
      lVar2 = FUN_18000c554(param_3 + 0x27);
      if (lVar2 == 0) goto LAB_180008bb6;
      pvVar3 = (void *)(lVar2 + 0x27U & 0xffffffffffffffe0);
      *(longlong *)((longlong)pvVar3 - 8) = lVar2;
    }
    lVar2 = (longlong)pvVar3 + param_3;
    local_48 = pvVar3;
    pvStack_40 = pvVar3;
    local_38 = lVar2;
    memmove(pvVar3,puVar4,param_3);
    param_2 = puVar4;
    pvStack_40 = (void *)lVar2;
  }
  local_30 = &local_48;
  if (DAT_180015ff0 != '\0') {
    FUN_180007960("transmitData\n",param_2,param_3,param_4);
  }
  puVar4 = (undefined8 *)FUN_18000c554(0x28);
  *puVar4 = 0;
  puVar4[1] = 0;
  puVar4[2] = 0;
  puVar4[3] = 0;
  puVar4[4] = 0;
  *puVar4 = FTDICommand::vftable;
  puVar4[1] = 0;
  puVar4[2] = 0;
  puVar4[3] = 0;
  local_28 = puVar4;
  FUN_180009d70((longlong)puVar4,param_2,0xb,(longlong *)&local_48);
  plVar1 = *(longlong **)(param_1 + -8);
  if (plVar1 != (longlong *)0x0) {
    (**(code **)(*plVar1 + 8))(plVar1,puVar4[1],puVar4[2] - puVar4[1]);
  }
  (**(code **)*puVar4)(puVar4,1);
  if (local_48 != (void *)0x0) {
    pvVar3 = local_48;
    if ((0xfff < (ulonglong)(local_38 - (longlong)local_48)) &&
       (pvVar3 = *(void **)((longlong)local_48 + -8),
       0x1f < (ulonglong)((longlong)local_48 + (-8 - (longlong)pvVar3)))) {
LAB_180008bb6:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(pvVar3);
  }
  return;
}


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

### EXPORT FUNC 180008be0 (231 bytes) name=FUN_180008be0

undefined8 * FUN_180008be0(undefined8 *param_1,uint param_2)

{
  void *pvVar1;
  void *_Memory;
  
  *param_1 = EloTCMScheduleTaskDevice::vftable;
  pvVar1 = (void *)param_1[0x1c];
  if (pvVar1 != (void *)0x0) {
    _Memory = pvVar1;
    if ((0xfff < (ulonglong)(param_1[0x1e] - (longlong)pvVar1)) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
    param_1[0x1c] = 0;
    param_1[0x1d] = 0;
    param_1[0x1e] = 0;
  }
  *param_1 = TCMVirtualDevice::vftable;
  _Mtx_destroy_in_situ(param_1 + 0x10);
  _Cnd_destroy_in_situ(param_1 + 7);
  FUN_180002550((longlong)(param_1 + 1));
  pvVar1 = (void *)param_1[1];
  param_1[1] = 0;
  free(pvVar1);
  if ((param_2 & 1) != 0) {
    free(param_1);
  }
  return param_1;
}


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

### EXPORT FUNC 180008cd0 (21 bytes) name=FUN_180008cd0

undefined1 FUN_180008cd0(undefined8 param_1,char param_2,char param_3)

{
  if ((param_2 == '\x02') && ((byte)(param_3 - 0x21U) < 6)) {
    return 1;
  }
  return 0;
}


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

### EXPORT FUNC 180008cf0 (430 bytes) name=FUN_180008cf0

void FUN_180008cf0(ulonglong param_1,longlong *param_2)

{
  undefined1 *puVar1;
  char extraout_AL;
  char extraout_AL_00;
  char extraout_AL_01;
  char extraout_AL_02;
  char extraout_AL_03;
  char cVar2;
  uint uVar3;
  int iVar4;
  ulonglong uVar5;
  longlong *plVar6;
  longlong lVar7;
  undefined1 *puVar8;
  
  puVar8 = (undefined1 *)*param_2;
  cVar2 = puVar8[5];
  if (puVar8[4] == '\x02') {
    uVar5 = param_1;
    plVar6 = param_2;
    if (cVar2 == '!') {
      *(bool *)(param_1 + 0x30) = puVar8[8] == '\x01';
      uVar3 = _Cnd_broadcast(param_1 + 0x38);
      if (uVar3 == 0) {
        return;
      }
      uVar5 = (ulonglong)uVar3;
      std::_Throw_C_error(uVar3);
      cVar2 = extraout_AL;
    }
    if (cVar2 == '\"') {
      *(uint *)(param_1 + 0xd8) =
           CONCAT31(CONCAT21(CONCAT11(puVar8[8],puVar8[9]),puVar8[10]),puVar8[0xb]);
      *(undefined1 *)(param_1 + 0x30) = 1;
      uVar3 = _Cnd_broadcast(param_1 + 0x38);
      if (uVar3 == 0) {
        return;
      }
      uVar5 = (ulonglong)uVar3;
      std::_Throw_C_error(uVar3);
      cVar2 = extraout_AL_00;
    }
    if (cVar2 == '#') {
      *(bool *)(uVar5 + 0x30) = puVar8[8] == '\x01';
      uVar3 = _Cnd_broadcast(uVar5 + 0x38);
      if (uVar3 == 0) {
        return;
      }
      uVar5 = (ulonglong)uVar3;
      std::_Throw_C_error(uVar3);
      cVar2 = extraout_AL_01;
    }
    if (cVar2 == '$') {
      *(bool *)(uVar5 + 0x30) = puVar8[8] == '\x01';
      uVar3 = _Cnd_broadcast(uVar5 + 0x38);
      if (uVar3 == 0) {
        return;
      }
      uVar5 = (ulonglong)uVar3;
      std::_Throw_C_error(uVar3);
      cVar2 = extraout_AL_02;
    }
    if (cVar2 == '%') {
      iVar4 = ((int)plVar6[1] - (int)puVar8) + -9;
      *(longlong *)(param_1 + 0xe8) = *(longlong *)(param_1 + 0xe0);
      if (0 < iVar4) {
        lVar7 = 0;
        do {
          puVar8 = (undefined1 *)(*param_2 + 8 + lVar7);
          puVar1 = *(undefined1 **)(param_1 + 0xe8);
          if (puVar1 == *(undefined1 **)(param_1 + 0xf0)) {
            FUN_180007d30((longlong *)(param_1 + 0xe0),puVar1,puVar8);
          }
          else {
            *puVar1 = *puVar8;
            *(longlong *)(param_1 + 0xe8) = *(longlong *)(param_1 + 0xe8) + 1;
          }
          lVar7 = lVar7 + 1;
        } while (lVar7 < iVar4);
      }
      *(undefined1 *)(param_1 + 0x30) = 1;
      uVar3 = _Cnd_broadcast(param_1 + 0x38);
      if (uVar3 == 0) {
        return;
      }
      uVar5 = (ulonglong)uVar3;
      std::_Throw_C_error(uVar3);
      cVar2 = extraout_AL_03;
    }
    if (cVar2 == '&') {
      *(bool *)(uVar5 + 0x30) = puVar8[8] == '\x01';
      iVar4 = _Cnd_broadcast(uVar5 + 0x38);
      if (iVar4 != 0) {
        std::_Throw_C_error(iVar4);
      }
    }
  }
  return;
}


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

### EXPORT FUNC 180008ea0 (337 bytes) name=FUN_180008ea0

undefined8 * FUN_180008ea0(undefined8 *param_1,ulonglong param_2)

{
  void *pvVar1;
  void *pvVar2;
  
  *param_1 = EloTCMUpdaterDevice::vftable;
  if (*(int *)(param_1 + 0x24) != 0) {
                    /* WARNING: Subroutine does not return */
    terminate();
  }
  pvVar1 = (void *)param_1[0x20];
  if (pvVar1 != (void *)0x0) {
    pvVar2 = pvVar1;
    if ((0xfff < (ulonglong)(param_1[0x22] - (longlong)pvVar1)) &&
       (pvVar2 = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)pvVar2)))) goto LAB_180008feb;
    free(pvVar2);
    param_1[0x20] = 0;
    param_1[0x21] = 0;
    param_1[0x22] = 0;
  }
  if (0xf < (ulonglong)param_1[0x1f]) {
    pvVar1 = (void *)param_1[0x1c];
    pvVar2 = pvVar1;
    if ((0xfff < param_1[0x1f] + 1) &&
       (pvVar2 = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)pvVar2)))) {
LAB_180008feb:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(pvVar2);
  }
  param_1[0x1e] = 0;
  param_1[0x1f] = 0xf;
  *(undefined1 *)(param_1 + 0x1c) = 0;
  *param_1 = TCMVirtualDevice::vftable;
  _Mtx_destroy_in_situ(param_1 + 0x10);
  _Cnd_destroy_in_situ(param_1 + 7);
  FUN_180002550((longlong)(param_1 + 1));
  pvVar1 = (void *)param_1[1];
  param_1[1] = 0;
  free(pvVar1);
  if ((param_2 & 1) != 0) {
    free(param_1);
  }
  return param_1;
}


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

### EXPORT FUNC 180009000 (467 bytes) name=FUN_180009000

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

undefined8 * FUN_180009000(longlong param_1,undefined8 *param_2,undefined8 param_3,longlong param_4)

{
  longlong lVar1;
  code *pcVar2;
  int iVar3;
  undefined8 *puVar4;
  longlong lVar5;
  undefined **ppuVar6;
  longlong *plVar7;
  undefined1 auStack_68 [32];
  undefined8 *local_48;
  undefined8 uStack_40;
  longlong local_38;
  int local_30;
  ulonglong local_28;
  
  local_28 = DAT_180015010 ^ (ulonglong)auStack_68;
  local_48 = param_2;
  if (DAT_180015ff0 != '\0') {
    FUN_180007960("askVersion\n",param_2,param_3,param_4);
  }
  ppuVar6 = &PTR_18000fde8;
  FUN_180002610((longlong *)(param_1 + 0xe0),&PTR_18000fde8,0);
  local_48 = (undefined8 *)FUN_18000c554(0x28);
  *local_48 = 0;
  local_48[1] = 0;
  local_48[2] = 0;
  local_48[3] = 0;
  local_48[4] = 0;
  puVar4 = FUN_18000a240(local_48,ppuVar6,4);
  if (puVar4 != (undefined8 *)0x0) {
    plVar7 = *(longlong **)(param_1 + 0xd0);
    if (plVar7 != (longlong *)0x0) {
      param_4 = *plVar7;
      (**(code **)(param_4 + 8))(plVar7,puVar4[1],puVar4[2] - puVar4[1]);
    }
    (**(code **)*puVar4)(puVar4,1);
  }
  lVar1 = param_1 + 0x80;
  uStack_40 = 0;
  local_48 = (undefined8 *)lVar1;
  iVar3 = _Mtx_lock(lVar1);
  if (iVar3 != 0) {
    std::_Throw_C_error(iVar3);
    pcVar2 = (code *)swi(3);
    puVar4 = (undefined8 *)(*pcVar2)();
    return puVar4;
  }
  uStack_40 = CONCAT71(uStack_40._1_7_,1);
  lVar5 = _Xtime_get_ticks();
  lVar5 = (lVar5 + 1000000) * 100;
  local_38 = lVar5 / 1000000000;
  local_30 = (int)lVar5 + (int)local_38 * -1000000000;
  iVar3 = _Mtx_current_owns(lVar1);
  if (iVar3 == 0) {
    std::_Throw_Cpp_error(4);
    pcVar2 = (code *)swi(3);
    puVar4 = (undefined8 *)(*pcVar2)();
    return puVar4;
  }
  plVar7 = &local_38;
  lVar5 = lVar1;
  iVar3 = _Cnd_timedwait(param_1 + 0x38);
  if (iVar3 == 0) {
    lVar5 = param_1 + 0xe0;
    if (0xf < *(ulonglong *)(param_1 + 0xf8)) {
      lVar5 = *(longlong *)(param_1 + 0xe0);
    }
    FUN_180007960("askVersion:%s\n",lVar5,plVar7,param_4);
  }
  else {
    if (iVar3 != 2) {
      std::_Throw_C_error(iVar3);
      pcVar2 = (code *)swi(3);
      puVar4 = (undefined8 *)(*pcVar2)();
      return puVar4;
    }
    FUN_180007960("askVersion timeout\n",lVar5,plVar7,param_4);
  }
  FUN_180002e60(param_2,(undefined8 *)(param_1 + 0xe0));
  iVar3 = _Mtx_unlock(lVar1);
  if (iVar3 != 0) {
    std::_Throw_C_error(iVar3);
  }
  return param_2;
}


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

### EXPORT FUNC 1800091e0 (799 bytes) name=FUN_1800091e0

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

void FUN_1800091e0(longlong param_1,undefined8 param_2,ulonglong param_3,longlong param_4)

{
  void *_Src;
  longlong lVar1;
  int iVar2;
  ulonglong uVar3;
  longlong lVar4;
  code *pcVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  void *pvVar8;
  int iVar9;
  int iVar10;
  uint uVar11;
  undefined1 auStack_98 [32];
  ulonglong local_78;
  void *local_70;
  void *pvStack_68;
  longlong local_60;
  void *local_50;
  void *pvStack_48;
  longlong local_40;
  ulonglong local_38;
  
  local_38 = DAT_180015010 ^ (ulonglong)auStack_98;
  if (*(longlong *)(param_1 + 0x108) == *(longlong *)(param_1 + 0x100)) {
    pcVar5 = *(code **)(param_1 + 0xd8);
    if (pcVar5 == (code *)0x0) {
      return;
    }
    uVar7 = 0;
    uVar6 = 0;
  }
  else {
    uVar3 = FUN_180009510(param_1,param_2,param_3,param_4);
    if ((char)uVar3 == '\0') {
      FUN_180007960("beginUpdate fail\n",param_2,param_3,param_4);
      pcVar5 = *(code **)(param_1 + 0xd8);
      if (pcVar5 == (code *)0x0) {
        return;
      }
      uVar7 = 1;
      uVar6 = 0;
    }
    else {
      if (*(code **)(param_1 + 0xd8) != (code *)0x0) {
        param_2 = 1;
        (**(code **)(param_1 + 0xd8))(1);
      }
      local_78 = (*(longlong *)(param_1 + 0x108) - *(longlong *)(param_1 + 0x100)) + 0x7fU >> 7;
      uVar11 = 0;
      if (0 < (int)local_78) {
        iVar9 = 0;
        iVar10 = 0x62;
        do {
          lVar4 = *(longlong *)(param_1 + 0x100);
          iVar2 = ((int)*(undefined8 *)(param_1 + 0x108) - (int)lVar4) - iVar9;
          if (0x80 < iVar2) {
            iVar2 = 0x80;
          }
          local_50 = (void *)0x0;
          pvStack_48 = (void *)0x0;
          local_40 = 0;
          uVar3 = (ulonglong)iVar2;
          if (iVar2 != 0) {
            FUN_180002ba0((ulonglong *)&local_50,uVar3);
          }
          lVar1 = local_40;
          _Src = local_50;
          memmove(local_50,(void *)(iVar9 + lVar4),uVar3);
          pvStack_48 = (void *)((longlong)_Src + uVar3);
          local_70 = (void *)0x0;
          pvStack_68 = (void *)0x0;
          local_60 = 0;
          if (_Src != pvStack_48) {
            if (uVar3 < 0x1000) {
              if (uVar3 == 0) {
                local_70 = (void *)0x0;
              }
              else {
                local_70 = (void *)FUN_18000c554(uVar3);
              }
            }
            else {
              if (uVar3 + 0x27 <= uVar3) {
                    /* WARNING: Subroutine does not return */
                FUN_180001750();
              }
              lVar4 = FUN_18000c554(uVar3 + 0x27);
              if (lVar4 == 0) {
                    /* WARNING: Subroutine does not return */
                _invalid_parameter_noinfo_noreturn();
              }
              local_70 = (void *)(lVar4 + 0x27U & 0xffffffffffffffe0);
              *(longlong *)((longlong)local_70 - 8) = lVar4;
            }
            lVar4 = (longlong)local_70 + uVar3;
            pvStack_68 = local_70;
            local_60 = lVar4;
            memmove(local_70,_Src,uVar3);
            pvStack_68 = (void *)lVar4;
          }
          param_3 = (ulonglong)uVar11;
          uVar3 = FUN_180009850(param_1,(longlong *)&local_70,param_3,param_4);
          iVar2 = (int)local_78;
          if ((char)uVar3 == '\0') {
            FUN_180007960("transmitData fail\n",(longlong)iVar10 % (longlong)iVar2 & 0xffffffff,
                          param_3,param_4);
            if (*(code **)(param_1 + 0xd8) != (code *)0x0) {
              (**(code **)(param_1 + 0xd8))(0,iVar10 / iVar2 + 1);
            }
            if (_Src == (void *)0x0) {
              return;
            }
            pvVar8 = _Src;
            if (((ulonglong)(lVar1 - (longlong)_Src) < 0x1000) ||
               (pvVar8 = *(void **)((longlong)_Src + -8),
               (ulonglong)((longlong)_Src + (-8 - (longlong)pvVar8)) < 0x20)) {
              free(pvVar8);
              return;
            }
LAB_1800094a8:
                    /* WARNING: Subroutine does not return */
            _invalid_parameter_noinfo_noreturn();
          }
          if (*(code **)(param_1 + 0xd8) != (code *)0x0) {
            (**(code **)(param_1 + 0xd8))(1,iVar10 / iVar2 + 1);
          }
          if (_Src != (void *)0x0) {
            pvVar8 = _Src;
            if ((0xfff < (ulonglong)(lVar1 - (longlong)_Src)) &&
               (pvVar8 = *(void **)((longlong)_Src + -8),
               0x1f < (ulonglong)((longlong)_Src + (-8 - (longlong)pvVar8)))) goto LAB_1800094a8;
            free(pvVar8);
          }
          uVar11 = uVar11 + 1;
          param_2 = 0x80;
          iVar9 = iVar9 + 0x80;
          iVar10 = iVar10 + 0x62;
        } while ((int)uVar11 < iVar2);
      }
      uVar3 = FUN_1800096b0(param_1,param_2,param_3,param_4);
      if ((char)uVar3 == '\0') {
        FUN_180007960("completeUpdate fail\n",param_2,param_3,param_4);
        pcVar5 = *(code **)(param_1 + 0xd8);
        if (pcVar5 == (code *)0x0) {
          return;
        }
        uVar7 = 99;
        uVar6 = 0;
      }
      else {
        pcVar5 = *(code **)(param_1 + 0xd8);
        if (pcVar5 == (code *)0x0) {
          return;
        }
        uVar7 = 100;
        uVar6 = 1;
      }
    }
  }
  (*pcVar5)(uVar6,uVar7);
  return;
}


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

### EXPORT FUNC 180009510 (402 bytes) name=FUN_180009510

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

ulonglong FUN_180009510(longlong param_1,undefined8 param_2,undefined8 param_3,longlong param_4)

{
  longlong lVar1;
  byte bVar2;
  code *pcVar3;
  int iVar4;
  undefined8 *puVar5;
  ulonglong uVar6;
  longlong lVar7;
  longlong *plVar8;
  undefined1 auStack_58 [32];
  undefined8 *local_38;
  undefined8 uStack_30;
  longlong local_28;
  int local_20;
  ulonglong local_18;
  
  local_18 = DAT_180015010 ^ (ulonglong)auStack_58;
  if (DAT_180015ff0 != '\0') {
    FUN_180007960("beginUpdate\n",param_2,param_3,param_4);
  }
  *(undefined1 *)(param_1 + 0x30) = 0;
  local_38 = (undefined8 *)FUN_18000c554(0x28);
  *local_38 = 0;
  local_38[1] = 0;
  local_38[2] = 0;
  local_38[3] = 0;
  local_38[4] = 0;
  puVar5 = FUN_18000a240(local_38,param_2,5);
  if (puVar5 != (undefined8 *)0x0) {
    plVar8 = *(longlong **)(param_1 + 0xd0);
    if (plVar8 != (longlong *)0x0) {
      param_4 = *plVar8;
      (**(code **)(param_4 + 8))(plVar8,puVar5[1],puVar5[2] - puVar5[1]);
    }
    (**(code **)*puVar5)(puVar5,1);
  }
  lVar1 = param_1 + 0x80;
  uStack_30 = 0;
  local_38 = (undefined8 *)lVar1;
  iVar4 = _Mtx_lock(lVar1);
  if (iVar4 != 0) {
    std::_Throw_C_error(iVar4);
    pcVar3 = (code *)swi(3);
    uVar6 = (*pcVar3)();
    return uVar6;
  }
  uStack_30 = CONCAT71(uStack_30._1_7_,1);
  lVar7 = _Xtime_get_ticks();
  lVar7 = (lVar7 + 30000000) * 100;
  local_28 = lVar7 / 1000000000;
  local_20 = (int)lVar7 + (int)local_28 * -1000000000;
  iVar4 = _Mtx_current_owns(lVar1);
  if (iVar4 == 0) {
    std::_Throw_Cpp_error(4);
    pcVar3 = (code *)swi(3);
    uVar6 = (*pcVar3)();
    return uVar6;
  }
  plVar8 = &local_28;
  lVar7 = lVar1;
  iVar4 = _Cnd_timedwait(param_1 + 0x38);
  if (iVar4 == 0) {
    FUN_180007960("beginUpdate:%d\n",(ulonglong)*(byte *)(param_1 + 0x30),plVar8,param_4);
  }
  else {
    if (iVar4 != 2) {
      std::_Throw_C_error(iVar4);
      pcVar3 = (code *)swi(3);
      uVar6 = (*pcVar3)();
      return uVar6;
    }
    FUN_180007960("beginUpdate timeout\n",lVar7,plVar8,param_4);
  }
  bVar2 = *(byte *)(param_1 + 0x30);
  iVar4 = _Mtx_unlock(lVar1);
  if (iVar4 != 0) {
    std::_Throw_C_error(iVar4);
  }
  return (ulonglong)bVar2;
}


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

### EXPORT FUNC 1800096b0 (402 bytes) name=FUN_1800096b0

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

ulonglong FUN_1800096b0(longlong param_1,undefined8 param_2,undefined8 param_3,longlong param_4)

{
  longlong lVar1;
  byte bVar2;
  code *pcVar3;
  int iVar4;
  undefined8 *puVar5;
  ulonglong uVar6;
  longlong lVar7;
  longlong *plVar8;
  undefined1 auStack_58 [32];
  undefined8 *local_38;
  undefined8 uStack_30;
  longlong local_28;
  int local_20;
  ulonglong local_18;
  
  local_18 = DAT_180015010 ^ (ulonglong)auStack_58;
  if (DAT_180015ff0 != '\0') {
    FUN_180007960("completeUpdate\n",param_2,param_3,param_4);
  }
  *(undefined1 *)(param_1 + 0x30) = 0;
  local_38 = (undefined8 *)FUN_18000c554(0x28);
  *local_38 = 0;
  local_38[1] = 0;
  local_38[2] = 0;
  local_38[3] = 0;
  local_38[4] = 0;
  puVar5 = FUN_18000a240(local_38,param_2,6);
  if (puVar5 != (undefined8 *)0x0) {
    plVar8 = *(longlong **)(param_1 + 0xd0);
    if (plVar8 != (longlong *)0x0) {
      param_4 = *plVar8;
      (**(code **)(param_4 + 8))(plVar8,puVar5[1],puVar5[2] - puVar5[1]);
    }
    (**(code **)*puVar5)(puVar5,1);
  }
  lVar1 = param_1 + 0x80;
  uStack_30 = 0;
  local_38 = (undefined8 *)lVar1;
  iVar4 = _Mtx_lock(lVar1);
  if (iVar4 != 0) {
    std::_Throw_C_error(iVar4);
    pcVar3 = (code *)swi(3);
    uVar6 = (*pcVar3)();
    return uVar6;
  }
  uStack_30 = CONCAT71(uStack_30._1_7_,1);
  lVar7 = _Xtime_get_ticks();
  lVar7 = (lVar7 + 150000000) * 100;
  local_28 = lVar7 / 1000000000;
  local_20 = (int)lVar7 + (int)local_28 * -1000000000;
  iVar4 = _Mtx_current_owns(lVar1);
  if (iVar4 == 0) {
    std::_Throw_Cpp_error(4);
    pcVar3 = (code *)swi(3);
    uVar6 = (*pcVar3)();
    return uVar6;
  }
  plVar8 = &local_28;
  lVar7 = lVar1;
  iVar4 = _Cnd_timedwait(param_1 + 0x38);
  if (iVar4 == 0) {
    FUN_180007960("completeUpdate:%d\n",(ulonglong)*(byte *)(param_1 + 0x30),plVar8,param_4);
  }
  else {
    if (iVar4 != 2) {
      std::_Throw_C_error(iVar4);
      pcVar3 = (code *)swi(3);
      uVar6 = (*pcVar3)();
      return uVar6;
    }
    FUN_180007960("completeUpdate timeout\n",lVar7,plVar8,param_4);
  }
  bVar2 = *(byte *)(param_1 + 0x30);
  iVar4 = _Mtx_unlock(lVar1);
  if (iVar4 != 0) {
    std::_Throw_C_error(iVar4);
  }
  return (ulonglong)bVar2;
}


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

### EXPORT FUNC 180009850 (494 bytes) name=FUN_180009850

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

ulonglong FUN_180009850(longlong param_1,longlong *param_2,ulonglong param_3,undefined8 param_4)

{
  longlong lVar1;
  byte bVar2;
  void *pvVar3;
  code *pcVar4;
  int iVar5;
  undefined8 *puVar6;
  ulonglong uVar7;
  longlong lVar8;
  void *_Memory;
  longlong *plVar9;
  longlong *plVar10;
  undefined1 auStackY_78 [32];
  longlong local_30;
  int local_28;
  ulonglong local_20;
  
  local_20 = DAT_180015010 ^ (ulonglong)auStackY_78;
  plVar9 = param_2;
  uVar7 = param_3;
  if (DAT_180015ff0 != '\0') {
    plVar9 = (longlong *)(param_3 & 0xffffffff);
    FUN_180007960("transmitData %d\n",plVar9,param_3,param_4);
  }
  *(undefined1 *)(param_1 + 0x30) = 0;
  puVar6 = (undefined8 *)FUN_18000c554(0x28);
  *puVar6 = 0;
  puVar6[1] = 0;
  puVar6[2] = 0;
  puVar6[3] = 0;
  puVar6[4] = 0;
  plVar10 = param_2;
  puVar6 = FUN_180009fa0(puVar6,plVar9,uVar7,param_2,(int)param_3 + 0x8001);
  if (puVar6 != (undefined8 *)0x0) {
    plVar9 = *(longlong **)(param_1 + 0xd0);
    if (plVar9 != (longlong *)0x0) {
      plVar10 = (longlong *)*plVar9;
      (*(code *)plVar10[1])(plVar9,puVar6[1],puVar6[2] - puVar6[1]);
    }
    (**(code **)*puVar6)(puVar6,1);
  }
  lVar1 = param_1 + 0x80;
  iVar5 = _Mtx_lock(lVar1);
  if (iVar5 == 0) {
    lVar8 = _Xtime_get_ticks();
    lVar8 = (lVar8 + 5000000) * 100;
    local_30 = lVar8 / 1000000000;
    local_28 = (int)lVar8 + (int)local_30 * -1000000000;
    iVar5 = _Mtx_current_owns(lVar1);
    if (iVar5 == 0) {
      std::_Throw_Cpp_error(4);
      pcVar4 = (code *)swi(3);
      uVar7 = (*pcVar4)();
      return uVar7;
    }
    plVar9 = &local_30;
    lVar8 = lVar1;
    iVar5 = _Cnd_timedwait(param_1 + 0x38);
    if (iVar5 == 0) {
      FUN_180007960("transmitData:%d\n",(ulonglong)*(byte *)(param_1 + 0x30),plVar9,plVar10);
    }
    else {
      if (iVar5 != 2) {
        std::_Throw_C_error(iVar5);
        pcVar4 = (code *)swi(3);
        uVar7 = (*pcVar4)();
        return uVar7;
      }
      FUN_180007960("transmitData timeout\n",lVar8,plVar9,plVar10);
    }
    bVar2 = *(byte *)(param_1 + 0x30);
    iVar5 = _Mtx_unlock(lVar1);
    if (iVar5 != 0) {
      std::_Throw_C_error(iVar5);
    }
    pvVar3 = (void *)*param_2;
    if (pvVar3 != (void *)0x0) {
      _Memory = pvVar3;
      if ((0xfff < (ulonglong)(param_2[2] - (longlong)pvVar3)) &&
         (_Memory = *(void **)((longlong)pvVar3 + -8),
         0x1f < (ulonglong)((longlong)pvVar3 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
        _invalid_parameter_noinfo_noreturn();
      }
      free(_Memory);
      *param_2 = 0;
      param_2[1] = 0;
      param_2[2] = 0;
    }
    return (ulonglong)bVar2;
  }
  std::_Throw_C_error(iVar5);
  pcVar4 = (code *)swi(3);
  uVar7 = (*pcVar4)();
  return uVar7;
}


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

### EXPORT FUNC 180009a40 (36 bytes) name=FUN_180009a40

undefined1 FUN_180009a40(undefined8 param_1,char param_2,char param_3)

{
  bool bVar1;
  bool bVar2;
  
  if (param_2 == '\x02') {
    bVar1 = (byte)(param_3 - 4U) < 3;
    bVar2 = (byte)(param_3 - 4U) == 3;
  }
  else {
    if (param_2 != -0x7f) {
      return 0;
    }
    bVar1 = (byte)(param_3 - 10U) < 2;
    bVar2 = (byte)(param_3 - 10U) == 2;
  }
  if (!bVar1 && !bVar2) {
    return 0;
  }
  return 1;
}


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

### EXPORT FUNC 180009a70 (755 bytes) name=FUN_180009a70

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

void FUN_180009a70(longlong param_1,undefined8 *param_2)

{
  undefined8 *puVar1;
  char cVar2;
  undefined1 uVar3;
  ulonglong uVar4;
  void *pvVar5;
  char extraout_AL;
  char extraout_AL_00;
  char cVar6;
  char extraout_AL_01;
  char extraout_AL_02;
  int iVar7;
  undefined8 *puVar8;
  undefined1 *puVar9;
  void *pvVar10;
  ulonglong uVar11;
  undefined1 *puVar12;
  ulonglong uVar13;
  undefined1 auStack_88 [32];
  undefined1 *local_68;
  undefined1 *puStack_60;
  longlong local_58;
  undefined **local_50;
  void *pvStack_48;
  longlong local_40;
  longlong lStack_38;
  ulonglong local_30;
  ulonglong local_28;
  
  local_28 = DAT_180015010 ^ (ulonglong)auStack_88;
  pvVar10 = (void *)*param_2;
  cVar2 = *(char *)((longlong)pvVar10 + 4);
  cVar6 = *(char *)((longlong)pvVar10 + 5);
  if (cVar2 == '\x02') {
    if (cVar6 == '\x04') {
      local_50 = FTDICommand::vftable;
      pvStack_48 = (void *)0x0;
      local_40 = 0;
      lStack_38 = 0;
      uVar11 = param_2[1] - (longlong)pvVar10;
      iVar7 = (int)uVar11 + -9;
      if (iVar7 < 0) {
        iVar7 = 0;
      }
      local_30 = (ulonglong)CONCAT24(*(undefined2 *)((longlong)pvVar10 + 4),iVar7);
      if (uVar11 != 0) {
        FUN_180002ba0((ulonglong *)&pvStack_48,uVar11);
      }
      pvVar5 = pvStack_48;
      uVar13 = uVar11;
      memmove(pvStack_48,pvVar10,uVar11);
      local_40 = (longlong)pvVar5 + uVar11;
      local_68 = (undefined1 *)0x0;
      puStack_60 = (undefined1 *)0x0;
      local_58 = 0;
      FUN_18000a360((longlong)&local_50,(longlong *)&local_68);
      puVar9 = puStack_60;
      puVar1 = (undefined8 *)(param_1 + 0xe0);
      *(undefined8 *)(param_1 + 0xf0) = 0;
      puVar8 = puVar1;
      if (0xf < *(ulonglong *)(param_1 + 0xf8)) {
        puVar8 = (undefined8 *)*puVar1;
      }
      *(undefined1 *)puVar8 = 0;
      for (puVar12 = local_68; puVar12 != puVar9; puVar12 = puVar12 + 1) {
        uVar3 = *puVar12;
        uVar11 = *(ulonglong *)(param_1 + 0xf0);
        uVar4 = *(ulonglong *)(param_1 + 0xf8);
        if (uVar11 < uVar4) {
          *(ulonglong *)(param_1 + 0xf0) = uVar11 + 1;
          puVar8 = puVar1;
          if (0xf < uVar4) {
            puVar8 = (undefined8 *)*puVar1;
          }
          *(undefined1 *)((longlong)puVar8 + uVar11) = uVar3;
          *(undefined1 *)((longlong)puVar8 + uVar11 + 1) = 0;
        }
        else {
          FUN_180002770(puVar1,uVar4,uVar13,uVar3);
        }
      }
      iVar7 = _Cnd_broadcast(param_1 + 0x38);
      if (iVar7 != 0) {
        std::_Throw_C_error(iVar7);
      }
      if (local_68 != (undefined1 *)0x0) {
        puVar9 = local_68;
        if ((0xfff < (ulonglong)(local_58 - (longlong)local_68)) &&
           (puVar9 = *(undefined1 **)(local_68 + -8),
           (undefined1 *)0x1f < local_68 + (-8 - (longlong)puVar9))) {
                    /* WARNING: Subroutine does not return */
          _invalid_parameter_noinfo_noreturn();
        }
        free(puVar9);
        local_68 = (undefined1 *)0x0;
        puStack_60 = (undefined1 *)0x0;
        local_58 = 0;
      }
      if (pvStack_48 != (void *)0x0) {
        pvVar10 = pvStack_48;
        if ((0xfff < (ulonglong)(lStack_38 - (longlong)pvStack_48)) &&
           (pvVar10 = *(void **)((longlong)pvStack_48 + -8),
           0x1f < (ulonglong)((longlong)pvStack_48 + (-8 - (longlong)pvVar10)))) {
                    /* WARNING: Subroutine does not return */
          _invalid_parameter_noinfo_noreturn();
        }
        free(pvVar10);
      }
    }
    else {
      if (cVar6 == '\x05') {
        *(bool *)(param_1 + 0x30) = *(char *)((longlong)pvVar10 + 8) == '\x01';
        iVar7 = _Cnd_broadcast(param_1 + 0x38);
        if (iVar7 == 0) {
          return;
        }
        std::_Throw_C_error(iVar7);
        cVar6 = extraout_AL;
      }
      if (cVar6 == '\x06') {
        *(bool *)(param_1 + 0x30) = *(char *)((longlong)pvVar10 + 8) == '\x01';
        iVar7 = _Cnd_broadcast(param_1 + 0x38);
        if (iVar7 == 0) {
          return;
        }
        std::_Throw_C_error(iVar7);
        cVar6 = extraout_AL_00;
      }
      if (cVar6 == '\a') {
        *(bool *)(param_1 + 0x30) = *(char *)((longlong)pvVar10 + 8) == '\x01';
        iVar7 = _Cnd_broadcast(param_1 + 0x38);
        if (iVar7 != 0) {
          std::_Throw_C_error(iVar7);
        }
      }
    }
  }
  else if (cVar2 == -0x7f) {
    if (cVar6 == '\f') {
      *(bool *)(param_1 + 0x30) = *(char *)((longlong)pvVar10 + 8) == '\x01';
      iVar7 = _Cnd_broadcast(param_1 + 0x38);
      if (iVar7 == 0) {
        return;
      }
      std::_Throw_C_error(iVar7);
      cVar6 = extraout_AL_01;
    }
    if (cVar6 == '\n') {
      *(bool *)(param_1 + 0x30) = *(char *)((longlong)pvVar10 + 8) == '\x01';
      iVar7 = _Cnd_broadcast(param_1 + 0x38);
      if (iVar7 == 0) {
        return;
      }
      std::_Throw_C_error(iVar7);
      cVar6 = extraout_AL_02;
    }
    if (cVar6 == '\v') {
      *(bool *)(param_1 + 0x30) = *(char *)((longlong)pvVar10 + 8) == '\x01';
      iVar7 = _Cnd_broadcast(param_1 + 0x38);
      if (iVar7 != 0) {
        std::_Throw_C_error(iVar7);
      }
    }
  }
  return;
}


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

### EXPORT FUNC 180009d70 (549 bytes) name=FUN_180009d70

void FUN_180009d70(longlong param_1,undefined8 param_2,undefined1 param_3,longlong *param_4)

{
  longlong *plVar1;
  void *_Dst;
  int iVar2;
  longlong lVar3;
  longlong lVar4;
  char cVar5;
  ulonglong uVar6;
  char cVar7;
  ulonglong uVar8;
  int iVar9;
  uint uVar10;
  char cVar11;
  longlong lVar12;
  
  plVar1 = (longlong *)(param_1 + 8);
  iVar2 = (int)param_4[1] - (int)*param_4;
  *(int *)(param_1 + 0x20) = iVar2;
  *(undefined1 *)(param_1 + 0x24) = 2;
  *(undefined1 *)(param_1 + 0x25) = param_3;
  _Dst = *(void **)(param_1 + 0x10);
  lVar3 = *plVar1;
  uVar8 = (ulonglong)(iVar2 + 9);
  uVar6 = (longlong)_Dst - lVar3;
  if (uVar8 < uVar6) {
    lVar3 = lVar3 + uVar8;
LAB_180009dfd:
    *(longlong *)(param_1 + 0x10) = lVar3;
  }
  else if (uVar6 < uVar8) {
    if (uVar8 <= (ulonglong)(*(longlong *)(param_1 + 0x18) - lVar3)) {
      memset(_Dst,0,uVar8 - uVar6);
      lVar3 = (uVar8 - uVar6) + (longlong)_Dst;
      goto LAB_180009dfd;
    }
    FUN_18000a400(plVar1,uVar8);
  }
  cVar7 = '\0';
  iVar9 = 3;
  *(undefined1 *)*plVar1 = 0x7e;
  *(char *)(*plVar1 + 1) = (char)((uint)(iVar2 + 5) >> 8);
  *(char *)(*plVar1 + 2) = (char)(iVar2 + 5);
  lVar3 = *plVar1;
  if ((ulonglong)(*(longlong *)(param_1 + 0x10) - lVar3) < 3) {
    iVar9 = (int)*(longlong *)(param_1 + 0x10) - (int)lVar3;
  }
  lVar12 = (longlong)iVar9;
  cVar5 = '\0';
  uVar6 = 0;
  cVar11 = '\0';
  if (0 < lVar12) {
    uVar8 = uVar6;
    if (lVar12 < 2) {
LAB_180009e80:
      cVar7 = *(char *)(uVar8 + lVar3);
    }
    else {
      do {
        cVar5 = cVar5 + *(char *)(uVar8 + lVar3);
        cVar11 = cVar11 + *(char *)(uVar8 + 1 + lVar3);
        uVar8 = uVar8 + 2;
      } while ((longlong)uVar8 < lVar12 + -1);
      if ((longlong)uVar8 < lVar12) goto LAB_180009e80;
    }
    cVar7 = cVar7 + cVar5 + cVar11;
  }
  *(char *)(lVar3 + 3) = cVar7;
  *(undefined1 *)(*plVar1 + 4) = 2;
  *(undefined1 *)(*plVar1 + 5) = param_3;
  *(char *)(*plVar1 + 6) = (char)((uint)DAT_180015038 >> 8);
  *(char *)(*plVar1 + 7) = (char)DAT_180015038;
  uVar8 = uVar6;
  if (param_4[1] != *param_4) {
    do {
      uVar10 = (int)uVar8 + 1;
      *(undefined1 *)(uVar6 + 8 + *plVar1) = *(undefined1 *)(uVar6 + *param_4);
      uVar6 = uVar6 + 1;
      uVar8 = (ulonglong)uVar10;
    } while ((ulonglong)(longlong)(int)uVar10 < (ulonglong)(param_4[1] - *param_4));
  }
  iVar2 = iVar2 + 8;
  lVar3 = *plVar1;
  uVar6 = (ulonglong)iVar2;
  cVar7 = '\0';
  if ((ulonglong)(*(longlong *)(param_1 + 0x10) - lVar3) < uVar6) {
    iVar2 = (int)*(longlong *)(param_1 + 0x10) - (int)lVar3;
  }
  cVar5 = '\0';
  lVar12 = (longlong)iVar2;
  cVar11 = '\0';
  if (lVar12 < 5) goto LAB_180009f5b;
  lVar4 = 4;
  if (lVar12 < 6) {
LAB_180009f50:
    cVar7 = *(char *)(lVar3 + lVar4);
  }
  else {
    do {
      cVar5 = cVar5 + *(char *)(lVar3 + lVar4);
      cVar11 = cVar11 + *(char *)(lVar3 + 1 + lVar4);
      lVar4 = lVar4 + 2;
    } while (lVar4 < lVar12 + -1);
    if (lVar4 < lVar12) goto LAB_180009f50;
  }
  cVar7 = cVar7 + cVar5 + cVar11;
LAB_180009f5b:
  iVar2 = 1;
  if (DAT_180015038 + 1 < 0x8000) {
    iVar2 = DAT_180015038 + 1;
  }
  *(char *)(uVar6 + lVar3) = cVar7;
  DAT_180015038 = iVar2;
  return;
}


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

### EXPORT FUNC 180009fa0 (527 bytes) name=FUN_180009fa0

undefined8 *
FUN_180009fa0(undefined8 *param_1,undefined8 param_2,undefined8 param_3,longlong *param_4,
             undefined4 param_5)

{
  void *_Dst;
  longlong lVar1;
  int iVar2;
  ulonglong uVar3;
  longlong lVar4;
  int iVar5;
  char cVar6;
  void *pvVar7;
  uint uVar8;
  ulonglong uVar9;
  char cVar10;
  char cVar11;
  longlong lVar12;
  
  *param_1 = FTDICommand::vftable;
  uVar9 = 0;
  param_1[1] = 0;
  param_1[2] = 0;
  param_1[3] = 0;
  iVar2 = (int)param_4[1] - (int)*param_4;
  *(int *)(param_1 + 4) = iVar2;
  *(undefined2 *)((longlong)param_1 + 0x24) = 0x702;
  pvVar7 = (void *)(longlong)(iVar2 + 9);
  _Dst = (void *)param_1[2];
  if (pvVar7 < _Dst) {
    param_1[2] = pvVar7;
  }
  else if (_Dst < pvVar7) {
    if (iVar2 + 9 == 0) {
      memset(_Dst,0,-(longlong)_Dst);
      param_1[2] = 0;
    }
    else {
      FUN_18000a400(param_1 + 1,(ulonglong)pvVar7);
    }
  }
  *(undefined1 *)param_1[1] = 0x7e;
  *(char *)(param_1[1] + 1) = (char)((uint)(iVar2 + 5) >> 8);
  *(char *)(param_1[1] + 2) = (char)(iVar2 + 5);
  cVar11 = '\0';
  lVar1 = param_1[1];
  iVar5 = 3;
  if ((ulonglong)(param_1[2] - lVar1) < 3) {
    iVar5 = (int)(param_1[2] - lVar1);
  }
  cVar6 = '\0';
  cVar10 = '\0';
  lVar12 = (longlong)iVar5;
  if (0 < iVar5) {
    uVar3 = uVar9;
    if (lVar12 < 2) {
LAB_18000a0b0:
      cVar11 = *(char *)(uVar3 + lVar1);
    }
    else {
      do {
        cVar6 = cVar6 + *(char *)(uVar3 + lVar1);
        cVar10 = cVar10 + *(char *)(uVar3 + 1 + lVar1);
        uVar3 = uVar3 + 2;
      } while ((longlong)uVar3 < lVar12 + -1);
      if ((longlong)uVar3 < lVar12) goto LAB_18000a0b0;
    }
    cVar11 = cVar11 + cVar6 + cVar10;
  }
  *(char *)(lVar1 + 3) = cVar11;
  *(undefined1 *)(param_1[1] + 4) = 2;
  *(undefined1 *)(param_1[1] + 5) = 7;
  *(char *)(param_1[1] + 6) = (char)((uint)param_5 >> 8);
  *(char *)(param_1[1] + 7) = (char)param_5;
  uVar3 = uVar9;
  if (param_4[1] != *param_4) {
    do {
      *(undefined1 *)(param_1[1] + 8 + uVar3) = *(undefined1 *)(uVar3 + *param_4);
      uVar8 = (int)uVar9 + 1;
      uVar9 = (ulonglong)uVar8;
      uVar3 = uVar3 + 1;
    } while ((ulonglong)(longlong)(int)uVar8 < (ulonglong)(param_4[1] - *param_4));
  }
  iVar2 = iVar2 + 8;
  cVar11 = '\0';
  lVar1 = param_1[1];
  cVar6 = '\0';
  cVar10 = '\0';
  iVar5 = (int)(param_1[2] - lVar1);
  if ((ulonglong)(longlong)iVar2 <= (ulonglong)(param_1[2] - lVar1)) {
    iVar5 = iVar2;
  }
  lVar12 = (longlong)iVar5;
  if (lVar12 < 5) goto LAB_18000a18b;
  lVar4 = 4;
  if (lVar12 < 6) {
LAB_18000a180:
    cVar11 = *(char *)(lVar4 + lVar1);
  }
  else {
    do {
      cVar6 = cVar6 + *(char *)(lVar4 + lVar1);
      cVar10 = cVar10 + *(char *)(lVar4 + 1 + lVar1);
      lVar4 = lVar4 + 2;
    } while (lVar4 < lVar12 + -1);
    if (lVar4 < lVar12) goto LAB_18000a180;
  }
  cVar11 = cVar11 + cVar6 + cVar10;
LAB_18000a18b:
  *(char *)(iVar2 + lVar1) = cVar11;
  return param_1;
}


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

### EXPORT FUNC 18000a1b0 (132 bytes) name=FUN_18000a1b0

undefined8 * FUN_18000a1b0(undefined8 *param_1,uint param_2)

{
  void *pvVar1;
  void *_Memory;
  
  *param_1 = FTDICommand::vftable;
  pvVar1 = (void *)param_1[1];
  if (pvVar1 != (void *)0x0) {
    _Memory = pvVar1;
    if ((0xfff < (ulonglong)(param_1[3] - (longlong)pvVar1)) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
    param_1[1] = 0;
    param_1[2] = 0;
    param_1[3] = 0;
  }
  if ((param_2 & 1) != 0) {
    free(param_1);
  }
  return param_1;
}


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

### EXPORT FUNC 18000a240 (166 bytes) name=FUN_18000a240

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

undefined8 * FUN_18000a240(undefined8 *param_1,undefined8 param_2,undefined1 param_3)

{
  void *_Memory;
  undefined1 auStack_58 [32];
  undefined8 *local_38;
  void *local_30;
  undefined8 uStack_28;
  longlong local_20;
  ulonglong local_18;
  
  local_18 = DAT_180015010 ^ (ulonglong)auStack_58;
  *param_1 = FTDICommand::vftable;
  param_1[1] = 0;
  param_1[2] = 0;
  param_1[3] = 0;
  local_30 = (void *)0x0;
  uStack_28 = 0;
  local_20 = 0;
  local_38 = param_1;
  FUN_180009d70((longlong)param_1,param_2,param_3,(longlong *)&local_30);
  if (local_30 != (void *)0x0) {
    _Memory = local_30;
    if ((0xfff < (ulonglong)(local_20 - (longlong)local_30)) &&
       (_Memory = *(void **)((longlong)local_30 + -8),
       0x1f < (ulonglong)((longlong)local_30 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  return param_1;
}


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

### EXPORT FUNC 18000a2f0 (99 bytes) name=FUN_18000a2f0

void FUN_18000a2f0(undefined8 *param_1)

{
  void *pvVar1;
  void *_Memory;
  
  *param_1 = FTDICommand::vftable;
  pvVar1 = (void *)param_1[1];
  if (pvVar1 != (void *)0x0) {
    _Memory = pvVar1;
    if ((0xfff < (ulonglong)(param_1[3] - (longlong)pvVar1)) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
    param_1[1] = 0;
    param_1[2] = 0;
    param_1[3] = 0;
  }
  return;
}


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

### EXPORT FUNC 18000a360 (155 bytes) name=FUN_18000a360

longlong * FUN_18000a360(longlong param_1,longlong *param_2)

{
  undefined1 *puVar1;
  ulonglong uVar2;
  uint uVar3;
  ulonglong uVar4;
  undefined1 *puVar5;
  
  uVar2 = 0;
  *param_2 = 0;
  param_2[1] = 0;
  *param_2 = 0;
  param_2[1] = 0;
  param_2[2] = 0;
  uVar4 = uVar2;
  if (0 < *(int *)(param_1 + 0x20)) {
    do {
      puVar5 = (undefined1 *)(*(longlong *)(param_1 + 8) + 8 + uVar2);
      puVar1 = (undefined1 *)param_2[1];
      if (puVar1 == (undefined1 *)param_2[2]) {
        FUN_180007d30(param_2,puVar1,puVar5);
      }
      else {
        *puVar1 = *puVar5;
        param_2[1] = param_2[1] + 1;
      }
      uVar3 = (int)uVar4 + 1;
      uVar2 = uVar2 + 1;
      uVar4 = (ulonglong)uVar3;
    } while ((int)uVar3 < *(int *)(param_1 + 0x20));
  }
  return param_2;
}


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

### EXPORT FUNC 18000a400 (255 bytes) name=FUN_18000a400

void FUN_18000a400(longlong *param_1,ulonglong param_2)

{
  longlong lVar1;
  longlong lVar2;
  longlong lVar3;
  ulonglong uVar4;
  ulonglong uVar5;
  void *_Dst;
  
  if (0x7fffffffffffffff < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_180002b80();
  }
  lVar1 = param_1[1];
  lVar2 = *param_1;
  uVar4 = param_1[2] - *param_1;
  uVar5 = param_2;
  if ((uVar4 <= 0x7fffffffffffffff - (uVar4 >> 1)) &&
     (uVar5 = (uVar4 >> 1) + uVar4, uVar5 < param_2)) {
    uVar5 = param_2;
  }
  if (uVar5 < 0x1000) {
    if (uVar5 == 0) {
      _Dst = (void *)0x0;
    }
    else {
      _Dst = (void *)FUN_18000c554(uVar5);
    }
  }
  else {
    if (uVar5 + 0x27 <= uVar5) {
                    /* WARNING: Subroutine does not return */
      FUN_180001750();
    }
    lVar3 = FUN_18000c554(uVar5 + 0x27);
    if (lVar3 == 0) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    _Dst = (void *)(lVar3 + 0x27U & 0xffffffffffffffe0);
    *(longlong *)((longlong)_Dst - 8) = lVar3;
  }
  memset((void *)((longlong)_Dst + (lVar1 - lVar2)),0,param_2 - (lVar1 - lVar2));
  memmove(_Dst,(void *)*param_1,param_1[1] - *param_1);
  FUN_180007280(param_1,(longlong)_Dst,param_2,uVar5);
  return;
}


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

### EXPORT FUNC 18000a510 (1101 bytes) name=FUN_18000a510

undefined8 * FUN_18000a510(undefined8 *param_1)

{
  undefined8 *puVar1;
  longlong *plVar2;
  undefined8 *puVar3;
  longlong *plVar4;
  undefined8 *local_res10;
  
  *param_1 = TCMDevice::vftable;
  param_1[1] = SerialPort::vftable;
  param_1[2] = 0;
  param_1[3] = 0;
  *(undefined1 *)(param_1 + 4) = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  puVar1 = param_1 + 7;
  *puVar1 = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[10] = 0;
  param_1[0xb] = 0;
  puVar3 = (undefined8 *)FUN_18000c554(0x10);
  puVar3[1] = 0;
  *puVar1 = puVar3;
  *puVar3 = puVar1;
  param_1[0xc] = 0;
  param_1[0xd] = 0;
  param_1[0xe] = 0;
  puVar3 = (undefined8 *)FUN_18000c554(0xd8);
  local_res10 = puVar3;
  memset(puVar3,0,0xd8);
  FUN_18000b410(puVar3);
  *puVar3 = EloTCMAudioDevice::vftable;
  *(undefined1 *)(puVar3 + 6) = 0;
  puVar1 = (undefined8 *)param_1[0xd];
  if (puVar1 == (undefined8 *)param_1[0xe]) {
    local_res10 = puVar3;
    FUN_18000b280(param_1 + 0xc,puVar1,&local_res10);
  }
  else {
    *puVar1 = puVar3;
    param_1[0xd] = param_1[0xd] + 8;
    local_res10 = puVar3;
  }
  puVar3 = (undefined8 *)FUN_18000c554(0xd8);
  local_res10 = puVar3;
  memset(puVar3,0,0xd8);
  FUN_18000b410(puVar3);
  *puVar3 = EloTCMLightDevice::vftable;
  *(undefined1 *)(puVar3 + 6) = 0;
  puVar1 = (undefined8 *)param_1[0xd];
  if (puVar1 == (undefined8 *)param_1[0xe]) {
    local_res10 = puVar3;
    FUN_18000b280(param_1 + 0xc,puVar1,&local_res10);
  }
  else {
    *puVar1 = puVar3;
    param_1[0xd] = param_1[0xd] + 8;
    local_res10 = puVar3;
  }
  puVar3 = (undefined8 *)FUN_18000c554(0xd8);
  local_res10 = puVar3;
  memset(puVar3,0,0xd8);
  FUN_18000b410(puVar3);
  *puVar3 = EloTCMPowerDevice::vftable;
  *(undefined1 *)(puVar3 + 6) = 0;
  puVar1 = (undefined8 *)param_1[0xd];
  if (puVar1 == (undefined8 *)param_1[0xe]) {
    local_res10 = puVar3;
    FUN_18000b280(param_1 + 0xc,puVar1,&local_res10);
  }
  else {
    *puVar1 = puVar3;
    param_1[0xd] = param_1[0xd] + 8;
    local_res10 = puVar3;
  }
  puVar3 = (undefined8 *)FUN_18000c554(0x138);
  local_res10 = puVar3;
  memset(puVar3,0,0x138);
  FUN_18000b410(puVar3);
  *puVar3 = EloTCMScannerDevice::vftable;
  puVar3[0x1b] = EloTCMScannerDevice::vftable;
  puVar3[0x21] = 0;
  puVar3[0x22] = 0xf;
  *(undefined1 *)(puVar3 + 0x1f) = 0;
  puVar3[0x23] = 0;
  puVar3[0x24] = 0;
  puVar3[0x25] = 0;
  puVar3[0x1c] = 0;
  puVar3[0x1d] = 0;
  puVar3[0x1e] = 0;
  *(undefined1 *)(puVar3 + 6) = 0;
  *(undefined1 *)(puVar3 + 0x26) = 0;
  puVar1 = (undefined8 *)param_1[0xd];
  if (puVar1 == (undefined8 *)param_1[0xe]) {
    local_res10 = puVar3;
    FUN_18000b280(param_1 + 0xc,puVar1,&local_res10);
  }
  else {
    *puVar1 = puVar3;
    param_1[0xd] = param_1[0xd] + 8;
    local_res10 = puVar3;
  }
  puVar3 = (undefined8 *)FUN_18000c554(0xf8);
  local_res10 = puVar3;
  memset(puVar3,0,0xf8);
  FUN_18000b410(puVar3);
  *puVar3 = EloTCMScheduleTaskDevice::vftable;
  puVar3[0x1c] = 0;
  puVar3[0x1d] = 0;
  puVar3[0x1e] = 0;
  *(undefined1 *)(puVar3 + 6) = 0;
  *(undefined4 *)(puVar3 + 0x1b) = 0;
  puVar1 = (undefined8 *)param_1[0xd];
  if (puVar1 == (undefined8 *)param_1[0xe]) {
    local_res10 = puVar3;
    FUN_18000b280(param_1 + 0xc,puVar1,&local_res10);
  }
  else {
    *puVar1 = puVar3;
    param_1[0xd] = param_1[0xd] + 8;
    local_res10 = puVar3;
  }
  puVar3 = (undefined8 *)FUN_18000c554(0x128);
  local_res10 = puVar3;
  memset(puVar3,0,0x128);
  FUN_18000b410(puVar3);
  *puVar3 = EloTCMUpdaterDevice::vftable;
  puVar3[0x1e] = 0;
  puVar3[0x1f] = 0xf;
  *(undefined1 *)(puVar3 + 0x1c) = 0;
  puVar3[0x20] = 0;
  puVar3[0x21] = 0;
  puVar3[0x22] = 0;
  puVar3[0x23] = 0;
  puVar3[0x24] = 0;
  puVar3[0x1b] = 0;
  puVar1 = (undefined8 *)param_1[0xd];
  if (puVar1 == (undefined8 *)param_1[0xe]) {
    local_res10 = puVar3;
    FUN_18000b280(param_1 + 0xc,puVar1,&local_res10);
  }
  else {
    *puVar1 = puVar3;
    param_1[0xd] = param_1[0xd] + 8;
    local_res10 = puVar3;
  }
  puVar3 = (undefined8 *)FUN_18000c554(0xd8);
  local_res10 = puVar3;
  memset(puVar3,0,0xd8);
  FUN_18000b410(puVar3);
  *puVar3 = EloMotorDevice::vftable;
  *(undefined1 *)(puVar3 + 6) = 0;
  puVar1 = (undefined8 *)param_1[0xd];
  if (puVar1 == (undefined8 *)param_1[0xe]) {
    local_res10 = puVar3;
    FUN_18000b280(param_1 + 0xc,puVar1,&local_res10);
  }
  else {
    *puVar1 = puVar3;
    param_1[0xd] = param_1[0xd] + 8;
    local_res10 = puVar3;
  }
  puVar3 = (undefined8 *)FUN_18000c554(0xe0);
  local_res10 = puVar3;
  memset(puVar3,0,0xe0);
  FUN_18000b410(puVar3);
  *puVar3 = EloProximityDevice::vftable;
  *(undefined1 *)(puVar3 + 6) = 0;
  puVar3[0x1b] = 0;
  puVar1 = (undefined8 *)param_1[0xd];
  if (puVar1 == (undefined8 *)param_1[0xe]) {
    local_res10 = puVar3;
    FUN_18000b280(param_1 + 0xc,puVar1,&local_res10);
  }
  else {
    *puVar1 = puVar3;
    param_1[0xd] = param_1[0xd] + 8;
  }
  plVar2 = (longlong *)param_1[0xd];
  for (plVar4 = (longlong *)param_1[0xc]; plVar4 != plVar2; plVar4 = plVar4 + 1) {
    *(undefined8 **)(*plVar4 + 0xd0) = param_1 + 1;
  }
  param_1[6] = param_1;
  return param_1;
}


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

### EXPORT FUNC 18000a960 (614 bytes) name=FUN_18000a960

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

ulonglong FUN_18000a960(longlong param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  bool bVar1;
  longlong *plVar2;
  byte bVar3;
  int iVar4;
  void *_Buf1;
  ulonglong uVar5;
  longlong *plVar6;
  undefined8 uVar7;
  undefined8 *******_Buf;
  undefined1 auStack_138 [32];
  longlong *local_118;
  longlong local_110 [4];
  undefined8 local_f0 [4];
  undefined8 ******local_d0 [2];
  ulonglong local_c0;
  ulonglong local_b8;
  longlong *local_b0;
  longlong *plStack_a8;
  longlong local_a0;
  longlong local_98 [4];
  undefined8 local_78 [4];
  undefined8 local_58 [4];
  ulonglong local_38;
  
  local_38 = DAT_180015010 ^ (ulonglong)auStack_138;
  local_b0 = (longlong *)0x0;
  plStack_a8 = (longlong *)0x0;
  local_a0 = 0;
  FUN_180002fd0((longlong *)&local_b0);
  plVar2 = plStack_a8;
  plVar6 = local_b0;
  do {
    if (plVar6 == plVar2) {
      uVar5 = 0;
LAB_18000aacd:
      plVar2 = plStack_a8;
      plVar6 = local_b0;
      if (local_b0 != (longlong *)0x0) {
        for (; plVar6 != plVar2; plVar6 = plVar6 + 0xc) {
          FUN_180002ca0(plVar6);
        }
        plVar6 = local_b0;
        if ((0xfff < (ulonglong)(((local_a0 - (longlong)local_b0) / 0x60) * 0x60)) &&
           (plVar6 = (longlong *)local_b0[-1],
           0x1f < (ulonglong)((longlong)local_b0 + (-8 - (longlong)plVar6)))) {
                    /* WARNING: Subroutine does not return */
          _invalid_parameter_noinfo_noreturn();
        }
        free(plVar6);
      }
      return uVar5;
    }
    FUN_180002e60(local_98,plVar6);
    FUN_180002e60(local_78,plVar6 + 4);
    FUN_180002e60(local_58,plVar6 + 8);
    local_118 = local_110;
    FUN_180002e60(local_110,local_98);
    FUN_180002e60(local_f0,local_78);
    FUN_180002e60(local_d0,local_58);
    uVar5 = local_c0;
    _Buf = local_d0;
    if (0xf < local_b8) {
      _Buf = (undefined8 *******)local_d0[0];
    }
    if (0x20 < local_c0) {
      for (_Buf1 = memchr(_Buf,0x46,local_c0 - 0x20); _Buf1 != (void *)0x0;
          _Buf1 = memchr((void *)((longlong)_Buf1 + 1),0x46,
                         (longlong)_Buf + ((uVar5 - 0x20) - ((longlong)_Buf1 + 1)))) {
        iVar4 = memcmp(_Buf1,"FTDIBUS\\COMPORT&VID_0403&PID_6001",0x21);
        if (iVar4 == 0) {
          if ((longlong)_Buf1 - (longlong)_Buf != -1) {
            bVar1 = true;
            goto LAB_18000aa9e;
          }
          break;
        }
      }
    }
    bVar1 = false;
LAB_18000aa9e:
    FUN_180002ca0(local_110);
    if (bVar1) {
      uVar7 = 0x1c200;
      bVar3 = (**(code **)(*(longlong *)(param_1 + 8) + 0x18))((longlong *)(param_1 + 8),local_98);
      uVar5 = (ulonglong)bVar3;
      FUN_180007960("TCM Open:%d\n",uVar5,uVar7,param_4);
      FUN_180002ca0(local_98);
      goto LAB_18000aacd;
    }
    FUN_180002ca0(local_98);
    plVar6 = plVar6 + 0xc;
  } while( true );
}


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

### EXPORT FUNC 18000abd0 (172 bytes) name=FUN_18000abd0

longlong * FUN_18000abd0(longlong param_1,longlong *param_2)

{
  undefined1 *puVar1;
  ulonglong uVar2;
  longlong lVar3;
  longlong lVar4;
  undefined1 local_18 [4];
  undefined4 local_14;
  longlong *local_10;
  
  lVar4 = 0;
  *param_2 = 0;
  param_2[1] = 0;
  *param_2 = 0;
  param_2[1] = 0;
  param_2[2] = 0;
  local_14 = 1;
  lVar3 = 4;
  local_10 = param_2;
  do {
    uVar2 = *(longlong *)(param_1 + 0x50) + lVar4;
    local_18[0] = *(undefined1 *)
                   ((ulonglong)((uint)uVar2 & 0xf) +
                   *(longlong *)
                    (*(longlong *)(param_1 + 0x40) +
                    (uVar2 >> 4 & *(longlong *)(param_1 + 0x48) - 1U) * 8));
    puVar1 = (undefined1 *)param_2[1];
    if (puVar1 == (undefined1 *)param_2[2]) {
      FUN_180007d30(param_2,puVar1,local_18);
    }
    else {
      *puVar1 = local_18[0];
      param_2[1] = param_2[1] + 1;
    }
    lVar4 = lVar4 + 1;
    lVar3 = lVar3 + -1;
  } while (lVar3 != 0);
  return param_2;
}


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

### EXPORT FUNC 18000ac80 (1424 bytes) name=FUN_18000ac80

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

void FUN_18000ac80(longlong param_1,longlong param_2,int param_3)

{
  longlong *plVar1;
  undefined1 uVar2;
  byte bVar3;
  undefined8 *puVar4;
  bool bVar5;
  char cVar6;
  ulonglong uVar7;
  undefined8 uVar8;
  longlong lVar9;
  char *pcVar10;
  int iVar11;
  uint uVar12;
  longlong lVar13;
  ulonglong uVar14;
  void *_Memory;
  char *pcVar15;
  int iVar16;
  void **ppvVar17;
  char cVar18;
  uint uVar19;
  undefined8 *puVar20;
  void **ppvVar21;
  void **ppvVar22;
  void **ppvVar23;
  void **ppvVar24;
  char cVar25;
  byte bVar26;
  char cVar27;
  void **ppvVar28;
  longlong lVar29;
  undefined1 auStack_98 [32];
  byte local_78 [8];
  longlong local_70;
  longlong local_68;
  void *local_60;
  void **ppvStack_58;
  void **local_50;
  char *local_48;
  longlong lStack_40;
  longlong local_38;
  ulonglong local_30;
  
  local_30 = DAT_180015010 ^ (ulonglong)auStack_98;
  lVar29 = 0;
  local_70 = param_2;
  local_68 = param_1;
  if (0 < param_3) {
    lVar13 = *(longlong *)(param_1 + 0x58);
    do {
      uVar2 = *(undefined1 *)(lVar29 + local_70);
      uVar7 = *(ulonglong *)(param_1 + 0x50);
      if ((((int)lVar13 + (int)uVar7 & 0xfU) == 0) &&
         (*(ulonglong *)(param_1 + 0x48) <= lVar13 + 0x10U >> 4)) {
        FUN_1800028d0(param_1 + 0x38);
        uVar7 = *(ulonglong *)(param_1 + 0x50);
        lVar13 = *(longlong *)(param_1 + 0x58);
      }
      uVar7 = *(longlong *)(param_1 + 0x48) * 0x10 - 1U & uVar7;
      *(ulonglong *)(param_1 + 0x50) = uVar7;
      uVar7 = uVar7 + lVar13;
      lVar9 = *(longlong *)(param_1 + 0x40);
      lVar13 = (*(longlong *)(param_1 + 0x48) - 1U & uVar7 >> 4) * 8;
      if (*(longlong *)(lVar13 + lVar9) == 0) {
        uVar8 = FUN_18000c554(0x10);
        *(undefined8 *)(lVar13 + *(longlong *)(param_1 + 0x40)) = uVar8;
        lVar9 = *(longlong *)(param_1 + 0x40);
      }
      *(undefined1 *)((ulonglong)((uint)uVar7 & 0xf) + *(longlong *)(lVar13 + lVar9)) = uVar2;
      *(longlong *)(param_1 + 0x58) = *(longlong *)(param_1 + 0x58) + 1;
      lVar13 = *(longlong *)(param_1 + 0x58);
      lVar29 = lVar29 + 1;
    } while (lVar29 < param_3);
  }
  uVar12 = *(uint *)(param_1 + 0x58);
  do {
    if ((int)uVar12 < 9) {
      return;
    }
    ppvVar17 = (void **)0x0;
    local_48 = (char *)0x0;
    lStack_40 = 0;
    local_38 = 0;
    FUN_18000abd0(param_1,(longlong *)&local_48);
    if (*local_48 == DAT_180010101) {
      uVar7 = lStack_40 - (longlong)local_48;
      iVar11 = (int)uVar7 + -1;
      cVar18 = '\0';
      cVar6 = '\0';
      cVar25 = '\0';
      cVar27 = '\0';
      iVar16 = (int)uVar7;
      if ((ulonglong)(longlong)iVar11 <= uVar7) {
        iVar16 = iVar11;
      }
      lVar29 = (longlong)iVar16;
      if (0 < iVar16) {
        ppvVar23 = ppvVar17;
        if (lVar29 < 2) {
LAB_18000ae17:
          cVar6 = local_48[(longlong)ppvVar23];
        }
        else {
          do {
            cVar25 = cVar25 + local_48[(longlong)ppvVar23];
            cVar27 = cVar27 + (local_48 + 1)[(longlong)ppvVar23];
            ppvVar23 = (void **)((longlong)ppvVar23 + 2);
          } while ((longlong)ppvVar23 < lVar29 + -1);
          if ((longlong)ppvVar23 < lVar29) goto LAB_18000ae17;
        }
        cVar18 = cVar6 + cVar25 + cVar27;
      }
      if (local_48[uVar7 - 1] != cVar18) goto LAB_18000aee2;
      uVar19 = CONCAT11(local_48[1],local_48[2]) + 4;
      if (uVar12 < uVar19) {
        if (local_48 == (char *)0x0) {
          return;
        }
        pcVar15 = local_48;
        if (((ulonglong)(local_38 - (longlong)local_48) < 0x1000) ||
           (pcVar15 = *(char **)(local_48 + -8), local_48 + (-8 - (longlong)pcVar15) < (char *)0x20)
           ) {
          free(pcVar15);
          return;
        }
        goto LAB_18000b158;
      }
      iVar16 = 4;
      bVar26 = 0;
      uVar12 = CONCAT11(local_48[1],local_48[2]) - 1;
      if (0 < (int)uVar12) {
        uVar7 = (ulonglong)uVar12;
        do {
          uVar14 = (longlong)iVar16 + *(longlong *)(param_1 + 0x50);
          bVar26 = bVar26 + *(char *)((ulonglong)((uint)uVar14 & 0xf) +
                                     *(longlong *)
                                      (*(longlong *)(param_1 + 0x40) +
                                      (uVar14 >> 4 & *(longlong *)(param_1 + 0x48) - 1U) * 8));
          iVar16 = iVar16 + 1;
          uVar7 = uVar7 - 1;
        } while (uVar7 != 0);
      }
      ppvVar24 = *(void ***)(param_1 + 0x50);
      ppvVar23 = (void **)(ulonglong)((uint)(byte *)((longlong)iVar16 + (longlong)ppvVar24) & 0xf);
      bVar3 = *(byte *)((longlong)ppvVar23 +
                       *(longlong *)
                        (*(longlong *)(param_1 + 0x40) +
                        (*(longlong *)(param_1 + 0x48) - 1U &
                        (ulonglong)((longlong)iVar16 + (longlong)ppvVar24) >> 4) * 8));
      if (bVar26 != bVar3) {
        if (DAT_180015ff0 != '\0') {
          FUN_180007960("checksum not same:%.2x, %.2x",(ulonglong)bVar26,(ulonglong)bVar3,ppvVar24);
        }
        goto LAB_18000aee2;
      }
      local_60 = (void *)0x0;
      ppvStack_58 = (void **)0x0;
      local_50 = (void **)0x0;
      ppvVar22 = ppvVar17;
      if (uVar19 != 0) {
        uVar7 = (ulonglong)uVar19;
        do {
          local_78[0] = *(byte *)((ulonglong)((uint)ppvVar24 & 0xf) +
                                 *(longlong *)
                                  (*(longlong *)(param_1 + 0x40) +
                                  (*(longlong *)(param_1 + 0x48) - 1U & (ulonglong)ppvVar24 >> 4) *
                                  8));
          if (ppvStack_58 == local_50) {
            ppvVar22 = (void **)local_78;
            FUN_180007d30((longlong *)&local_60,ppvStack_58,(undefined1 *)ppvVar22);
          }
          else {
            *(byte *)ppvStack_58 = local_78[0];
            ppvStack_58 = (void **)((longlong)ppvStack_58 + 1);
            ppvVar22 = local_50;
          }
          plVar1 = (longlong *)(param_1 + 0x58);
          *plVar1 = *plVar1 + -1;
          if (*plVar1 == 0) {
            *(undefined8 *)(param_1 + 0x50) = 0;
            ppvVar24 = ppvVar17;
          }
          else {
            *(longlong *)(param_1 + 0x50) = *(longlong *)(param_1 + 0x50) + 1;
            ppvVar24 = *(void ***)(param_1 + 0x50);
          }
          uVar7 = uVar7 - 1;
          ppvVar23 = ppvStack_58;
        } while (uVar7 != 0);
      }
      ppvVar28 = (void **)(ulonglong)*(byte *)((longlong)local_60 + 4);
      local_78[0] = *(byte *)((longlong)local_60 + 5);
      ppvVar21 = (void **)(ulonglong)local_78[0];
      uVar12 = (uint)CONCAT11(*(undefined1 *)((longlong)local_60 + 6),
                              *(undefined1 *)((longlong)local_60 + 7));
      if (DAT_180015ff0 != '\0') {
        FUN_180007960("\nRecv:",ppvVar23,ppvVar22,ppvVar24);
        ppvVar23 = ppvVar17;
        if ((int)ppvStack_58 != (int)local_60 && -1 < (int)ppvStack_58 - (int)local_60) {
          do {
            FUN_180007960("%.2X ",(ulonglong)*(byte *)((longlong)local_60 + (longlong)ppvVar17),
                          ppvVar22,ppvVar24);
            uVar19 = (int)ppvVar23 + 1;
            ppvVar17 = (void **)((longlong)ppvVar17 + 1);
            ppvVar23 = (void **)(ulonglong)uVar19;
          } while ((int)uVar19 < (int)ppvStack_58 - (int)local_60);
        }
        ppvVar24 = (void **)(ulonglong)uVar12;
        ppvVar23 = ppvVar28;
        FUN_180007960("Main:%.2X Sub:%.2X Frame:%d \n",ppvVar28,ppvVar21,ppvVar24);
        ppvVar22 = ppvVar21;
      }
      bVar26 = local_78[0];
      DAT_180015038 = 1;
      if (uVar12 + 1 < 0x8000) {
        DAT_180015038 = uVar12 + 1;
      }
      bVar5 = false;
      puVar4 = *(undefined8 **)(param_1 + 0x68);
      puVar20 = *(undefined8 **)(param_1 + 0x60);
      if (puVar20 == puVar4) {
LAB_18000b079:
        FUN_180007960("Unhandled:",ppvVar23,ppvVar22,ppvVar24);
        iVar16 = 0;
        lVar29 = 0;
        if ((int)ppvStack_58 != (int)local_60 && -1 < (int)ppvStack_58 - (int)local_60) {
          do {
            FUN_180007960("%.2X ",(ulonglong)*(byte *)((longlong)local_60 + lVar29),ppvVar22,
                          ppvVar24);
            iVar16 = iVar16 + 1;
            lVar29 = lVar29 + 1;
          } while (iVar16 < (int)ppvStack_58 - (int)local_60);
        }
        FUN_180007960("Main:%.2X Sub:%.2X Frame:%d \n",ppvVar28,(ulonglong)local_78[0],
                      (ulonglong)uVar12);
      }
      else {
        do {
          plVar1 = (longlong *)*puVar20;
          ppvVar22 = (void **)(ulonglong)bVar26;
          ppvVar23 = ppvVar28;
          cVar6 = (**(code **)*plVar1)(plVar1);
          if (cVar6 != '\0') {
            bVar5 = true;
            ppvVar23 = &local_60;
            (**(code **)(*plVar1 + 8))(plVar1);
          }
          puVar20 = puVar20 + 1;
        } while (puVar20 != puVar4);
        param_1 = local_68;
        if (!bVar5) goto LAB_18000b079;
      }
      if (local_60 != (void *)0x0) {
        _Memory = local_60;
        if ((0xfff < (ulonglong)((longlong)local_50 - (longlong)local_60)) &&
           (_Memory = *(void **)((longlong)local_60 + -8),
           0x1f < (ulonglong)((longlong)local_60 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
          _invalid_parameter_noinfo_noreturn();
        }
        free(_Memory);
        local_60 = (void *)0x0;
        ppvStack_58 = (void **)0x0;
        local_50 = (void **)0x0;
      }
      if (local_48 != (char *)0x0) {
        pcVar15 = local_48;
        if (0xfff < (ulonglong)(local_38 - (longlong)local_48)) {
          pcVar15 = *(char **)(local_48 + -8);
          pcVar10 = local_48 + (-8 - (longlong)pcVar15);
          goto joined_r0x00018000b18e;
        }
        goto LAB_18000b193;
      }
    }
    else {
LAB_18000aee2:
      plVar1 = (longlong *)(param_1 + 0x58);
      *plVar1 = *plVar1 + -1;
      if (*plVar1 == 0) {
        *(undefined8 *)(param_1 + 0x50) = 0;
      }
      else {
        *(longlong *)(param_1 + 0x50) = *(longlong *)(param_1 + 0x50) + 1;
      }
      if (local_48 != (char *)0x0) {
        pcVar15 = local_48;
        if (0xfff < (ulonglong)(local_38 - (longlong)local_48)) {
          pcVar15 = *(char **)(local_48 + -8);
          pcVar10 = local_48 + (-8 - (longlong)pcVar15);
joined_r0x00018000b18e:
          if ((char *)0x1f < pcVar10) {
LAB_18000b158:
                    /* WARNING: Subroutine does not return */
            _invalid_parameter_noinfo_noreturn();
          }
        }
LAB_18000b193:
        free(pcVar15);
      }
    }
    uVar12 = *(uint *)(param_1 + 0x58);
  } while( true );
}


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

### EXPORT FUNC 18000b220 (91 bytes) name=FID_conflict:~vector<CHN*___ptr64,std::allocator<CHN*___ptr64>_>

/* Library Function - Multiple Matches With Different Base Names
    public: __cdecl std::priority_queue<unsigned __int64,class std::vector<unsigned __int64,struct
   std::_Parallelism_allocator<unsigned __int64> >,struct std::greater<void>
   >::~priority_queue<unsigned __int64,class std::vector<unsigned __int64,struct
   std::_Parallelism_allocator<unsigned __int64> >,struct std::greater<void> >(void) __ptr64
    public: __cdecl std::vector<struct CHN * __ptr64,class std::allocator<struct CHN * __ptr64>
   >::~vector<struct CHN * __ptr64,class std::allocator<struct CHN * __ptr64> >(void) __ptr64
    public: __cdecl std::vector<unsigned __int64,struct std::_Parallelism_allocator<unsigned
   __int64> >::~vector<unsigned __int64,struct std::_Parallelism_allocator<unsigned __int64> >(void)
   __ptr64
    public: __cdecl std::vector<unsigned __int64,class std::allocator<unsigned __int64>
   >::~vector<unsigned __int64,class std::allocator<unsigned __int64> >(void) __ptr64
     7 names - too many to list
   
   Library: Visual Studio 2019 Release */

void FID_conflict__vector<CHN*___ptr64,std::allocator<CHN*___ptr64>_>(longlong *param_1)

{
  void *pvVar1;
  void *_Memory;
  
  pvVar1 = (void *)*param_1;
  if (pvVar1 != (void *)0x0) {
    _Memory = pvVar1;
    if ((0xfff < (param_1[2] - (longlong)pvVar1 & 0xfffffffffffffff8U)) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
    *param_1 = 0;
    param_1[1] = 0;
    param_1[2] = 0;
  }
  return;
}


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

### EXPORT FUNC 18000b280 (397 bytes) name=FUN_18000b280

undefined8 * FUN_18000b280(longlong *param_1,void *param_2,undefined8 *param_3)

{
  ulonglong uVar1;
  undefined8 *puVar2;
  longlong lVar3;
  void *pvVar4;
  longlong lVar5;
  ulonglong uVar6;
  ulonglong uVar7;
  undefined8 *_Dst;
  void *_Memory;
  undefined8 *_Dst_00;
  size_t _Size;
  
  lVar3 = *param_1;
  lVar5 = param_1[1] - lVar3 >> 3;
  if (lVar5 == 0x1fffffffffffffff) {
                    /* WARNING: Subroutine does not return */
    FUN_180002b80();
  }
  uVar7 = param_1[2] - lVar3 >> 3;
  uVar1 = lVar5 + 1;
  uVar6 = uVar1;
  if ((uVar7 <= 0x1fffffffffffffff - (uVar7 >> 1)) && (uVar6 = (uVar7 >> 1) + uVar7, uVar6 < uVar1))
  {
    uVar6 = uVar1;
  }
  if (0x1fffffffffffffff < uVar6) {
LAB_18000b40a:
                    /* WARNING: Subroutine does not return */
    FUN_180001750();
  }
  uVar7 = uVar6 * 8;
  if (uVar7 < 0x1000) {
    if (uVar7 == 0) {
      _Dst_00 = (undefined8 *)0x0;
    }
    else {
      _Dst_00 = (undefined8 *)FUN_18000c554(uVar7);
    }
  }
  else {
    if (uVar7 + 0x27 <= uVar7) goto LAB_18000b40a;
    lVar5 = FUN_18000c554(uVar7 + 0x27);
    if (lVar5 == 0) goto LAB_18000b3fd;
    _Dst_00 = (undefined8 *)(lVar5 + 0x27U & 0xffffffffffffffe0);
    _Dst_00[-1] = lVar5;
  }
  puVar2 = _Dst_00 + ((longlong)param_2 - lVar3 >> 3);
  *puVar2 = *param_3;
  pvVar4 = (void *)*param_1;
  if (param_2 == (void *)param_1[1]) {
    _Size = param_1[1] - (longlong)pvVar4;
    _Dst = _Dst_00;
    param_2 = pvVar4;
  }
  else {
    memmove(_Dst_00,pvVar4,(longlong)param_2 - (longlong)pvVar4);
    _Dst = puVar2 + 1;
    _Size = param_1[1] - (longlong)param_2;
  }
  memmove(_Dst,param_2,_Size);
  pvVar4 = (void *)*param_1;
  if (pvVar4 != (void *)0x0) {
    _Memory = pvVar4;
    if ((0xfff < (param_1[2] - (longlong)pvVar4 & 0xfffffffffffffff8U)) &&
       (_Memory = *(void **)((longlong)pvVar4 + -8),
       0x1f < (ulonglong)((longlong)pvVar4 + (-8 - (longlong)_Memory)))) {
LAB_18000b3fd:
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  *param_1 = (longlong)_Dst_00;
  param_1[1] = (longlong)(_Dst_00 + uVar1);
  param_1[2] = (longlong)(_Dst_00 + uVar6);
  return puVar2;
}


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

### EXPORT FUNC 18000b410 (123 bytes) name=FUN_18000b410

undefined8 * FUN_18000b410(undefined8 *param_1)

{
  undefined8 *puVar1;
  undefined8 *puVar2;
  
  puVar1 = param_1 + 1;
  *param_1 = TCMVirtualDevice::vftable;
  *puVar1 = 0;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  puVar2 = (undefined8 *)FUN_18000c554(0x10);
  puVar2[1] = 0;
  *puVar1 = puVar2;
  *puVar2 = puVar1;
  _Cnd_init_in_situ(param_1 + 7);
  _Mtx_init_in_situ(param_1 + 0x10,2);
  param_1[0x1a] = 0;
  return param_1;
}


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

### EXPORT FUNC 18000b490 (3 bytes) name=_guard_check_icall

void _guard_check_icall(void)

{
  return;
}


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

### EXPORT FUNC 18000b4a0 (3 bytes) name=FUN_18000b4a0

undefined1 FUN_18000b4a0(void)

{
  return 0;
}


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

### EXPORT FUNC 18000b4b0 (116 bytes) name=FUN_18000b4b0

void FUN_18000b4b0(undefined8 param_1,undefined4 param_2,undefined8 param_3,undefined8 param_4,
                  int param_5,longlong param_6)

{
  if (param_5 == 2) {
    *(undefined4 *)(param_6 + 0x240) = param_2;
    MAG_GetOutputBMPdataRGB24
              (*(undefined4 *)(param_6 + 0x18),*(undefined8 *)(param_6 + 0x220),
               *(undefined4 *)(param_6 + 0x218),1);
    if (*(code **)(param_6 + 0x228) != (code *)0x0) {
                    /* WARNING: Could not recover jumptable at 0x00018000b517. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      (**(code **)(param_6 + 0x228))
                (*(undefined8 *)(param_6 + 0x220),*(undefined4 *)(param_6 + 0x208),
                 *(undefined4 *)(param_6 + 0x20c),3);
      return;
    }
  }
  return;
}


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

### EXPORT FUNC 18000b530 (442 bytes) name=FUN_18000b530

undefined8 * FUN_18000b530(void)

{
  undefined8 *puVar1;
  undefined8 *_Dst;
  undefined8 *puVar2;
  longlong lVar3;
  
  _Dst = DAT_180015ff8;
  if (DAT_180015ff8 == (undefined8 *)0x0) {
    _Dst = (undefined8 *)FUN_18000c554(0x2b0);
    memset(_Dst,0,0x2b0);
    *_Dst = ThermalController::vftable;
    *(int *)(_Dst + 1) = 0;
    _Dst[2] = 0;
    *(undefined4 *)(_Dst + 3) = 0xffffffff;
    _Dst[0x3e] = 0;
    *(undefined4 *)(_Dst + 0x3f) = 0;
    *(undefined8 *)((longlong)_Dst + 0x1c) = 0;
    *(undefined8 *)((longlong)_Dst + 0x24) = 0;
    *(undefined8 *)((longlong)_Dst + 0x2c) = 0;
    *(undefined8 *)((longlong)_Dst + 0x34) = 0;
    *(undefined8 *)((longlong)_Dst + 0x3c) = 0;
    *(undefined8 *)((longlong)_Dst + 0x44) = 0;
    *(undefined8 *)((longlong)_Dst + 0x4c) = 0;
    *(undefined8 *)((longlong)_Dst + 0x54) = 0;
    *(undefined8 *)((longlong)_Dst + 0x5c) = 0;
    FUN_1800015d0((int *)(_Dst + 1));
    _Dst[0x44] = 0;
    _Dst[0x45] = 0;
    _Dst[0x47] = 0;
    *(undefined4 *)((longlong)_Dst + 0x27c) = 0;
    _Dst[0x48] = 0;
    _Dst[0x49] = 0x3fef5c28f5c28f5c;
    _Dst[0x53] = 0;
    _Dst[0x54] = 0xffffffffffffffff;
    _Dst[0x51] = 0x4040000000000000;
    _Dst[0x52] = 0x4044000000000000;
    _Dst[0x50] = 0x4042800000000000;
    *(undefined2 *)(_Dst + 0x55) = 0;
    if (DAT_180015fe8 == (undefined8 *)0x0) {
      puVar2 = (undefined8 *)FUN_18000c554(0x78);
      *puVar2 = 0;
      puVar2[1] = 0;
      puVar2[2] = 0;
      puVar2[3] = 0;
      puVar2[4] = 0;
      puVar2[5] = 0;
      puVar2[6] = 0;
      puVar2[7] = 0;
      puVar2[8] = 0;
      puVar2[9] = 0;
      puVar2[10] = 0;
      puVar2[0xb] = 0;
      puVar2[0xc] = 0;
      puVar2[0xd] = 0;
      puVar2[0xe] = 0;
      DAT_180015fe8 = FUN_18000a510(puVar2);
    }
    puVar2 = DAT_180015fe8;
    _Dst[0x46] = DAT_180015fe8;
    puVar1 = (undefined8 *)puVar2[0xd];
    for (puVar2 = (undefined8 *)puVar2[0xc]; puVar2 != puVar1; puVar2 = puVar2 + 1) {
      lVar3 = __RTDynamicCast(*puVar2,0,&TCMVirtualDevice::RTTI_Type_Descriptor,
                              &EloProximityDevice::RTTI_Type_Descriptor,0);
      if (lVar3 != 0) {
        *(undefined8 **)(lVar3 + 0xd8) = _Dst;
        DAT_180015ff8 = _Dst;
        return _Dst;
      }
    }
  }
  DAT_180015ff8 = _Dst;
  return _Dst;
}


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

### EXPORT FUNC 18000b6f0 (425 bytes) name=FUN_18000b6f0

undefined8 FUN_18000b6f0(longlong param_1,undefined4 *param_2,undefined *param_3,undefined8 param_4)

{
  undefined4 *puVar1;
  undefined1 uVar2;
  int iVar3;
  undefined8 uVar4;
  ulonglong uVar5;
  uint7 uVar6;
  code *pcVar7;
  
  if (*(int *)(param_1 + 8) != 0) {
    MAG_EnumCameras(*(undefined4 *)(param_1 + 0x18));
    Sleep(0x32);
    if (*(int *)(param_1 + 8) != 0) {
      param_2 = (undefined4 *)0x0;
      iVar3 = MAG_GetTerminalList(0);
      if (iVar3 != 0) {
        param_2 = (undefined4 *)0x0;
        param_3 = (code *)0x3e8;
        iVar3 = MAG_LinkCamera(*(undefined4 *)(param_1 + 0x18));
        if (iVar3 != 0) {
          puVar1 = (undefined4 *)(param_1 + 0x1c);
          param_3 = (code *)0x48;
          param_2 = puVar1;
          MAG_GetCamInfo(*(undefined4 *)(param_1 + 0x18));
          if (puVar1 != (undefined4 *)0x0) {
            *(undefined4 *)(param_1 + 0x200) = *puVar1;
            *(undefined4 *)(param_1 + 0x204) = *(undefined4 *)(param_1 + 0x20);
            *(undefined4 *)(param_1 + 0x208) = *(undefined4 *)(param_1 + 0x5c);
            *(undefined4 *)(param_1 + 0x20c) = *(undefined4 *)(param_1 + 0x60);
            *(undefined4 *)(param_1 + 0x210) = 0x10;
            *(undefined4 *)(param_1 + 0x214) = *(undefined4 *)(param_1 + 0x60);
            MAG_GetFixPara(*(undefined4 *)(param_1 + 0x18),param_1 + 0x250);
            *(undefined4 *)(param_1 + 0x250) = 0x3f266666;
            *(float *)(param_1 + 0x254) = (float)*(double *)(param_1 + 0x248);
            MAG_SetFixPara(*(undefined4 *)(param_1 + 0x18),param_1 + 0x250,2);
            iVar3 = *(int *)(param_1 + 0x208) * *(int *)(param_1 + 0x20c) * 3;
            *(int *)(param_1 + 0x218) = iVar3;
            uVar4 = thunk_FUN_18000c554((longlong)iVar3);
            pcVar7 = FUN_18000b4b0;
            param_4 = 2;
            *(undefined8 *)(param_1 + 0x220) = uVar4;
            param_2 = (undefined4 *)(param_1 + 0x200);
            iVar3 = MAG_StartProcessImage(*(undefined4 *)(param_1 + 0x18));
            if (iVar3 != 0) {
              param_2 = (undefined4 *)0x2;
              MAG_SetColorPalette(*(undefined4 *)(param_1 + 0x18));
              uVar2 = 1;
              param_3 = pcVar7;
              goto LAB_18000b84d;
            }
            MAG_DisLinkCamera();
            param_3 = pcVar7;
          }
        }
      }
    }
  }
  uVar2 = 0;
LAB_18000b84d:
  *(undefined1 *)(param_1 + 0x2a8) = uVar2;
  uVar5 = FUN_18000a960(*(longlong *)(param_1 + 0x230),param_2,param_3,param_4);
  *(char *)(param_1 + 0x2a9) = (char)uVar5;
  uVar6 = (uint7)(uVar5 >> 8);
  if ((*(char *)(param_1 + 0x2a8) != '\0') && ((char)uVar5 != '\0')) {
    return CONCAT71(uVar6,1);
  }
  return (ulonglong)uVar6 << 8;
}


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

### EXPORT FUNC 18000b8a0 (177 bytes) name=FUN_18000b8a0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_18000b8a0(longlong param_1,int param_2)

{
  DWORD DVar1;
  float fVar2;
  
  *(int *)(param_1 + 0x2a0) = param_2;
  if (*(code **)(param_1 + 0x238) != (code *)0x0) {
    fVar2 = (float)param_2;
    if (param_2 < 0) {
      (**(code **)(param_1 + 0x238))(fVar2);
      DVar1 = GetTickCount();
      if ((60000 < DVar1 - *(int *)(param_1 + 0x244)) && (5000 < DVar1 - *(int *)(param_1 + 0x2a4)))
      {
        if (*(int *)(param_1 + 8) != 0) {
          MAG_TriggerFFC(*(undefined4 *)(param_1 + 0x18));
        }
        DVar1 = GetTickCount();
        *(DWORD *)(param_1 + 0x244) = DVar1;
        return;
      }
    }
    else {
      DVar1 = GetTickCount();
      *(DWORD *)(param_1 + 0x2a4) = DVar1;
      if (*(int *)(param_1 + 0x27c) != 0) {
        fVar2 = fVar2 * _DAT_1800101e0;
      }
      (**(code **)(param_1 + 0x238))(fVar2);
    }
  }
  return;
}


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

### EXPORT FUNC 18000b960 (460 bytes) name=FUN_18000b960

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

double * FUN_18000b960(longlong param_1,double *param_2,uint param_3,uint param_4)

{
  double dVar1;
  undefined4 uVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  float fVar8;
  double dVar9;
  double dVar10;
  
  if ((param_3 < 0xa0) && (param_4 < 0x78)) {
    uVar2 = MAG_GetTemperatureProbe(*(undefined4 *)(param_1 + 0x18),param_3,param_4,3);
    iVar3 = MAG_FixTemperature(*(undefined4 *)(param_1 + 0x18),uVar2);
    iVar4 = 0;
    if (-1 < (int)(param_3 - 1)) {
      iVar4 = param_3 - 1;
    }
    iVar7 = 0x9f;
    if ((int)(param_3 + 1) < 0x9f) {
      iVar7 = param_3 + 1;
    }
    iVar6 = 0;
    if (-1 < (int)(param_4 - 1)) {
      iVar6 = param_4 - 1;
    }
    dVar10 = (double)iVar3 * _DAT_1800101e8;
    iVar3 = 0x77;
    if ((int)(param_4 + 1) < 0x77) {
      iVar3 = param_4 + 1;
    }
    iVar3 = MAG_EstimateUnderArmTempFromForeheadRect
                      (*(undefined4 *)(param_1 + 0x18),iVar4,iVar6,iVar7,iVar3);
    iVar4 = *(int *)(param_1 + 0x27c);
    dVar9 = (double)iVar3 * _DAT_1800101e8;
    if (iVar4 == 1) {
      dVar10 = dVar10 * _DAT_1800101f0 + _DAT_1800101f8;
      dVar9 = dVar9 * _DAT_1800101f0 + _DAT_1800101f8;
    }
    dVar1 = *(double *)(param_1 + 0x298);
    dVar9 = dVar9 + dVar1;
    if ((*(double *)(param_1 + 0x290) <= dVar9 && dVar9 != *(double *)(param_1 + 0x290)) ||
       (dVar9 < *(double *)(param_1 + 0x288))) {
      uVar5 = 0xffffffff;
    }
    else {
      uVar5 = (uint)(*(double *)(param_1 + 0x280) <= dVar9);
    }
    *(uint *)((longlong)param_2 + 0x24) = uVar5;
    *(int *)(param_2 + 4) = iVar4;
    fVar8 = (float)(int)param_4 / _DAT_180010200;
    *param_2 = (double)((float)(int)param_3 / _DAT_180010204);
    param_2[2] = dVar10 + dVar1;
    param_2[1] = (double)fVar8;
    param_2[3] = dVar9;
  }
  else {
    *(undefined4 *)((longlong)param_2 + 0x24) = 0xfa0a1f00;
    *param_2 = -1.0;
    param_2[1] = -1.0;
    param_2[3] = -100000000.0;
    param_2[2] = -100000000.0;
    *(undefined4 *)(param_2 + 4) = *(undefined4 *)(param_1 + 0x27c);
  }
  return param_2;
}


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

### EXPORT FUNC 18000bb30 (6 bytes) name=GetSDKVersion

undefined8 GetSDKVersion(void)

{
                    /* 0xbb30  2  GetSDKVersion */
  return 10000;
}


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

### EXPORT FUNC 18000bb40 (21 bytes) name=Start

void Start(undefined8 param_1,undefined4 *param_2,undefined *param_3,undefined8 param_4)

{
  undefined8 *puVar1;
  
                    /* 0xbb40  16  Start */
  puVar1 = FUN_18000b530();
  FUN_18000b6f0((longlong)puVar1,param_2,param_3,param_4);
  return;
}


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

### EXPORT FUNC 18000bb60 (152 bytes) name=Stop

void Stop(void)

{
  int iVar1;
  undefined8 *puVar2;
  
                    /* 0xbb60  18  Stop */
  puVar2 = FUN_18000b530();
  iVar1 = MAG_IsProcessingImage(*(undefined4 *)(puVar2 + 3));
  if (iVar1 != 0) {
    if (*(int *)(puVar2 + 0x3e) != 0) {
      MAG_LocalStorageAviStop(*(undefined4 *)(puVar2 + 3));
      *(undefined4 *)(puVar2 + 0x3e) = 0;
    }
    if (*(int *)((longlong)puVar2 + 500) != 0) {
      MAG_LocalStorageMgsStop(*(undefined4 *)(puVar2 + 3));
      *(undefined8 *)((longlong)puVar2 + 500) = 0;
    }
    MAG_StopProcessImage(*(undefined4 *)(puVar2 + 3));
  }
  iVar1 = MAG_IsLinked(*(undefined4 *)(puVar2 + 3));
  if (iVar1 != 0) {
    MAG_DisLinkCamera(*(undefined4 *)(puVar2 + 3));
  }
  *(undefined1 *)(puVar2 + 0x55) = 0;
  (**(code **)(*(longlong *)(puVar2[0x46] + 8) + 0x20))();
  *(undefined1 *)((longlong)puVar2 + 0x2a9) = 0;
  return;
}


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

### EXPORT FUNC 18000bc00 (41 bytes) name=IsWorking

undefined8 IsWorking(void)

{
  undefined8 *puVar1;
  uint7 uVar2;
  
                    /* 0xbc00  4  IsWorking */
  puVar1 = FUN_18000b530();
  uVar2 = (uint7)((ulonglong)puVar1 >> 8);
  if ((*(char *)(puVar1 + 0x55) != '\0') && (*(char *)((longlong)puVar1 + 0x2a9) != '\0')) {
    return CONCAT71(uVar2,1);
  }
  return (ulonglong)uVar2 << 8;
}


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

### EXPORT FUNC 18000bc30 (27 bytes) name=SetNewIRFrameDelegate

void SetNewIRFrameDelegate(undefined8 param_1)

{
  undefined8 *puVar1;
  
                    /* 0xbc30  11  SetNewIRFrameDelegate */
  puVar1 = FUN_18000b530();
  puVar1[0x45] = param_1;
  return;
}


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

### EXPORT FUNC 18000bc50 (27 bytes) name=SetNewDistanceDelegate

void SetNewDistanceDelegate(undefined8 param_1)

{
  undefined8 *puVar1;
  
                    /* 0xbc50  10  SetNewDistanceDelegate */
  puVar1 = FUN_18000b530();
  puVar1[0x47] = param_1;
  return;
}


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

### EXPORT FUNC 18000bc70 (122 bytes) name=ReadTemperatureAtPoint

void ReadTemperatureAtPoint(uint param_1,uint param_2,double *param_3)

{
  undefined8 *puVar1;
  double local_38;
  double dStack_30;
  double local_28;
  double dStack_20;
  double local_18;
  
                    /* 0xbc70  5  ReadTemperatureAtPoint */
  puVar1 = FUN_18000b530();
  MAG_LockFrame(*(undefined4 *)(puVar1 + 3));
  FUN_18000b960((longlong)puVar1,&local_38,param_1,param_2);
  MAG_UnLockFrame(*(undefined4 *)(puVar1 + 3));
  *param_3 = local_38;
  param_3[1] = dStack_30;
  param_3[2] = local_28;
  param_3[3] = dStack_20;
  param_3[4] = local_18;
  return;
}


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

### EXPORT FUNC 18000bcf0 (361 bytes) name=ReadTemperatureInRect

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

void ReadTemperatureInRect(int param_1,int param_2,int param_3,int param_4,undefined4 *param_5)

{
  int iVar1;
  char cVar2;
  undefined8 *puVar3;
  uint uVar4;
  undefined1 auStack_c8 [32];
  int local_a8;
  undefined8 *local_a0;
  undefined4 local_98;
  undefined4 uStack_94;
  undefined4 uStack_90;
  undefined4 uStack_8c;
  undefined4 local_88;
  undefined4 uStack_84;
  undefined4 uStack_80;
  undefined4 uStack_7c;
  undefined4 local_78;
  undefined4 uStack_74;
  undefined8 local_70;
  undefined8 uStack_68;
  int local_60;
  ulonglong local_58;
  
                    /* 0xbcf0  6  ReadTemperatureInRect */
  local_58 = DAT_180015010 ^ (ulonglong)auStack_c8;
  puVar3 = FUN_18000b530();
  MAG_LockFrame(*(undefined4 *)(puVar3 + 3));
  local_60 = 0;
  local_a8 = 0;
  if (-1 < param_2) {
    local_a8 = param_2;
  }
  local_70 = 0;
  uStack_68 = 0;
  iVar1 = local_a8 + param_4;
  if (0x77 < local_a8 + param_4) {
    iVar1 = 0x77;
  }
  local_a8 = 0x77 - local_a8;
  local_a0 = &local_70;
  cVar2 = MAG_GetRectTemperatureInfo
                    (*(undefined4 *)(puVar3 + 3),param_1,0x77 - iVar1,param_3 + param_1);
  if (cVar2 == '\0') {
    local_78 = *(undefined4 *)((longlong)puVar3 + 0x27c);
    local_88 = _DAT_180010220;
    uStack_84 = _UNK_180010224;
    uStack_80 = _UNK_180010228;
    uStack_7c = _UNK_18001022c;
    uStack_74 = 0xfa0a1f00;
    local_98 = _DAT_180010210;
    uStack_94 = _UNK_180010214;
    uStack_90 = _UNK_180010218;
    uStack_8c = _UNK_18001021c;
  }
  else {
    iVar1 = local_60 / 0xa0;
    uVar4 = local_60 % 0xa0;
    local_a8 = iVar1;
    MAG_FixTemperature(*(undefined4 *)(puVar3 + 3),local_70._4_4_,
                       *(undefined4 *)((longlong)puVar3 + 0x254),uVar4);
    FUN_18000b960((longlong)puVar3,(double *)&local_98,uVar4,0x78 - iVar1);
  }
  MAG_UnLockFrame(*(undefined4 *)(puVar3 + 3));
  *param_5 = local_98;
  param_5[1] = uStack_94;
  param_5[2] = uStack_90;
  param_5[3] = uStack_8c;
  *(ulonglong *)(param_5 + 4) = CONCAT44(uStack_84,local_88);
  *(ulonglong *)(param_5 + 6) = CONCAT44(uStack_7c,uStack_80);
  *(ulonglong *)(param_5 + 8) = CONCAT44(uStack_74,local_78);
  return;
}


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

### EXPORT FUNC 18000be60 (81 bytes) name=SetTempBoundary

void SetTempBoundary(undefined8 param_1,undefined8 param_2,undefined8 param_3)

{
  undefined8 *puVar1;
  
                    /* 0xbe60  12  SetTempBoundary */
  puVar1 = FUN_18000b530();
  puVar1[0x51] = param_1;
  puVar1[0x52] = param_2;
  puVar1[0x50] = param_3;
  return;
}


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

### EXPORT FUNC 18000bec0 (35 bytes) name=SetTempOffset

void SetTempOffset(undefined8 param_1)

{
  undefined8 *puVar1;
  
                    /* 0xbec0  13  SetTempOffset */
  puVar1 = FUN_18000b530();
  puVar1[0x53] = param_1;
  return;
}


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

### EXPORT FUNC 18000bef0 (25 bytes) name=SetUnitMode

void SetUnitMode(undefined4 param_1)

{
  undefined8 *puVar1;
  
                    /* 0xbef0  14  SetUnitMode */
  puVar1 = FUN_18000b530();
  *(undefined4 *)((longlong)puVar1 + 0x27c) = param_1;
  return;
}


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

### EXPORT FUNC 18000bf10 (124 bytes) name=Rotate

void Rotate(int param_1)

{
  undefined8 *puVar1;
  longlong lVar2;
  undefined8 *puVar3;
  
                    /* 0xbf10  7  Rotate */
  puVar1 = FUN_18000b530();
  puVar3 = *(undefined8 **)(puVar1[0x46] + 0x60);
  puVar1 = *(undefined8 **)(puVar1[0x46] + 0x68);
  while( true ) {
    if (puVar3 == puVar1) {
      return;
    }
    lVar2 = __RTDynamicCast(*puVar3,0,&TCMVirtualDevice::RTTI_Type_Descriptor,
                            &EloMotorDevice::RTTI_Type_Descriptor,0);
    if (lVar2 != 0) break;
    puVar3 = puVar3 + 1;
  }
  FUN_180007a40(lVar2,param_1);
  return;
}


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

### EXPORT FUNC 18000bf90 (59 bytes) name=GetInnerIRCameraTemp

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

double GetInnerIRCameraTemp(void)

{
  undefined8 *puVar1;
  double dVar2;
  
                    /* 0xbf90  1  GetInnerIRCameraTemp */
  puVar1 = FUN_18000b530();
  dVar2 = (double)*(int *)(puVar1 + 0x48) * _DAT_1800101e8;
  if (*(int *)((longlong)puVar1 + 0x27c) == 1) {
    dVar2 = dVar2 * _DAT_1800101f0 + _DAT_1800101f8;
  }
  return dVar2;
}


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

### EXPORT FUNC 18000bfd0 (88 bytes) name=SetEmissivity

void SetEmissivity(double param_1)

{
  undefined8 *puVar1;
  
                    /* 0xbfd0  8  SetEmissivity */
  puVar1 = FUN_18000b530();
  if (*(int *)(puVar1 + 1) == 0) {
    puVar1[0x49] = param_1;
    return;
  }
  *(float *)((longlong)puVar1 + 0x254) = (float)param_1;
                    /* WARNING: Could not recover jumptable at 0x00018000c021. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  MAG_SetFixPara(*(undefined4 *)(puVar1 + 3),puVar1 + 0x4a,2);
  return;
}


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

### EXPORT FUNC 18000c030 (47 bytes) name=Trigger

void Trigger(void)

{
  DWORD DVar1;
  undefined8 *puVar2;
  
                    /* 0xc030  19  Trigger */
  puVar2 = FUN_18000b530();
  if (*(int *)(puVar2 + 1) != 0) {
    MAG_TriggerFFC(*(undefined4 *)(puVar2 + 3));
  }
  DVar1 = GetTickCount();
  *(DWORD *)((longlong)puVar2 + 0x244) = DVar1;
  return;
}


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

### EXPORT FUNC 18000c060 (255 bytes) name=GetTCMVersion

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Type propagation algorithm not settling */

void GetTCMVersion(void *param_1)

{
  undefined8 *puVar1;
  longlong lVar2;
  undefined8 *******pppppppuVar3;
  undefined8 *puVar4;
  TypeDescriptor *pTVar5;
  TypeDescriptor *pTVar6;
  undefined1 auStack_68 [32];
  undefined4 local_48;
  undefined8 *******local_38 [2];
  int local_28;
  ulonglong local_20;
  ulonglong local_18;
  
                    /* 0xc060  3  GetTCMVersion */
  local_18 = DAT_180015010 ^ (ulonglong)auStack_68;
  puVar1 = FUN_18000b530();
  puVar4 = *(undefined8 **)(puVar1[0x46] + 0x60);
  puVar1 = *(undefined8 **)(puVar1[0x46] + 0x68);
  while( true ) {
    if (puVar4 == puVar1) {
      return;
    }
    pTVar6 = &EloTCMUpdaterDevice::RTTI_Type_Descriptor;
    pTVar5 = &TCMVirtualDevice::RTTI_Type_Descriptor;
    local_48 = 0;
    lVar2 = __RTDynamicCast(*puVar4,0);
    if (lVar2 != 0) break;
    puVar4 = puVar4 + 1;
  }
  FUN_180009000(lVar2,local_38,pTVar5,(longlong)pTVar6);
  pppppppuVar3 = local_38;
  if (0xf < local_20) {
    pppppppuVar3 = local_38[0];
  }
  memcpy(param_1,pppppppuVar3,(longlong)local_28);
  if (local_20 < 0x10) {
    return;
  }
  pppppppuVar3 = local_38[0];
  if ((0xfff < local_20 + 1) &&
     (pppppppuVar3 = (undefined8 *******)local_38[0][-1],
     0x1f < (ulonglong)((longlong)local_38[0] + (-8 - (longlong)pppppppuVar3)))) {
                    /* WARNING: Subroutine does not return */
    _invalid_parameter_noinfo_noreturn();
  }
  free(pppppppuVar3);
  return;
}


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

### EXPORT FUNC 18000c160 (405 bytes) name=SetFirmwareData

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

void SetFirmwareData(void *param_1,int param_2)

{
  void *_Src;
  longlong lVar1;
  undefined8 *puVar2;
  longlong lVar3;
  undefined8 *puVar4;
  void *pvVar5;
  ulonglong _Size;
  void **ppvVar6;
  undefined1 auStack_78 [32];
  undefined4 local_58;
  void *local_48;
  undefined8 uStack_40;
  longlong local_38;
  ulonglong local_30;
  
                    /* 0xc160  9  SetFirmwareData */
  local_30 = DAT_180015010 ^ (ulonglong)auStack_78;
  _Size = (ulonglong)param_2;
  puVar2 = FUN_18000b530();
  puVar4 = *(undefined8 **)(puVar2[0x46] + 0x60);
  puVar2 = *(undefined8 **)(puVar2[0x46] + 0x68);
  while( true ) {
    if (puVar4 == puVar2) {
      return;
    }
    local_58 = 0;
    lVar3 = __RTDynamicCast(*puVar4,0,&TCMVirtualDevice::RTTI_Type_Descriptor,
                            &EloTCMUpdaterDevice::RTTI_Type_Descriptor);
    if (lVar3 != 0) break;
    puVar4 = puVar4 + 1;
  }
  local_38 = 0;
  local_48 = (void *)0x0;
  uStack_40 = 0;
  if (param_2 != 0) {
    if (0x7fffffffffffffff < _Size) {
                    /* WARNING: Subroutine does not return */
      FUN_180002b80();
    }
    FUN_18000c470((longlong *)&local_48,_Size);
  }
  if ((ulonglong)(local_38 - (longlong)local_48) < _Size) {
    FUN_180002ba0((ulonglong *)&local_48,_Size);
  }
  lVar1 = local_38;
  _Src = local_48;
  memmove(local_48,param_1,_Size);
  ppvVar6 = (void **)(lVar3 + 0x100);
  if (ppvVar6 != &local_48) {
    pvVar5 = *ppvVar6;
    if ((ulonglong)(*(longlong *)(lVar3 + 0x110) - (longlong)pvVar5) < _Size) {
      FUN_180002ba0((ulonglong *)ppvVar6,_Size);
      pvVar5 = *ppvVar6;
    }
    memmove(pvVar5,_Src,_Size);
    *(ulonglong *)(lVar3 + 0x108) = (longlong)pvVar5 + _Size;
  }
  if (_Src == (void *)0x0) {
    return;
  }
  pvVar5 = _Src;
  if ((0xfff < (ulonglong)(lVar1 - (longlong)_Src)) &&
     (pvVar5 = *(void **)((longlong)_Src + -8),
     0x1f < (ulonglong)((longlong)_Src + (-8 - (longlong)pvVar5)))) {
                    /* WARNING: Subroutine does not return */
    _invalid_parameter_noinfo_noreturn();
  }
  free(pvVar5);
  return;
}


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

### EXPORT FUNC 18000c300 (122 bytes) name=SetUpdateCallback

void SetUpdateCallback(undefined8 param_1)

{
  undefined8 *puVar1;
  longlong lVar2;
  undefined8 *puVar3;
  
                    /* 0xc300  15  SetUpdateCallback */
  puVar1 = FUN_18000b530();
  puVar3 = *(undefined8 **)(puVar1[0x46] + 0x60);
  puVar1 = *(undefined8 **)(puVar1[0x46] + 0x68);
  while( true ) {
    if (puVar3 == puVar1) {
      return;
    }
    lVar2 = __RTDynamicCast(*puVar3,0,&TCMVirtualDevice::RTTI_Type_Descriptor,
                            &EloTCMUpdaterDevice::RTTI_Type_Descriptor,0);
    if (lVar2 != 0) break;
    puVar3 = puVar3 + 1;
  }
  *(undefined8 *)(lVar2 + 0xd8) = param_1;
  return;
}


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

### EXPORT FUNC 18000c380 (227 bytes) name=StartUpdate

void StartUpdate(void)

{
  code *pcVar1;
  undefined8 *puVar2;
  longlong lVar3;
  longlong *_ArgList;
  uintptr_t uVar4;
  undefined8 *puVar5;
  uint uStack_10;
  undefined4 uStack_c;
  
                    /* 0xc380  17  StartUpdate */
  puVar2 = FUN_18000b530();
  puVar5 = *(undefined8 **)(puVar2[0x46] + 0x60);
  puVar2 = *(undefined8 **)(puVar2[0x46] + 0x68);
  while( true ) {
    if (puVar5 == puVar2) {
      return;
    }
    lVar3 = __RTDynamicCast(*puVar5,0,&TCMVirtualDevice::RTTI_Type_Descriptor,
                            &EloTCMUpdaterDevice::RTTI_Type_Descriptor,0);
    if (lVar3 != 0) break;
    puVar5 = puVar5 + 1;
  }
  _ArgList = (longlong *)FUN_18000c554(0x10);
  _ArgList[1] = (longlong)FUN_1800091e0;
  *_ArgList = lVar3;
  uVar4 = _beginthreadex((void *)0x0,0,FUN_180007930,_ArgList,0,&uStack_10);
  if (uVar4 != 0) {
    if (*(int *)(lVar3 + 0x120) == 0) {
      *(uintptr_t *)(lVar3 + 0x118) = uVar4;
      *(ulonglong *)(lVar3 + 0x120) = CONCAT44(uStack_c,uStack_10);
      return;
    }
                    /* WARNING: Subroutine does not return */
    terminate();
  }
  uStack_10 = 0;
  std::_Throw_Cpp_error(6);
  pcVar1 = (code *)swi(3);
  (*pcVar1)();
  return;
}


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

### EXPORT FUNC 18000c470 (161 bytes) name=FUN_18000c470

void FUN_18000c470(longlong *param_1,ulonglong param_2)

{
  longlong lVar1;
  longlong lVar2;
  longlong lVar3;
  void *_Dst;
  
  lVar1 = param_1[1];
  lVar2 = *param_1;
  if (param_2 < 0x1000) {
    if (param_2 == 0) {
      _Dst = (void *)0x0;
    }
    else {
      _Dst = (void *)FUN_18000c554(param_2);
    }
  }
  else {
    if (param_2 + 0x27 <= param_2) {
                    /* WARNING: Subroutine does not return */
      FUN_180001750();
    }
    lVar3 = FUN_18000c554(param_2 + 0x27);
    if (lVar3 == 0) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    _Dst = (void *)(lVar3 + 0x27U & 0xffffffffffffffe0);
    *(longlong *)((longlong)_Dst - 8) = lVar3;
  }
  memmove(_Dst,(void *)*param_1,param_1[1] - *param_1);
  FUN_180007280(param_1,(longlong)_Dst,lVar1 - lVar2,param_2);
  return;
}


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

### EXPORT FUNC 18000c530 (33 bytes) name=__security_check_cookie

/* WARNING: This is an inlined function */
/* Library Function - Single Match
    __security_check_cookie
   
   Libraries: Visual Studio 2015, Visual Studio 2017, Visual Studio 2019 */

void __cdecl __security_check_cookie(uintptr_t _StackCookie)

{
  if ((_StackCookie == DAT_180015010) && ((short)(_StackCookie >> 0x30) == 0)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __report_gsfailure(_StackCookie);
}


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

### EXPORT FUNC 18000c554 (58 bytes) name=FUN_18000c554

void FUN_18000c554(size_t param_1)

{
  int iVar1;
  void *pvVar2;
  
  do {
    pvVar2 = malloc(param_1);
    if (pvVar2 != (void *)0x0) {
      return;
    }
    iVar1 = _callnewh(param_1);
  } while (iVar1 != 0);
  if (param_1 == 0xffffffffffffffff) {
                    /* WARNING: Subroutine does not return */
    FUN_180001750();
  }
                    /* WARNING: Subroutine does not return */
  FUN_18000d200();
}


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

### EXPORT FUNC 18000c590 (57 bytes) name=__scrt_acquire_startup_lock

/* Library Function - Single Match
    __scrt_acquire_startup_lock
   
   Libraries: Visual Studio 2015 Release, Visual Studio 2017 Release, Visual Studio 2019 Release */

ulonglong __scrt_acquire_startup_lock(void)

{
  ulonglong uVar1;
  bool bVar2;
  undefined7 extraout_var;
  ulonglong uVar3;
  
  bVar2 = __scrt_is_ucrt_dll_in_use();
  uVar3 = CONCAT71(extraout_var,bVar2);
  if ((int)uVar3 == 0) {
LAB_18000c5be:
    uVar3 = uVar3 & 0xffffffffffffff00;
  }
  else {
    do {
      uVar3 = 0;
      LOCK();
      bVar2 = DAT_1800159a8 == 0;
      uVar1 = *(ulonglong *)((longlong)Self + 8);
      if (!bVar2) {
        uVar3 = DAT_1800159a8;
        uVar1 = DAT_1800159a8;
      }
      DAT_1800159a8 = uVar1;
      UNLOCK();
      if (bVar2) goto LAB_18000c5be;
    } while (*(ulonglong *)((longlong)Self + 8) != uVar3);
    uVar3 = CONCAT71((int7)(uVar3 >> 8),1);
  }
  return uVar3;
}


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

### EXPORT FUNC 18000c5cc (52 bytes) name=__scrt_dllmain_after_initialize_c

/* Library Function - Single Match
    __scrt_dllmain_after_initialize_c
   
   Library: Visual Studio 2019 Release */

undefined8 __scrt_dllmain_after_initialize_c(void)

{
  bool bVar1;
  undefined7 extraout_var;
  undefined8 uVar2;
  ulonglong uVar3;
  
  bVar1 = __scrt_is_ucrt_dll_in_use();
  if ((int)CONCAT71(extraout_var,bVar1) == 0) {
    uVar3 = FUN_180001540();
    uVar3 = _configure_narrow_argv(uVar3 & 0xffffffff);
    if ((int)uVar3 != 0) {
      return uVar3 & 0xffffffffffffff00;
    }
    uVar2 = _initialize_narrow_environment();
  }
  else {
    uVar2 = __isa_available_init();
  }
  return CONCAT71((int7)((ulonglong)uVar2 >> 8),1);
}


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

### EXPORT FUNC 18000c600 (21 bytes) name=FUN_18000c600

bool FUN_18000c600(void)

{
  undefined8 uVar1;
  
  uVar1 = FUN_18000c748(0);
  return (char)uVar1 != '\0';
}


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

### EXPORT FUNC 18000c618 (40 bytes) name=FUN_18000c618

undefined1 FUN_18000c618(void)

{
  char cVar1;
  
  cVar1 = FUN_18000d750();
  if (cVar1 != '\0') {
    cVar1 = FUN_18000d750();
    if (cVar1 != '\0') {
      return 1;
    }
    FUN_18000d750();
  }
  return 0;
}


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

### EXPORT FUNC 18000c640 (21 bytes) name=FUN_18000c640

undefined1 FUN_18000c640(void)

{
  FUN_18000d750();
  FUN_18000d750();
  return 1;
}


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

### EXPORT FUNC 18000c658 (96 bytes) name=__scrt_dllmain_exception_filter

/* Library Function - Single Match
    __scrt_dllmain_exception_filter
   
   Libraries: Visual Studio 2017 Release, Visual Studio 2019 Release */

void __scrt_dllmain_exception_filter
               (undefined8 param_1,int param_2,undefined8 param_3,undefined *param_4,
               undefined4 param_5,undefined8 param_6)

{
  bool bVar1;
  undefined7 extraout_var;
  
  bVar1 = __scrt_is_ucrt_dll_in_use();
  if (((int)CONCAT71(extraout_var,bVar1) == 0) && (param_2 == 1)) {
    (*(code *)PTR__guard_dispatch_icall_18000f4d8)(param_1,0,param_3);
  }
  _seh_filter_dll(param_5,param_6);
  return;
}


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

### EXPORT FUNC 18000c6b8 (48 bytes) name=__scrt_dllmain_uninitialize_c

/* Library Function - Single Match
    __scrt_dllmain_uninitialize_c
   
   Libraries: Visual Studio 2015 Release, Visual Studio 2017 Release, Visual Studio 2019 Release */

void __scrt_dllmain_uninitialize_c(void)

{
  bool bVar1;
  undefined7 extraout_var;
  undefined8 uVar2;
  
  bVar1 = __scrt_is_ucrt_dll_in_use();
  if ((int)CONCAT71(extraout_var,bVar1) != 0) {
    _execute_onexit_table(&DAT_1800159b8);
    return;
  }
  uVar2 = FUN_18000d754();
  if ((int)uVar2 == 0) {
    _cexit();
  }
  return;
}


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

### EXPORT FUNC 18000c6e8 (20 bytes) name=FUN_18000c6e8

void FUN_18000c6e8(void)

{
  FUN_18000d750();
  FUN_18000d750();
  return;
}


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

### EXPORT FUNC 18000c6fc (73 bytes) name=__scrt_initialize_crt

/* Library Function - Single Match
    __scrt_initialize_crt
   
   Library: Visual Studio 2019 Release */

longlong __scrt_initialize_crt(int param_1)

{
  char cVar1;
  uint7 extraout_var;
  uint7 uVar2;
  undefined7 extraout_var_00;
  uint7 extraout_var_01;
  
  if (param_1 == 0) {
    DAT_1800159b0 = 1;
  }
  __isa_available_init();
  cVar1 = FUN_18000d750();
  uVar2 = extraout_var;
  if (cVar1 != '\0') {
    cVar1 = FUN_18000d750();
    if (cVar1 != '\0') {
      return CONCAT71(extraout_var_00,1);
    }
    FUN_18000d750();
    uVar2 = extraout_var_01;
  }
  return (ulonglong)uVar2 << 8;
}


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

### EXPORT FUNC 18000c748 (138 bytes) name=FUN_18000c748

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8 FUN_18000c748(uint param_1)

{
  bool bVar1;
  ulonglong in_RAX;
  undefined7 extraout_var;
  
  if (DAT_1800159b1 == '\0') {
    if (1 < param_1) {
                    /* WARNING: Subroutine does not return */
      __scrt_fastfail(5);
    }
    bVar1 = __scrt_is_ucrt_dll_in_use();
    if (((int)CONCAT71(extraout_var,bVar1) == 0) || (param_1 != 0)) {
      in_RAX = 0xffffffffffffffff;
      DAT_1800159b8 = _DAT_18000f5f0;
      uRam00000001800159c0 = _UNK_18000f5f8;
      _DAT_1800159c8 = 0xffffffffffffffff;
      _DAT_1800159d0 = _DAT_18000f5f0;
      uRam00000001800159d8 = _UNK_18000f5f8;
      _DAT_1800159e0 = 0xffffffffffffffff;
    }
    else {
      in_RAX = _initialize_onexit_table(&DAT_1800159b8);
      if (((int)in_RAX != 0) ||
         (in_RAX = _initialize_onexit_table(&DAT_1800159d0), (int)in_RAX != 0)) {
        return in_RAX & 0xffffffffffffff00;
      }
    }
    DAT_1800159b1 = '\x01';
  }
  return CONCAT71((int7)(in_RAX >> 8),1);
}


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

### EXPORT FUNC 18000c7d4 (150 bytes) name=__scrt_is_nonwritable_in_current_image

/* Library Function - Single Match
    __scrt_is_nonwritable_in_current_image
   
   Library: Visual Studio 2019 Release */

ulonglong __scrt_is_nonwritable_in_current_image(longlong param_1)

{
  ulonglong uVar1;
  uint7 uVar2;
  longlong lVar3;
  longlong lVar4;
  
  uVar1 = 0x5a4d;
  if (((IMAGE_DOS_HEADER_180000000.e_magic == (char  [2])0x5a4d) &&
      (lVar3 = (longlong)(int)IMAGE_DOS_HEADER_180000000.e_lfanew,
      *(int *)(lVar3 + 0x180000000) == 0x4550)) &&
     (uVar1 = 0x20b, *(short *)((longlong)IMAGE_DOS_HEADER_180000000.e_res_4_ + lVar3 + -4) == 0x20b
     )) {
    lVar4 = lVar3 + 0x180000018 +
            (ulonglong)*(ushort *)((longlong)IMAGE_DOS_HEADER_180000000.e_res_4_ + lVar3 + -8);
    uVar1 = (ulonglong)*(ushort *)(IMAGE_DOS_HEADER_180000000.e_magic + lVar3 + 6);
    lVar3 = lVar4 + uVar1 * 0x28;
    for (; lVar4 != lVar3; lVar4 = lVar4 + 0x28) {
      if (((ulonglong)*(uint *)(lVar4 + 0xc) <= param_1 - 0x180000000U) &&
         (uVar1 = (ulonglong)(*(int *)(lVar4 + 8) + *(uint *)(lVar4 + 0xc)),
         param_1 - 0x180000000U < uVar1)) goto LAB_18000c84a;
    }
    lVar4 = 0;
LAB_18000c84a:
    if (lVar4 == 0) {
      uVar1 = uVar1 & 0xffffffffffffff00;
    }
    else {
      uVar2 = (uint7)(uVar1 >> 8);
      if (*(int *)(lVar4 + 0x24) < 0) {
        uVar1 = (ulonglong)uVar2 << 8;
      }
      else {
        uVar1 = CONCAT71(uVar2,1);
      }
    }
  }
  else {
    uVar1 = uVar1 & 0xffffffffffffff00;
  }
  return uVar1;
}


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

### EXPORT FUNC 18000c86c (36 bytes) name=__scrt_release_startup_lock

/* Library Function - Single Match
    __scrt_release_startup_lock
   
   Libraries: Visual Studio 2015 Release, Visual Studio 2017 Release, Visual Studio 2019 Release */

void __scrt_release_startup_lock(char param_1)

{
  bool bVar1;
  undefined3 extraout_var;
  
  bVar1 = __scrt_is_ucrt_dll_in_use();
  if ((CONCAT31(extraout_var,bVar1) != 0) && (param_1 == '\0')) {
    LOCK();
    DAT_1800159a8 = 0;
    UNLOCK();
  }
  return;
}


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

### EXPORT FUNC 18000c890 (41 bytes) name=__scrt_uninitialize_crt

/* Library Function - Single Match
    __scrt_uninitialize_crt
   
   Library: Visual Studio 2019 Release */

undefined1 __scrt_uninitialize_crt(undefined8 param_1,char param_2)

{
  if ((DAT_1800159b0 == '\0') || (param_2 == '\0')) {
    FUN_18000d750();
    FUN_18000d750();
  }
  return 1;
}


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

### EXPORT FUNC 18000c8bc (58 bytes) name=_onexit

/* Library Function - Single Match
    _onexit
   
   Library: Visual Studio 2019 Release */

_onexit_t __cdecl _onexit(_onexit_t _Func)

{
  int iVar1;
  _onexit_t p_Var2;
  
  if (DAT_1800159b8 == -1) {
    iVar1 = _crt_atexit();
  }
  else {
    iVar1 = _register_onexit_function(&DAT_1800159b8);
  }
  p_Var2 = (_onexit_t)0x0;
  if (iVar1 == 0) {
    p_Var2 = _Func;
  }
  return p_Var2;
}


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

### EXPORT FUNC 18000c8f8 (23 bytes) name=atexit

/* Library Function - Single Match
    atexit
   
   Library: Visual Studio 2019 Release */

int __cdecl atexit(_func_5014 *param_1)

{
  _onexit_t p_Var1;
  
  p_Var1 = _onexit((_onexit_t)param_1);
  return (p_Var1 != (_onexit_t)0x0) - 1;
}


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

### EXPORT FUNC 18000c910 (5 bytes) name=free

void __cdecl free(void *_Memory)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d742. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  free(_Memory);
  return;
}


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

### EXPORT FUNC 18000c918 (43 bytes) name=FUN_18000c918

undefined8 * FUN_18000c918(undefined8 *param_1,ulonglong param_2)

{
  *param_1 = type_info::vftable;
  if ((param_2 & 1) != 0) {
    free(param_1);
  }
  return param_1;
}


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

### EXPORT FUNC 18000c944 (52 bytes) name=__raise_securityfailure

/* Library Function - Single Match
    __raise_securityfailure
   
   Libraries: Visual Studio 2015 Release, Visual Studio 2017 Release, Visual Studio 2019 Release */

void __raise_securityfailure(_EXCEPTION_POINTERS *param_1)

{
  HANDLE pvVar1;
  
  SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)0x0);
  UnhandledExceptionFilter(param_1);
  pvVar1 = GetCurrentProcess();
                    /* WARNING: Could not recover jumptable at 0x00018000c971. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  TerminateProcess(pvVar1,0xc0000409);
  return;
}


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

### EXPORT FUNC 18000c978 (209 bytes) name=__report_gsfailure

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* Library Function - Single Match
    __report_gsfailure
   
   Libraries: Visual Studio 2015 Release, Visual Studio 2017 Release, Visual Studio 2019 Release */

void __cdecl __report_gsfailure(uintptr_t _StackCookie)

{
  code *pcVar1;
  BOOL BVar2;
  undefined1 *puVar3;
  undefined1 auStack_38 [8];
  undefined1 auStack_30 [48];
  
  puVar3 = auStack_38;
  BVar2 = IsProcessorFeaturePresent(0x17);
  if (BVar2 != 0) {
    pcVar1 = (code *)swi(0x29);
    (*pcVar1)(2);
    puVar3 = auStack_30;
  }
  *(undefined8 *)(puVar3 + -8) = 0x18000c9a2;
  capture_previous_context((PCONTEXT)&DAT_180015a90);
  _DAT_180015a00 = *(undefined8 *)(puVar3 + 0x38);
  _DAT_180015b28 = puVar3 + 0x40;
  _DAT_180015b10 = *(undefined8 *)(puVar3 + 0x40);
  _DAT_1800159f0 = 0xc0000409;
  _DAT_1800159f4 = 1;
  _DAT_180015a08 = 1;
  DAT_180015a10 = 2;
  *(undefined8 *)(puVar3 + 0x20) = DAT_180015010;
  *(undefined8 *)(puVar3 + 0x28) = DAT_180015008;
  *(undefined8 *)(puVar3 + -8) = 0x18000ca44;
  DAT_180015b88 = _DAT_180015a00;
  __raise_securityfailure((_EXCEPTION_POINTERS *)&PTR_DAT_18000f610);
  return;
}


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

### EXPORT FUNC 18000ca4c (19 bytes) name=__report_rangecheckfailure

/* Library Function - Single Match
    __report_rangecheckfailure
   
   Libraries: Visual Studio 2012, Visual Studio 2015, Visual Studio 2017, Visual Studio 2019 */

void __report_rangecheckfailure(void)

{
  __report_securityfailure(8);
  return;
}


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

### EXPORT FUNC 18000ca60 (155 bytes) name=__report_securityfailure

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* Library Function - Single Match
    __report_securityfailure
   
   Libraries: Visual Studio 2015 Release, Visual Studio 2017 Release, Visual Studio 2019 Release */

void __report_securityfailure(undefined4 param_1)

{
  code *pcVar1;
  BOOL BVar2;
  undefined1 *puVar3;
  undefined1 auStack_28 [8];
  undefined1 auStack_20 [32];
  
  puVar3 = auStack_28;
  BVar2 = IsProcessorFeaturePresent(0x17);
  if (BVar2 != 0) {
    pcVar1 = (code *)swi(0x29);
    (*pcVar1)(param_1);
    puVar3 = auStack_20;
  }
  *(undefined8 *)(puVar3 + -8) = 0x18000ca8a;
  capture_current_context((PCONTEXT)&DAT_180015a90);
  _DAT_180015a00 = *(undefined8 *)(puVar3 + 0x28);
  _DAT_180015b28 = puVar3 + 0x30;
  _DAT_1800159f0 = 0xc0000409;
  _DAT_1800159f4 = 1;
  _DAT_180015a08 = 1;
  DAT_180015a10 = (ulonglong)*(uint *)(puVar3 + 0x30);
  *(undefined8 *)(puVar3 + -8) = 0x18000caf6;
  DAT_180015b88 = _DAT_180015a00;
  __raise_securityfailure((_EXCEPTION_POINTERS *)&PTR_DAT_18000f610);
  return;
}


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

### EXPORT FUNC 18000cafc (109 bytes) name=capture_current_context

/* Library Function - Single Match
    capture_current_context
   
   Libraries: Visual Studio 2015 Release, Visual Studio 2017 Release, Visual Studio 2019 Release */

void capture_current_context(PCONTEXT param_1)

{
  DWORD64 ControlPc;
  PRUNTIME_FUNCTION FunctionEntry;
  DWORD64 local_res8;
  ulonglong local_res10;
  PVOID local_res18;
  
  RtlCaptureContext();
  ControlPc = param_1->Rip;
  FunctionEntry = RtlLookupFunctionEntry(ControlPc,&local_res8,(PUNWIND_HISTORY_TABLE)0x0);
  if (FunctionEntry != (PRUNTIME_FUNCTION)0x0) {
    RtlVirtualUnwind(0,local_res8,ControlPc,FunctionEntry,param_1,&local_res18,&local_res10,
                     (PKNONVOLATILE_CONTEXT_POINTERS)0x0);
  }
  return;
}


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

### EXPORT FUNC 18000cb6c (113 bytes) name=capture_previous_context

/* Library Function - Single Match
    capture_previous_context
   
   Libraries: Visual Studio 2015 Release, Visual Studio 2017 Release, Visual Studio 2019 Release */

void capture_previous_context(PCONTEXT param_1)

{
  DWORD64 ControlPc;
  PRUNTIME_FUNCTION FunctionEntry;
  int iVar1;
  DWORD64 local_res8;
  ulonglong local_res10;
  PVOID local_res18 [2];
  
  RtlCaptureContext();
  ControlPc = param_1->Rip;
  iVar1 = 0;
  do {
    FunctionEntry = RtlLookupFunctionEntry(ControlPc,&local_res8,(PUNWIND_HISTORY_TABLE)0x0);
    if (FunctionEntry == (PRUNTIME_FUNCTION)0x0) {
      return;
    }
    RtlVirtualUnwind(0,local_res8,ControlPc,FunctionEntry,param_1,local_res18,&local_res10,
                     (PKNONVOLATILE_CONTEXT_POINTERS)0x0);
    iVar1 = iVar1 + 1;
  } while (iVar1 < 2);
  return;
}


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

### EXPORT FUNC 18000cbe0 (207 bytes) name=FUN_18000cbe0

undefined8 FUN_18000cbe0(void)

{
  HMODULE hModule;
  FARPROC pFVar1;
  FARPROC pFVar2;
  undefined8 uVar3;
  
  InitializeCriticalSectionAndSpinCount((LPCRITICAL_SECTION)&DAT_180015f70,4000);
  hModule = GetModuleHandleW(L"api-ms-win-core-synch-l1-2-0.dll");
  if ((hModule != (HMODULE)0x0) ||
     (hModule = GetModuleHandleW(L"kernel32.dll"), hModule != (HMODULE)0x0)) {
    pFVar1 = GetProcAddress(hModule,"SleepConditionVariableCS");
    pFVar2 = GetProcAddress(hModule,"WakeAllConditionVariable");
    if ((((pFVar1 != (FARPROC)0x0) && (pFVar2 != (FARPROC)0x0)) ||
        (DAT_180015f68 = CreateEventW((LPSECURITY_ATTRIBUTES)0x0,1,0,(LPCWSTR)0x0),
        pFVar1 = DAT_180015f98, pFVar2 = DAT_180015fa0, DAT_180015f68 != (HANDLE)0x0)) &&
       (DAT_180015fa0 = pFVar2, DAT_180015f98 = pFVar1, uVar3 = FUN_18000c748(0),
       (char)uVar3 != '\0')) {
      atexit(FUN_18000ccb0);
      return 0;
    }
  }
                    /* WARNING: Subroutine does not return */
  __scrt_fastfail(7);
}


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

### EXPORT FUNC 18000ccb0 (40 bytes) name=FUN_18000ccb0

void FUN_18000ccb0(void)

{
  DeleteCriticalSection((LPCRITICAL_SECTION)&DAT_180015f70);
  if (DAT_180015f68 != (HANDLE)0x0) {
    CloseHandle(DAT_180015f68);
  }
  return;
}


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

### EXPORT FUNC 18000ccd8 (48 bytes) name=_Init_thread_abort

/* Library Function - Single Match
    _Init_thread_abort
   
   Library: Visual Studio 2019 Release */

void _Init_thread_abort(undefined4 *param_1)

{
  EnterCriticalSection((LPCRITICAL_SECTION)&DAT_180015f70);
  *param_1 = 0;
  LeaveCriticalSection((LPCRITICAL_SECTION)&DAT_180015f70);
  _Init_thread_notify();
  return;
}


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

### EXPORT FUNC 18000cd08 (96 bytes) name=_Init_thread_footer

/* Library Function - Single Match
    _Init_thread_footer
   
   Library: Visual Studio 2019 Release */

void _Init_thread_footer(int *param_1)

{
  ulonglong uVar1;
  
  EnterCriticalSection((LPCRITICAL_SECTION)&DAT_180015f70);
  uVar1 = (ulonglong)_tls_index;
  DAT_180015004 = DAT_180015004 + 1;
  *param_1 = DAT_180015004;
  *(int *)(*(longlong *)((longlong)ThreadLocalStoragePointer + uVar1 * 8) + 4) = DAT_180015004;
  LeaveCriticalSection((LPCRITICAL_SECTION)&DAT_180015f70);
  _Init_thread_notify();
  return;
}


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

### EXPORT FUNC 18000cd68 (103 bytes) name=_Init_thread_header

/* Library Function - Single Match
    _Init_thread_header
   
   Library: Visual Studio 2019 Release */

void _Init_thread_header(int *param_1)

{
  EnterCriticalSection((LPCRITICAL_SECTION)&DAT_180015f70);
  do {
    if (*param_1 == 0) {
      *param_1 = -1;
LAB_18000cdbc:
                    /* WARNING: Could not recover jumptable at 0x00018000cdc8. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      LeaveCriticalSection((LPCRITICAL_SECTION)&DAT_180015f70);
      return;
    }
    if (*param_1 != -1) {
      *(undefined4 *)
       (*(longlong *)((longlong)ThreadLocalStoragePointer + (ulonglong)_tls_index * 8) + 4) =
           DAT_180015004;
      goto LAB_18000cdbc;
    }
    _Init_thread_wait(100);
  } while( true );
}


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

### EXPORT FUNC 18000cdd0 (65 bytes) name=_Init_thread_notify

/* WARNING: Switch with 1 destination removed at 0x00018000cdeb */
/* Library Function - Single Match
    _Init_thread_notify
   
   Library: Visual Studio 2019 Release */

void _Init_thread_notify(void)

{
  if (DAT_180015fa0 == (code *)0x0) {
    SetEvent(DAT_180015f68);
                    /* WARNING: Could not recover jumptable at 0x00018000ce0a. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    ResetEvent(DAT_180015f68);
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x00018000d890. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (*DAT_180015fa0)(&DAT_180015f60);
  return;
}


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

### EXPORT FUNC 18000ce14 (99 bytes) name=_Init_thread_wait

/* WARNING: Switch with 1 destination removed at 0x00018000ce3e */
/* Library Function - Single Match
    _Init_thread_wait
   
   Library: Visual Studio 2019 Release */

void _Init_thread_wait(DWORD param_1)

{
  if (DAT_180015f98 == (code *)0x0) {
    LeaveCriticalSection((LPCRITICAL_SECTION)&DAT_180015f70);
    WaitForSingleObjectEx(DAT_180015f68,param_1,0);
                    /* WARNING: Could not recover jumptable at 0x00018000ce70. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    EnterCriticalSection((LPCRITICAL_SECTION)&DAT_180015f70);
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x00018000d890. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (*DAT_180015f98)(&DAT_180015f60,&DAT_180015f70,param_1);
  return;
}


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

### EXPORT FUNC 18000ce78 (5 bytes) name=thunk_FUN_18000c554

void thunk_FUN_18000c554(size_t param_1)

{
  int iVar1;
  void *pvVar2;
  
  do {
    pvVar2 = malloc(param_1);
    if (pvVar2 != (void *)0x0) {
      return;
    }
    iVar1 = _callnewh(param_1);
  } while (iVar1 != 0);
  if (param_1 == 0xffffffffffffffff) {
                    /* WARNING: Subroutine does not return */
    FUN_180001750();
  }
                    /* WARNING: Subroutine does not return */
  FUN_18000d200();
}


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

### EXPORT FUNC 18000ce80 (80 bytes) name=FUN_18000ce80

ulonglong FUN_18000ce80(undefined8 param_1,int param_2,longlong param_3)

{
  byte bVar1;
  ulonglong uVar2;
  undefined7 extraout_var;
  
  if (param_2 == 0) {
    bVar1 = FUN_18000cfe8(CONCAT71((int7)((ulonglong)param_1 >> 8),param_3 != 0));
    return CONCAT71(extraout_var,bVar1);
  }
  if (param_2 != 1) {
    if (param_2 == 2) {
      bVar1 = FUN_18000c618();
    }
    else {
      if (param_2 != 3) {
        return 1;
      }
      bVar1 = FUN_18000c640();
    }
    return (ulonglong)bVar1;
  }
  uVar2 = FUN_18000ced0(param_1,param_3);
  return uVar2;
}


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

### EXPORT FUNC 18000ced0 (276 bytes) name=FUN_18000ced0

undefined8 FUN_18000ced0(undefined8 param_1,undefined8 param_2)

{
  bool bVar1;
  bool bVar2;
  int iVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  longlong *plVar6;
  ulonglong uVar7;
  
  uVar4 = __scrt_initialize_crt(0);
  if ((char)uVar4 != '\0') {
    uVar4 = __scrt_acquire_startup_lock();
    bVar1 = true;
    if (DAT_1800159a0 != 0) {
                    /* WARNING: Subroutine does not return */
      __scrt_fastfail(7);
    }
    DAT_1800159a0 = 1;
    bVar2 = FUN_18000c600();
    if (bVar2) {
      FUN_18000d620();
      FUN_18000d5d8();
      FUN_18000d5fc();
      iVar3 = _initterm_e(&DAT_18000f5a0,&DAT_18000f5b0);
      if ((iVar3 == 0) && (uVar5 = __scrt_dllmain_after_initialize_c(), (char)uVar5 != '\0')) {
        _initterm(&DAT_18000f4e0,&DAT_18000f598);
        DAT_1800159a0 = 2;
        bVar1 = false;
      }
    }
    __scrt_release_startup_lock((char)uVar4);
    if (!bVar1) {
      plVar6 = (longlong *)FUN_18000d618();
      if ((*plVar6 != 0) &&
         (uVar7 = __scrt_is_nonwritable_in_current_image((longlong)plVar6), (char)uVar7 != '\0')) {
        (*(code *)PTR__guard_dispatch_icall_18000f4d8)(param_1,2,param_2);
      }
      DAT_180015fa8 = DAT_180015fa8 + 1;
      return 1;
    }
  }
  return 0;
}


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

### EXPORT FUNC 18000cfe8 (129 bytes) name=FUN_18000cfe8

byte FUN_18000cfe8(undefined8 param_1)

{
  undefined1 uVar1;
  char cVar2;
  undefined8 uVar3;
  undefined7 uVar4;
  byte bVar5;
  
  uVar1 = (undefined1)param_1;
  if (DAT_180015fa8 < 1) {
    bVar5 = 0;
  }
  else {
    DAT_180015fa8 = DAT_180015fa8 + -1;
    uVar3 = __scrt_acquire_startup_lock();
    if (DAT_1800159a0 != 2) {
                    /* WARNING: Subroutine does not return */
      __scrt_fastfail(7);
    }
    __scrt_dllmain_uninitialize_c();
    FUN_18000d5e8();
    FUN_18000d65c();
    DAT_1800159a0 = 0;
    uVar4 = (undefined7)((ulonglong)param_1 >> 8);
    __scrt_release_startup_lock((char)uVar3);
    cVar2 = __scrt_uninitialize_crt(CONCAT71(uVar4,uVar1),'\0');
    bVar5 = -(cVar2 != '\0') & 1;
    FUN_18000c6e8();
  }
  return bVar5;
}


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

### EXPORT FUNC 18000d06c (301 bytes) name=dllmain_dispatch

/* Library Function - Single Match
    int __cdecl dllmain_dispatch(struct HINSTANCE__ * __ptr64 const,unsigned long,void * __ptr64
   const)
   
   Library: Visual Studio 2017 Release */

int __cdecl dllmain_dispatch(HINSTANCE__ *param_1,ulong param_2,void *param_3)

{
  ulonglong uVar1;
  undefined8 uVar2;
  int iVar3;
  
  if ((param_2 == 0) && (DAT_180015fa8 < 1)) {
    iVar3 = 0;
  }
  else {
    if (param_2 - 1 < 2) {
      if ((DAT_18000f6c8 != 0) &&
         (iVar3 = (*(code *)PTR__guard_dispatch_icall_18000f4d8)(), iVar3 == 0)) {
        return 0;
      }
      uVar1 = FUN_18000ce80(param_1,param_2,(longlong)param_3);
      if ((int)uVar1 == 0) {
        return 0;
      }
    }
    uVar2 = FUN_180001540();
    iVar3 = (int)uVar2;
    if ((param_2 == 1) && (iVar3 == 0)) {
      FUN_180001540();
      FUN_18000ce80(param_1,0,(longlong)param_3);
      if (DAT_18000f6c8 != 0) {
        (*(code *)PTR__guard_dispatch_icall_18000f4d8)(param_1,0,param_3);
      }
    }
    if ((param_2 == 0) || (param_2 == 3)) {
      uVar1 = FUN_18000ce80(param_1,param_2,(longlong)param_3);
      iVar3 = 0;
      if ((int)uVar1 != 0) {
        if (DAT_18000f6c8 == 0) {
          iVar3 = 1;
        }
        else {
          iVar3 = (*(code *)PTR__guard_dispatch_icall_18000f4d8)(param_1,param_2,param_3);
        }
      }
    }
  }
  return iVar3;
}


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

### EXPORT FUNC 18000d1a0 (61 bytes) name=entry

void entry(HINSTANCE__ *param_1,ulong param_2,void *param_3)

{
  if (param_2 == 1) {
    __security_init_cookie();
  }
  dllmain_dispatch(param_1,param_2,param_3);
  return;
}


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

### EXPORT FUNC 18000d1e0 (30 bytes) name=FUN_18000d1e0

undefined8 * FUN_18000d1e0(undefined8 *param_1)

{
  param_1[2] = 0;
  param_1[1] = "bad allocation";
  *param_1 = std::bad_alloc::vftable;
  return param_1;
}


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

### EXPORT FUNC 18000d200 (31 bytes) name=FUN_18000d200

void FUN_18000d200(void)

{
  undefined8 local_28 [5];
  
  FUN_18000d1e0(local_28);
                    /* WARNING: Subroutine does not return */
  _CxxThrowException(local_28,(ThrowInfo *)&DAT_180013270);
}


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

### EXPORT FUNC 18000d220 (417 bytes) name=__isa_available_init

/* WARNING: Removing unreachable block (ram,0x00018000d2df) */
/* WARNING: Removing unreachable block (ram,0x00018000d25a) */
/* WARNING: Removing unreachable block (ram,0x00018000d233) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* Library Function - Single Match
    __isa_available_init
   
   Library: Visual Studio 2019 Release */

undefined8 __isa_available_init(void)

{
  int *piVar1;
  uint *puVar2;
  longlong lVar3;
  uint uVar4;
  undefined8 uVar5;
  byte bVar6;
  uint uVar7;
  uint uVar8;
  byte in_XCR0;
  
  piVar1 = (int *)cpuid_basic_info(0);
  uVar8 = 0;
  puVar2 = (uint *)cpuid_Version_info(1);
  uVar4 = puVar2[3];
  if ((piVar1[1] == 0x756e6547 && piVar1[3] == 0x6c65746e) && piVar1[2] == 0x49656e69) {
    _DAT_180015020 = 0xffffffffffffffff;
    uVar7 = *puVar2 & 0xfff3ff0;
    if ((((uVar7 == 0x106c0) || (uVar7 == 0x20660)) || (uVar7 == 0x20670)) ||
       ((uVar7 - 0x30650 < 0x21 &&
        ((0x100010001U >> ((ulonglong)(uVar7 - 0x30650) & 0x3f) & 1) != 0)))) {
      DAT_180015fac = DAT_180015fac | 1;
    }
  }
  if (6 < *piVar1) {
    lVar3 = cpuid_Extended_Feature_Enumeration_info(7);
    uVar8 = *(uint *)(lVar3 + 4);
    if ((uVar8 >> 9 & 1) != 0) {
      DAT_180015fac = DAT_180015fac | 2;
    }
  }
  _DAT_180015018 = 1;
  DAT_18001501c = 2;
  if ((uVar4 >> 0x14 & 1) != 0) {
    _DAT_180015018 = 2;
    DAT_18001501c = 6;
    if (((uVar4 >> 0x1b & 1) != 0) && ((uVar4 >> 0x1c & 1) != 0)) {
      uVar5 = xinuse(0);
      bVar6 = in_XCR0 & (byte)uVar5;
      if ((bVar6 & 6) == 6) {
        DAT_18001501c = 0xe;
        _DAT_180015018 = 3;
        if ((uVar8 & 0x20) != 0) {
          _DAT_180015018 = 5;
          DAT_18001501c = 0x2e;
          if (((uVar8 & 0xd0030000) == 0xd0030000) && ((bVar6 & 0xe0) == 0xe0)) {
            DAT_18001501c = 0x6e;
            _DAT_180015018 = 6;
          }
        }
      }
    }
  }
  return 0;
}


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

### EXPORT FUNC 18000d3c4 (12 bytes) name=__scrt_is_ucrt_dll_in_use

/* Library Function - Single Match
    __scrt_is_ucrt_dll_in_use
   
   Libraries: Visual Studio 2017 Release, Visual Studio 2019 Release */

bool __scrt_is_ucrt_dll_in_use(void)

{
  return DAT_180015030 != 0;
}


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

### EXPORT FUNC 18000d3d0 (8 bytes) name=FUN_18000d3d0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_18000d3d0(void)

{
  _DAT_180015fb0 = 0;
  return;
}


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

### EXPORT FUNC 18000d3d8 (330 bytes) name=__scrt_fastfail

/* Library Function - Single Match
    __scrt_fastfail
   
   Libraries: Visual Studio 2017 Release, Visual Studio 2019 Release */

void __scrt_fastfail(undefined4 param_1)

{
  code *pcVar1;
  BOOL BVar2;
  LONG LVar3;
  PRUNTIME_FUNCTION FunctionEntry;
  undefined1 *puVar4;
  undefined8 unaff_retaddr;
  DWORD64 local_res10;
  undefined1 local_res18 [8];
  undefined1 local_res20 [8];
  undefined1 auStack_5c8 [8];
  undefined1 auStack_5c0 [232];
  undefined1 local_4d8 [152];
  undefined1 *local_440;
  DWORD64 local_3e0;
  
  puVar4 = auStack_5c8;
  BVar2 = IsProcessorFeaturePresent(0x17);
  if (BVar2 != 0) {
    pcVar1 = (code *)swi(0x29);
    (*pcVar1)(param_1);
    puVar4 = auStack_5c0;
  }
  *(undefined8 *)(puVar4 + -8) = 0x18000d40b;
  FUN_18000d3d0();
  *(undefined8 *)(puVar4 + -8) = 0x18000d41c;
  memset(local_4d8,0,0x4d0);
  *(undefined8 *)(puVar4 + -8) = 0x18000d426;
  RtlCaptureContext(local_4d8);
  *(undefined8 *)(puVar4 + -8) = 0x18000d440;
  FunctionEntry = RtlLookupFunctionEntry(local_3e0,&local_res10,(PUNWIND_HISTORY_TABLE)0x0);
  if (FunctionEntry != (PRUNTIME_FUNCTION)0x0) {
    *(undefined8 *)(puVar4 + 0x38) = 0;
    *(undefined1 **)(puVar4 + 0x30) = local_res18;
    *(undefined1 **)(puVar4 + 0x28) = local_res20;
    *(undefined1 **)(puVar4 + 0x20) = local_4d8;
    *(undefined8 *)(puVar4 + -8) = 0x18000d481;
    RtlVirtualUnwind(0,local_res10,local_3e0,FunctionEntry,*(PCONTEXT *)(puVar4 + 0x20),
                     *(PVOID **)(puVar4 + 0x28),*(PDWORD64 *)(puVar4 + 0x30),
                     *(PKNONVOLATILE_CONTEXT_POINTERS *)(puVar4 + 0x38));
  }
  local_440 = &stack0x00000008;
  *(undefined8 *)(puVar4 + -8) = 0x18000d4b3;
  memset(puVar4 + 0x50,0,0x98);
  *(undefined8 *)(puVar4 + 0x60) = unaff_retaddr;
  *(undefined4 *)(puVar4 + 0x50) = 0x40000015;
  *(undefined4 *)(puVar4 + 0x54) = 1;
  *(undefined8 *)(puVar4 + -8) = 0x18000d4d5;
  BVar2 = IsDebuggerPresent();
  *(undefined1 **)(puVar4 + 0x40) = puVar4 + 0x50;
  *(undefined1 **)(puVar4 + 0x48) = local_4d8;
  *(undefined8 *)(puVar4 + -8) = 0x18000d4f6;
  SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)0x0);
  *(undefined8 *)(puVar4 + -8) = 0x18000d501;
  LVar3 = UnhandledExceptionFilter((_EXCEPTION_POINTERS *)(puVar4 + 0x40));
  if ((LVar3 == 0) && (BVar2 != 1)) {
    *(undefined8 *)(puVar4 + -8) = 0x18000d511;
    FUN_18000d3d0();
  }
  return;
}


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

### EXPORT FUNC 18000d524 (5 bytes) name=free

void __cdecl free(void *_Memory)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d742. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  free(_Memory);
  return;
}


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

### EXPORT FUNC 18000d52c (172 bytes) name=__security_init_cookie

/* Library Function - Single Match
    __security_init_cookie
   
   Libraries: Visual Studio 2017 Release, Visual Studio 2019 Release */

void __cdecl __security_init_cookie(void)

{
  DWORD DVar1;
  _FILETIME local_res8;
  _FILETIME local_res10;
  LARGE_INTEGER local_res18;
  
  if (DAT_180015010 == 0x2b992ddfa232) {
    local_res10.dwLowDateTime = 0;
    local_res10.dwHighDateTime = 0;
    GetSystemTimeAsFileTime(&local_res10);
    local_res8 = local_res10;
    DVar1 = GetCurrentThreadId();
    local_res8 = (_FILETIME)((ulonglong)local_res8 ^ (ulonglong)DVar1);
    DVar1 = GetCurrentProcessId();
    local_res8 = (_FILETIME)((ulonglong)local_res8 ^ (ulonglong)DVar1);
    QueryPerformanceCounter(&local_res18);
    DAT_180015010 =
         ((ulonglong)local_res18.s.LowPart << 0x20 ^
          CONCAT44(local_res18.s.HighPart,local_res18.s.LowPart) ^ (ulonglong)local_res8 ^
         (ulonglong)&local_res8) & 0xffffffffffff;
    if (DAT_180015010 == 0x2b992ddfa232) {
      DAT_180015010 = 0x2b992ddfa233;
    }
  }
  DAT_180015008 = ~DAT_180015010;
  return;
}


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

### EXPORT FUNC 18000d5d8 (14 bytes) name=FUN_18000d5d8

void FUN_18000d5d8(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d5df. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  InitializeSListHead(&DAT_180015fc0);
  return;
}


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

### EXPORT FUNC 18000d5e8 (12 bytes) name=FUN_18000d5e8

void FUN_18000d5e8(void)

{
  __std_type_info_destroy_list(&DAT_180015fc0);
  return;
}


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

### EXPORT FUNC 18000d5f4 (8 bytes) name=FUN_18000d5f4

undefined * FUN_18000d5f4(void)

{
  return &DAT_180015fd0;
}


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

### EXPORT FUNC 18000d5fc (27 bytes) name=FUN_18000d5fc

void FUN_18000d5fc(void)

{
  ulonglong *puVar1;
  
  puVar1 = (ulonglong *)FUN_180002fc0();
  *puVar1 = *puVar1 | 0x24;
  puVar1 = (ulonglong *)FUN_18000d5f4();
  *puVar1 = *puVar1 | 2;
  return;
}


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

### EXPORT FUNC 18000d618 (8 bytes) name=FUN_18000d618

undefined * FUN_18000d618(void)

{
  return &DAT_1800160e8;
}


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

### EXPORT FUNC 18000d620 (60 bytes) name=FUN_18000d620

void FUN_18000d620(void)

{
  longlong *plVar1;
  
  for (plVar1 = &DAT_180011b20; plVar1 < &DAT_180011b20; plVar1 = plVar1 + 1) {
    if (*plVar1 != 0) {
      (*(code *)PTR__guard_dispatch_icall_18000f4d8)();
    }
  }
  return;
}


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

### EXPORT FUNC 18000d65c (60 bytes) name=FUN_18000d65c

void FUN_18000d65c(void)

{
  longlong *plVar1;
  
  for (plVar1 = &DAT_180011b30; plVar1 < &DAT_180011b30; plVar1 = plVar1 + 1) {
    if (*plVar1 != 0) {
      (*(code *)PTR__guard_dispatch_icall_18000f4d8)();
    }
  }
  return;
}


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

### EXPORT FUNC 18000d6a0 (6 bytes) name=_Lock

void __thiscall
std::basic_streambuf<char,std::char_traits<char>_>::_Lock
          (basic_streambuf<char,std::char_traits<char>_> *this)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d6a0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  _Lock(this);
  return;
}


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

### EXPORT FUNC 18000d6a6 (6 bytes) name=_Unlock

void __thiscall
std::basic_streambuf<char,std::char_traits<char>_>::_Unlock
          (basic_streambuf<char,std::char_traits<char>_> *this)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d6a6. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  _Unlock(this);
  return;
}


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

### EXPORT FUNC 18000d6ac (6 bytes) name=showmanyc

__int64 __thiscall
std::basic_streambuf<char,std::char_traits<char>_>::showmanyc
          (basic_streambuf<char,std::char_traits<char>_> *this)

{
  __int64 _Var1;
  
                    /* WARNING: Could not recover jumptable at 0x00018000d6ac. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  _Var1 = showmanyc(this);
  return _Var1;
}


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

### EXPORT FUNC 18000d6b2 (6 bytes) name=uflow

int __thiscall
std::basic_streambuf<char,std::char_traits<char>_>::uflow
          (basic_streambuf<char,std::char_traits<char>_> *this)

{
  int iVar1;
  
                    /* WARNING: Could not recover jumptable at 0x00018000d6b2. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  iVar1 = uflow(this);
  return iVar1;
}


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

### EXPORT FUNC 18000d6b8 (6 bytes) name=xsgetn

__int64 __thiscall
std::basic_streambuf<char,std::char_traits<char>_>::xsgetn
          (basic_streambuf<char,std::char_traits<char>_> *this,char *param_1,__int64 param_2)

{
  __int64 _Var1;
  
                    /* WARNING: Could not recover jumptable at 0x00018000d6b8. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  _Var1 = xsgetn(this,param_1,param_2);
  return _Var1;
}


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

### EXPORT FUNC 18000d6be (6 bytes) name=xsputn

__int64 __thiscall
std::basic_streambuf<char,std::char_traits<char>_>::xsputn
          (basic_streambuf<char,std::char_traits<char>_> *this,char *param_1,__int64 param_2)

{
  __int64 _Var1;
  
                    /* WARNING: Could not recover jumptable at 0x00018000d6be. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  _Var1 = xsputn(this,param_1,param_2);
  return _Var1;
}


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

### EXPORT FUNC 18000d6c4 (6 bytes) name=setbuf

basic_streambuf<char,struct_std::char_traits<char>_> * __thiscall
std::basic_streambuf<char,std::char_traits<char>_>::setbuf
          (basic_streambuf<char,std::char_traits<char>_> *this,char *param_1,__int64 param_2)

{
  basic_streambuf<char,struct_std::char_traits<char>_> *pbVar1;
  
                    /* WARNING: Could not recover jumptable at 0x00018000d6c4. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  pbVar1 = setbuf(this,param_1,param_2);
  return pbVar1;
}


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

### EXPORT FUNC 18000d6ca (6 bytes) name=sync

int __thiscall
std::basic_streambuf<char,std::char_traits<char>_>::sync
          (basic_streambuf<char,std::char_traits<char>_> *this)

{
  int iVar1;
  
                    /* WARNING: Could not recover jumptable at 0x00018000d6ca. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  iVar1 = sync(this);
  return iVar1;
}


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

### EXPORT FUNC 18000d6d0 (6 bytes) name=imbue

void __thiscall
std::basic_streambuf<char,std::char_traits<char>_>::imbue
          (basic_streambuf<char,std::char_traits<char>_> *this,locale *param_1)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d6d0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  imbue(this,param_1);
  return;
}


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

### EXPORT FUNC 18000d6d6 (6 bytes) name=__CxxFrameHandler4

void __CxxFrameHandler4(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d6d6. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  __CxxFrameHandler4();
  return;
}


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

### EXPORT FUNC 18000d6e8 (6 bytes) name=_CxxThrowException

void __stdcall _CxxThrowException(void *pExceptionObject,ThrowInfo *pThrowInfo)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d6e8. Too many branches */
                    /* WARNING: Subroutine does not return */
                    /* WARNING: Treating indirect jump as call */
  _CxxThrowException(pExceptionObject,pThrowInfo);
  return;
}


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

### EXPORT FUNC 18000d6ee (6 bytes) name=memset

void * __cdecl memset(void *_Dst,int _Val,size_t _Size)

{
  void *pvVar1;
  
                    /* WARNING: Could not recover jumptable at 0x00018000d6ee. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  pvVar1 = memset(_Dst,_Val,_Size);
  return pvVar1;
}


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

### EXPORT FUNC 18000d6f4 (6 bytes) name=__std_type_info_destroy_list

void __std_type_info_destroy_list(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d6f4. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  __std_type_info_destroy_list();
  return;
}


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

### EXPORT FUNC 18000d6fa (6 bytes) name=_callnewh

int __cdecl _callnewh(size_t _Size)

{
  int iVar1;
  
                    /* WARNING: Could not recover jumptable at 0x00018000d6fa. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  iVar1 = _callnewh(_Size);
  return iVar1;
}


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

### EXPORT FUNC 18000d700 (6 bytes) name=malloc

void * __cdecl malloc(size_t _Size)

{
  void *pvVar1;
  
                    /* WARNING: Could not recover jumptable at 0x00018000d700. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  pvVar1 = malloc(_Size);
  return pvVar1;
}


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

### EXPORT FUNC 18000d706 (6 bytes) name=_seh_filter_dll

void _seh_filter_dll(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d706. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  _seh_filter_dll();
  return;
}


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

### EXPORT FUNC 18000d70c (6 bytes) name=_configure_narrow_argv

void _configure_narrow_argv(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d70c. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  _configure_narrow_argv();
  return;
}


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

### EXPORT FUNC 18000d712 (6 bytes) name=_initialize_narrow_environment

void _initialize_narrow_environment(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d712. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  _initialize_narrow_environment();
  return;
}


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

### EXPORT FUNC 18000d718 (6 bytes) name=_initialize_onexit_table

void _initialize_onexit_table(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d718. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  _initialize_onexit_table();
  return;
}


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

### EXPORT FUNC 18000d71e (6 bytes) name=_register_onexit_function

void _register_onexit_function(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d71e. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  _register_onexit_function();
  return;
}


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

### EXPORT FUNC 18000d724 (6 bytes) name=_execute_onexit_table

void _execute_onexit_table(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d724. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  _execute_onexit_table();
  return;
}


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

### EXPORT FUNC 18000d72a (6 bytes) name=_crt_atexit

void _crt_atexit(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d72a. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  _crt_atexit();
  return;
}


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

### EXPORT FUNC 18000d730 (6 bytes) name=_cexit

void __cdecl _cexit(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d730. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  _cexit();
  return;
}


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

### EXPORT FUNC 18000d736 (6 bytes) name=_initterm

void _initterm(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d736. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  _initterm();
  return;
}


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

### EXPORT FUNC 18000d73c (6 bytes) name=_initterm_e

void _initterm_e(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d73c. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  _initterm_e();
  return;
}


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

### EXPORT FUNC 18000d742 (6 bytes) name=free

void __cdecl free(void *_Memory)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d742. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  free(_Memory);
  return;
}


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

### EXPORT FUNC 18000d748 (6 bytes) name=IsProcessorFeaturePresent

BOOL __stdcall IsProcessorFeaturePresent(DWORD ProcessorFeature)

{
  BOOL BVar1;
  
                    /* WARNING: Could not recover jumptable at 0x00018000d748. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  BVar1 = IsProcessorFeaturePresent(ProcessorFeature);
  return BVar1;
}


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

### EXPORT FUNC 18000d750 (3 bytes) name=FUN_18000d750

undefined1 FUN_18000d750(void)

{
  return 1;
}


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

### EXPORT FUNC 18000d754 (3 bytes) name=FUN_18000d754

undefined8 FUN_18000d754(void)

{
  return 0;
}


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

### EXPORT FUNC 18000d758 (29 bytes) name=__GSHandlerCheck

/* Library Function - Single Match
    __GSHandlerCheck
   
   Libraries: Visual Studio 2017 Release, Visual Studio 2019 Release */

undefined8
__GSHandlerCheck(undefined8 param_1,undefined8 param_2,undefined8 param_3,longlong param_4)

{
  __GSHandlerCheckCommon(param_2,param_4);
  return 1;
}


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

### EXPORT FUNC 18000d778 (91 bytes) name=__GSHandlerCheckCommon

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* Library Function - Single Match
    __GSHandlerCheckCommon
   
   Libraries: Visual Studio 2017 Release, Visual Studio 2019 Release */

ulonglong __GSHandlerCheckCommon(undefined8 param_1,longlong param_2)

{
  ulonglong uVar1;
  ulonglong uVar2;
  
  uVar2 = (ulonglong)*(uint *)(*(longlong *)(param_2 + 0x10) + 8);
  uVar1 = *(ulonglong *)(param_2 + 8);
  if ((*(byte *)(uVar2 + 3 + uVar1) & 0xf) != 0) {
    uVar1 = (ulonglong)(*(byte *)(uVar2 + 3 + uVar1) & 0xfffffff0);
  }
  return uVar1;
}


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

### EXPORT FUNC 18000d7d4 (127 bytes) name=FID_conflict:__GSHandlerCheck_EH

/* Library Function - Multiple Matches With Different Base Names
    __GSHandlerCheck_EH
    __GSHandlerCheck_EH4
   
   Libraries: Visual Studio 2017 Release, Visual Studio 2019 Release */

void FID_conflict___GSHandlerCheck_EH
               (longlong param_1,undefined8 param_2,undefined8 param_3,longlong param_4)

{
  longlong lVar1;
  
  lVar1 = *(longlong *)(param_4 + 0x38);
  __GSHandlerCheckCommon(param_2,param_4);
  if ((*(uint *)(lVar1 + 4) & ((*(uint *)(param_1 + 4) & 0x66) != 0) + 1) != 0) {
    __CxxFrameHandler4(param_1,param_2,param_3,param_4);
  }
  return;
}


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

### EXPORT FUNC 18000d853 (6 bytes) name=__RTDynamicCast

void __RTDynamicCast(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018000d853. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  __RTDynamicCast();
  return;
}


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

### EXPORT FUNC 18000d859 (6 bytes) name=memchr

void * __cdecl memchr(void *_Buf,int _Val,size_t _MaxCount)

{
  void *pvVar1;
  
                    /* WARNING: Could not recover jumptable at 0x00018000d859. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  pvVar1 = memchr(_Buf,_Val,_MaxCount);
  return pvVar1;
}


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

### EXPORT FUNC 18000d85f (6 bytes) name=memcmp

int __cdecl memcmp(void *_Buf1,void *_Buf2,size_t _Size)

{
  int iVar1;
  
                    /* WARNING: Could not recover jumptable at 0x00018000d85f. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  iVar1 = memcmp(_Buf1,_Buf2,_Size);
  return iVar1;
}


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

### EXPORT FUNC 18000d865 (6 bytes) name=memcpy

void * __cdecl memcpy(void *_Dst,void *_Src,size_t _Size)

{
  void *pvVar1;
  
                    /* WARNING: Could not recover jumptable at 0x00018000d865. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  pvVar1 = memcpy(_Dst,_Src,_Size);
  return pvVar1;
}


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

### EXPORT FUNC 18000d86b (6 bytes) name=memmove

void * __cdecl memmove(void *_Dst,void *_Src,size_t _Size)

{
  void *pvVar1;
  
                    /* WARNING: Could not recover jumptable at 0x00018000d86b. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  pvVar1 = memmove(_Dst,_Src,_Size);
  return pvVar1;
}


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

### EXPORT FUNC 18000d890 (2 bytes) name=_guard_dispatch_icall

/* WARNING: This is an inlined function */

void _guard_dispatch_icall(void)

{
  code *UNRECOVERED_JUMPTABLE;
  
                    /* WARNING: Could not recover jumptable at 0x00018000d890. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (*UNRECOVERED_JUMPTABLE)();
  return;
}


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

### EXPORT FUNC 18000d8d0 (41 bytes) name=FUN_18000d8d0

void FUN_18000d8d0(undefined8 param_1,longlong param_2)

{
  if ((*(uint *)(param_2 + 0x40) & 1) != 0) {
    *(uint *)(param_2 + 0x40) = *(uint *)(param_2 + 0x40) & 0xfffffffe;
    FUN_180002da0(*(longlong **)(param_2 + 0x88));
  }
  return;
}


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

### EXPORT FUNC 18000d98c (48 bytes) name=FUN_18000d98c

void FUN_18000d98c(undefined8 param_1,longlong param_2)

{
  FUN_180002f30(param_1,*(longlong **)(param_2 + 0x20),*(longlong **)(param_2 + 0x40));
  deallocate(param_1,*(void **)(param_2 + 0x28),*(longlong *)(param_2 + 0x30));
                    /* WARNING: Subroutine does not return */
  _CxxThrowException((void *)0x0,(ThrowInfo *)0x0);
}


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

### EXPORT FUNC 18000d9dc (46 bytes) name=FUN_18000d9dc

void FUN_18000d9dc(undefined8 param_1,longlong param_2)

{
  if ((*(uint *)(param_2 + 0x20) & 1) != 0) {
    *(uint *)(param_2 + 0x20) = *(uint *)(param_2 + 0x20) & 0xfffffffe;
    std::basic_ios<char,std::char_traits<char>_>::~basic_ios<char,std::char_traits<char>_>
              ((basic_ios<char,std::char_traits<char>_> *)(param_2 + 0xf8));
  }
  return;
}


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

### EXPORT FUNC 18000da28 (38 bytes) name=FUN_18000da28

void FUN_18000da28(undefined8 param_1,longlong param_2)

{
  if ((*(uint *)(param_2 + 0x20) & 4) != 0) {
    *(uint *)(param_2 + 0x20) = *(uint *)(param_2 + 0x20) & 0xfffffffb;
    FUN_1800024b0((longlong *)(param_2 + 0x28));
  }
  return;
}


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

### EXPORT FUNC 18000da98 (46 bytes) name=FUN_18000da98

void FUN_18000da98(undefined8 param_1,longlong param_2)

{
  if ((*(uint *)(param_2 + 0x20) & 1) != 0) {
    *(uint *)(param_2 + 0x20) = *(uint *)(param_2 + 0x20) & 0xfffffffe;
    std::basic_ios<char,std::char_traits<char>_>::~basic_ios<char,std::char_traits<char>_>
              ((basic_ios<char,std::char_traits<char>_> *)(param_2 + 0x108));
  }
  return;
}


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

### EXPORT FUNC 18000dae4 (38 bytes) name=FUN_18000dae4

void FUN_18000dae4(undefined8 param_1,longlong param_2)

{
  if ((*(uint *)(param_2 + 0x20) & 4) != 0) {
    *(uint *)(param_2 + 0x20) = *(uint *)(param_2 + 0x20) & 0xfffffffb;
    FUN_1800024b0((longlong *)(param_2 + 0x28));
  }
  return;
}


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

### EXPORT FUNC 18000db3c (38 bytes) name=FUN_18000db3c

void FUN_18000db3c(undefined8 param_1,longlong param_2)

{
  if ((*(uint *)(param_2 + 0x30) & 2) != 0) {
    *(uint *)(param_2 + 0x30) = *(uint *)(param_2 + 0x30) & 0xfffffffd;
    FUN_1800037c0(*(longlong **)(param_2 + 0x38));
  }
  return;
}


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

### EXPORT FUNC 18000db7c (49 bytes) name=FUN_18000db7c

void FUN_18000db7c(undefined8 param_1,longlong param_2)

{
  if ((*(uint *)(param_2 + 0x40) & 1) != 0) {
    *(uint *)(param_2 + 0x40) = *(uint *)(param_2 + 0x40) & 0xfffffffe;
    std::basic_ios<char,std::char_traits<char>_>::~basic_ios<char,std::char_traits<char>_>
              ((basic_ios<char,std::char_traits<char>_> *)(param_2 + 0x1d8));
  }
  return;
}


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

### EXPORT FUNC 18000dc40 (38 bytes) name=FUN_18000dc40

void FUN_18000dc40(undefined8 param_1,longlong param_2)

{
  if ((*(uint *)(param_2 + 0x20) & 2) != 0) {
    *(uint *)(param_2 + 0x20) = *(uint *)(param_2 + 0x20) & 0xfffffffd;
    FUN_1800024b0(*(longlong **)(param_2 + 0x30));
  }
  return;
}


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

### EXPORT FUNC 18000dc70 (46 bytes) name=FUN_18000dc70

void FUN_18000dc70(undefined8 param_1,longlong param_2)

{
  if ((*(uint *)(param_2 + 0x40) & 1) != 0) {
    *(uint *)(param_2 + 0x40) = *(uint *)(param_2 + 0x40) & 0xfffffffe;
    std::basic_ios<char,std::char_traits<char>_>::~basic_ios<char,std::char_traits<char>_>
              ((basic_ios<char,std::char_traits<char>_> *)(*(longlong *)(param_2 + 0x30) + 0x98));
  }
  return;
}


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

### EXPORT FUNC 18000dcc8 (58 bytes) name=FUN_18000dcc8

undefined8 FUN_18000dcc8(undefined8 param_1,longlong param_2)

{
  std::basic_ios<char,std::char_traits<char>_>::setstate
            ((basic_ios<char,std::char_traits<char>_> *)
             ((longlong)*(int *)(**(longlong **)(param_2 + 0x60) + 4) +
             (longlong)*(longlong **)(param_2 + 0x60)),4,true);
  return 0;
}


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

### EXPORT FUNC 18000dd10 (29 bytes) name=FUN_18000dd10

void FUN_18000dd10(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x20));
  return;
}


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

### EXPORT FUNC 18000dd70 (29 bytes) name=FUN_18000dd70

undefined8 FUN_18000dd70(void)

{
  return 0;
}


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

### EXPORT FUNC 18000dd90 (29 bytes) name=FUN_18000dd90

void FUN_18000dd90(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x68));
  return;
}


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

### EXPORT FUNC 18000ddb9 (41 bytes) name=FUN_18000ddb9

undefined8 FUN_18000ddb9(undefined8 param_1,longlong param_2)

{
  *(undefined8 *)(*(longlong *)(param_2 + 0x60) + 0x20) = 0;
  return 0;
}


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

### EXPORT FUNC 18000de3c (29 bytes) name=FUN_18000de3c

void FUN_18000de3c(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x40));
  return;
}


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

### EXPORT FUNC 18000de98 (29 bytes) name=FUN_18000de98

void FUN_18000de98(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x28));
  return;
}


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

### EXPORT FUNC 18000df1c (29 bytes) name=FUN_18000df1c

void FUN_18000df1c(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x40));
  return;
}


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

### EXPORT FUNC 18000df50 (29 bytes) name=FUN_18000df50

void FUN_18000df50(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x20));
  return;
}


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

### EXPORT FUNC 18000df9c (29 bytes) name=FUN_18000df9c

void FUN_18000df9c(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x38));
  return;
}


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

### EXPORT FUNC 18000e030 (38 bytes) name=FUN_18000e030

void FUN_18000e030(undefined8 param_1,longlong param_2)

{
  if ((*(uint *)(param_2 + 0x20) & 1) != 0) {
    *(uint *)(param_2 + 0x20) = *(uint *)(param_2 + 0x20) & 0xfffffffe;
    FUN_180002420(*(longlong **)(param_2 + 0x48));
  }
  return;
}


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

### EXPORT FUNC 18000e090 (29 bytes) name=FUN_18000e090

void FUN_18000e090(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x58));
  return;
}


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

### EXPORT FUNC 18000e0ad (29 bytes) name=FUN_18000e0ad

void FUN_18000e0ad(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x58));
  return;
}


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

### EXPORT FUNC 18000e0ca (29 bytes) name=FUN_18000e0ca

void FUN_18000e0ca(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x58));
  return;
}


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

### EXPORT FUNC 18000e0e7 (29 bytes) name=FUN_18000e0e7

void FUN_18000e0e7(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x58));
  return;
}


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

### EXPORT FUNC 18000e104 (29 bytes) name=FUN_18000e104

void FUN_18000e104(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x58));
  return;
}


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

### EXPORT FUNC 18000e121 (29 bytes) name=FUN_18000e121

void FUN_18000e121(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x58));
  return;
}


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

### EXPORT FUNC 18000e13e (29 bytes) name=FUN_18000e13e

void FUN_18000e13e(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x58));
  return;
}


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

### EXPORT FUNC 18000e15b (29 bytes) name=FUN_18000e15b

void FUN_18000e15b(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x58));
  return;
}


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

### EXPORT FUNC 18000e1d0 (38 bytes) name=FUN_18000e1d0

void FUN_18000e1d0(undefined8 param_1,longlong param_2)

{
  if ((*(uint *)(param_2 + 0x24) & 1) != 0) {
    *(uint *)(param_2 + 0x24) = *(uint *)(param_2 + 0x24) & 0xfffffffe;
    FUN_180002420(*(longlong **)(param_2 + 0x28));
  }
  return;
}


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

### EXPORT FUNC 18000e220 (29 bytes) name=FUN_18000e220

void FUN_18000e220(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x50));
  return;
}


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

### EXPORT FUNC 18000e24d (29 bytes) name=FUN_18000e24d

void FUN_18000e24d(undefined8 param_1,longlong param_2)

{
  free(*(void **)(param_2 + 0x58));
  return;
}


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

### EXPORT FUNC 18000e26a (23 bytes) name=FUN_18000e26a

bool FUN_18000e26a(undefined8 *param_1)

{
  return *(int *)*param_1 == -0x3ffffffb;
}


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

### EXPORT FUNC 18000e282 (22 bytes) name=FUN_18000e282

void FUN_18000e282(undefined8 param_1,longlong param_2)

{
  __scrt_release_startup_lock(*(char *)(param_2 + 0x40));
  return;
}


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

### EXPORT FUNC 18000e299 (24 bytes) name=FUN_18000e299

void FUN_18000e299(undefined8 param_1,longlong param_2)

{
  __scrt_release_startup_lock(*(char *)(param_2 + 0x20));
  return;
}


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

### EXPORT FUNC 18000e2b2 (19 bytes) name=FUN_18000e2b2

void FUN_18000e2b2(void)

{
  FUN_18000c6e8();
  return;
}


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

### EXPORT FUNC 18000e2c6 (53 bytes) name=FUN_18000e2c6

void FUN_18000e2c6(undefined8 *param_1,longlong param_2)

{
  __scrt_dllmain_exception_filter
            (*(undefined8 *)(param_2 + 0x60),*(int *)(param_2 + 0x68),
             *(undefined8 *)(param_2 + 0x70),FUN_18000ce80,*(undefined4 *)*param_1,param_1);
  return;
}


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

### EXPORT FUNC 18000e300 (97 bytes) name=FUN_18000e300

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_18000e300(void)

{
  void *_Memory;
  
  if (DAT_180016060 != (void *)0x0) {
    _Memory = DAT_180016060;
    if ((0xfff < (ulonglong)(DAT_180016070 - (longlong)DAT_180016060)) &&
       (_Memory = *(void **)((longlong)DAT_180016060 + -8),
       0x1f < (ulonglong)((longlong)DAT_180016060 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
    DAT_180016060 = (void *)0x0;
    _DAT_180016068 = 0;
    DAT_180016070 = 0;
  }
  return;
}


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

### EXPORT FUNC 18000e370 (97 bytes) name=FUN_18000e370

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_18000e370(void)

{
  void *_Memory;
  
  if (DAT_180016000 != (void *)0x0) {
    _Memory = DAT_180016000;
    if ((0xfff < (ulonglong)(DAT_180016010 - (longlong)DAT_180016000)) &&
       (_Memory = *(void **)((longlong)DAT_180016000 + -8),
       0x1f < (ulonglong)((longlong)DAT_180016000 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
    DAT_180016000 = (void *)0x0;
    _DAT_180016008 = 0;
    DAT_180016010 = 0;
  }
  return;
}


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

### EXPORT FUNC 18000e3e0 (97 bytes) name=FUN_18000e3e0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_18000e3e0(void)

{
  void *_Memory;
  
  if (DAT_180016018 != (void *)0x0) {
    _Memory = DAT_180016018;
    if ((0xfff < (ulonglong)(DAT_180016028 - (longlong)DAT_180016018)) &&
       (_Memory = *(void **)((longlong)DAT_180016018 + -8),
       0x1f < (ulonglong)((longlong)DAT_180016018 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
    DAT_180016018 = (void *)0x0;
    _DAT_180016020 = 0;
    DAT_180016028 = 0;
  }
  return;
}


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

### EXPORT FUNC 18000e450 (97 bytes) name=FUN_18000e450

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_18000e450(void)

{
  void *_Memory;
  
  if (DAT_180016090 != (void *)0x0) {
    _Memory = DAT_180016090;
    if ((0xfff < (ulonglong)(DAT_1800160a0 - (longlong)DAT_180016090)) &&
       (_Memory = *(void **)((longlong)DAT_180016090 + -8),
       0x1f < (ulonglong)((longlong)DAT_180016090 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
    DAT_180016090 = (void *)0x0;
    _DAT_180016098 = 0;
    DAT_1800160a0 = 0;
  }
  return;
}


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

### EXPORT FUNC 18000e4c0 (97 bytes) name=FUN_18000e4c0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_18000e4c0(void)

{
  void *_Memory;
  
  if (DAT_180016078 != (void *)0x0) {
    _Memory = DAT_180016078;
    if ((0xfff < (ulonglong)(DAT_180016088 - (longlong)DAT_180016078)) &&
       (_Memory = *(void **)((longlong)DAT_180016078 + -8),
       0x1f < (ulonglong)((longlong)DAT_180016078 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
    DAT_180016078 = (void *)0x0;
    _DAT_180016080 = 0;
    DAT_180016088 = 0;
  }
  return;
}


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

### EXPORT FUNC 18000e530 (97 bytes) name=FUN_18000e530

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_18000e530(void)

{
  void *_Memory;
  
  if (DAT_180016030 != (void *)0x0) {
    _Memory = DAT_180016030;
    if ((0xfff < (ulonglong)(DAT_180016040 - (longlong)DAT_180016030)) &&
       (_Memory = *(void **)((longlong)DAT_180016030 + -8),
       0x1f < (ulonglong)((longlong)DAT_180016030 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
    DAT_180016030 = (void *)0x0;
    _DAT_180016038 = 0;
    DAT_180016040 = 0;
  }
  return;
}


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

### EXPORT FUNC 18000e5a0 (97 bytes) name=FUN_18000e5a0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_18000e5a0(void)

{
  void *_Memory;
  
  if (DAT_1800160a8 != (void *)0x0) {
    _Memory = DAT_1800160a8;
    if ((0xfff < (ulonglong)(DAT_1800160b8 - (longlong)DAT_1800160a8)) &&
       (_Memory = *(void **)((longlong)DAT_1800160a8 + -8),
       0x1f < (ulonglong)((longlong)DAT_1800160a8 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
    DAT_1800160a8 = (void *)0x0;
    _DAT_1800160b0 = 0;
    DAT_1800160b8 = 0;
  }
  return;
}


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

### EXPORT FUNC 18000e610 (97 bytes) name=FUN_18000e610

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_18000e610(void)

{
  void *_Memory;
  
  if (DAT_180016048 != (void *)0x0) {
    _Memory = DAT_180016048;
    if ((0xfff < (ulonglong)(DAT_180016058 - (longlong)DAT_180016048)) &&
       (_Memory = *(void **)((longlong)DAT_180016048 + -8),
       0x1f < (ulonglong)((longlong)DAT_180016048 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
    DAT_180016048 = (void *)0x0;
    _DAT_180016050 = 0;
    DAT_180016058 = 0;
  }
  return;
}


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

### EXPORT FUNC 18000e680 (108 bytes) name=FUN_18000e680

void FUN_18000e680(void)

{
  void *pvVar1;
  void *_Memory;
  
  if (7 < DAT_1800160d8) {
    pvVar1 = (void *)CONCAT62(DAT_1800160c0._2_6_,(undefined2)DAT_1800160c0);
    _Memory = pvVar1;
    if ((0xfff < DAT_1800160d8 * 2 + 2) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  DAT_1800160d8 = 7;
  DAT_1800160d0 = 0;
  DAT_1800160c0._0_2_ = 0;
  return;
}


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

### EXPORT FUNC 18000e6f0 (105 bytes) name=FUN_18000e6f0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_18000e6f0(void)

{
  void *pvVar1;
  void *_Memory;
  
  if (0xf < DAT_180015078) {
    pvVar1 = (void *)CONCAT71(DAT_180015060._1_7_,(undefined1)DAT_180015060);
    _Memory = pvVar1;
    if ((0xfff < DAT_180015078 + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  _DAT_180015070 = 0;
  DAT_180015078 = 0xf;
  DAT_180015060._0_1_ = 0;
  return;
}


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

### EXPORT FUNC 18000e760 (105 bytes) name=FUN_18000e760

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_18000e760(void)

{
  void *pvVar1;
  void *_Memory;
  
  if (0xf < DAT_1800150b8) {
    pvVar1 = (void *)CONCAT71(DAT_1800150a0._1_7_,(undefined1)DAT_1800150a0);
    _Memory = pvVar1;
    if ((0xfff < DAT_1800150b8 + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  _DAT_1800150b0 = 0;
  DAT_1800150b8 = 0xf;
  DAT_1800150a0._0_1_ = 0;
  return;
}


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

### EXPORT FUNC 18000e7d0 (105 bytes) name=FUN_18000e7d0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_18000e7d0(void)

{
  void *pvVar1;
  void *_Memory;
  
  if (0xf < DAT_1800151f8) {
    pvVar1 = (void *)CONCAT71(DAT_1800151e0._1_7_,(undefined1)DAT_1800151e0);
    _Memory = pvVar1;
    if ((0xfff < DAT_1800151f8 + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  _DAT_1800151f0 = 0;
  DAT_1800151f8 = 0xf;
  DAT_1800151e0._0_1_ = 0;
  return;
}


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

### EXPORT FUNC 18000e840 (105 bytes) name=FUN_18000e840

void FUN_18000e840(void)

{
  void *pvVar1;
  void *_Memory;
  
  if (0xf < DAT_180015198) {
    pvVar1 = (void *)CONCAT71(DAT_180015180._1_7_,(undefined1)DAT_180015180);
    _Memory = pvVar1;
    if ((0xfff < DAT_180015198 + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  DAT_180015190 = 0;
  DAT_180015198 = 0xf;
  DAT_180015180._0_1_ = 0;
  return;
}


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

### EXPORT FUNC 18000e8b0 (105 bytes) name=FUN_18000e8b0

void FUN_18000e8b0(void)

{
  void *pvVar1;
  void *_Memory;
  
  if (0xf < DAT_1800150f8) {
    pvVar1 = (void *)CONCAT71(DAT_1800150e0._1_7_,(undefined1)DAT_1800150e0);
    _Memory = pvVar1;
    if ((0xfff < DAT_1800150f8 + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  DAT_1800150f0 = 0;
  DAT_1800150f8 = 0xf;
  DAT_1800150e0._0_1_ = 0;
  return;
}


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

### EXPORT FUNC 18000e920 (105 bytes) name=FUN_18000e920

void FUN_18000e920(void)

{
  void *pvVar1;
  void *_Memory;
  
  if (0xf < DAT_180015178) {
    pvVar1 = (void *)CONCAT71(DAT_180015160._1_7_,(undefined1)DAT_180015160);
    _Memory = pvVar1;
    if ((0xfff < DAT_180015178 + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  DAT_180015170 = 0;
  DAT_180015178 = 0xf;
  DAT_180015160._0_1_ = 0;
  return;
}


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

### EXPORT FUNC 18000e990 (105 bytes) name=FUN_18000e990

void FUN_18000e990(void)

{
  void *pvVar1;
  void *_Memory;
  
  if (0xf < DAT_1800151d8) {
    pvVar1 = (void *)CONCAT71(DAT_1800151c0._1_7_,(undefined1)DAT_1800151c0);
    _Memory = pvVar1;
    if ((0xfff < DAT_1800151d8 + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  DAT_1800151d0 = 0;
  DAT_1800151d8 = 0xf;
  DAT_1800151c0._0_1_ = 0;
  return;
}


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

### EXPORT FUNC 18000ea00 (105 bytes) name=FUN_18000ea00

void FUN_18000ea00(void)

{
  void *pvVar1;
  void *_Memory;
  
  if (0xf < DAT_180015138) {
    pvVar1 = (void *)CONCAT71(DAT_180015120._1_7_,(undefined1)DAT_180015120);
    _Memory = pvVar1;
    if ((0xfff < DAT_180015138 + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  DAT_180015130 = 0;
  DAT_180015138 = 0xf;
  DAT_180015120._0_1_ = 0;
  return;
}


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

### EXPORT FUNC 18000ea70 (105 bytes) name=FUN_18000ea70

void FUN_18000ea70(void)

{
  void *pvVar1;
  void *_Memory;
  
  if (0xf < DAT_1800150d8) {
    pvVar1 = (void *)CONCAT71(DAT_1800150c0._1_7_,(undefined1)DAT_1800150c0);
    _Memory = pvVar1;
    if ((0xfff < DAT_1800150d8 + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  DAT_1800150d0 = 0;
  DAT_1800150d8 = 0xf;
  DAT_1800150c0._0_1_ = 0;
  return;
}


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

### EXPORT FUNC 18000eae0 (105 bytes) name=FUN_18000eae0

void FUN_18000eae0(void)

{
  void *pvVar1;
  void *_Memory;
  
  if (0xf < DAT_180015158) {
    pvVar1 = (void *)CONCAT71(DAT_180015140._1_7_,(undefined1)DAT_180015140);
    _Memory = pvVar1;
    if ((0xfff < DAT_180015158 + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  DAT_180015150 = 0;
  DAT_180015158 = 0xf;
  DAT_180015140._0_1_ = 0;
  return;
}


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

### EXPORT FUNC 18000eb50 (105 bytes) name=FUN_18000eb50

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_18000eb50(void)

{
  void *pvVar1;
  void *_Memory;
  
  if (0xf < DAT_180015118) {
    pvVar1 = (void *)CONCAT71(DAT_180015100._1_7_,(undefined1)DAT_180015100);
    _Memory = pvVar1;
    if ((0xfff < DAT_180015118 + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  _DAT_180015110 = 0;
  DAT_180015118 = 0xf;
  DAT_180015100._0_1_ = 0;
  return;
}


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

### EXPORT FUNC 18000ebc0 (105 bytes) name=FUN_18000ebc0

void FUN_18000ebc0(void)

{
  void *pvVar1;
  void *_Memory;
  
  if (0xf < DAT_1800151b8) {
    pvVar1 = (void *)CONCAT71(DAT_1800151a0._1_7_,(undefined1)DAT_1800151a0);
    _Memory = pvVar1;
    if ((0xfff < DAT_1800151b8 + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  DAT_1800151b0 = 0;
  DAT_1800151b8 = 0xf;
  DAT_1800151a0._0_1_ = 0;
  return;
}


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

### EXPORT FUNC 18000ec30 (105 bytes) name=FUN_18000ec30

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_18000ec30(void)

{
  void *pvVar1;
  void *_Memory;
  
  if (0xf < DAT_180015058) {
    pvVar1 = (void *)CONCAT71(DAT_180015040._1_7_,(undefined1)DAT_180015040);
    _Memory = pvVar1;
    if ((0xfff < DAT_180015058 + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  _DAT_180015050 = 0;
  DAT_180015058 = 0xf;
  DAT_180015040._0_1_ = 0;
  return;
}


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

### EXPORT FUNC 18000eca0 (105 bytes) name=FUN_18000eca0

void FUN_18000eca0(void)

{
  void *pvVar1;
  void *_Memory;
  
  if (0xf < DAT_180015098) {
    pvVar1 = (void *)CONCAT71(DAT_180015080._1_7_,(undefined1)DAT_180015080);
    _Memory = pvVar1;
    if ((0xfff < DAT_180015098 + 1) &&
       (_Memory = *(void **)((longlong)pvVar1 + -8),
       0x1f < (ulonglong)((longlong)pvVar1 + (-8 - (longlong)_Memory)))) {
                    /* WARNING: Subroutine does not return */
      _invalid_parameter_noinfo_noreturn();
    }
    free(_Memory);
  }
  DAT_180015090 = 0;
  DAT_180015098 = 0xf;
  DAT_180015080._0_1_ = 0;
  return;
}


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

