/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x14004f740 FUN_14004f740 * Pseudocode, not original source. */ /* WARNING: Removing unreachable block (ram,0x00014004fdd7) */ /* WARNING: Removing unreachable block (ram,0x00014004fddf) */ /* WARNING: Removing unreachable block (ram,0x00014004fde3) */ /* WARNING: Removing unreachable block (ram,0x00014004fded) */ void FUN_14004f740(longlong param_1,int param_2,int param_3) { double *pdVar1; int *piVar2; double dVar3; int iVar4; undefined8 uVar5; undefined8 uVar6; undefined8 uVar7; longlong *plVar8; longlong lVar9; void *pvVar10; ulonglong uVar11; int iVar12; longlong lVar13; ulonglong uVar14; int iVar15; longlong lVar16; longlong lVar17; int local_res10 [2]; int local_res18 [2]; char *local_res20; longlong *local_138; void *local_130; ulonglong local_128; longlong local_120; longlong local_118; longlong *local_108; undefined **local_100 [3]; undefined **local_e8 [3]; undefined8 local_d0; undefined8 local_c8; undefined8 local_c0; undefined **local_b8 [3]; undefined8 local_a0; undefined **local_98 [3]; undefined **local_80 [3]; undefined8 local_68 [3]; undefined8 local_50 [3]; local_a0 = 0xfffffffffffffffe; if (1 < param_2 - param_3) { std::_Container_base12::_Container_base12((_Container_base12 *)&local_138); local_138 = operator_new(0x10); if (local_138 == (longlong *)0x0) { local_108 = local_138; std::exception::exception((exception *)local_e8,(char **)&local_108); local_e8[0] = std::bad_alloc::vftable; /* WARNING: Subroutine does not return */ _CxxThrowException(local_e8,(ThrowInfo *)&DAT_140151ad0); } *local_138 = 0; local_138[1] = 0; *local_138 = (longlong)&local_138; local_130 = (void *)0x0; local_128 = 0; local_120 = 0; local_118 = 0; local_res18[0] = param_2 + -1; local_res10[0] = param_3; FUN_140044460((_Container_base12 *)&local_138,local_res10); FUN_140044460((_Container_base12 *)&local_138,local_res18); lVar13 = local_118; while (lVar16 = 0, uVar11 = local_128, lVar13 != 0) { plVar8 = FUN_1400415a0(&local_138,&local_d0); plVar8 = FUN_140044550(plVar8,local_68,1); lVar17 = lVar16; if ((longlong *)*plVar8 != (longlong *)0x0) { lVar17 = *(longlong *)*plVar8; } uVar11 = (ulonglong)plVar8[2] >> 2; if (*(ulonglong *)(lVar17 + 0x10) <= uVar11) { uVar11 = uVar11 - *(ulonglong *)(lVar17 + 0x10); } local_res10[0] = *(int *)(*(longlong *)(*(longlong *)(lVar17 + 8) + uVar11 * 8) + (ulonglong)((uint)plVar8[2] & 3) * 4); if ((lVar13 != 0) && (lVar13 = lVar13 + -1, local_118 = lVar13, lVar13 == 0)) { local_120 = lVar16; } plVar8 = FUN_1400415a0(&local_138,local_68); plVar8 = FUN_140044550(plVar8,local_50,1); lVar17 = lVar16; if ((longlong *)*plVar8 != (longlong *)0x0) { lVar17 = *(longlong *)*plVar8; } uVar11 = (ulonglong)plVar8[2] >> 2; if (*(ulonglong *)(lVar17 + 0x10) <= uVar11) { uVar11 = uVar11 - *(ulonglong *)(lVar17 + 0x10); } iVar4 = *(int *)(*(longlong *)(*(longlong *)(lVar17 + 8) + uVar11 * 8) + (ulonglong)((uint)plVar8[2] & 3) * 4); lVar17 = (longlong)iVar4; if ((lVar13 != 0) && (lVar13 = lVar13 + -1, local_118 = lVar13, lVar13 == 0)) { local_120 = lVar16; } iVar15 = iVar4 + 1; lVar16 = *(longlong *)(param_1 + lVar17 * 0x18); local_c8 = *(undefined8 *)(param_1 + 8 + lVar17 * 0x18); local_c0 = *(undefined8 *)(param_1 + 0x10 + lVar17 * 0x18); if (iVar15 <= local_res10[0]) { iVar12 = local_res10[0]; if ((iVar15 < local_res10[0]) && (lVar13 = local_118, iVar15 <= local_res10[0])) { do { dVar3 = *(double *)(lVar16 + 0x188); while (*(double *)(*(longlong *)(param_1 + (longlong)iVar15 * 0x18) + 0x188) <= dVar3) { iVar15 = iVar15 + 1; lVar13 = local_118; if (iVar12 < iVar15) goto LAB_14004f9c8; } while( true ) { lVar13 = local_118; if (iVar12 < iVar15) goto LAB_14004f9c8; if (*(double *)(*(longlong *)(param_1 + (longlong)iVar12 * 0x18) + 0x188) < dVar3) break; iVar12 = iVar12 + -1; } if (iVar12 < iVar15) break; lVar13 = (longlong)iVar12; lVar9 = (longlong)iVar15; uVar6 = *(undefined8 *)(param_1 + lVar9 * 0x18); uVar7 = *(undefined8 *)(param_1 + 8 + lVar9 * 0x18); uVar5 = *(undefined8 *)(param_1 + 0x10 + lVar9 * 0x18); *(undefined8 *)(param_1 + lVar9 * 0x18) = *(undefined8 *)(param_1 + lVar13 * 0x18); *(undefined8 *)(param_1 + 8 + lVar9 * 0x18) = *(undefined8 *)(param_1 + 8 + lVar13 * 0x18); *(undefined8 *)(param_1 + 0x10 + lVar9 * 0x18) = *(undefined8 *)(param_1 + 0x10 + lVar13 * 0x18); *(undefined8 *)(param_1 + lVar13 * 0x18) = uVar6; *(undefined8 *)(param_1 + 8 + lVar13 * 0x18) = uVar7; *(undefined8 *)(param_1 + 0x10 + lVar13 * 0x18) = uVar5; lVar13 = local_118; } while (iVar15 < iVar12); } LAB_14004f9c8: if (iVar4 <= iVar12) { lVar9 = (longlong)iVar12; lVar16 = *(longlong *)(param_1 + lVar17 * 0x18); dVar3 = *(double *)(lVar16 + 0x188); pdVar1 = (double *)(*(longlong *)(param_1 + lVar9 * 0x18) + 0x188); if (*pdVar1 <= dVar3 && dVar3 != *pdVar1) { uVar6 = *(undefined8 *)(param_1 + 8 + lVar17 * 0x18); uVar7 = *(undefined8 *)(param_1 + 0x10 + lVar17 * 0x18); *(undefined8 *)(param_1 + lVar17 * 0x18) = *(undefined8 *)(param_1 + lVar9 * 0x18); *(undefined8 *)(param_1 + 8 + lVar17 * 0x18) = *(undefined8 *)(param_1 + 8 + lVar9 * 0x18); *(undefined8 *)(param_1 + 0x10 + lVar17 * 0x18) = *(undefined8 *)(param_1 + 0x10 + lVar9 * 0x18); *(longlong *)(param_1 + lVar9 * 0x18) = lVar16; *(undefined8 *)(param_1 + 8 + lVar9 * 0x18) = uVar6; *(undefined8 *)(param_1 + 0x10 + lVar9 * 0x18) = uVar7; lVar13 = local_118; } if (iVar4 < iVar12) { std::_Container_base12::_Orphan_all((_Container_base12 *)&local_138); if ((((int)local_120 + (int)local_118 & 3U) == 0) && (local_128 <= local_118 + 4U >> 2)) { FUN_1400415c0((longlong)&local_138,1); } uVar11 = local_118 + local_120; uVar14 = uVar11 >> 2; if (local_128 <= uVar14) { uVar14 = uVar14 - local_128; } if (*(longlong *)((longlong)local_130 + uVar14 * 8) == 0) { pvVar10 = operator_new(0x10); if (pvVar10 == (void *)0x0) { local_res20 = (char *)0x0; std::exception::exception((exception *)local_98,&local_res20); local_98[0] = std::bad_alloc::vftable; /* WARNING: Subroutine does not return */ _CxxThrowException(local_98,(ThrowInfo *)&DAT_140151ad0); } *(void **)((longlong)local_130 + uVar14 * 8) = pvVar10; } piVar2 = (int *)(*(longlong *)((longlong)local_130 + uVar14 * 8) + (ulonglong)((uint)uVar11 & 3) * 4); if (piVar2 != (int *)0x0) { *piVar2 = iVar4; } local_118 = local_118 + 1; std::_Container_base12::_Orphan_all((_Container_base12 *)&local_138); if ((((char)local_118 + (char)local_120 & 3U) == 0) && (local_128 <= local_118 + 4U >> 2)) { FUN_1400415c0((longlong)&local_138,1); } uVar11 = local_118 + local_120; uVar14 = uVar11 >> 2; if (local_128 <= uVar14) { uVar14 = uVar14 - local_128; } if (*(longlong *)((longlong)local_130 + uVar14 * 8) == 0) { local_res20 = operator_new(0x10); if (local_res20 == (char *)0x0) { std::exception::exception((exception *)local_80,&local_res20); local_80[0] = std::bad_alloc::vftable; /* WARNING: Subroutine does not return */ _CxxThrowException(local_80,(ThrowInfo *)&DAT_140151ad0); } *(char **)((longlong)local_130 + uVar14 * 8) = local_res20; } piVar2 = (int *)(*(longlong *)((longlong)local_130 + uVar14 * 8) + (ulonglong)((uint)uVar11 & 3) * 4); if (piVar2 != (int *)0x0) { *piVar2 = iVar12 + -1; } lVar13 = local_118 + 1; local_118 = lVar13; } } iVar4 = local_res10[0]; if (iVar12 < local_res10[0]) { std::_Container_base12::_Orphan_all((_Container_base12 *)&local_138); if ((((int)local_120 + (int)local_118 & 3U) == 0) && (local_128 <= local_118 + 4U >> 2)) { FUN_1400415c0((longlong)&local_138,1); } uVar11 = local_118 + local_120; uVar14 = uVar11 >> 2; if (local_128 <= uVar14) { uVar14 = uVar14 - local_128; } if (*(longlong *)((longlong)local_130 + uVar14 * 8) == 0) { pvVar10 = operator_new(0x10); if (pvVar10 == (void *)0x0) { local_res20 = (char *)0x0; std::exception::exception((exception *)local_b8,&local_res20); local_b8[0] = std::bad_alloc::vftable; /* WARNING: Subroutine does not return */ _CxxThrowException(local_b8,(ThrowInfo *)&DAT_140151ad0); } *(void **)((longlong)local_130 + uVar14 * 8) = pvVar10; } piVar2 = (int *)(*(longlong *)((longlong)local_130 + uVar14 * 8) + (ulonglong)((uint)uVar11 & 3) * 4); if (piVar2 != (int *)0x0) { *piVar2 = iVar12 + 1; } local_118 = local_118 + 1; std::_Container_base12::_Orphan_all((_Container_base12 *)&local_138); if ((((char)local_118 + (char)local_120 & 3U) == 0) && (local_128 <= local_118 + 4U >> 2)) { FUN_1400415c0((longlong)&local_138,1); } uVar11 = local_118 + local_120; uVar14 = uVar11 >> 2; if (local_128 <= uVar14) { uVar14 = uVar14 - local_128; } if (*(longlong *)((longlong)local_130 + uVar14 * 8) == 0) { pvVar10 = operator_new(0x10); if (pvVar10 == (void *)0x0) { local_res20 = (char *)0x0; std::exception::exception((exception *)local_100,&local_res20); local_100[0] = std::bad_alloc::vftable; /* WARNING: Subroutine does not return */ _CxxThrowException(local_100,(ThrowInfo *)&DAT_140151ad0); } *(void **)((longlong)local_130 + uVar14 * 8) = pvVar10; } piVar2 = (int *)(*(longlong *)((longlong)local_130 + uVar14 * 8) + (ulonglong)((uint)uVar11 & 3) * 4); if (piVar2 != (int *)0x0) { *piVar2 = iVar4; } lVar13 = local_118 + 1; local_118 = lVar13; } } } while (uVar11 != 0) { uVar11 = uVar11 - 1; if (*(longlong *)((longlong)local_130 + uVar11 * 8) != 0) { operator_delete(*(void **)((longlong)local_130 + uVar11 * 8)); } } if (local_130 != (void *)0x0) { operator_delete(local_130); } local_128 = 0; local_130 = (void *)0x0; std::_Container_base12::_Orphan_all((_Container_base12 *)&local_138); operator_delete(local_138); local_138 = (longlong *)0x0; std::_Container_base12::~_Container_base12((_Container_base12 *)&local_138); } return; }