/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x14016d5d0 FUN_14016d5d0 * Pseudocode, not original source. */ exception * FUN_14016d5d0(exception *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4) { undefined8 *puVar1; longlong lVar2; longlong *plVar3; longlong *local_res10; undefined8 uVar4; uVar4 = 0xfffffffffffffffe; std::exception::exception(param_1); *(undefined ***)param_1 = Proud::Exception::vftable; FUN_14016d8c0(); *(undefined **)(param_1 + 0x40) = PTR_DAT_140344098; plVar3 = (longlong *)FUN_1400010e0(param_2,&local_res10,param_3,param_4,uVar4); puVar1 = (undefined8 *)*plVar3; if (puVar1 == (undefined8 *)0x0) { uVar4 = 0; } else { if (puVar1[1] == 0) { uVar4 = FUN_140218460(*puVar1); puVar1[1] = uVar4; } uVar4 = puVar1[1]; } FUN_14016bfb0(param_1 + 0x40,uVar4); if (local_res10 != (longlong *)0x0) { LOCK(); plVar3 = local_res10 + 2; lVar2 = *plVar3; *(int *)plVar3 = (int)*plVar3 + -1; UNLOCK(); if (((int)lVar2 == 1) && (local_res10 != (longlong *)0x0)) { if (*local_res10 != 0) { Ordinal_6(); } if ((void *)local_res10[1] != (void *)0x0) { operator_delete__((void *)local_res10[1]); } operator_delete(local_res10); } } *(undefined8 *)(param_1 + 0x30) = param_2; *(undefined4 *)(param_1 + 0x18) = 0; *(undefined4 *)(param_1 + 0x38) = 3; return param_1; }