; assembly | /* r2dec pseudo code output */ | /* balcl_commandline.t/none @ 0x45efa0 */ | #include | ; (fcn) sym._ZN11BloombergLP4bdlb10VariantImpINS_5bslmf8TypeListIJNS0_13NullableValueIbEENS4_IcEENS4_IiEENS4_IxEENS4_IdEENS4_IN3bsl12basic () | int64_t ZN11BloombergLP4bdlb10VariantImpINS_5bslmf8TypeListIJNS0_13NullableValueIbEENS4_IcEENS4_IiEENS4_IxEENS4_IdEENS4_IN3bsl12basic (uint32_t arg3, int64_t arg1) { | rdx = arg3; | rdi = arg1; 0x0045efa0 push r15 | 0x0045efa2 push r14 | 0x0045efa4 push rbx | 0x0045efa5 dec edx | edx--; 0x0045efa7 cmp edx, 0x10 | | if (edx > 0x10) { 0x0045efaa ja 0x45f197 | goto label_1; | } 0x0045efb0 mov r14, rdi | r14 = rdi; | /* switch table (17 cases) at 0x4af6b8 */ 0x0045efb3 jmp qword [rdx*8 + 0x4af6b8] | 0x0045efba cmp byte [r14 + 8], 0 | | if (*((r14 + 8)) == 0) { 0x0045efbf je 0x45f197 | goto label_1; | } 0x0045efc5 mov byte [r14 + 8], 0 | *((r14 + 8)) = 0; 0x0045efca jmp 0x45f197 | goto label_1; 0x0045efcf cmp byte [r14 + 1], 0 | | if (*((r14 + 1)) == 0) { 0x0045efd4 je 0x45f197 | goto label_1; | } 0x0045efda mov byte [r14 + 1], 0 | *((r14 + 1)) = 0; 0x0045efdf jmp 0x45f197 | goto label_1; 0x0045efe4 cmp byte [r14 + 4], 0 | | if (*((r14 + 4)) == 0) { 0x0045efe9 je 0x45f197 | goto label_1; | } 0x0045efef mov byte [r14 + 4], 0 | *((r14 + 4)) = 0; 0x0045eff4 jmp 0x45f197 | goto label_1; 0x0045eff9 cmp byte [r14 + 0x30], 0 | | if (*((r14 + 0x30)) == 0) { 0x0045effe je 0x45f197 | goto label_1; | } 0x0045f004 mov byte [r14 + 0x30], 0 | *((r14 + 0x30)) = 0; 0x0045f009 cmp qword [r14 + 0x20], 0x17 | | if (*((r14 + 0x20)) != 0x17) { 0x0045f00e je 0x45f01d | 0x0045f010 mov rsi, qword [r14] | rsi = *(r14); 0x0045f013 mov rdi, qword [r14 + 0x28] | rdi = *((r14 + 0x28)); 0x0045f017 mov rax, qword [rdi] | rax = *(rdi); 0x0045f01a call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0045f01d mov qword [r14 + 0x18], 0xffffffffffffffff | *((r14 + 0x18)) = 0xffffffffffffffff; 0x0045f025 jmp 0x45f197 | goto label_1; 0x0045f02a cmp byte [r14 + 0x20], 0 | | if (*((r14 + 0x20)) == 0) { 0x0045f02f je 0x45f197 | goto label_1; | } 0x0045f035 mov byte [r14 + 0x20], 0 | *((r14 + 0x20)) = 0; 0x0045f03a mov rsi, qword [r14] | rsi = *(r14); 0x0045f03d test rsi, rsi | | if (rsi == 0) { 0x0045f040 je 0x45f197 | goto label_1; | } 0x0045f046 mov rdi, qword [r14 + 0x18] | rdi = *((r14 + 0x18)); 0x0045f04a mov rax, qword [rdi] | rax = *(rdi); 0x0045f04d call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0045f050 jmp 0x45f197 | goto label_1; 0x0045f055 cmp byte [r14 + 0x20], 0 | | if (*((r14 + 0x20)) == 0) { 0x0045f05a je 0x45f197 | goto label_1; | } 0x0045f060 mov byte [r14 + 0x20], 0 | *((r14 + 0x20)) = 0; 0x0045f065 mov rsi, qword [r14] | rsi = *(r14); 0x0045f068 test rsi, rsi | | if (rsi == 0) { 0x0045f06b je 0x45f197 | goto label_1; | } 0x0045f071 mov rdi, qword [r14 + 0x18] | rdi = *((r14 + 0x18)); 0x0045f075 mov rax, qword [rdi] | rax = *(rdi); 0x0045f078 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0045f07b jmp 0x45f197 | goto label_1; 0x0045f080 cmp byte [r14 + 0x20], 0 | | if (*((r14 + 0x20)) == 0) { 0x0045f085 je 0x45f197 | goto label_1; | } 0x0045f08b mov byte [r14 + 0x20], 0 | *((r14 + 0x20)) = 0; 0x0045f090 mov rsi, qword [r14] | rsi = *(r14); 0x0045f093 test rsi, rsi | | if (rsi == 0) { 0x0045f096 je 0x45f197 | goto label_1; | } 0x0045f09c mov rdi, qword [r14 + 0x18] | rdi = *((r14 + 0x18)); 0x0045f0a0 mov rax, qword [rdi] | rax = *(rdi); 0x0045f0a3 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0045f0a6 jmp 0x45f197 | goto label_1; 0x0045f0ab cmp byte [r14 + 0x20], 0 | | if (*((r14 + 0x20)) == 0) { 0x0045f0b0 je 0x45f197 | goto label_1; | } 0x0045f0b6 mov byte [r14 + 0x20], 0 | *((r14 + 0x20)) = 0; 0x0045f0bb mov rsi, qword [r14] | rsi = *(r14); 0x0045f0be test rsi, rsi | | if (rsi == 0) { 0x0045f0c1 je 0x45f197 | goto label_1; | } 0x0045f0c7 mov rdi, qword [r14 + 0x18] | rdi = *((r14 + 0x18)); 0x0045f0cb mov rax, qword [rdi] | rax = *(rdi); 0x0045f0ce call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0045f0d1 jmp 0x45f197 | goto label_1; 0x0045f0d6 cmp byte [r14 + 0x20], 0 | | if (*((r14 + 0x20)) == 0) { 0x0045f0db je 0x45f197 | goto label_1; | } 0x0045f0e1 mov byte [r14 + 0x20], 0 | *((r14 + 0x20)) = 0; 0x0045f0e6 mov rbx, qword [r14] | rbx = *(r14); 0x0045f0e9 test rbx, rbx | | if (rbx == 0) { 0x0045f0ec je 0x45f197 | goto label_1; | } 0x0045f0f2 mov r15, qword [r14 + 8] | r15 = *((r14 + 8)); 0x0045f0f6 cmp rbx, r15 | | if (rbx != r15) { 0x0045f0f9 jne 0x45f111 | goto label_2; | } 0x0045f0fb jmp 0x45f18a | goto label_3; | do { | label_0: 0x0045f100 mov qword [rbx + 0x18], 0xffffffffffffffff | *((rbx + 0x18)) = 0xffffffffffffffff; 0x0045f108 add rbx, 0x30 | rbx += 0x30; 0x0045f10c cmp r15, rbx | | if (r15 == rbx) { 0x0045f10f je 0x45f187 | goto label_4; | } | label_2: 0x0045f111 cmp qword [rbx + 0x20], 0x17 | 0x0045f116 je 0x45f100 | | } while (*((rbx + 0x20)) == 0x17); 0x0045f118 mov rsi, qword [rbx] | rsi = *(rbx); 0x0045f11b mov rdi, qword [rbx + 0x28] | rdi = *((rbx + 0x28)); 0x0045f11f mov rax, qword [rdi] | rax = *(rdi); 0x0045f122 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0045f125 jmp 0x45f100 | goto label_0; 0x0045f127 cmp byte [r14 + 0x20], 0 | | if (*((r14 + 0x20)) != 0) { 0x0045f12c je 0x45f197 | 0x0045f12e mov byte [r14 + 0x20], 0 | *((r14 + 0x20)) = 0; 0x0045f133 mov rsi, qword [r14] | rsi = *(r14); 0x0045f136 test rsi, rsi | | if (rsi == 0) { 0x0045f139 je 0x45f197 | goto label_1; | } 0x0045f13b mov rdi, qword [r14 + 0x18] | rdi = *((r14 + 0x18)); 0x0045f13f mov rax, qword [rdi] | rax = *(rdi); 0x0045f142 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0045f145 jmp 0x45f197 | goto label_1; 0x0045f147 cmp byte [r14 + 0x20], 0 | | if (*((r14 + 0x20)) == 0) { 0x0045f14c je 0x45f197 | goto label_1; | } 0x0045f14e mov byte [r14 + 0x20], 0 | *((r14 + 0x20)) = 0; 0x0045f153 mov rsi, qword [r14] | rsi = *(r14); 0x0045f156 test rsi, rsi | | if (rsi == 0) { 0x0045f159 je 0x45f197 | goto label_1; | } 0x0045f15b mov rdi, qword [r14 + 0x18] | rdi = *((r14 + 0x18)); 0x0045f15f mov rax, qword [rdi] | rax = *(rdi); 0x0045f162 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0045f165 jmp 0x45f197 | goto label_1; 0x0045f167 cmp byte [r14 + 0x20], 0 | | if (*((r14 + 0x20)) == 0) { 0x0045f16c je 0x45f197 | goto label_1; | } 0x0045f16e mov byte [r14 + 0x20], 0 | *((r14 + 0x20)) = 0; 0x0045f173 mov rsi, qword [r14] | rsi = *(r14); 0x0045f176 test rsi, rsi | | if (rsi == 0) { 0x0045f179 je 0x45f197 | goto label_1; | } 0x0045f17b mov rdi, qword [r14 + 0x18] | rdi = *((r14 + 0x18)); 0x0045f17f mov rax, qword [rdi] | rax = *(rdi); 0x0045f182 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0045f185 jmp 0x45f197 | goto label_1; | label_4: 0x0045f187 mov rbx, qword [r14] | rbx = *(r14); | label_3: 0x0045f18a mov rdi, qword [r14 + 0x18] | rdi = *((r14 + 0x18)); 0x0045f18e mov rax, qword [rdi] | rax = *(rdi); 0x0045f191 mov rsi, rbx | rsi = rbx; 0x0045f194 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } | label_1: 0x0045f197 pop rbx | 0x0045f198 pop r14 | 0x0045f19a pop r15 | 0x0045f19c ret | return rax; | }