// File: /workspace/github_cpp_makefile_star2_O3/oknenavin[P]cxon/test/../src/cxon/lang/common/cio/char.hxx
// Function: std::enable_if<cxon::JSON<cxon::cio::str::raw_traits<cxon::json::format_traits>>::validate_string_encoding, char32_t>::type cxon::cio::chr::imp::utf8_to_utf32_<cxon::JSON<cxon::cio::str::raw_traits<cxon::json::format_traits>>, std::istreambuf_iterator<char, std::char_traits<char>>, cxon::context<cxon::JSON<cxon::json::format_traits>>>(std::istreambuf_iterator<char, std::char_traits<char>>&, std::istreambuf_iterator<char, std::char_traits<char>>, cxon::context<cxon::JSON<cxon::json::format_traits>>&)
inline auto utf8_to_utf32_(II& i, II e, Cx& cx)
                    -> enable_if_t< X::validate_string_encoding, char32_t>
                {   static_assert(is_char_8<typename std::iterator_traits<II>::value_type>::value, "unexpected");
                    CXON_ASSERT(i != e, "unexpected");
                    char32_t const  c0 = (unsigned char)*i;
                    char32_t        c1, c2, c3;
                    if (c0 <= 0x7F)
                        return ++i, c0;
                    if (c0 >= 0xC2 && c0 <= 0xDF) {
                        c1 = head_(i, e);       CXON_EXPECT(c1 >= 0x80 && c1 <= 0xBF);
                        return ++i, ((c0 & 0x1F) << 6) | (c1 & 0x3F);
                    }
                    if (c0 == 0xE0) {
                        c1 = head_(i, e);       CXON_EXPECT(c1 >= 0xA0 && c1 <= 0xBF);
                        c2 = tail_(i, e);       CXON_EXPECT(c2 >= 0x80 && c2 <= 0xBF);
                        return ++i, ((c0 & 0x0F) << 12) | ((c1 & 0x3F) << 6) | (c2 & 0x3F);
                    }
                    if (c0 >= 0xE1 && c0 <= 0xEC) {
                        c1 = head_(i, e);       CXON_EXPECT(c1 >= 0x80 && c1 <= 0xBF);
                        c2 = tail_(i, e);       CXON_EXPECT(c2 >= 0x80 && c2 <= 0xBF);
                        return ++i, ((c0 & 0x0F) << 12) | ((c1 & 0x3F) << 6) | (c2 & 0x3F);
                    }
                    if (c0 == 0xED) {
                        c1 = head_(i, e);       CXON_EXPECT(c1 >= 0x80 && c1 <= 0x9F);
                        c2 = tail_(i, e);       CXON_EXPECT(c2 >= 0x80 && c2 <= 0xBF);
                        return ++i, ((c0 & 0x0F) << 12) | ((c1 & 0x3F) << 6) | (c2 & 0x3F);
                    }
                    if (c0 >= 0xEE && c0 <= 0xEF) {
                        c1 = head_(i, e);       CXON_EXPECT(c1 >= 0x80 && c1 <= 0xBF);
                        c2 = tail_(i, e);       CXON_EXPECT(c2 >= 0x80 && c2 <= 0xBF);
                        return ++i, ((c0 & 0x0F) << 12) | ((c1 & 0x3F) << 6) | (c2 & 0x3F);
                    }
                    if (c0 == 0xF0) {
                        c1 = head_(i, e);       CXON_EXPECT(c1 >= 0x90 && c1 <= 0xBF);
                        c2 = tail_(i, e);       CXON_EXPECT(c2 >= 0x80 && c2 <= 0xBF);
                        c3 = tail_(i, e);       CXON_EXPECT(c3 >= 0x80 && c3 <= 0xBF);
                        return ++i, ((c0 & 0x07) << 18) | ((c1 & 0x3F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F);
                    }
                    if (c0 >= 0xF1 && c0 <= 0xF3) {
                        c1 = head_(i, e);       CXON_EXPECT(c1 >= 0x80 && c1 <= 0xBF);
                        c2 = tail_(i, e);       CXON_EXPECT(c2 >= 0x80 && c2 <= 0xBF);
                        c3 = tail_(i, e);       CXON_EXPECT(c3 >= 0x80 && c3 <= 0xBF);
                        return ++i, ((c0 & 0x07) << 18) | ((c1 & 0x3F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F);
                    }
                    if (c0 == 0xF4) {
                        c1 = head_(i, e);       CXON_EXPECT(c1 >= 0x80 && c1 <= 0x8F);
                        c2 = tail_(i, e);       CXON_EXPECT(c2 >= 0x80 && c2 <= 0xBF);
                        c3 = tail_(i, e);       CXON_EXPECT(c3 >= 0x80 && c3 <= 0xBF);
                        return ++i, ((c0 & 0x07) << 18) | ((c1 & 0x3F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F);
                    }
                    CXON_EXPECT(false);
                }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %r14
movl %edx, %r15d
movq %rsi, %r12
movq %rdi, %rbx
callq 0x9cb2
testq %r12, %r12
setne %al
cmpl $-0x1, %r15d
sete %cl
andb %al, %cl
cmpb $0x1, %cl
jne 0x1005c
movq 0x10(%r12), %rax
cmpq 0x18(%r12), %rax
jae 0x10435
movq %rbx, %rdi
callq 0x9cb2
movzbl %al, %ebp
testb %bpl, %bpl
js 0x10090
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0x1042a
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
jmp 0x10419
leal 0x3e(%rax), %ecx
cmpb $0x1d, %cl
ja 0x100e5
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x1060c
cmpb $-0x40, %al
jge 0x10404
movl %eax, %r15d
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0x1044d
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
andl $0x1f, %ebp
shll $0x6, %ebp
andb $0x3f, %r15b
movzbl %r15b, %eax
orl %eax, %ebp
jmp 0x10419
cmpb $-0x20, %al
jne 0x10150
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x1060c
movl %eax, %ebp
andb $-0x20, %al
cmpb $-0x60, %al
jne 0x10404
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x1049a
cmpb $-0x40, %al
jge 0x10404
movl %eax, %r15d
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0x10458
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
andb $0x3f, %bpl
movzbl %bpl, %eax
shll $0x6, %eax
andb $0x3f, %r15b
movzbl %r15b, %ebp
jmp 0x100de
leal 0x1f(%rax), %ecx
cmpb $0xb, %cl
ja 0x101cb
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x1060c
cmpb $-0x40, %al
jge 0x10404
movl %eax, %r13d
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x1049a
cmpb $-0x40, %al
jge 0x10404
movl %eax, %r15d
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0x10463
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
shll $0xc, %ebp
movzwl %bp, %eax
andb $0x3f, %r13b
movzbl %r13b, %ecx
shll $0x6, %ecx
orl %eax, %ecx
andb $0x3f, %r15b
movzbl %r15b, %ebp
orl %ecx, %ebp
jmp 0x10419
cmpb $-0x13, %al
jne 0x10240
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x1060c
cmpb $-0x60, %al
jge 0x10404
movl %eax, %ebp
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x1049a
cmpb $-0x40, %al
jge 0x10404
movl %eax, %r15d
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0x1046e
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
andb $0x1f, %bpl
movzbl %bpl, %eax
shll $0x6, %eax
andb $0x3f, %r15b
movzbl %r15b, %ecx
leal (%rax,%rcx), %ebp
addl $0xd000, %ebp           # imm = 0xD000
jmp 0x10419
movl %eax, %ecx
andb $-0x2, %cl
cmpb $-0x12, %cl
je 0x10158
cmpb $-0x10, %al
jne 0x102db
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x1060c
movl %eax, %r13d
leal 0x70(%r13), %eax
cmpb $0x30, %al
jae 0x10404
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x1049a
cmpb $-0x40, %al
jge 0x10404
movl %eax, %ebp
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x1049a
cmpb $-0x40, %al
jge 0x10404
movl %eax, %r15d
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0x10479
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
andb $0x3f, %r13b
movzbl %r13b, %eax
shll $0xc, %eax
andb $0x3f, %bpl
movzbl %bpl, %ecx
jmp 0x101b7
leal 0xf(%rax), %ecx
cmpb $0x2, %cl
ja 0x10374
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x1060c
cmpb $-0x40, %al
jge 0x10404
movl %eax, %r13d
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x1049a
cmpb $-0x40, %al
jge 0x10404
movb %al, 0x7(%rsp)
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x1049a
cmpb $-0x40, %al
jge 0x10404
movl %eax, %r15d
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0x10484
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
andl $0x3, %ebp
shll $0x12, %ebp
andb $0x3f, %r13b
movzbl %r13b, %eax
shll $0xc, %eax
orl %ebp, %eax
movb 0x7(%rsp), %cl
andb $0x3f, %cl
movzbl %cl, %ecx
jmp 0x101b7
cmpb $-0xc, %al
jne 0x10404
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x1060c
cmpb $-0x70, %al
jge 0x10404
movl %eax, %ebp
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x1049a
cmpb $-0x40, %al
jge 0x10404
movl %eax, %r13d
movq %rbx, %rdi
movq %r12, %rsi
movl %r15d, %edx
callq 0x1049a
cmpb $-0x40, %al
jge 0x10404
movl %eax, %r15d
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0x1048f
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
andb $0xf, %bpl
movzbl %bpl, %eax
shll $0xc, %eax
andb $0x3f, %r13b
movzbl %r13b, %ecx
shll $0x6, %ecx
orl %eax, %ecx
andb $0x3f, %r15b
movzbl %r15b, %eax
leal (%rax,%rcx), %ebp
addl $0x100000, %ebp         # imm = 0x100000
jmp 0x10419
callq 0xdf1e
movl $0x2, (%r14)
movq %rax, 0x8(%r14)
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0x10084
movq (%r12), %rax
movq %r12, %rdi
callq *0x48(%rax)
xorl %ecx, %ecx
cmpl $-0x1, %eax
cmoveq %rcx, %r12
jmp 0x1005c
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0x100c9
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0x10134
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0x101a2
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0x10218
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0x102bc
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0x1034b
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0x103d2