; assembly | /* r2dec pseudo code output */ | /* ball_attributecontext.t/assume @ 0x405d20 */ | #include | ; (fcn) sym.usageExample2 () | uint64_t usageExample2 (int64_t arg1) { | uint32_t var_ch; | uint32_t var_dh; | uint32_t var_eh; | uint32_t var_fh; | uint32_t var_10h; | uint32_t var_11h; | uint32_t var_12h; | uint32_t var_13h; | int64_t var_14h; | char * var_18h; | int64_t var_20h; | int64_t var_38h; | uint32_t var_40h; | int64_t var_48h; | uint32_t var_50h; | int64_t var_58h; | int64_t var_60h; | int64_t var_64h; | int64_t var_68h; | int64_t var_70h; | int64_t var_78h; | int64_t var_80h; | int64_t var_88h; | int64_t var_90h; | int64_t var_98h; | int64_t var_a0h; | int64_t var_a8h; | int64_t var_b0h; | char * var_b8h; | int64_t var_c0h; | int64_t var_c8h; | int64_t var_d0h; | int64_t var_d8h; | uint32_t var_f0h; | int64_t var_f8h; | int64_t var_108h; | int64_t var_120h; | uint32_t var_128h; | int64_t var_130h; | int64_t var_138h; | int64_t var_150h; | int64_t var_188h; | int64_t var_1e0h; | rdi = arg1; 0x00405d20 push rbp | 0x00405d21 push r15 | 0x00405d23 push r14 | 0x00405d25 push r13 | 0x00405d27 push r12 | 0x00405d29 push rbx | 0x00405d2a sub rsp, 0x1e8 | 0x00405d31 mov rbx, qword [rdi] | rbx = *(rdi); 0x00405d34 mov esi, 0x44b213 | 0x00405d39 mov rdi, rbx | 0x00405d3c mov edx, 0x80 | 0x00405d41 mov ecx, 0x60 | 0x00405d46 mov r8d, 0x40 | 0x00405d4c mov r9d, 0x20 | r9d = 0x20; 0x00405d52 call 0x415900 | rax = BloombergLP::ball::CategoryManager::addCategory(char const*,int,int,int,int) (rbx, "MyCategory", 0x80, 0x60, 0x40); 0x00405d57 mov r14, rax | r14 = rax; 0x00405d5a call 0x414ca0 | rax = BloombergLP::ball::AttributeContext::getContext() (); 0x00405d5f mov r15, rax | r15 = rax; 0x00405d62 mov rdi, rax | 0x00405d65 mov rsi, r14 | 0x00405d68 call 0x414eb0 | al = BloombergLP::ball::AttributeContext::hasRelevantActiveRules(BloombergLP::ball::Categoryconst*)const (rax, r14); 0x00405d6d movzx edi, al | edi = (int32_t) al; 0x00405d70 mov esi, 0x44b21e | esi = "!context->hasRelevantActiveRules(cat1)"; 0x00405d75 mov edx, 0x16e | edx = 0x16e; 0x00405d7a call 0x405860 | symaSsErT(int (); 0x00405d7f mov dword [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x00405d87 lea rsi, [rsp + 0x10] | 0x00405d8c mov rdi, r15 | 0x00405d8f mov rdx, r14 | 0x00405d92 call 0x414ff0 | BloombergLP::ball::AttributeContext::determineThresholdLevels(BloombergLP::ball::ThresholdAggregate*,BloombergLP::ball::Categoryconst*)const (r15, rsp + 0x10, r14); 0x00405d97 xor edi, edi | edi = 0; 0x00405d99 cmp byte [rsp + 0x10], 0x80 | 0x00405d9e setne dil | dil = (*((rsp + 0x10)) != 0x80) ? 1 : 0; 0x00405da2 mov esi, 0x44b245 | esi = "128 == cat1ThresholdLevels.recordLevel()"; 0x00405da7 mov edx, 0x176 | edx = 0x176; 0x00405dac call 0x405860 | symaSsErT(int (); 0x00405db1 xor edi, edi | edi = 0; 0x00405db3 cmp byte [rsp + 0x11], 0x60 | 0x00405db8 setne dil | dil = (*((rsp + 0x11)) != 0x60) ? 1 : 0; 0x00405dbc mov esi, 0x44b26e | esi = "96 == cat1ThresholdLevels.passLevel()"; 0x00405dc1 mov edx, 0x177 | edx = 0x177; 0x00405dc6 call 0x405860 | symaSsErT(int (); 0x00405dcb xor edi, edi | edi = 0; 0x00405dcd cmp byte [rsp + 0x12], 0x40 | 0x00405dd2 setne dil | dil = (*((rsp + 0x12)) != 0x40) ? 1 : 0; 0x00405dd6 mov esi, 0x44b294 | esi = "64 == cat1ThresholdLevels.triggerLevel()"; 0x00405ddb mov edx, 0x178 | edx = 0x178; 0x00405de0 call 0x405860 | symaSsErT(int (); 0x00405de5 xor edi, edi | edi = 0; 0x00405de7 cmp byte [rsp + 0x13], 0x20 | 0x00405dec setne dil | dil = (*((rsp + 0x13)) != 0x20) ? 1 : 0; 0x00405df0 mov esi, 0x44b2bd | esi = "32 == cat1ThresholdLevels.triggerAllLevel()"; 0x00405df5 mov edx, 0x179 | edx = 0x179; 0x00405dfa call 0x405860 | symaSsErT(int (); 0x00405dff mov qword [rsp + 0xd0], 0x44b2e9 | *((rsp + 0xd0)) = 0x44b2e9; 0x00405e0b mov qword [rsp + 0xd8], 3 | *((rsp + 0xd8)) = 3; 0x00405e17 mov qword [rsp], 0 | *(rsp) = 0; 0x00405e1f lea rbp, [rsp + 0x150] | rbp = rsp + 0x150; 0x00405e27 lea rsi, [rsp + 0xd0] | 0x00405e2f mov rdi, rbp | 0x00405e32 mov edx, 0x78 | 0x00405e37 mov ecx, 0x6e | 0x00405e3c mov r8d, 0x46 | 0x00405e42 mov r9d, 0x28 | 0x00405e48 call 0x4126d0 | BloombergLP::ball::Rule::Rule(std::_1::basic_string_view>const&,int,int,int,int,BloombergLP::bslma::Allocator*) (rbp, rsp + 0xd0, 0x78, 0x6e, 0x46, 0x28); 0x00405e4d mov rdi, rbx | 0x00405e50 mov rsi, rbp | 0x00405e53 call 0x415f10 | BloombergLP::ball::CategoryManager::addRule(BloombergLP::ball::Ruleconst&) (rbx, rbp); 0x00405e58 mov rdi, r15 | 0x00405e5b mov rsi, r14 | 0x00405e5e call 0x414eb0 | al = BloombergLP::ball::AttributeContext::hasRelevantActiveRules(BloombergLP::ball::Categoryconst*)const (r15, r14); 0x00405e63 xor al, 1 | al ^= 1; 0x00405e65 movzx edi, al | edi = (int32_t) al; 0x00405e68 mov esi, 0x44b21f | esi = 0x44b21f; 0x00405e6d mov edx, 0x18d | edx = 0x18d; 0x00405e72 call 0x405860 | symaSsErT(int (); 0x00405e77 mov dword [rsp + 0xc], 0 | *((rsp + 0xc)) = 0; 0x00405e7f lea rsi, [rsp + 0xc] | 0x00405e84 mov rdi, r15 | 0x00405e87 mov rdx, r14 | 0x00405e8a call 0x414ff0 | BloombergLP::ball::AttributeContext::determineThresholdLevels(BloombergLP::ball::ThresholdAggregate*,BloombergLP::ball::Categoryconst*)const (r15, rsp + 0xc, r14); 0x00405e8f xor edi, edi | edi = 0; 0x00405e91 cmp byte [rsp + 0xc], 0x80 | 0x00405e96 setne dil | dil = (*((rsp + 0xc)) != 0x80) ? 1 : 0; 0x00405e9a mov esi, 0x44b2ed | esi = "128 == thresholdLevels.recordLevel()"; 0x00405e9f mov edx, 0x196 | edx = 0x196; 0x00405ea4 call 0x405860 | symaSsErT(int (); 0x00405ea9 xor edi, edi | edi = 0; 0x00405eab cmp byte [rsp + 0xd], 0x6e | 0x00405eb0 setne dil | dil = (*((rsp + 0xd)) != 0x6e) ? 1 : 0; 0x00405eb4 mov esi, 0x44b312 | esi = "110 == thresholdLevels.passLevel()"; 0x00405eb9 mov edx, 0x197 | edx = 0x197; 0x00405ebe call 0x405860 | symaSsErT(int (); 0x00405ec3 xor edi, edi | edi = 0; 0x00405ec5 cmp byte [rsp + 0xe], 0x46 | 0x00405eca setne dil | dil = (*((rsp + 0xe)) != 0x46) ? 1 : 0; 0x00405ece mov esi, 0x44b335 | esi = "70 == thresholdLevels.triggerLevel()"; 0x00405ed3 mov edx, 0x198 | edx = 0x198; 0x00405ed8 call 0x405860 | symaSsErT(int (); 0x00405edd xor edi, edi | edi = 0; 0x00405edf cmp byte [rsp + 0xf], 0x28 | 0x00405ee4 setne dil | dil = (*((rsp + 0xf)) != 0x28) ? 1 : 0; 0x00405ee8 mov esi, 0x44b35a | esi = "40 == thresholdLevels.triggerAllLevel()"; 0x00405eed mov edx, 0x199 | edx = 0x199; 0x00405ef2 call 0x405860 | symaSsErT(int (); 0x00405ef7 lea rsi, [rsp + 0x150] | 0x00405eff mov rdi, rbx | 0x00405f02 call 0x4160c0 | BloombergLP::ball::CategoryManager::removeRule(BloombergLP::ball::Ruleconst&) (rbx, rsp + 0x150); 0x00405f07 mov qword [rsp + 0x18], 0x44b382 | *((rsp + 0x18)) = "uuid"; 0x00405f10 mov qword [rsp + 0x20], 4 | *((rsp + 0x20)) = 4; 0x00405f19 mov rax, qword [rip + 0x264860] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00405f20 test rax, rax | | if (rax == 0) { 0x00405f23 jne 0x405f2a | 0x00405f25 call 0x421bc0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } 0x00405f2a mov qword [rsp + 0x68], rax | *((rsp + 0x68)) = rax; 0x00405f2f lea rdi, [rsp + 0xd0] | 0x00405f37 lea rsi, [rsp + 0x18] | 0x00405f3c lea rcx, [rsp + 0x68] | 0x00405f41 mov edx, 0x3c1a5c | 0x00405f46 call 0x412820 | BloombergLP::ball::ManagedAttribute::ManagedAttribute(std::_1::basic_string_view>const&,int,bsl::allocatorconst&) (rsp + 0xd0, rsp + 0x18, 0x3c1a5c, rsp + 0x68); 0x00405f4b mov dword [rsp + 0x1e0], 0xffffffff | *((rsp + 0x1e0)) = 0xffffffff; 0x00405f56 mov byte [rsp + 0x18], 0 | *((rsp + 0x18)) = 0; 0x00405f5b lea rdi, [rsp + 0x188] | rdi = rsp + 0x188; 0x00405f63 lea rsi, [rsp + 0x18] | rsi = rsp + 0x18; 0x00405f68 lea rdx, [rsp + 0xd0] | rdx = rsp + 0xd0; 0x00405f70 call 0x412e60 | BloombergLP::bslstl::HashTable,BloombergLP::ball::ManagedAttributeSet::AttributeHash,bsl::equal_to,bsl::allocator>::insertIfMissing(bool*,BloombergLP::ball::ManagedAttributeconst&) (); 0x00405f75 lea rsi, [rsp + 0x150] | 0x00405f7d mov rdi, rbx | 0x00405f80 call 0x415f10 | BloombergLP::ball::CategoryManager::addRule(BloombergLP::ball::Ruleconst&) (rbx, rsp + 0x150); 0x00405f85 mov rdi, r15 | 0x00405f88 mov rsi, r14 | 0x00405f8b call 0x414eb0 | al = BloombergLP::ball::AttributeContext::hasRelevantActiveRules(BloombergLP::ball::Categoryconst*)const (r15, r14); 0x00405f90 movzx edi, al | edi = (int32_t) al; 0x00405f93 mov esi, 0x44b21e | esi = "!context->hasRelevantActiveRules(cat1)"; 0x00405f98 mov edx, 0x1b5 | edx = 0x1b5; 0x00405f9d call 0x405860 | symaSsErT(int (); 0x00405fa2 lea rsi, [rsp + 0xc] | 0x00405fa7 mov rdi, r15 | 0x00405faa mov rdx, r14 | 0x00405fad call 0x414ff0 | BloombergLP::ball::AttributeContext::determineThresholdLevels(BloombergLP::ball::ThresholdAggregate*,BloombergLP::ball::Categoryconst*)const (r15, rsp + 0xc, r14); 0x00405fb2 mov al, byte [rsp + 0xc] | al = *((rsp + 0xc)); 0x00405fb6 cmp al, byte [rsp + 0x10] | | if (al == *((rsp + 0x10))) { 0x00405fba jne 0x405fdd | 0x00405fbc mov al, byte [rsp + 0xd] | al = *((rsp + 0xd)); 0x00405fc0 cmp al, byte [rsp + 0x11] | | if (al == *((rsp + 0x11))) { 0x00405fc4 jne 0x405fdd | 0x00405fc6 mov al, byte [rsp + 0xe] | al = *((rsp + 0xe)); 0x00405fca cmp al, byte [rsp + 0x12] | | if (al != *((rsp + 0x12))) { 0x00405fce jne 0x405fdd | goto label_4; | } 0x00405fd0 mov al, byte [rsp + 0xf] | al = *((rsp + 0xf)); 0x00405fd4 cmp al, byte [rsp + 0x13] | 0x00405fd8 sete al | al = (al == *((rsp + 0x13))) ? 1 : 0; 0x00405fdb jmp 0x405fdf | | } | } else { | label_4: 0x00405fdd xor eax, eax | eax = 0; | } 0x00405fdf xor al, 1 | al ^= 1; 0x00405fe1 movzx edi, al | edi = (int32_t) al; 0x00405fe4 mov esi, 0x44b387 | esi = "thresholdLevels == cat1ThresholdLevels"; 0x00405fe9 mov edx, 0x1bb | edx = 0x1bb; 0x00405fee call 0x405860 | symaSsErT(int (); 0x00405ff3 mov qword [rsp + 0x68], 0x44b050 | *((rsp + 0x68)) = vtable.AttributeSet.0; 0x00405ffc mov rax, qword [rip + 0x26477d] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00406003 test rax, rax | | if (rax == 0) { 0x00406006 jne 0x40600d | 0x00406008 call 0x421bc0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } 0x0040600d mov qword [rsp + 0x70], rax | *((rsp + 0x70)) = rax; 0x00406012 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x00406015 movups xmmword [rsp + 0x78], xmm0 | __asm ("movups xmmword [rsp + 0x78], xmm0"); 0x0040601a mov dword [rsp + 0x88], 1 | *((rsp + 0x88)) = 1; 0x00406025 lea rax, [rsp + 0x90] | rax = rsp + 0x90; 0x0040602d mov dword [rsp + 0xa8], 0 | *((rsp + 0xa8)) = 0; 0x00406038 mov qword [rsp + 0xa0], rax | *((rsp + 0xa0)) = rax; 0x00406040 mov qword [rsp + 0x98], 0 | *((rsp + 0x98)) = 0; 0x0040604c mov rax, qword [rip + 0x26472d] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00406053 test rax, rax | | if (rax == 0) { 0x00406056 jne 0x40605d | 0x00406058 call 0x421bc0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } 0x0040605d mov qword [rsp + 0x18], 0x44b382 | *((rsp + 0x18)) = "uuid"; 0x00406066 mov dword [rsp + 0x50], 0 | *((rsp + 0x50)) = 0; 0x0040606e test rax, rax | | if (rax == 0) { 0x00406071 jne 0x406083 | 0x00406073 mov rax, qword [rip + 0x264706] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x0040607a test rax, rax | | if (rax == 0) { 0x0040607d je 0x4064d4 | goto label_5; | } | } 0x00406083 lea rbx, [rsp + 0x20] | rbx = rsp + 0x20; 0x00406088 mov qword [rsp + 0x58], rax | *((rsp + 0x58)) = rax; 0x0040608d mov eax, 0xffffffff | eax = 0xffffffff; 0x00406092 mov qword [rsp + 0x60], rax | *((rsp + 0x60)) = rax; | label_0: 0x00406097 mov dword [rbx], 0x3c1a5c | *(rbx) = 0x3c1a5c; 0x0040609d mov dword [rsp + 0x50], 1 | *((rsp + 0x50)) = 1; | label_1: 0x004060a5 lea r13, [rsp + 0x70] | r13 = rsp + 0x70; 0x004060aa lea rbp, [rsp + 0x90] | rbp = rsp + 0x90; 0x004060b2 mov rax, qword [rsp + 0x98] | rax = *((rsp + 0x98)); 0x004060ba test rax, rax | 0x004060bd mov qword [rsp + 0xb0], r14 | *((rsp + 0xb0)) = r14; | if (rax == 0) { 0x004060c5 je 0x406134 | goto label_6; | } 0x004060c7 mov r12, rbp | r12 = rbp; 0x004060ca xor ebp, ebp | ebp = 0; 0x004060cc lea r14, [rsp + 0x18] | r14 = rsp + 0x18; 0x004060d1 nop word cs:[rax + rax] | 0x004060db nop dword [rax + rax] | | do { 0x004060e0 mov rbx, rax | rbx = rax; 0x004060e3 lea rdx, [rax + 0x18] | rdx = rax + 0x18; 0x004060e7 mov rdi, r13 | 0x004060ea mov rsi, r14 | 0x004060ed call 0x413df0 | al = AttributeComparator::operator()(BloombergLP::ball::Attributeconst&,BloombergLP::ball::Attributeconst&)const (r13, r14); 0x004060f2 test al, al | | if (al == 0) { 0x004060f4 cmove rbp, rbx | | } 0x004060f8 xor al, 1 | al ^= 1; 0x004060fa movzx ecx, al | ecx = (int32_t) al; 0x004060fd mov rax, qword [rbx + rcx*8 + 8] | rax = *((rbx + rcx*8 + 8)); 0x00406102 test rax, rax | 0x00406105 jne 0x4060e0 | | } while (rax != 0); 0x00406107 lea eax, [rcx + rcx - 1] | eax = rcx + rcx - 1; 0x0040610b mov dword [rsp + 0x14], eax | *((rsp + 0x14)) = eax; 0x0040610f test rbp, rbp | | if (rbp != 0) { 0x00406112 je 0x406141 | 0x00406114 add rbp, 0x18 | rbp += 0x18; 0x00406118 lea rdx, [rsp + 0x18] | rdx = rsp + 0x18; 0x0040611d mov rdi, r13 | 0x00406120 mov rsi, rbp | 0x00406123 call 0x413df0 | al = AttributeComparator::operator()(BloombergLP::ball::Attributeconst&,BloombergLP::ball::Attributeconst&)const (r13, rbp); 0x00406128 mov rbp, r12 | 0x0040612b test al, al | | if (al != 0) { 0x0040612d jne 0x406144 | goto label_7; | } 0x0040612f jmp 0x406322 | goto label_8; | label_6: 0x00406134 mov dword [rsp + 0x14], 0xffffffff | *((rsp + 0x14)) = 0xffffffff; 0x0040613c mov rbx, rbp | rbx = rbp; 0x0040613f jmp 0x406144 | | } else { 0x00406141 mov rbp, r12 | | } | label_7: 0x00406144 mov r12, qword [rsp + 0x80] | r12 = *((rsp + 0x80)); 0x0040614c test r12, r12 | | if (r12 != 0) { 0x0040614f jne 0x406276 | goto label_9; | } 0x00406155 movsxd rax, dword [rsp + 0x88] | rax = *((rsp + 0x88)); 0x0040615d imul r14, rax, 0x68 | r14 = rax * 0x68; 0x00406161 lea rsi, [r14 + 0x17] | rsi = r14 + 0x17; 0x00406165 and rsi, 0xfffffffffffffff0 | rsi &= 0xfffffffffffffff0; 0x00406169 mov rdi, qword [rsp + 0x70] | rdi = *((rsp + 0x70)); 0x0040616e mov rax, qword [rdi] | rax = *(rdi); 0x00406171 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00406174 mov rcx, rax | rcx = rax; 0x00406177 mov rax, qword [rsp + 0x78] | rax = *((rsp + 0x78)); 0x0040617c mov qword [rcx], rax | *(rcx) = rax; 0x0040617f mov qword [rsp + 0x78], rcx | *((rsp + 0x78)) = rcx; 0x00406184 lea r12, [rcx + 8] | r12 = rcx + 8; 0x00406188 lea rsi, [rcx + r14 - 0x60] | rsi = rcx + r14 - 0x60; 0x0040618d cmp rsi, r12 | | if (rsi <= r12) { 0x00406190 jbe 0x40624e | goto label_3; | } 0x00406196 add r14, 0xffffffffffffff97 | r14 += 0xffffffffffffff97; 0x0040619a movabs rdx, 0x4ec4ec4ec4ec4ec5 | rdx = 0x4ec4ec4ec4ec4ec5; 0x004061a4 mov rax, r14 | rax = r14; 0x004061a7 mul rdx | rdx:rax = rax * rdx; 0x004061aa shr edx, 5 | edx >>= 5; 0x004061ad inc edx | edx++; 0x004061af and rdx, 7 | rdx &= 7; | if (rdx == 0) { 0x004061b3 je 0x40650c | goto label_10; | } 0x004061b9 add rcx, 0x70 | rcx += 0x70; 0x004061bd neg rdx | rdx = -rdx; | do { 0x004061c0 mov qword [rcx - 0x68], rcx | *((rcx - 0x68)) = rcx; 0x004061c4 add rcx, 0x68 | rcx += 0x68; 0x004061c8 inc rdx | rdx++; 0x004061cb jne 0x4061c0 | | } while (rdx != 0); 0x004061cd add rcx, 0xffffffffffffff98 | rcx += 0xffffffffffffff98; 0x004061d1 cmp r14, 0x2d8 | | if (r14 < 0x2d8) { 0x004061d8 jb 0x40624e | goto label_3; | } 0x004061da nop word [rax + rax] | | do { | label_2: 0x004061e0 lea rax, [rcx + 0x68] | rax = rcx + 0x68; 0x004061e4 mov qword [rcx], rax | *(rcx) = rax; 0x004061e7 lea rax, [rcx + 0xd0] | rax = rcx + 0xd0; 0x004061ee mov qword [rcx + 0x68], rax | *((rcx + 0x68)) = rax; 0x004061f2 lea rax, [rcx + 0x138] | rax = rcx + 0x138; 0x004061f9 mov qword [rcx + 0xd0], rax | *((rcx + 0xd0)) = rax; 0x00406200 lea rax, [rcx + 0x1a0] | rax = rcx + 0x1a0; 0x00406207 mov qword [rcx + 0x138], rax | *((rcx + 0x138)) = rax; 0x0040620e lea rax, [rcx + 0x208] | rax = rcx + 0x208; 0x00406215 mov qword [rcx + 0x1a0], rax | *((rcx + 0x1a0)) = rax; 0x0040621c lea rax, [rcx + 0x270] | rax = rcx + 0x270; 0x00406223 mov qword [rcx + 0x208], rax | *((rcx + 0x208)) = rax; 0x0040622a lea rax, [rcx + 0x2d8] | rax = rcx + 0x2d8; 0x00406231 mov qword [rcx + 0x270], rax | *((rcx + 0x270)) = rax; 0x00406238 lea rax, [rcx + 0x340] | rax = rcx + 0x340; 0x0040623f mov qword [rcx + 0x2d8], rax | *((rcx + 0x2d8)) = rax; 0x00406246 mov rcx, rax | rcx = rax; 0x00406249 cmp rax, rsi | 0x0040624c jb 0x4061e0 | | } while (rax < rsi); | label_3: 0x0040624e mov rax, qword [rsp + 0x80] | rax = *((rsp + 0x80)); 0x00406256 mov qword [rsi], rax | *(rsi) = rax; 0x00406259 mov qword [rsp + 0x80], r12 | *((rsp + 0x80)) = r12; 0x00406261 mov eax, dword [rsp + 0x88] | eax = *((rsp + 0x88)); 0x00406268 cmp eax, 0x1f | | if (eax <= 0x1f) { 0x0040626b jg 0x406276 | 0x0040626d add eax, eax | eax += eax; 0x0040626f mov dword [rsp + 0x88], eax | *((rsp + 0x88)) = eax; | } | label_9: 0x00406276 mov rax, qword [r12] | rax = *(r12); 0x0040627a mov qword [rsp + 0x80], rax | *((rsp + 0x80)) = rax; 0x00406282 mov rax, qword [rsp + 0x70] | rax = *((rsp + 0x70)); 0x00406287 test rax, rax | | if (rax == 0) { 0x0040628a jne 0x40629d | 0x0040628c mov rax, qword [rip + 0x2644ed] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00406293 test rax, rax | | if (rax != 0) { 0x00406296 jne 0x40629d | goto label_11; | } 0x00406298 call 0x421bc0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } | label_11: 0x0040629d mov rcx, qword [rsp + 0x18] | rcx = *((rsp + 0x18)); 0x004062a2 mov qword [r12 + 0x18], rcx | *((r12 + 0x18)) = rcx; 0x004062a7 mov ecx, dword [rsp + 0x50] | ecx = *((rsp + 0x50)); 0x004062ab mov dword [r12 + 0x50], ecx | *((r12 + 0x50)) = ecx; 0x004062b0 test rax, rax | | if (rax == 0) { 0x004062b3 jne 0x4062cb | 0x004062b5 mov rax, qword [rip + 0x2644c4] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x004062bc test rax, rax | | if (rax != 0) { 0x004062bf jne 0x4062cb | goto label_12; | } 0x004062c1 call 0x421bc0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x004062c6 mov ecx, dword [r12 + 0x50] | ecx = *((r12 + 0x50)); | } | label_12: 0x004062cb mov qword [r12 + 0x58], rax | *((r12 + 0x58)) = rax; 0x004062d0 test ecx, ecx | | if (ecx != 0) { 0x004062d2 je 0x4062fb | 0x004062d4 lea rdi, [rsp + 0x20] | rdi = rsp + 0x20; 0x004062d9 lea rcx, [r12 + 0x20] | rcx = r12 + 0x20; 0x004062de mov qword [rsp + 0xc0], rcx | *((rsp + 0xc0)) = rcx; 0x004062e6 mov qword [rsp + 0xc8], rax | *((rsp + 0xc8)) = rax; 0x004062ee lea rsi, [rsp + 0xc0] | rsi = rsp + 0xc0; 0x004062f6 call 0x413670 | _ZNK11BloombergLP4bdlb10VariantImpINS_5bslmf8TypeListIJixN3bsl12basic_stringIcNSt3_111char_traitsIcEENS4_9allocatorIcEEEEEEEE5applyINS0_28Variant_CopyConstructVisitorEEENS4_9enable_ifIXeqsr25Variant_ReturnValueHelperIT_EE5valueLi0EEvE4typeERSH_ (); | } 0x004062fb mov eax, dword [rsp + 0x60] | eax = *((rsp + 0x60)); 0x004062ff mov dword [r12 + 0x60], eax | *((r12 + 0x60)) = eax; 0x00406304 mov eax, dword [rsp + 0x64] | eax = *((rsp + 0x64)); 0x00406308 mov dword [r12 + 0x64], eax | *((r12 + 0x64)) = eax; 0x0040630d mov edx, dword [rsp + 0x14] | 0x00406311 shr edx, 0x1f | edx >>= 0x1f; 0x00406314 mov rdi, rbp | 0x00406317 mov rsi, rbx | 0x0040631a mov rcx, r12 | rcx = r12; 0x0040631d call 0x420490 | BloombergLP::bslalg::RbTreeUtil::insertAt(BloombergLP::bslalg::RbTreeAnchor*,BloombergLP::bslalg::RbTreeNode*,bool,BloombergLP::bslalg::RbTreeNode*) (rbp, rbx, *((rsp + 0x14))); | label_8: 0x00406322 cmp dword [rsp + 0x50], 3 | | if (*((rsp + 0x50)) == 3) { 0x00406327 jne 0x406341 | 0x00406329 cmp qword [rsp + 0x40], 0x17 | | if (*((rsp + 0x40)) == 0x17) { 0x0040632f je 0x406341 | goto label_13; | } 0x00406331 mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x00406336 mov rdi, qword [rsp + 0x48] | rdi = *((rsp + 0x48)); 0x0040633b mov rax, qword [rdi] | rax = *(rdi); 0x0040633e call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } | label_13: 0x00406341 mov qword [r15 + 0x20], 0 | *((r15 + 0x20)) = 0; 0x00406349 mov qword [r15 + 0x28], 0xffffffffffffffff | *((r15 + 0x28)) = 0xffffffffffffffff; 0x00406351 lea rdi, [rsp + 0x18] | 0x00406356 lea rdx, [rsp + 0x68] | 0x0040635b mov rsi, r15 | 0x0040635e call 0x414610 | BloombergLP::ball::AttributeContainerList::pushFront(BloombergLP::ball::AttributeContainerconst*) (rsp + 0x18, r15, rsp + 0x68); 0x00406363 mov rbx, qword [rsp + 0xb0] | rbx = *((rsp + 0xb0)); 0x0040636b mov rdi, r15 | 0x0040636e mov rsi, rbx | 0x00406371 call 0x414eb0 | al = BloombergLP::ball::AttributeContext::hasRelevantActiveRules(BloombergLP::ball::Categoryconst*)const (r15, rbx); 0x00406376 xor al, 1 | al ^= 1; 0x00406378 movzx edi, al | edi = (int32_t) al; 0x0040637b mov esi, 0x44b21f | esi = 0x44b21f; 0x00406380 mov edx, 0x1ce | edx = 0x1ce; 0x00406385 call 0x405860 | symaSsErT(int (); 0x0040638a lea rsi, [rsp + 0xc] | 0x0040638f mov rdi, r15 | 0x00406392 mov rdx, rbx | 0x00406395 call 0x414ff0 | BloombergLP::ball::AttributeContext::determineThresholdLevels(BloombergLP::ball::ThresholdAggregate*,BloombergLP::ball::Categoryconst*)const (r15, rsp + 0xc, rbx); 0x0040639a xor edi, edi | edi = 0; 0x0040639c cmp byte [rsp + 0xc], 0x80 | 0x004063a1 setne dil | dil = (*((rsp + 0xc)) != 0x80) ? 1 : 0; 0x004063a5 mov esi, 0x44b2ed | esi = "128 == thresholdLevels.recordLevel()"; 0x004063aa mov edx, 0x1d4 | edx = 0x1d4; 0x004063af call 0x405860 | symaSsErT(int (); 0x004063b4 xor edi, edi | edi = 0; 0x004063b6 cmp byte [rsp + 0xd], 0x6e | 0x004063bb setne dil | dil = (*((rsp + 0xd)) != 0x6e) ? 1 : 0; 0x004063bf mov esi, 0x44b312 | esi = "110 == thresholdLevels.passLevel()"; 0x004063c4 mov edx, 0x1d5 | edx = 0x1d5; 0x004063c9 call 0x405860 | symaSsErT(int (); 0x004063ce xor edi, edi | edi = 0; 0x004063d0 cmp byte [rsp + 0xe], 0x46 | 0x004063d5 setne dil | dil = (*((rsp + 0xe)) != 0x46) ? 1 : 0; 0x004063d9 mov esi, 0x44b335 | esi = "70 == thresholdLevels.triggerLevel()"; 0x004063de mov edx, 0x1d6 | edx = 0x1d6; 0x004063e3 call 0x405860 | symaSsErT(int (); 0x004063e8 xor edi, edi | edi = 0; 0x004063ea cmp byte [rsp + 0xf], 0x28 | 0x004063ef setne dil | dil = (*((rsp + 0xf)) != 0x28) ? 1 : 0; 0x004063f3 mov esi, 0x44b35a | esi = "40 == thresholdLevels.triggerAllLevel()"; 0x004063f8 mov edx, 0x1d7 | edx = 0x1d7; 0x004063fd call 0x405860 | symaSsErT(int (); 0x00406402 mov rax, qword [rsp + 0x18] | rax = *((rsp + 0x18)); 0x00406407 mov qword [rsp + 0xb8], rax | *((rsp + 0xb8)) = rax; 0x0040640f mov qword [r15 + 0x20], 0 | *((r15 + 0x20)) = 0; 0x00406417 mov qword [r15 + 0x28], 0xffffffffffffffff | *((r15 + 0x28)) = 0xffffffffffffffff; 0x0040641f lea rsi, [rsp + 0xb8] | 0x00406427 mov rdi, r15 | 0x0040642a call 0x414680 | BloombergLP::ball::AttributeContainerList::remove(BloombergLP::ball::AttributeContainerListIteratorconst&) (r15, rsp + 0xb8); 0x0040642f mov qword [rsp + 0x68], 0x44b050 | *((rsp + 0x68)) = vtable.AttributeSet.0; 0x00406438 mov rdi, r13 | 0x0040643b call 0x4125d0 | bsl::set>::~set() (r13); 0x00406440 lea rdi, [rsp + 0x68] | rdi = rsp + 0x68; 0x00406445 call 0x414410 | BloombergLP::ball::AttributeContainer::~AttributeContainer() (); 0x0040644a mov eax, dword [rsp + 0x138] | eax = *((rsp + 0x138)); 0x00406451 test eax, eax | | if (eax != 0) { 0x00406453 je 0x406492 | 0x00406455 cmp eax, 3 | | if (eax == 3) { 0x00406458 jne 0x406487 | 0x0040645a cmp qword [rsp + 0x128], 0x17 | | if (*((rsp + 0x128)) != 0x17) { 0x00406463 je 0x40647b | 0x00406465 mov rsi, qword [rsp + 0x108] | rsi = *((rsp + 0x108)); 0x0040646d mov rdi, qword [rsp + 0x130] | rdi = *((rsp + 0x130)); 0x00406475 mov rax, qword [rdi] | rax = *(rdi); 0x00406478 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0040647b mov qword [rsp + 0x120], 0xffffffffffffffff | *((rsp + 0x120)) = 0xffffffffffffffff; | } 0x00406487 mov dword [rsp + 0x138], 0 | *((rsp + 0x138)) = 0; | } 0x00406492 cmp qword [rsp + 0xf0], 0x17 | | if (*((rsp + 0xf0)) != 0x17) { 0x0040649b je 0x4064b3 | 0x0040649d mov rsi, qword [rsp + 0xd0] | rsi = *((rsp + 0xd0)); 0x004064a5 mov rdi, qword [rsp + 0xf8] | rdi = *((rsp + 0xf8)); 0x004064ad mov rax, qword [rdi] | rax = *(rdi); 0x004064b0 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x004064b3 lea rdi, [rsp + 0x150] | 0x004064bb call 0x412990 | eax = BloombergLP::ball::Rule::~Rule() (rsp + 0x150); 0x004064c0 xor eax, eax | eax = 0; 0x004064c2 add rsp, 0x1e8 | 0x004064c9 pop rbx | 0x004064ca pop r12 | 0x004064cc pop r13 | 0x004064ce pop r14 | 0x004064d0 pop r15 | 0x004064d2 pop rbp | 0x004064d3 ret | return rax; | label_5: 0x004064d4 call 0x421bc0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x004064d9 mov ecx, dword [rsp + 0x50] | ecx = *((rsp + 0x50)); 0x004064dd lea rbx, [rsp + 0x20] | rbx = rsp + 0x20; 0x004064e2 mov qword [rsp + 0x58], rax | *((rsp + 0x58)) = rax; 0x004064e7 mov eax, 0xffffffff | eax = 0xffffffff; 0x004064ec mov qword [rsp + 0x60], rax | *((rsp + 0x60)) = rax; 0x004064f1 cmp ecx, 3 | | if (ecx == 3) { 0x004064f4 je 0x406521 | goto label_14; | } 0x004064f6 cmp ecx, 1 | | if (ecx != 1) { 0x004064f9 jne 0x406097 | goto label_0; | } 0x004064ff mov dword [rsp + 0x20], 0x3c1a5c | *((rsp + 0x20)) = 0x3c1a5c; 0x00406507 jmp 0x4060a5 | goto label_1; | label_10: 0x0040650c mov rcx, r12 | rcx = r12; 0x0040650f cmp r14, 0x2d8 | | if (r14 >= 0x2d8) { 0x00406516 jae 0x4061e0 | goto label_2; | } 0x0040651c jmp 0x40624e | goto label_3; | label_14: 0x00406521 cmp qword [rsp + 0x40], 0x17 | | if (*((rsp + 0x40)) != 0x17) { 0x00406527 je 0x406539 | 0x00406529 mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x0040652e mov rdi, qword [rsp + 0x48] | rdi = *((rsp + 0x48)); 0x00406533 mov rax, qword [rdi] | rax = *(rdi); 0x00406536 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x00406539 mov qword [rsp + 0x38], 0xffffffffffffffff | *((rsp + 0x38)) = 0xffffffffffffffff; 0x00406542 jmp 0x406097 | goto label_0; | }