/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400a8e90 FUN_1400a8e90 * Pseudocode, not original source. */ void FUN_1400a8e90(undefined8 *param_1,longlong *param_2,uint *param_3,undefined8 param_4) { longlong *plVar1; void *pvVar2; undefined8 *puVar3; longlong lVar4; undefined8 *puVar5; *param_1 = Proud::CNetClientManager::vftable; param_1[1] = Proud::CNetClientManager::vftable; if (param_1[0x56] != 0) { FUN_1400adb10(param_1[0x56],(longlong)param_2,(longlong)param_3,param_4); FUN_1400adc30(param_1[0x56],param_2,param_3,param_4); } plVar1 = (longlong *)param_1[0x52]; if ((plVar1 != (longlong *)0x0) && (*plVar1 != 0)) { if (plVar1 == (longlong *)0x0) { lVar4 = 0; } else { lVar4 = *plVar1; } FUN_1400bfdd0(lVar4,param_2,param_3,param_4); lVar4 = 0; if ((longlong *)param_1[0x52] != (longlong *)0x0) { lVar4 = *(longlong *)param_1[0x52]; } FUN_1400c05c0(lVar4); } *(undefined1 *)(param_1 + 0x10) = 1; if ((undefined8 *)param_1[0xf] == (undefined8 *)0x0) { puVar5 = (undefined8 *)0x0; } else { puVar5 = *(undefined8 **)param_1[0xf]; } FUN_1400375f0(puVar5); pvVar2 = (void *)param_1[0x57]; if (pvVar2 != (void *)0x0) { FUN_140039850((longlong)pvVar2,param_2,(longlong *)param_3,param_4); operator_delete(pvVar2); } param_1[0x57] = 0; timeKillEvent(*(UINT *)(param_1 + 0x4c)); puVar5 = (undefined8 *)param_1[0x56]; if (puVar5 != (undefined8 *)0x0) { FUN_1400b08b0(puVar5,param_2,(longlong *)param_3,param_4); operator_delete(puVar5); } param_1[0x56] = 0; FUN_140072110(param_1 + 0x45); pvVar2 = (void *)param_1[0x57]; if (pvVar2 != (void *)0x0) { FUN_140039850((longlong)pvVar2,param_2,(longlong *)param_3,param_4); operator_delete(pvVar2); } param_1[0x57] = 0; puVar5 = (undefined8 *)param_1[0x56]; if (puVar5 != (undefined8 *)0x0) { FUN_1400b08b0(puVar5,param_2,(longlong *)param_3,param_4); operator_delete(puVar5); } FUN_1400a3e90(param_1 + 0x53); if ((param_1[0x52] != 0) && (*(longlong *)(param_1[0x52] + 8) = *(longlong *)(param_1[0x52] + 8) + -1, *(longlong *)(param_1[0x52] + 8) == 0)) { plVar1 = (longlong *)param_1[0x52]; puVar5 = (undefined8 *)*plVar1; if (puVar5 != (undefined8 *)0x0) { param_2 = (longlong *)0x1; (**(code **)*puVar5)(); } FUN_1400302f0(plVar1); } FUN_140072110(param_1 + 0x45); if ((undefined8 *)param_1[0x45] != (undefined8 *)0x0) { param_2 = (longlong *)0x1; (*(code *)**(undefined8 **)param_1[0x45])(); } FUN_1400395f0(param_1 + 0x41); FUN_14002e7a0((undefined4 *)(param_1 + 0x39),param_2,param_3,param_4); FUN_14002e7a0((undefined4 *)(param_1 + 0x11),param_2,param_3,param_4); if ((param_1[0xf] != 0) && (*(longlong *)(param_1[0xf] + 8) = *(longlong *)(param_1[0xf] + 8) + -1, *(longlong *)(param_1[0xf] + 8) == 0)) { puVar5 = (undefined8 *)param_1[0xf]; puVar3 = (undefined8 *)*puVar5; if (puVar3 != (undefined8 *)0x0) { FUN_140037670(puVar3); operator_delete(puVar3); } FUN_1400302f0(puVar5); } FUN_14002e7a0((undefined4 *)(param_1 + 2),param_2,param_3,param_4); param_1[1] = Proud::ISendSpeedMeasurerDg::vftable; *param_1 = Proud::ICompletionPortEventSink::vftable; return; }