// File: /workspace/github_cpp_makefile_star2_O3/demon386[P]git-store/./libs/filesystem/src/operations.cpp
// Function: boost::filesystem::absolute(boost::filesystem::path const&, boost::filesystem::path const&)
BOOST_FILESYSTEM_DECL
  path absolute(const path& p, const path& base)
  {
//    if ( p.empty() || p.is_absolute() )
//      return p;
//    //  recursively calling absolute is sub-optimal, but is simple
//    path abs_base(base.is_absolute() ? base : absolute(base));
//# ifdef BOOST_WINDOWS_API
//    if (p.has_root_directory())
//      return abs_base.root_name() / p;
//    //  !p.has_root_directory
//    if (p.has_root_name())
//      return p.root_name()
//        / abs_base.root_directory() / abs_base.relative_path() / p.relative_path();
//    //  !p.has_root_name()
//# endif
//    return abs_base / p;

    //  recursively calling absolute is sub-optimal, but is sure and simple
    path abs_base(base.is_absolute() ? base : absolute(base));

    //  store expensive to compute values that are needed multiple times
    path p_root_name (p.root_name());
    path base_root_name (abs_base.root_name());
    path p_root_directory (p.root_directory());

    if (p.empty())
      return abs_base;

    if (!p_root_name.empty())  // p.has_root_name()
    {
      if (p_root_directory.empty())  // !p.has_root_directory()
        return p_root_name / abs_base.root_directory()
        / abs_base.relative_path() / p.relative_path();
      // p is absolute, so fall through to return p at end of block
    }

    else if (!p_root_directory.empty())  // p.has_root_directory()
    {
#     ifdef BOOST_POSIX_API
      // POSIX can have root name it it is a network path
      if (base_root_name.empty())   // !abs_base.has_root_name()
        return p;
#     endif
      return base_root_name / p;
    }

    else
    {
      return abs_base / p;
    }

    return p;  // p.is_absolute() is true
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x148, %rsp            # imm = 0x148
movq %rdx, %r15
movq %rsi, %r14
movq %rdi, %rbx
movq %rdx, %rdi
callq 0x297bc
testb %al, %al
je 0x25dfe
leaq -0x58(%rbp), %rax
movq %rax, -0x10(%rax)
movq (%r15), %rsi
movq 0x8(%r15), %rdx
addq %rsi, %rdx
leaq -0x68(%rbp), %rdi
callq 0xf98c
jmp 0x25e2d
leaq -0x48(%rbp), %r12
movq %r12, %rdi
xorl %esi, %esi
callq 0x275c9
leaq -0x68(%rbp), %rdi
movq %r15, %rsi
movq %r12, %rdx
callq 0x25db8
leaq -0x38(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x25e2d
callq 0xb430
leaq -0xc8(%rbp), %rdi
movq %r14, %rsi
callq 0x2a724
leaq -0xe8(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x2a724
leaq -0x168(%rbp), %rdi
movq %r14, %rsi
callq 0x2a7ca
movq 0x8(%r14), %rdx
testq %rdx, %rdx
je 0x25e98
cmpq $0x0, -0xc0(%rbp)
movq -0x160(%rbp), %rax
je 0x25eb7
testq %rax, %rax
je 0x25f14
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
movq (%r14), %rsi
addq %rsi, %rdx
movq %rbx, %rdi
callq 0xf98c
jmp 0x260fc
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
movq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0xf98c
jmp 0x260fc
testq %rax, %rax
je 0x260ad
movq -0xe0(%rbp), %rax
testq %rax, %rax
je 0x25e7e
leaq -0x38(%rbp), %r15
movq %r15, -0x10(%r15)
movq -0xe8(%rbp), %rsi
addq %rsi, %rax
leaq -0x48(%rbp), %rdi
movq %rax, %rdx
callq 0xf98c
leaq -0x48(%rbp), %rdi
movq %r14, %rsi
callq 0x29e38
leaq 0x10(%rbx), %rcx
movq %rcx, (%rbx)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0xf98c
jmp 0x260ee
leaq -0x148(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x2a7ca
leaq -0x38(%rbp), %r12
movq %r12, -0x10(%r12)
movq -0xc8(%rbp), %rsi
movq -0xc0(%rbp), %rdx
addq %rsi, %rdx
leaq -0x48(%rbp), %rdi
callq 0xf98c
leaq -0x48(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x29e38
leaq -0x78(%rbp), %r15
movq %r15, -0x10(%r15)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x88(%rbp), %rdi
callq 0xf98c
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x25f83
callq 0xb430
leaq -0x128(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x2a8a4
leaq -0x48(%rbp), %rdi
movq %r12, (%rdi)
movq -0x88(%rbp), %rsi
movq -0x80(%rbp), %rdx
addq %rsi, %rdx
callq 0xf98c
leaq -0x48(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x29e38
leaq -0x98(%rbp), %r13
movq %r13, -0x10(%r13)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0xa8(%rbp), %rdi
callq 0xf98c
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x25fec
callq 0xb430
leaq -0x108(%rbp), %rdi
movq %r14, %rsi
callq 0x2a8a4
leaq -0x48(%rbp), %rdi
movq %r12, (%rdi)
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
addq %rsi, %rdx
callq 0xf98c
leaq -0x48(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x29e38
leaq 0x10(%rbx), %rcx
movq %rcx, (%rbx)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0xf98c
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x2604f
callq 0xb430
leaq -0xf8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x26064
callq 0xb430
movq -0xa8(%rbp), %rdi
cmpq %r13, %rdi
je 0x26075
callq 0xb430
leaq -0x118(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2608a
callq 0xb430
movq -0x88(%rbp), %rdi
cmpq %r15, %rdi
je 0x2609b
callq 0xb430
leaq -0x138(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x260f7
jmp 0x260fc
leaq -0x38(%rbp), %r15
movq %r15, -0x10(%r15)
movq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rdx
addq %rsi, %rdx
leaq -0x48(%rbp), %rdi
callq 0xf98c
leaq -0x48(%rbp), %rdi
movq %r14, %rsi
callq 0x29e38
leaq 0x10(%rbx), %rcx
movq %rcx, (%rbx)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0xf98c
movq -0x48(%rbp), %rdi
cmpq %r15, %rdi
je 0x260fc
callq 0xb430
leaq -0x158(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x26111
callq 0xb430
leaq -0xd8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x26126
callq 0xb430
leaq -0xb8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2613b
callq 0xb430
leaq -0x58(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2614d
callq 0xb430
movq %rbx, %rax
addq $0x148, %rsp            # imm = 0x148
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
jmp 0x261a4
movq %rax, %rbx
jmp 0x261b9
movq %rax, %rbx
jmp 0x261ca
movq %rax, %rbx
jmp 0x261df
movq %rax, %rbx
jmp 0x261f0
jmp 0x2622c
jmp 0x26182
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r15, %rdi
jne 0x26200
jmp 0x2622f
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x261a4
callq 0xb430
leaq -0xf8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x261b9
callq 0xb430
movq -0xa8(%rbp), %rdi
cmpq %r13, %rdi
je 0x261ca
callq 0xb430
leaq -0x118(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x261df
callq 0xb430
movq -0x88(%rbp), %rdi
cmpq %r15, %rdi
je 0x261f0
callq 0xb430
leaq -0x138(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2622f
callq 0xb430
jmp 0x2622f
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
jne 0x261c5
jmp 0x261ca
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
jne 0x261eb
jmp 0x261f0
movq %rax, %rbx
leaq -0x38(%rbp), %rax
jmp 0x26281
movq %rax, %rbx
leaq -0x158(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x26249
callq 0xb430
jmp 0x26249
movq %rax, %rbx
leaq -0xd8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x26263
callq 0xb430
jmp 0x26263
movq %rax, %rbx
leaq -0xb8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2627d
callq 0xb430
jmp 0x2627d
movq %rax, %rbx
leaq -0x58(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2628f
callq 0xb430
movq %rbx, %rdi
callq 0xb7f0