// File: nurseiit[P]cpp-server/./include/asio/detail/reactive_socket_send_op.hpp
// Function: asio::detail::reactive_socket_send_op<asio::const_buffers_1, asio::detail::write_op<asio::basic_stream_socket<asio::ip::tcp, asio::executor>, asio::const_buffers_1, asio::const_buffer const*, asio::detail::transfer_all_t, Session::read_next_line(std::shared_ptr<Session>)::'lambda'(std::error_code const&, unsigned long)::operator()(std::error_code const&, unsigned long) const::'lambda'(std::error_code const&, unsigned long)>, asio::detail::io_object_executor<asio::executor>>::do_complete(void*, asio::detail::scheduler_operation*, std::error_code const&, unsigned long)
static void do_complete(void* owner, operation* base,
      const asio::error_code& /*ec*/,
      std::size_t /*bytes_transferred*/)
  {
    // Take ownership of the handler object.
    reactive_socket_send_op* o(static_cast<reactive_socket_send_op*>(base));
    ptr p = { asio::detail::addressof(o->handler_), o, o };
    handler_work<Handler, IoExecutor> w(o->handler_, o->io_executor_);

    ASIO_HANDLER_COMPLETION((*o));

    // Make a copy of the handler so that the memory can be deallocated before
    // the upcall is made. Even if we're not about to make an upcall, a
    // sub-object of the handler may be the true owner of the memory associated
    // with the handler. Consequently, a local copy of the handler is required
    // to ensure that any owning sub-object remains valid until after we have
    // deallocated the memory here.
    detail::binder2<Handler, asio::error_code, std::size_t>
      handler(o->handler_, o->ec_, o->bytes_transferred_);
    p.h = asio::detail::addressof(handler.handler_);
    p.reset();

    // Make the upcall if required.
    if (owner)
    {
      fenced_block b(fenced_block::half);
      ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
      w.complete(handler, handler.handler_);
      ASIO_HANDLER_INVOCATION_END;
    }
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
addq $0x58, %rax
movq %rax, -0x40(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rdx
movq %rdx, %rsi
addq $0x58, %rsi
addq $0xa0, %rdx
leaq -0x60(%rbp), %rdi
callq 0x1db40
movq -0x28(%rbp), %rcx
movq %rcx, %rsi
addq $0x58, %rsi
movq %rcx, %rdx
addq $0x18, %rdx
addq $0x28, %rcx
leaq -0xc0(%rbp), %rdi
callq 0x1db90
jmp 0x1d90e
leaq -0xc0(%rbp), %rax
movq %rax, -0x40(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x1dbf0
jmp 0x1d924
cmpq $0x0, -0x8(%rbp)
je 0x1d9a6
leaq -0xcd(%rbp), %rdi
xorl %esi, %esi
callq 0x11860
jmp 0x1d93b
leaq -0x60(%rbp), %rdi
leaq -0xc0(%rbp), %rdx
movq %rdx, %rsi
callq 0x1dc90
jmp 0x1d950
leaq -0xcd(%rbp), %rdi
callq 0x11240
jmp 0x1d9a6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x1d9d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x1d9cd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0xcd(%rbp), %rdi
callq 0x11240
jmp 0x1d9cd
leaq -0xc0(%rbp), %rdi
callq 0x1dce0
leaq -0x60(%rbp), %rdi
callq 0x1dd00
leaq -0x40(%rbp), %rdi
callq 0x1d640
addq $0xd0, %rsp
popq %rbp
retq
leaq -0xc0(%rbp), %rdi
callq 0x1dce0
leaq -0x60(%rbp), %rdi
callq 0x1dd00
leaq -0x40(%rbp), %rdi
callq 0x1d640
movq -0xc8(%rbp), %rdi
callq 0x6700
nopw (%rax,%rax)