// File: /workspace/github_cpp_makefile_star2_O2/tdv[P]boss/boss/examples/objects_as_params/main.cpp
// Function: main
int main()
{
  try
  {
    Boss::RefObjPtr<MyNs::IFaces::ISimpleObject> Obj = Boss::Base<MyNs::Impl::SimpleObject>::Create();
    if (Obj->SetObject(Boss::Base<MyNs::Impl::InputObject>::Create().Get()) != Boss::Status::Ok)
    {
      std::cerr << "failed to set object." << std::endl;
      return -1;
    }
    Boss::RefObjPtr<MyNs::IFaces::IInputObject> In;
    if (Obj->GetObject(In.GetPPtr()) != Boss::Status::Ok)
    {
      std::cerr << "failed to get object." << std::endl;
      return -1;
    }
    In->Method();
    Boss::RefObjPtr<MyNs::IFaces::IOutputObject> Out;
    if (Obj->CreateNewObject(Out.GetPPtr()) != Boss::Status::Ok)
    {
      std::cerr << "failed to create new object." << std::endl;
      return -1;
    }
    Out->Method();
  }
  catch (std::exception const &e)
  {
    std::cerr << "Error: " << e.what() << std::endl;
  }
  return 0;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x20, %rsp
leaq 0x8(%rsp), %rdi
callq 0x17266
leaq 0x8(%rsp), %rdi
movq (%rdi), %rax
leaq 0x8(%rax), %rcx
testq %rax, %rax
cmoveq %rax, %rcx
movq %rcx, 0x10(%rsp)
andq $0x0, (%rdi)
callq 0x172d6
movq 0x10(%rsp), %rbx
leaq 0x8(%rsp), %rdi
callq 0x172e6
movq 0x8(%rsp), %rax
leaq 0x8(%rax), %rsi
testq %rax, %rax
cmoveq %rax, %rsi
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x28(%rax)
movl %eax, %ebx
leaq 0x8(%rsp), %rdi
callq 0x17356
testl %ebx, %ebx
je 0x170f3
leaq 0xe020b(%rip), %rdi     # 0xf72e0
leaq 0xa3f28(%rip), %rsi     # 0xbb004
callq 0x81e50
movq %rax, %rdi
callq 0x81730
pushq $-0x1
popq %rbx
xorl %ebp, %ebp
jmp 0x17195
leaq 0x8(%rsp), %rsi
andq $0x0, (%rsi)
movq 0x10(%rsp), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
testl %eax, %eax
je 0x1712d
leaq 0xe01ce(%rip), %rdi     # 0xf72e0
leaq 0xa3f01(%rip), %rsi     # 0xbb01a
callq 0x81e50
movq %rax, %rdi
callq 0x81730
pushq $-0x1
popq %rbx
xorl %ebp, %ebp
jmp 0x1718b
movq 0x8(%rsp), %rdi
movq (%rdi), %rax
callq *0x28(%rax)
leaq 0x18(%rsp), %rsi
andq $0x0, (%rsi)
movq 0x10(%rsp), %rdi
movq (%rdi), %rax
callq *0x38(%rax)
testl %eax, %eax
sete %bpl
je 0x17174
leaq 0xe0185(%rip), %rdi     # 0xf72e0
leaq 0xa3ece(%rip), %rsi     # 0xbb030
callq 0x81e50
movq %rax, %rdi
callq 0x81730
pushq $-0x1
popq %rbx
jmp 0x17181
movq 0x18(%rsp), %rdi
movq (%rdi), %rax
xorl %ebx, %ebx
callq *0x28(%rax)
leaq 0x18(%rsp), %rdi
callq 0x17366
leaq 0x8(%rsp), %rdi
callq 0x17376
leaq 0x10(%rsp), %rdi
callq 0x17386
testb %bpl, %bpl
je 0x171a6
xorl %ebx, %ebx
movl %ebx, %eax
addq $0x20, %rsp
popq %rbx
popq %r14
popq %rbp
retq
movq %rdx, %r14
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x17366
jmp 0x171c9
movq %rdx, %r14
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x17376
jmp 0x171f7
movq %rdx, %r14
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x17356
jmp 0x171f7
jmp 0x171f1
movq %rdx, %r14
movq %rax, %rbx
jmp 0x17201
movq %rdx, %r14
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x17386
cmpl $0x1, %r14d
jne 0x17256
movq %rbx, %rdi
callq 0x17e80
movq %rax, %rbx
leaq 0xe00c7(%rip), %rdi     # 0xf72e0
leaq 0xa3e2d(%rip), %rsi     # 0xbb04d
callq 0x81e50
movq %rax, %r14
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x10(%rax)
movq %r14, %rdi
movq %rax, %rsi
callq 0x81e50
movq %rax, %rdi
callq 0x81730
callq 0x17ef0
jmp 0x171a4
movq %rax, %rbx
callq 0x17ef0
movq %rbx, %rdi
callq 0xb8800
movq %rax, %rdi
callq 0x17396