// File: thierry7100[P]CutOptim/include/cxxopts.hpp
// Function: void cxxopts::values::integer_parser<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, int&)
void
    integer_parser(const std::string& text, T& value)
    {
      std::smatch match;
      std::regex_match(text, match, integer_pattern);

      if (match.length() == 0)
      {
        throw argument_incorrect_type(text);
      }

      if (match.length(4) > 0)
      {
        value = 0;
        return;
      }

      using US = typename std::make_unsigned<T>::type;

      constexpr auto umax = (std::numeric_limits<US>::max)();
      constexpr bool is_signed = std::numeric_limits<T>::is_signed;
      const bool negative = match.length(1) > 0;
      const uint8_t base = match.length(2) > 0 ? 16 : 10;

      auto value_match = match[3];

      US result = 0;

      for (auto iter = value_match.first; iter != value_match.second; ++iter)
      {
        US digit = 0;

        if (*iter >= '0' && *iter <= '9')
        {
          digit = *iter - '0';
        }
        else if (base == 16 && *iter >= 'a' && *iter <= 'f')
        {
          digit = *iter - 'a' + 10;
        }
        else if (base == 16 && *iter >= 'A' && *iter <= 'F')
        {
          digit = *iter - 'A' + 10;
        }
        else
        {
          throw argument_incorrect_type(text);
        }

        if (umax - digit < result * base)
        {
          throw argument_incorrect_type(text);
        }

        result = result * base + digit;
      }

      detail::check_signed_range<T>(negative, result, text);

      if (negative)
      {
        value = checked_negate<T>(result,
          text,
          std::integral_constant<bool, is_signed>());
      }
      else
      {
        value = result;
      }
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq -0x30(%rbp), %rdi
movq %rdi, -0x80(%rbp)
callq 0x4df40
movq -0x80(%rbp), %rsi
movq -0x8(%rbp), %rdi
leaq 0x5f831(%rip), %rdx     # 0xb8a60
xorl %ecx, %ecx
callq 0x4df80
jmp 0x59238
xorl %eax, %eax
movl %eax, %esi
leaq -0x30(%rbp), %rdi
callq 0x595f0
movq %rax, -0x88(%rbp)
jmp 0x5924e
movq -0x88(%rbp), %rax
cmpq $0x0, %rax
jne 0x592ca
movl $0x28, %edi
callq 0x92a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x90(%rbp)
movq -0x8(%rbp), %rsi
callq 0x4e010
jmp 0x5927d
movq -0x90(%rbp), %rdi
leaq 0x5e61d(%rip), %rsi     # 0xb78a8
leaq -0xb122(%rip), %rdx     # 0x4e170
callq 0x9900
jmp 0x595ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x595db
movq -0x90(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
callq 0x9410
jmp 0x595db
leaq -0x30(%rbp), %rdi
movl $0x4, %esi
callq 0x595f0
movq %rax, -0x98(%rbp)
jmp 0x592e1
movq -0x98(%rbp), %rax
cmpq $0x0, %rax
jle 0x59304
movq -0x10(%rbp), %rax
movl $0x0, (%rax)
movl $0x1, -0x40(%rbp)
jmp 0x595c9
movl $0xffffffff, -0x44(%rbp) # imm = 0xFFFFFFFF
movb $0x1, -0x45(%rbp)
leaq -0x30(%rbp), %rdi
movl $0x1, %esi
callq 0x595f0
movq %rax, -0xa0(%rbp)
jmp 0x59326
movq -0xa0(%rbp), %rax
testq %rax, %rax
setg -0x46(%rbp)
leaq -0x30(%rbp), %rdi
movl $0x2, %esi
callq 0x595f0
movq %rax, -0xa8(%rbp)
jmp 0x5934b
movq -0xa8(%rbp), %rax
testq %rax, %rax
movl $0x10, %ecx
movl $0xa, %eax
cmovgl %ecx, %eax
movb %al, -0x47(%rbp)
leaq -0x30(%rbp), %rdi
movl $0x3, %esi
callq 0x59620
movq %rax, -0xb0(%rbp)
jmp 0x5937c
movq -0xb0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x60(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x58(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0x50(%rbp)
movl $0x0, -0x64(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0x70(%rbp)
leaq -0x60(%rbp), %rsi
addq $0x8, %rsi
leaq -0x70(%rbp), %rdi
callq 0x52570
testb $0x1, %al
jne 0x593c3
jmp 0x5957b
movl $0x0, -0x74(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x528b0
movsbl (%rax), %eax
cmpl $0x30, %eax
jl 0x59403
leaq -0x70(%rbp), %rdi
callq 0x528b0
movsbl (%rax), %eax
cmpl $0x39, %eax
jg 0x59403
leaq -0x70(%rbp), %rdi
callq 0x528b0
movsbl (%rax), %eax
subl $0x30, %eax
movl %eax, -0x74(%rbp)
jmp 0x594ec
movzbl -0x47(%rbp), %eax
cmpl $0x10, %eax
jne 0x59448
leaq -0x70(%rbp), %rdi
callq 0x528b0
movsbl (%rax), %eax
cmpl $0x61, %eax
jl 0x59448
leaq -0x70(%rbp), %rdi
callq 0x528b0
movsbl (%rax), %eax
cmpl $0x66, %eax
jg 0x59448
leaq -0x70(%rbp), %rdi
callq 0x528b0
movsbl (%rax), %eax
subl $0x61, %eax
addl $0xa, %eax
movl %eax, -0x74(%rbp)
jmp 0x594ea
movzbl -0x47(%rbp), %eax
cmpl $0x10, %eax
jne 0x5948a
leaq -0x70(%rbp), %rdi
callq 0x528b0
movsbl (%rax), %eax
cmpl $0x41, %eax
jl 0x5948a
leaq -0x70(%rbp), %rdi
callq 0x528b0
movsbl (%rax), %eax
cmpl $0x46, %eax
jg 0x5948a
leaq -0x70(%rbp), %rdi
callq 0x528b0
movsbl (%rax), %eax
subl $0x41, %eax
addl $0xa, %eax
movl %eax, -0x74(%rbp)
jmp 0x594e8
movl $0x28, %edi
callq 0x92a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xb8(%rbp)
movq -0x8(%rbp), %rsi
callq 0x4e010
jmp 0x594ac
movq -0xb8(%rbp), %rdi
leaq 0x5e3ee(%rip), %rsi     # 0xb78a8
leaq -0xb351(%rip), %rdx     # 0x4e170
callq 0x9900
jmp 0x595ed
movq -0xb8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
callq 0x9410
jmp 0x595db
jmp 0x594ea
jmp 0x594ec
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
subl -0x74(%rbp), %eax
movl -0x64(%rbp), %ecx
movzbl -0x47(%rbp), %edx
imull %edx, %ecx
cmpl %ecx, %eax
jae 0x5955d
movl $0x28, %edi
callq 0x92a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xc0(%rbp)
movq -0x8(%rbp), %rsi
callq 0x4e010
jmp 0x59524
movq -0xc0(%rbp), %rdi
leaq 0x5e376(%rip), %rsi     # 0xb78a8
leaq -0xb3c9(%rip), %rdx     # 0x4e170
callq 0x9900
jmp 0x595ed
movq -0xc0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
callq 0x9410
jmp 0x595db
movl -0x64(%rbp), %eax
movzbl -0x47(%rbp), %ecx
imull %ecx, %eax
addl -0x74(%rbp), %eax
movl %eax, -0x64(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x50ad0
jmp 0x593a9
movl -0x64(%rbp), %esi
movq -0x8(%rbp), %rdx
movzbl -0x46(%rbp), %edi
andl $0x1, %edi
callq 0x59690
jmp 0x59590
testb $0x1, -0x46(%rbp)
je 0x595b9
movq -0x8(%rbp), %rsi
leaq -0x64(%rbp), %rdi
callq 0x596d0
movl %eax, -0xc4(%rbp)
jmp 0x595ab
movl -0xc4(%rbp), %ecx
movq -0x10(%rbp), %rax
movl %ecx, (%rax)
jmp 0x595c2
movl -0x64(%rbp), %ecx
movq -0x10(%rbp), %rax
movl %ecx, (%rax)
movl $0x0, -0x40(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x4e190
addq $0xd0, %rsp
popq %rbp
retq
leaq -0x30(%rbp), %rdi
callq 0x4e190
movq -0x38(%rbp), %rdi
callq 0x9960
nopl (%rax)