// File: /workspace/github_cpp_makefile_star2_O1/yhirose[P]fizzbuzzlang/./peglib.h
// Function: peg::ErrorInfo::output_log(std::function<void (unsigned long, unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)> const&, char const*, unsigned long)
inline void ErrorInfo::output_log(const Log &log, const char *s, size_t n) {
  if (message_pos) {
    if (message_pos > last_output_pos) {
      last_output_pos = message_pos;
      auto line = line_info(s, message_pos);
      std::string msg;
      if (auto unexpected_token = heuristic_error_token(s, n, message_pos);
          !unexpected_token.empty()) {
        msg = replace_all(message, "%t", unexpected_token);

        auto unexpected_char = unexpected_token.substr(
            0,
            codepoint_length(unexpected_token.data(), unexpected_token.size()));

        msg = replace_all(msg, "%c", unexpected_char);
      } else {
        msg = message;
      }
      log(line.first, line.second, msg, label);
    }
  } else if (error_pos) {
    if (error_pos > last_output_pos) {
      last_output_pos = error_pos;
      auto line = line_info(s, error_pos);

      std::string msg;
      if (expected_tokens.empty()) {
        msg = "syntax error.";
      } else {
        msg = "syntax error";

        // unexpected token
        if (auto unexpected_token = heuristic_error_token(s, n, error_pos);
            !unexpected_token.empty()) {
          msg += ", unexpected '";
          msg += unexpected_token;
          msg += "'";
        }

        auto first_item = true;
        size_t i = 0;
        while (i < expected_tokens.size()) {
          auto [error_literal, error_rule] = expected_tokens[i];

          // Skip rules start with '_'
          if (!(error_rule && error_rule->name[0] == '_')) {
            msg += (first_item ? ", expecting " : ", ");
            if (error_literal) {
              msg += "'";
              msg += error_literal;
              msg += "'";
            } else {
              msg += "<" + error_rule->name + ">";
              if (label.empty()) { label = error_rule->name; }
            }
            first_item = false;
          }

          i++;
        }
        msg += ".";
      }
      log(line.first, line.second, msg, label);
    }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
movq %rcx, %r15
movq %rdx, %r12
movq %rsi, %rbx
movq %rdi, %r14
movq 0x20(%rdi), %r8
testq %r8, %r8
movq %rdi, -0x50(%rbp)
je 0xd478
cmpq 0x68(%r14), %r8
jbe 0xd9fc
movq %r8, 0x68(%r14)
movl $0x1, %r13d
movq %r8, %rdx
movl $0x1, %esi
movq %r12, %rcx
movq %r12, %rax
subq %r12, %rdx
jbe 0xd2b4
movl $0x1, %ecx
movq %r12, %rax
movq %r12, %rsi
xorl %edi, %edi
cmpb $0xa, (%rsi)
leaq 0x1(%rsi), %r9
cmoveq %r9, %rax
sete %dil
addl %edi, %ecx
movq %r9, %rsi
cmpq %r8, %r9
jne 0xd291
addq %r12, %rdx
movl %ecx, %esi
movq %rdx, %rcx
movq %rsi, -0x78(%rbp)
subq %rax, %rcx
je 0xd347
movl $0x1, %r13d
xorl %edx, %edx
movzbl (%rax,%rdx), %esi
movl $0x1, %r9d
testb %sil, %sil
jns 0xd338
movq %rcx, %rdi
subq %rdx, %rdi
cmpq $0x1, %rdi
je 0xd2fa
movl %esi, %r10d
andl $-0x20, %r10d
movl $0x2, %r9d
cmpl $0xc0, %r10d
je 0xd338
cmpq $0x3, %rdi
jb 0xd316
movl %esi, %r10d
andl $-0x10, %r10d
movl $0x3, %r9d
cmpl $0xe0, %r10d
je 0xd338
andl $-0x8, %esi
xorl %r10d, %r10d
cmpl $0xf0, %esi
sete %r10b
shll $0x2, %r10d
cmpq $0x4, %rdi
movl $0x0, %r9d
cmovaeq %r10, %r9
cmpq $0x1, %r9
adcq %r9, %rdx
incq %r13
cmpq %rcx, %rdx
jb 0xd2c9
movq %rbx, -0xa0(%rbp)
leaq -0x60(%rbp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq -0x48(%rbp), %rdi
movq %r14, %rsi
movq %r12, %rdx
movq %r15, %rcx
callq 0x13fd4
cmpq $0x0, -0x40(%rbp)
je 0xd7c7
movq %r14, %rax
leaq -0x120(%rbp), %r14
movq %r14, -0x10(%r14)
movq 0x28(%rax), %rsi
movq 0x30(%rax), %rdx
addq %rsi, %rdx
leaq -0x130(%rbp), %rdi
callq 0x14292
leaq -0xb8(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x37389(%rip), %rsi     # 0x4473f
leaq 0x37384(%rip), %rdx     # 0x44741
leaq -0xc8(%rbp), %rdi
callq 0x12846
leaq -0x98(%rbp), %rdi
leaq -0x130(%rbp), %rdx
leaq -0xc8(%rbp), %rcx
leaq -0x48(%rbp), %r8
movq -0x50(%rbp), %rsi
callq 0x14106
leaq -0x70(%rbp), %rdi
leaq -0x98(%rbp), %rbx
movq %rbx, %rsi
callq 0x9330
movq (%rbx), %rdi
leaq -0x88(%rbp), %rax
cmpq %rax, %rdi
je 0xd41c
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x92b0
movq -0xc8(%rbp), %rdi
cmpq %r12, %rdi
je 0xd437
movq -0xb8(%rbp), %rsi
incq %rsi
callq 0x92b0
movq -0x130(%rbp), %rdi
cmpq %r14, %rdi
je 0xd452
movq -0x120(%rbp), %rsi
incq %rsi
callq 0x92b0
movq -0x40(%rbp), %rax
testq %rax, %rax
je 0xd88b
movq -0x48(%rbp), %rcx
movzbl (%rcx), %ecx
testb %cl, %cl
js 0xd7e0
movl $0x1, %ecx
jmp 0xd885
movq (%r14), %rdx
testq %rdx, %rdx
je 0xd9fc
cmpq 0x68(%r14), %rdx
jbe 0xd9fc
movq %rdx, 0x68(%r14)
movl $0x1, %eax
movq %rax, -0x78(%rbp)
movq %rdx, %rsi
movq %rax, -0xa8(%rbp)
movq %r12, %rcx
movq %r12, %rax
subq %r12, %rsi
jbe 0xd4e7
movl $0x1, %ecx
movq %r12, %rax
movq %r12, %rdi
xorl %r8d, %r8d
cmpb $0xa, (%rdi)
leaq 0x1(%rdi), %r9
cmoveq %r9, %rax
sete %r8b
addl %r8d, %ecx
movq %r9, %rdi
cmpq %rdx, %r9
jne 0xd4bb
addq %r12, %rsi
movl %ecx, %ecx
movq %rcx, -0xa8(%rbp)
movq %rsi, %rcx
subq %rax, %rcx
je 0xd57a
movl $0x1, %edx
movq %rdx, -0x78(%rbp)
xorl %edx, %edx
movzbl (%rax,%rdx), %esi
movl $0x1, %r8d
testb %sil, %sil
jns 0xd56a
movq %rcx, %rdi
subq %rdx, %rdi
cmpq $0x1, %rdi
je 0xd52c
movl %esi, %r9d
andl $-0x20, %r9d
movl $0x2, %r8d
cmpl $0xc0, %r9d
je 0xd56a
cmpq $0x3, %rdi
jb 0xd548
movl %esi, %r9d
andl $-0x10, %r9d
movl $0x3, %r8d
cmpl $0xe0, %r9d
je 0xd56a
andl $-0x8, %esi
xorl %r9d, %r9d
cmpl $0xf0, %esi
sete %r9b
shll $0x2, %r9d
cmpq $0x4, %rdi
movl $0x0, %r8d
cmovaeq %r9, %r8
cmpq $0x1, %r8
adcq %r8, %rdx
incq -0x78(%rbp)
cmpq %rcx, %rdx
jb 0xd4fb
leaq -0x60(%rbp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
movq 0x8(%r14), %rax
cmpq 0x10(%r14), %rax
je 0xd805
leaq 0x371b1(%rip), %rcx     # 0x44753
leaq -0x70(%rbp), %rdi
movl $0xc, %r8d
xorl %esi, %esi
xorl %edx, %edx
callq 0x93b0
movq (%r14), %r8
leaq -0x48(%rbp), %rdi
movq %r14, %rsi
movq %r12, %rdx
movq %r15, %rcx
callq 0x13fd4
cmpq $0x0, -0x40(%rbp)
je 0xd602
leaq 0x37188(%rip), %rsi     # 0x44760
leaq -0x70(%rbp), %rdi
callq 0x9480
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
leaq -0x70(%rbp), %rdi
callq 0x90d0
leaq 0x37174(%rip), %rsi     # 0x4476d
leaq -0x70(%rbp), %rdi
callq 0x9480
movq %rbx, -0xa0(%rbp)
leaq -0x38(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xd622
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x92b0
movq 0x8(%r14), %rcx
cmpq %rcx, 0x10(%r14)
je 0xd7aa
movq -0x50(%rbp), %rax
addq $0x48, %rax
movq %rax, -0xd0(%rbp)
movb $0x1, %al
movl $0x8, %r12d
xorl %r14d, %r14d
leaq -0x70(%rbp), %rbx
movq -0x8(%rcx,%r12), %r13
movq (%rcx,%r12), %r15
testq %r15, %r15
je 0xd668
movq (%r15), %rcx
cmpb $0x5f, (%rcx)
je 0xd787
testb $0x1, %al
leaq 0x3710b(%rip), %rsi     # 0x4477c
leaq 0x370f7(%rip), %rax     # 0x4476f
cmovneq %rax, %rsi
movq %rbx, %rdi
callq 0x9480
testq %r13, %r13
je 0xd6b7
movq %rbx, %rdi
leaq 0x370da(%rip), %rsi     # 0x4476d
callq 0x9480
movq %rbx, %rdi
movq %r13, %rsi
callq 0x9480
movq %rbx, %rdi
leaq 0x370c0(%rip), %rsi     # 0x4476d
callq 0x9480
jmp 0xd785
leaq -0x98(%rbp), %r13
movq %r13, %rdi
leaq 0x370b7(%rip), %rsi     # 0x4477f
movq %r15, %rdx
callq 0xcdf6
movq %r13, %rdi
leaq 0x370a7(%rip), %rsi     # 0x44781
callq 0x9480
leaq -0x38(%rbp), %rsi
movq %rsi, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0xd703
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0xd709
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq %rbx, %rdi
callq 0x90d0
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0xd749
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x92b0
movq -0x98(%rbp), %rdi
leaq -0x88(%rbp), %rax
cmpq %rax, %rdi
je 0xd76b
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x92b0
movq -0x50(%rbp), %rax
cmpq $0x0, 0x50(%rax)
jne 0xd785
movq -0xd0(%rbp), %rdi
movq %r15, %rsi
callq 0x9170
xorl %eax, %eax
incq %r14
movq -0x50(%rbp), %rdx
movq 0x8(%rdx), %rcx
movq 0x10(%rdx), %rdx
subq %rcx, %rdx
sarq $0x4, %rdx
addq $0x10, %r12
cmpq %rdx, %r14
jb 0xd64e
leaq 0x376ad(%rip), %rsi     # 0x44e5e
leaq -0x70(%rbp), %rdi
callq 0x9480
movq -0xa0(%rbp), %rbx
movq -0x50(%rbp), %r14
jmp 0xd81f
leaq 0x28(%r14), %rsi
leaq -0x70(%rbp), %rdi
callq 0x9170
movq -0xa0(%rbp), %rbx
jmp 0xd998
movl %ecx, %edx
andl $-0x20, %edx
cmpl $0xc0, %edx
sete %dl
cmpq $0x1, %rax
setne %sil
testb %dl, %sil
je 0xd861
movl $0x2, %ecx
jmp 0xd885
leaq 0x36f39(%rip), %rcx     # 0x44745
leaq -0x70(%rbp), %rdi
movl $0xd, %r8d
xorl %esi, %esi
xorl %edx, %edx
callq 0x93b0
movq -0xa8(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x78(%rbp), %rax
movq %rax, -0x98(%rbp)
cmpq $0x0, 0x10(%rbx)
je 0xda32
addq $0x48, %r14
leaq -0x48(%rbp), %rsi
leaq -0x98(%rbp), %rdx
leaq -0x70(%rbp), %rcx
movq %rbx, %rdi
movq %r14, %r8
callq *0x18(%rbx)
jmp 0xd9e3
movl %ecx, %edx
andl $-0x10, %edx
cmpl $0xe0, %edx
sete %dl
cmpq $0x3, %rax
setae %sil
testb %dl, %sil
je 0xda0e
movl $0x3, %ecx
xorl %eax, %eax
testb %al, %al
je 0xd88d
xorl %ecx, %ecx
leaq -0x98(%rbp), %rdi
leaq -0x48(%rbp), %rsi
xorl %edx, %edx
callq 0x92d0
leaq -0x100(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rdx
addq %rsi, %rdx
leaq -0x110(%rbp), %rdi
callq 0x14292
leaq -0xe0(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x36e6f(%rip), %rsi     # 0x44742
leaq 0x36e6a(%rip), %rdx     # 0x44744
leaq -0xf0(%rbp), %rdi
callq 0x12846
leaq -0xc8(%rbp), %rdi
leaq -0x110(%rbp), %rdx
leaq -0xf0(%rbp), %rcx
leaq -0x98(%rbp), %r8
movq -0x50(%rbp), %rsi
callq 0x14106
leaq -0x70(%rbp), %rdi
leaq -0xc8(%rbp), %rbx
movq %rbx, %rsi
callq 0x9330
movq (%rbx), %rdi
cmpq %r12, %rdi
je 0xd935
movq -0xb8(%rbp), %rsi
incq %rsi
callq 0x92b0
movq -0xf0(%rbp), %rdi
cmpq %r15, %rdi
je 0xd950
movq -0xe0(%rbp), %rsi
incq %rsi
callq 0x92b0
movq -0x110(%rbp), %rdi
cmpq %r14, %rdi
leaq -0x88(%rbp), %rbx
je 0xd972
movq -0x100(%rbp), %rsi
incq %rsi
callq 0x92b0
movq -0x98(%rbp), %rdi
cmpq %rbx, %rdi
movq -0xa0(%rbp), %rbx
movq -0x50(%rbp), %r14
je 0xd998
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x92b0
leaq -0x38(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xd9b1
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x92b0
movq -0x78(%rbp), %rax
movq %rax, -0x48(%rbp)
movq %r13, -0x98(%rbp)
cmpq $0x0, 0x10(%rbx)
je 0xda2d
addq $0x48, %r14
leaq -0x48(%rbp), %rsi
leaq -0x98(%rbp), %rdx
leaq -0x70(%rbp), %rcx
movq %rbx, %rdi
movq %r14, %r8
callq *0x18(%rbx)
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0xd9fc
movq -0x60(%rbp), %rsi
incq %rsi
callq 0x92b0
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
andl $-0x8, %ecx
cmpl $0xf0, %ecx
setne %cl
cmpq $0x4, %rax
setb %al
orb %cl, %al
movl $0x4, %ecx
jmp 0xd887
callq 0x90f0
callq 0x90f0
jmp 0xdb4f
jmp 0xdb4f
jmp 0xdaec
jmp 0xdaec
movq %rax, %rbx
movq -0xf0(%rbp), %rdi
cmpq %r15, %rdi
je 0xda6e
movq -0xe0(%rbp), %rsi
incq %rsi
callq 0x92b0
jmp 0xda6e
movq %rax, %rbx
movq -0x110(%rbp), %rdi
cmpq %r14, %rdi
je 0xda8e
movq -0x100(%rbp), %rsi
incq %rsi
callq 0x92b0
jmp 0xda8e
movq %rax, %rbx
movq -0x98(%rbp), %rdi
leaq -0x88(%rbp), %rax
cmpq %rax, %rdi
je 0xdaef
movq -0x88(%rbp), %rsi
jmp 0xdae2
jmp 0xdaec
movq %rax, %rbx
movq -0xc8(%rbp), %rdi
cmpq %r12, %rdi
je 0xdacf
movq -0xb8(%rbp), %rsi
incq %rsi
callq 0x92b0
jmp 0xdacf
movq %rax, %rbx
movq -0x130(%rbp), %rdi
cmpq %r14, %rdi
je 0xdaef
movq -0x120(%rbp), %rsi
incq %rsi
callq 0x92b0
jmp 0xdaef
movq %rax, %rbx
leaq -0x38(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xdb52
movq -0x38(%rbp), %rsi
jmp 0xdb41
jmp 0xdb4f
jmp 0xdb4f
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0xdb27
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x92b0
jmp 0xdb27
movq %rax, %rbx
movq -0x98(%rbp), %rdi
leaq -0x88(%rbp), %rax
cmpq %rax, %rdi
je 0xdb52
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x92b0
jmp 0xdb52
jmp 0xdb4f
jmp 0xdb4f
movq %rax, %rbx
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0xdb6b
movq -0x60(%rbp), %rsi
incq %rsi
callq 0x92b0
movq %rbx, %rdi
callq 0x9420
nop