Function at 0x70120b9c
Capabilities:
Contain obfuscated stackstrings

Disassembly:
push ebp
mov ebp, esp
push edi
push esi
push ebx
lea ecx, [ebp - 0x88]
sub esp, 0xdc
mov eax, dword [ebp + 8]
mov ebx, dword [ebp + 0xc]
mov dword [esp], eax
call method.OpenMPT::srlztn::SsbRead.SsbRead_std::istream_
push eax
call method.OpenMPT::Version.Current__
mov dword [esp], str.mptP
lea ecx, [ebp - 0xa0]
mov dword [ebp - 0xb0], eax
mov dword [ebp - 0xac], 0
call fcn.701fd3e8
lea eax, [ebp - 0xa0]
push edi
lea edi, [ebp - 0xb0]
mov dword [esp], eax
mov dword [esp + 4], edi
lea ecx, [ebp - 0x88]
call method.OpenMPT::srlztn::SsbRead.BeginRead_OpenMPT::srlztn::ID_const__unsigned_long_long_const_
lea ecx, [ebp - 0xa0]
push esi
push esi
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___._M_dispose__
cmp byte [ebp - 0x88], 1
ja 0x70120edf
mov dword [esp], str.data
lea ecx, [ebp - 0xa0]
call fcn.701fd3e8
lea eax, [ebp - 0xa0]
push ecx
mov dword [esp], eax
lea ecx, [ebp - 0x88]
call method.OpenMPT::srlztn::SsbRead.Find_OpenMPT::srlztn::ID_const_
mov esi, eax
push edx
mov eax, dword [ebp - 0x64]
mov ecx, edi
mov dword [esp], eax
call method.std::istream.tellg__
mov edx, dword [ebp - 0xac]
push eax
mov eax, dword [ebp - 0xb0]
mov dword [ebp - 0xbc], edx
mov dword [ebp - 0xc0], eax
test esi, esi
je 0x70120c76
mov eax, dword [esi + 0x10]
jmp 0x70120c7f
test byte [ebp - 0x68], 0x20
jne 0x70120c92
or eax, 0xffffffff
mov dword [esp + 8], eax
mov eax, dword [ebp - 0x64]
mov dword [esp + 4], ebx
mov dword [esp], eax
call method.OpenMPT.ReadData_std::istream__OpenMPT::CPattern__unsigned_int_
lea eax, [ebp - 0xc0]
mov dword [esp], esi
mov dword [esp + 8], eax
lea eax, [ebp - 0xa0]
mov dword [esp + 4], eax
lea ecx, [ebp - 0x88]
call method.OpenMPT::srlztn::SsbRead.OnReadEntry_OpenMPT::srlztn::ReadEntry_const__OpenMPT::srlztn::ID_const__long_long_const_
sub esp, 0xc
lea ecx, [ebp - 0xa0]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___._M_dispose__
lea ecx, [ebp - 0xa0]
mov dword [esp], str.RPB.
mov dword [ebp - 0xd0], 0
mov dword [ebp - 0xcc], 0
call fcn.701fd3e8
push eax
lea eax, [ebp - 0xa0]
mov dword [esp + 4], eax
lea eax, [ebp - 0xd0]
mov dword [esp + 8], method.void_OpenMPT::srlztn.ReadItem_unsigned_int__std::istream__unsigned_int__unsigned_int_
mov dword [esp], eax
lea ecx, [ebp - 0x88]
call method.bool_OpenMPT::srlztn::SsbRead.ReadItem_unsigned_int__void____std::istream__unsigned_int__unsigned_int___unsigned_int__OpenMPT::srlztn::ID_const__void____std::istream__unsigned_int__unsigned_int__
sub esp, 0xc
lea ecx, [ebp - 0xa0]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___._M_dispose__
lea ecx, [ebp - 0xa0]
mov dword [esp], str.RPM.
call fcn.701fd3e8
push eax
lea eax, [ebp - 0xa0]
mov dword [esp + 4], eax
lea eax, [ebp - 0xcc]
mov dword [esp + 8], method.void_OpenMPT::srlztn.ReadItem_unsigned_int__std::istream__unsigned_int__unsigned_int_
mov dword [esp], eax
lea ecx, [ebp - 0x88]
call method.bool_OpenMPT::srlztn::SsbRead.ReadItem_unsigned_int__void____std::istream__unsigned_int__unsigned_int___unsigned_int__OpenMPT::srlztn::ID_const__void____std::istream__unsigned_int__unsigned_int__
sub esp, 0xc
lea ecx, [ebp - 0xa0]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___._M_dispose__
mov eax, dword [ebp - 0xcc]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0xd0]
mov ecx, ebx
mov dword [esp], eax
call method.OpenMPT::CPattern.SetSignature_unsigned_int__unsigned_int_
lea ecx, [ebp - 0xa0]
mov dword [ebp - 0xc0], 0
mov dword [ebp - 0xbc], 0
push edi
mov dword [ebp - 0xb8], 0
push edi
mov dword [esp], str.SWNG
call fcn.701fd3e8
lea eax, [ebp - 0xa0]
push esi
mov dword [esp], eax
lea ecx, [ebp - 0x88]
call method.OpenMPT::srlztn::SsbRead.Find_OpenMPT::srlztn::ID_const_
mov esi, eax
push ecx
mov eax, dword [ebp - 0x64]
lea ecx, [ebp - 0xb0]
mov dword [esp], eax
call method.std::istream.tellg__
mov eax, dword [ebp - 0xb0]
push edx
mov edx, dword [ebp - 0xac]
mov dword [ebp - 0xc8], eax
mov dword [ebp - 0xc4], edx
test esi, esi
jne 0x70120e01
or eax, 0xffffffff
test byte [ebp - 0x68], 0x20
je 0x70120e04
jmp 0x70120e1d
mov eax, dword [esi + 0x10]
mov dword [esp + 8], eax
lea eax, [ebp - 0xc0]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x64]
mov dword [esp], eax
call method.OpenMPT::TempoSwing.Deserialize_std::istream__OpenMPT::TempoSwing__unsigned_int_
lea eax, [ebp - 0xc8]
mov dword [esp], esi
mov dword [esp + 8], eax
lea eax, [ebp - 0xa0]
mov dword [esp + 4], eax
lea ecx, [ebp - 0x88]
call method.OpenMPT::srlztn::SsbRead.OnReadEntry_OpenMPT::srlztn::ReadEntry_const__OpenMPT::srlztn::ID_const__long_long_const_
sub esp, 0xc
lea ecx, [ebp - 0xa0]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___._M_dispose__
mov edx, dword [ebp - 0xbc]
mov esi, dword [ebp - 0xc0]
cmp edx, esi
je 0x70120eb2
mov ecx, edx
mov eax, dword [ebx + 0x10]
sub ecx, esi
mov dword [ebp - 0xa0], 0x1000000
sar ecx, 2
cmp eax, ecx
jbe 0x70120e98
sub eax, ecx
lea edi, [ebp - 0xa0]
mov dword [esp + 8], edi
mov dword [esp + 4], eax
mov dword [esp], edx
lea ecx, [ebp - 0xc0]
call method.std::vector_unsigned_int__std::allocator_unsigned_int___._M_fill_insert___gnu_cxx::__normal_iterator_unsigned_int__std::vector_unsigned_int__std::allocator_unsigned_int_______unsigned_int__unsigned_int_const_
sub esp, 0xc
jmp 0x70120ea7
jae 0x70120ea7
lea eax, [esi + eax*4]
cmp edx, eax
je 0x70120ea7
mov dword [ebp - 0xbc], eax
lea ecx, [ebp - 0xc0]
call method.OpenMPT::TempoSwing.Normalize__
add ebx, 0x18
lea eax, [ebp - 0xc0]
mov dword [esp], eax
mov ecx, ebx
call method.std::vector_unsigned_int__std::allocator_unsigned_int___.operator_std::vector_unsigned_int__std::allocator_unsigned_int____const_
mov ecx, ebx
push eax
call method.OpenMPT::TempoSwing.Normalize__
mov eax, dword [ebp - 0xc0]
test eax, eax
je 0x70120edf
mov dword [esp], eax
call sym.operator_delete_void_
lea ecx, [ebp - 0x88]
call fcn.70137410
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret