// File: nvanbenschoten[P]total-order-multicast/include/args.h
// Function: args::Wrap(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, unsigned long, unsigned long)
std::vector<std::string> Wrap(const std::string &in,
                              const std::string::size_type width,
                              std::string::size_type firstlinewidth = 0) {
  // Preserve existing line breaks
  const auto newlineloc = in.find('\n');
  if (newlineloc != in.npos) {
    auto first = Wrap(std::string(in, 0, newlineloc), width);
    auto second = Wrap(std::string(in, newlineloc + 1), width);
    first.insert(std::end(first), std::make_move_iterator(std::begin(second)),
                 std::make_move_iterator(std::end(second)));
    return first;
  }
  if (firstlinewidth == 0) {
    firstlinewidth = width;
  }
  auto currentwidth = firstlinewidth;

  std::istringstream stream(in);
  std::vector<std::string> output;
  std::ostringstream line;
  std::string::size_type linesize = 0;
  while (stream) {
    std::string item;
    stream >> item;
    auto itemsize = Glyphs(item);
    if ((linesize + 1 + itemsize) > currentwidth) {
      if (linesize > 0) {
        output.push_back(line.str());
        line.str(std::string());
        linesize = 0;
        currentwidth = width;
      }
    }
    if (itemsize > 0) {
      if (linesize) {
        ++linesize;
        line << " ";
      }
      line << item;
      linesize += itemsize;
    }
  }
  if (linesize > 0) {
    output.push_back(line.str());
  }
  return output;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4f0, %rsp            # imm = 0x4F0
movq %rdi, -0x480(%rbp)
movq %rdi, %rax
movq %rax, -0x478(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x10(%rbp), %rdi
movl $0xa, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x65b0
movq %rax, -0x28(%rbp)
cmpq $-0x1, -0x28(%rbp)
je 0x15c9e
movb $0x0, -0x29(%rbp)
movq -0x10(%rbp), %rsi
movq -0x28(%rbp), %rcx
xorl %eax, %eax
movl %eax, %edx
movq %rdx, -0x488(%rbp)
leaq -0x50(%rbp), %rdi
movq %rdi, -0x490(%rbp)
callq 0x65f0
movq -0x480(%rbp), %rdi
movq -0x490(%rbp), %rsi
movq -0x488(%rbp), %rcx
movq -0x18(%rbp), %rdx
callq 0x159f0
jmp 0x15a84
leaq -0x50(%rbp), %rdi
callq 0x68c8
movq -0x10(%rbp), %rax
movq %rax, -0x4a8(%rbp)
movq -0x28(%rbp), %rax
incq %rax
movq %rax, -0x4a0(%rbp)
leaq -0x99(%rbp), %rdi
movq %rdi, -0x498(%rbp)
callq 0x67b0
movq -0x4a8(%rbp), %rsi
movq -0x4a0(%rbp), %rdx
movq -0x498(%rbp), %rcx
leaq -0x98(%rbp), %rdi
callq 0x6030
jmp 0x15adc
movq -0x18(%rbp), %rdx
xorl %eax, %eax
movl %eax, %ecx
leaq -0x78(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x159f0
jmp 0x15af6
leaq -0x98(%rbp), %rdi
callq 0x68c8
leaq -0x99(%rbp), %rdi
callq 0x6490
movq -0x480(%rbp), %rdi
callq 0x18810
movq %rax, -0x4b0(%rbp)
jmp 0x15b23
movq -0x4b0(%rbp), %rax
movq %rax, -0xb0(%rbp)
leaq -0xa8(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x18840
leaq -0x78(%rbp), %rdi
callq 0x188b0
movq %rax, -0x4b8(%rbp)
jmp 0x15b56
movq -0x4b8(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq -0xc0(%rbp), %rdi
callq 0x18880
movq %rax, -0x4c0(%rbp)
jmp 0x15b79
movq -0x4c0(%rbp), %rax
movq %rax, -0xb8(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x18810
movq %rax, -0x4c8(%rbp)
jmp 0x15b99
movq -0x4c8(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rdi
callq 0x18880
movq %rax, -0x4d0(%rbp)
jmp 0x15bbc
movq -0x480(%rbp), %rdi
movq -0x4d0(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0xa8(%rbp), %rsi
movq -0xb8(%rbp), %rdx
movq -0xc8(%rbp), %rcx
callq 0x18760
movq %rax, -0x4d8(%rbp)
jmp 0x15bf4
movq -0x4d8(%rbp), %rax
movq %rax, -0xd8(%rbp)
movb $0x1, -0x29(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x188e0
testb $0x1, -0x29(%rbp)
jne 0x15c88
jmp 0x15c7c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x68c8
jmp 0x15fcf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x15c57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x68c8
leaq -0x99(%rbp), %rdi
callq 0x6490
jmp 0x15c8d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x188e0
jmp 0x15c8d
movq -0x480(%rbp), %rdi
callq 0x188e0
jmp 0x15fbf
movq -0x480(%rbp), %rdi
callq 0x188e0
jmp 0x15fcf
cmpq $0x0, -0x20(%rbp)
jne 0x15cad
movq -0x18(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x260(%rbp), %rdi
movl $0x8, %edx
callq 0x6730
movq -0x480(%rbp), %rdi
movb $0x0, -0x261(%rbp)
callq 0x18940
leaq -0x3e0(%rbp), %rdi
callq 0x65e0
jmp 0x15cee
movq $0x0, -0x3e8(%rbp)
movq -0x260(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x260(%rbp,%rax), %rdi
callq 0x6560
movb %al, -0x4d9(%rbp)
jmp 0x15d19
movb -0x4d9(%rbp), %al
testb $0x1, %al
jne 0x15d28
jmp 0x15f03
leaq -0x408(%rbp), %rdi
movq %rdi, -0x4e8(%rbp)
callq 0x6610
movq -0x4e8(%rbp), %rsi
leaq -0x260(%rbp), %rdi
callq 0x6580
jmp 0x15d50
leaq -0x408(%rbp), %rdi
callq 0x15960
movq %rax, -0x410(%rbp)
movq -0x3e8(%rbp), %rax
addq $0x1, %rax
addq -0x410(%rbp), %rax
cmpq -0xe0(%rbp), %rax
jbe 0x15e7e
cmpq $0x0, -0x3e8(%rbp)
jbe 0x15e7c
leaq -0x430(%rbp), %rdi
leaq -0x3e0(%rbp), %rsi
callq 0x6440
jmp 0x15da5
movq -0x480(%rbp), %rdi
leaq -0x430(%rbp), %rsi
callq 0x18960
jmp 0x15dba
leaq -0x430(%rbp), %rdi
callq 0x68c8
leaq -0x450(%rbp), %rdi
movq %rdi, -0x4f0(%rbp)
callq 0x6610
movq -0x4f0(%rbp), %rsi
leaq -0x3e0(%rbp), %rdi
callq 0x61f0
jmp 0x15dee
leaq -0x450(%rbp), %rdi
callq 0x68c8
movq $0x0, -0x3e8(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0xe0(%rbp)
jmp 0x15e7c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x15fa5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x15f7d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x15ef5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x430(%rbp), %rdi
callq 0x68c8
jmp 0x15ef5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x450(%rbp), %rdi
callq 0x68c8
jmp 0x15ef5
jmp 0x15e7e
cmpq $0x0, -0x410(%rbp)
jbe 0x15ee4
cmpq $0x0, -0x3e8(%rbp)
je 0x15eba
movq -0x3e8(%rbp), %rax
incq %rax
movq %rax, -0x3e8(%rbp)
leaq 0x19dc7(%rip), %rsi     # 0x2fc71
leaq -0x3e0(%rbp), %rdi
callq 0x6410
jmp 0x15eb8
jmp 0x15eba
leaq -0x3e0(%rbp), %rdi
leaq -0x408(%rbp), %rsi
callq 0x63d0
jmp 0x15ecf
movq -0x410(%rbp), %rax
addq -0x3e8(%rbp), %rax
movq %rax, -0x3e8(%rbp)
leaq -0x408(%rbp), %rdi
callq 0x68c8
jmp 0x15cf9
leaq -0x408(%rbp), %rdi
callq 0x68c8
jmp 0x15f7d
cmpq $0x0, -0x3e8(%rbp)
jbe 0x15f5f
leaq -0x470(%rbp), %rdi
leaq -0x3e0(%rbp), %rsi
callq 0x6440
jmp 0x15f22
movq -0x480(%rbp), %rdi
leaq -0x470(%rbp), %rsi
callq 0x18960
jmp 0x15f37
leaq -0x470(%rbp), %rdi
callq 0x68c8
jmp 0x15f5f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x470(%rbp), %rdi
callq 0x68c8
jmp 0x15f7d
movb $0x1, -0x261(%rbp)
leaq -0x3e0(%rbp), %rdi
callq 0x60f0
testb $0x1, -0x261(%rbp)
jne 0x15f97
jmp 0x15f8b
leaq -0x3e0(%rbp), %rdi
callq 0x60f0
jmp 0x15fa5
movq -0x480(%rbp), %rdi
callq 0x188e0
leaq -0x260(%rbp), %rdi
callq 0x6220
jmp 0x15fbf
movq -0x480(%rbp), %rdi
callq 0x188e0
leaq -0x260(%rbp), %rdi
callq 0x6220
jmp 0x15fcf
movq -0x478(%rbp), %rax
addq $0x4f0, %rsp            # imm = 0x4F0
popq %rbp
retq
movq -0x58(%rbp), %rdi
callq 0x67a0
nopl (%rax,%rax)