/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401d15c0 FUN_1401d15c0 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ /* WARNING: Removing unreachable block (ram,0x0001401d1941) */ /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ void FUN_1401d15c0(longlong param_1) { double dVar1; undefined4 uVar2; longlong lVar3; undefined8 uVar4; longlong lVar5; longlong lVar6; longlong lVar7; double dVar8; undefined1 auStack_d98 [32]; undefined1 local_d78 [8]; longlong local_d70; longlong local_d68; undefined4 local_d60; int local_d5c; undefined4 local_d50 [2]; undefined8 local_d48; undefined1 local_d40; undefined4 local_d3c; undefined1 local_d38; undefined1 local_d37; undefined8 local_d30; undefined4 uStack_d28; undefined4 uStack_d24; longlong *local_d20; undefined8 local_d18; undefined1 local_d10 [72]; undefined4 local_cc8; undefined4 uStack_cc4; undefined4 uStack_cc0; undefined4 uStack_cbc; undefined4 *local_48; undefined4 local_40; int local_3c; ulonglong local_38; local_d18 = 0xfffffffffffffffe; local_38 = DAT_1403463c0 ^ (ulonglong)auStack_d98; (**(code **)(*(longlong *)(param_1 + 0x78) + 0x10))(); lVar7 = 0; lVar3 = lVar7; if (*(longlong *)(param_1 + 0x1670) != 0) { lVar3 = *(longlong *)(param_1 + 0x1660); } do { lVar6 = lVar3; if (lVar6 == 0) { return; } if ((((*(longlong **)(lVar6 + 8) != (longlong *)0x0) && (lVar3 = **(longlong **)(lVar6 + 8), lVar3 != 0)) && (*(char *)(lVar3 + 0x684) == '\0')) && (*(int *)(lVar3 + 0x56c) != 1)) { lVar5 = lVar7; if (*(longlong *)(param_1 + 0x5d8) != 0) { lVar5 = *(longlong *)(*(longlong *)(param_1 + 0x5d8) + 0x38); } dVar8 = *(double *)(lVar3 + 0x148) - *(double *)(lVar5 + 0x100); *(double *)(lVar3 + 0x148) = dVar8; if (dVar8 <= 0.0) { *(undefined8 *)(lVar3 + 0x148) = DAT_140344d20; uVar4 = (**(code **)(*(longlong *)(param_1 + 0x70) + 0x1c0))(param_1 + 0x70); *(undefined8 *)(lVar3 + 0x80) = uVar4; if (*(char *)(lVar3 + 0x608) == '\0') { FUN_14016b440(local_d78); FUN_14016abe0(local_d78); FUN_14016b5a0(local_d78,0x800); FUN_14016b5a0(local_d78,0); FUN_14004eef0(local_d78,0x20); uVar4 = FUN_1401a1eb0(param_1 + 0x1620); FUN_14004ee00(local_d78,uVar4); local_3c = 200; local_40 = 0; local_48 = &local_cc8; if (local_d70 == 0) { uVar2 = local_d60; if (local_d68 == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } } else { uVar2 = *(undefined4 *)(local_d70 + 0x18); } lVar5 = local_d68; if (local_d68 == 0) { if (local_d70 == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } lVar5 = lVar7; if (*(int *)(local_d70 + 0x18) != 0) { lVar5 = *(longlong *)(local_d70 + 0x10); } } local_40 = 1; local_d30._0_4_ = (undefined4)lVar5; local_d30._4_4_ = (undefined4)((ulonglong)lVar5 >> 0x20); local_cc8 = (undefined4)local_d30; uStack_cc4 = local_d30._4_4_; uStack_cbc = uStack_d24; local_d50[0] = 0; local_d48 = 0; local_d40 = 1; local_d3c = 0xffffffff; local_d38 = 1; local_d37 = DAT_140344dfc; local_d30 = lVar5; uStack_d28 = uVar2; uStack_cc0 = uVar2; FUN_1401fa510(lVar3 + 0x668,&local_cc8,local_d50); if (local_48 == (undefined4 *)0x0) { FUN_14016d300(local_d10,PTR_u_ArrayWithExternalBuffer_is_unini_1403440d0); /* WARNING: Subroutine does not return */ _CxxThrowException(local_d10,(ThrowInfo *)&DAT_1403417f8); } if (local_3c < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_40 = 0; local_d20 = &local_d70; FUN_14016d0e0(&local_d70); if (local_d68 != 0) { if (local_d5c < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_d60 = 0; } } else { dVar8 = (double)(**(code **)(*(longlong *)(param_1 + 0x70) + 0x1c0))(param_1 + 0x70); dVar8 = dVar8 - *(double *)(lVar3 + 0xc0); if (0.0 < dVar8) { *(double *)(lVar3 + 0x140) = dVar8; } uVar4 = (**(code **)(*(longlong *)(param_1 + 0x70) + 0x1c0))(param_1 + 0x70); *(undefined8 *)(lVar3 + 0xc0) = uVar4; *(int *)(lVar3 + 0x100) = *(int *)(lVar3 + 0x100) + 1; *(undefined8 *)(lVar3 + 0x150) = 0; dVar8 = *(double *)(param_1 + 0x4f8) + *(double *)(lVar3 + 0x60); *(double *)(lVar3 + 0x158) = dVar8; if (*(char *)(lVar3 + 0x618) != '\0') { *(undefined8 *)(lVar3 + 0x50) = 0; *(undefined1 *)(lVar3 + 0x618) = 0; } dVar1 = *(double *)(lVar3 + 0x50); if (dVar1 <= 0.0) { *(undefined8 *)(lVar3 + 0x50) = *(undefined8 *)(lVar3 + 0x158); } else { *(double *)(lVar3 + 0x50) = (dVar8 - dVar1) * _DAT_140344d38 + dVar1; } } } } lVar3 = lVar7; if (lVar6 != 0) { lVar3 = *(longlong *)(lVar6 + 0x10); } } while( true ); }