/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x1400ab500 FUN_1400ab500 * Pseudocode, not original source. */ void FUN_1400ab500(longlong *param_1,longlong param_2,undefined8 param_3,undefined8 param_4) { longlong lVar1; longlong *plVar2; uint uVar3; uint uVar4; uint uVar5; ulonglong uVar6; uint *puVar7; longlong *plVar8; int *piVar9; undefined ***pppuVar10; uint *puVar11; uint uVar12; uint uVar13; undefined8 uVar15; longlong lVar16; ulonglong uVar17; uint **ppuVar18; uint local_res8 [2]; uint *local_res18; longlong local_res20; undefined **local_50; undefined8 local_48; undefined8 local_40; undefined8 local_38; undefined8 local_30; longlong *plVar14; FUN_14007e740(param_2,0,param_3,param_4); (**(code **)(param_1[0xf] + 0x10))(); plVar14 = (longlong *)0x0; uVar13 = 0; if (((longlong *)param_1[699] == (longlong *)0x0) || (lVar16 = *(longlong *)param_1[699], plVar8 = (longlong *)(lVar16 + -0x40), lVar16 == 0)) { plVar8 = plVar14; } plVar8 = plVar8 + 0x26; uVar17 = (ulonglong)*(uint *)((longlong)param_1 + 0x6a4); uVar15 = 1; uVar6 = FUN_1400947a0(plVar8,param_2,1,uVar17,local_res8); if (-1 < (int)uVar6) { return; } FUN_14003e7c0(plVar8,param_2,uVar15,uVar17); local_res18 = (uint *)PTR_DAT_14016f010; uVar3 = FUN_14003e620(L"Received stream from TCP server became inconsistent!"); uVar5 = 0; plVar8 = plVar14; if ((local_res18 != (uint *)0x0) && (plVar8 = (longlong *)0x0, local_res18 != (uint *)PTR_DAT_14016f010)) { plVar8 = (longlong *)(ulonglong)local_res18[-2]; } uVar4 = uVar3; if ((((int)uVar3 <= (int)plVar8) && (uVar4 = uVar5, local_res18 != (uint *)0x0)) && (local_res18 != (uint *)PTR_DAT_14016f010)) { uVar4 = local_res18[-2]; } uVar12 = 1; if (1 < (int)uVar4) { uVar12 = uVar4; } uVar4 = uVar5; if ((local_res18 != (uint *)0x0) && (local_res18 != (uint *)PTR_DAT_14016f010)) { uVar4 = local_res18[-2]; } if ((int)uVar4 < (int)uVar12) { if (local_res18 == (uint *)0x0) { local_res18 = (uint *)PTR_DAT_14016f010; } if ((int)uVar12 < 0) { /* WARNING: Subroutine does not return */ FUN_14003dec0(); } if (uVar12 == 0) { FUN_140002190((longlong *)&local_res18,PTR_DAT_14016f010,plVar8,uVar17); } else { uVar4 = uVar5; if ((local_res18 != (uint *)0x0) && (local_res18 != (uint *)PTR_DAT_14016f010)) { uVar4 = local_res18[-2]; } if (uVar12 != uVar4) { puVar7 = (uint *)FUN_14003e840((longlong)(int)uVar12 * 2 + 10); if (puVar7 != (uint *)0x0) { *puVar7 = 0; puVar7[1] = 1; } *puVar7 = uVar12; uVar4 = uVar5; if ((local_res18 != (uint *)0x0) && (local_res18 != (uint *)PTR_DAT_14016f010)) { uVar4 = local_res18[-2]; } puVar11 = (uint *)PTR_DAT_14016f010; if ((int)uVar12 < (int)uVar4) { LAB_1400ab67b: if (local_res18 != (uint *)0x0) { puVar11 = local_res18; } } else { uVar12 = uVar5; if (local_res18 != (uint *)0x0) { if (local_res18 != (uint *)PTR_DAT_14016f010) { uVar12 = local_res18[-2]; } goto LAB_1400ab67b; } } uVar6 = (ulonglong)uVar12; FUN_14003e650(puVar7 + 2,puVar11,uVar12); FUN_140002190((longlong *)&local_res18,puVar11,uVar6,uVar17); local_res18 = puVar7 + 2; } } } FUN_140001df0((longlong *)&local_res18); puVar7 = local_res18; if (local_res18 == (uint *)0x0) { puVar7 = (uint *)PTR_DAT_14016f010; } FUN_14003e650(puVar7,L"Received stream from TCP server became inconsistent!",uVar3); puVar7 = local_res18; if (local_res18 == (uint *)0x0) { puVar7 = (uint *)PTR_DAT_14016f010; } uVar5 = FUN_14003e620((short *)puVar7); uVar3 = uVar13; if (0 < (int)uVar5) { uVar3 = uVar5; } uVar5 = uVar13; if ((local_res18 != (uint *)0x0) && (local_res18 != (uint *)PTR_DAT_14016f010)) { uVar5 = local_res18[-2]; } if (((int)uVar5 <= (int)uVar3) && (uVar3 = uVar13, local_res18 != (uint *)0x0)) { if (local_res18 == (uint *)PTR_DAT_14016f010) goto LAB_1400ab72b; uVar3 = local_res18[-2]; } if (((local_res18 != (uint *)PTR_DAT_14016f010) && (local_res18 != (uint *)0x0)) && (local_res18 + -2 != (uint *)0x0)) { local_res18[-2] = uVar3; *(undefined2 *)((longlong)local_res18 + (longlong)(int)uVar3 * 2) = 0; } LAB_1400ab72b: local_48 = 0; local_40 = 0; local_38 = 0; local_30 = 0; local_50 = Proud::ByteArray::vftable; ppuVar18 = &local_res18; plVar8 = FUN_140071c20(&local_res20,(ulonglong)local_res8[0],1,(longlong *)ppuVar18, (longlong)&local_50); lVar16 = *param_1; (**(code **)(lVar16 + 0x80))(param_1); pppuVar10 = &local_50; FUN_140049e40(pppuVar10); puVar7 = local_res18; if (((local_res18 != (uint *)0x0) && (local_res18 != (uint *)PTR_DAT_14016f010)) && (puVar11 = local_res18 + -2, puVar11 != (uint *)0x0)) { piVar9 = (int *)FUN_14003e7c0(pppuVar10,plVar8,lVar16,ppuVar18); FUN_14003d040(piVar9); puVar7 = puVar7 + -1; *puVar7 = *puVar7 - 1; if (*puVar7 == 0) { FUN_14003e8b0(puVar11); } FUN_14003d0d0((longlong)piVar9); } if ((((longlong *)param_1[699] != (longlong *)0x0) && (lVar1 = *(longlong *)param_1[699], lVar1 != 0)) && ((plVar2 = *(longlong **)(lVar1 + 0xe8), plVar2 != (longlong *)0x0 && (*plVar2 != 0)))) { if (plVar2 != (longlong *)0x0) { plVar14 = (longlong *)*plVar2; } FUN_140043a50(plVar14,plVar8,lVar16,ppuVar18); } return; }