// File: tdv[P]boss/boss/include/common/string.h
// Function: Boss::String::IsEqual(Boss::IString*) const
virtual RetCode BOSS_CALL IsEqual(IString *str) const
    {
      if (!str)
        return Status::InvalidArgument;
      if (str == this)
        return Status::Ok;
      try
      {
        std::lock_guard<std::recursive_mutex> Lock(Mtx);
        UInt StrType = UnknownStringType;
        if (str->GetType(&StrType) != Status::Ok)
          return Status::Fail;
        if (StrType != Type)
          return Status::False;
        if (Type == UnknownStringType)
          return Status::Ok;
        UInt StrLength = 0;
        if (str->GetLength(&StrLength) != Status::Ok)
          return Status::Fail;
        if (StrLength != Length)
          return Status::False;
        RefObjPtr<IBuffer> Buf;
        if (str->GetString(StrType, Buf.GetPPtr()) != Status::Ok)
          return Status::Fail;
        void const *StrBufData = 0;
        UInt StrBufSize = 0;
        if (Buf->GetSize(&StrBufSize) != Status::Ok || Buf->GetData(&StrBufData) != Status::Ok)
          return Status::Fail;
        void const *BufData = 0;
        UInt BufSize = 0;
        if (Data->GetSize(&BufSize) != Status::Ok || Data->GetData(&BufData) != Status::Ok)
          return Status::Fail;
        return StrBufSize == BufSize && !std::memcmp(StrBufData, BufData, StrBufSize);
      }
      catch (std::exception const &)
      {
      }
      return Status::Fail;
    }

// Assembly:
subq $0xd8, %rsp
movq %rdi, 0xc8(%rsp)
movq %rsi, 0xc0(%rsp)
movq 0xc8(%rsp), %rax
movq %rax, 0x68(%rsp)
cmpq $0x0, 0xc0(%rsp)
jne 0x1c4af
movl $0x5, 0xd4(%rsp)
jmp 0x1c8d3
movq 0x68(%rsp), %rcx
movq 0xc0(%rsp), %rax
addq $0x8, %rcx
cmpq %rcx, %rax
jne 0x1c4d5
movl $0x0, 0xd4(%rsp)
jmp 0x1c8d3
movq 0x68(%rsp), %rsi
addq $0x18, %rsi
leaq 0xb8(%rsp), %rdi
callq 0x1b5b0
jmp 0x1c4ed
movl $0x0, 0xa8(%rsp)
movq 0xc0(%rsp), %rdi
movq (%rdi), %rax
movq 0x30(%rax), %rax
leaq 0xa8(%rsp), %rsi
callq *%rax
movl %eax, 0x64(%rsp)
jmp 0x1c517
movl 0x64(%rsp), %eax
cmpl $0x0, %eax
je 0x1c56d
movl $0x2, 0xd4(%rsp)
movl $0x1, 0xa4(%rsp)
jmp 0x1c885
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xb0(%rsp)
movl %eax, 0xac(%rsp)
jmp 0x1c8a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xb0(%rsp)
movl %eax, 0xac(%rsp)
jmp 0x1c894
movq 0x68(%rsp), %rcx
movl 0xa8(%rsp), %eax
cmpl 0x40(%rcx), %eax
je 0x1c599
movl $0x1, 0xd4(%rsp)
movl $0x1, 0xa4(%rsp)
jmp 0x1c885
movq 0x68(%rsp), %rax
cmpl $0x0, 0x40(%rax)
jne 0x1c5bf
movl $0x0, 0xd4(%rsp)
movl $0x1, 0xa4(%rsp)
jmp 0x1c885
movl $0x0, 0xa0(%rsp)
movq 0xc0(%rsp), %rdi
movq (%rdi), %rax
movq 0x28(%rax), %rax
leaq 0xa0(%rsp), %rsi
callq *%rax
movl %eax, 0x60(%rsp)
jmp 0x1c5e9
movl 0x60(%rsp), %eax
cmpl $0x0, %eax
je 0x1c60d
movl $0x2, 0xd4(%rsp)
movl $0x1, 0xa4(%rsp)
jmp 0x1c885
movq 0x68(%rsp), %rcx
movl 0xa0(%rsp), %eax
cmpl 0x44(%rcx), %eax
je 0x1c639
movl $0x1, 0xd4(%rsp)
movl $0x1, 0xa4(%rsp)
jmp 0x1c885
xorl %eax, %eax
movl %eax, %esi
leaq 0x98(%rsp), %rdi
callq 0x1f490
jmp 0x1c64c
movq 0xc0(%rsp), %rax
movq %rax, 0x48(%rsp)
movl 0xa8(%rsp), %eax
movl %eax, 0x54(%rsp)
leaq 0x98(%rsp), %rdi
callq 0x1f4d0
movq %rax, 0x58(%rsp)
jmp 0x1c678
movq 0x58(%rsp), %rdx
movl 0x54(%rsp), %esi
movq 0x48(%rsp), %rdi
movq (%rdi), %rax
movq 0x38(%rax), %rax
callq *%rax
movl %eax, 0x44(%rsp)
jmp 0x1c695
movl 0x44(%rsp), %eax
cmpl $0x0, %eax
je 0x1c6df
movl $0x2, 0xd4(%rsp)
movl $0x1, 0xa4(%rsp)
jmp 0x1c878
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xb0(%rsp)
movl %eax, 0xac(%rsp)
leaq 0x98(%rsp), %rdi
callq 0x1f080
jmp 0x1c894
movq $0x0, 0x90(%rsp)
movl $0x0, 0x8c(%rsp)
leaq 0x98(%rsp), %rdi
callq 0x1f4e0
movq %rax, 0x38(%rsp)
jmp 0x1c70a
movq 0x38(%rsp), %rdi
movq (%rdi), %rax
movq 0x30(%rax), %rax
leaq 0x8c(%rsp), %rsi
callq *%rax
movl %eax, 0x34(%rsp)
jmp 0x1c726
movl 0x34(%rsp), %eax
cmpl $0x0, %eax
jne 0x1c768
leaq 0x98(%rsp), %rdi
callq 0x1f4e0
movq %rax, 0x28(%rsp)
jmp 0x1c743
movq 0x28(%rsp), %rdi
movq (%rdi), %rax
movq 0x28(%rax), %rax
leaq 0x90(%rsp), %rsi
callq *%rax
movl %eax, 0x24(%rsp)
jmp 0x1c75f
movl 0x24(%rsp), %eax
cmpl $0x0, %eax
je 0x1c783
movl $0x2, 0xd4(%rsp)
movl $0x1, 0xa4(%rsp)
jmp 0x1c878
movq 0x68(%rsp), %rdi
movq $0x0, 0x80(%rsp)
movl $0x0, 0x7c(%rsp)
addq $0x48, %rdi
callq 0x1f4e0
movq %rax, 0x18(%rsp)
jmp 0x1c7ac
movq 0x18(%rsp), %rdi
movq (%rdi), %rax
movq 0x30(%rax), %rax
leaq 0x7c(%rsp), %rsi
callq *%rax
movl %eax, 0x14(%rsp)
jmp 0x1c7c5
movl 0x14(%rsp), %eax
cmpl $0x0, %eax
jne 0x1c808
movq 0x68(%rsp), %rdi
addq $0x48, %rdi
callq 0x1f4e0
movq %rax, 0x8(%rsp)
jmp 0x1c7e3
movq 0x8(%rsp), %rdi
movq (%rdi), %rax
movq 0x28(%rax), %rax
leaq 0x80(%rsp), %rsi
callq *%rax
movl %eax, 0x4(%rsp)
jmp 0x1c7ff
movl 0x4(%rsp), %eax
cmpl $0x0, %eax
je 0x1c820
movl $0x2, 0xd4(%rsp)
movl $0x1, 0xa4(%rsp)
jmp 0x1c878
movl 0x8c(%rsp), %ecx
xorl %eax, %eax
cmpl 0x7c(%rsp), %ecx
movb %al, 0x3(%rsp)
jne 0x1c85d
movq 0x90(%rsp), %rdi
movq 0x80(%rsp), %rsi
movl 0x8c(%rsp), %eax
movl %eax, %edx
callq 0x154f0
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, 0x3(%rsp)
movb 0x3(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0xd4(%rsp)
movl $0x1, 0xa4(%rsp)
leaq 0x98(%rsp), %rdi
callq 0x1f080
leaq 0xb8(%rsp), %rdi
callq 0x1b6d0
jmp 0x1c8d3
leaq 0xb8(%rsp), %rdi
callq 0x1b6d0
movl 0xac(%rsp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x1c8e2
movq 0xb0(%rsp), %rdi
callq 0x21330
movq %rax, 0x70(%rsp)
callq 0x213a0
movl $0x2, 0xd4(%rsp)
movl 0xd4(%rsp), %eax
addq $0xd8, %rsp
retq
movq 0xb0(%rsp), %rdi
callq 0xc24c0
nop