// File: /workspace/github_cpp_makefile_star2_O1/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
subq $0x18, %rsp
movq %rcx, %r13
movl %edx, %ebp
movq %rsi, %r15
movq %rdi, %rbx
callq 0x9bbc
testq %r15, %r15
setne %al
cmpl $-0x1, %ebp
sete %cl
andb %al, %cl
cmpb $0x1, %cl
jne 0xefe2
movq 0x10(%r15), %rax
cmpq 0x18(%r15), %rax
jae 0xf735
movq %rbx, %rdi
callq 0x9bbc
movzbl %al, %r12d
testb %r12b, %r12b
js 0xf017
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0xf72a
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
jmp 0xf5c6
leal 0x3e(%rax), %ecx
cmpb $0x1d, %cl
movq %r13, 0x10(%rsp)
ja 0xf098
cmpl $-0x1, %ebp
sete %r14b
movq %rbx, %rdi
callq 0x9bbc
testq %r15, %r15
setne %al
andb %r14b, %al
cmpb $0x1, %al
jne 0xf04e
movq 0x10(%r15), %rax
cmpq 0x18(%r15), %rax
jae 0xf76c
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0xf74c
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
movq (%rbx), %r14
testq %r14, %r14
je 0xf19a
movq 0x10(%r14), %rax
cmpq 0x18(%r14), %rax
jae 0xf757
xorl %r13d, %r13d
xorl %eax, %eax
testb %r13b, %r13b
cmovneq %rax, %r14
jmp 0xf19d
cmpb $-0x20, %al
jne 0xf116
cmpl $-0x1, %ebp
sete %r14b
movq %rbx, %rdi
callq 0x9bbc
testq %r15, %r15
setne %al
andb %r14b, %al
movq %r15, %r14
cmpb $0x1, %al
jne 0xf0cc
movq 0x10(%r15), %rax
movq %r15, %r14
cmpq 0x18(%r15), %rax
jae 0xf7cf
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0xf783
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
movq (%rbx), %r13
testq %r13, %r13
je 0xf2a8
movq 0x10(%r13), %rax
cmpq 0x18(%r13), %rax
jae 0xf7b9
xorl %r12d, %r12d
xorl %eax, %eax
testb %r12b, %r12b
cmovneq %rax, %r13
jmp 0xf2ab
leal 0x1f(%rax), %ecx
cmpb $0xb, %cl
ja 0xf226
cmpl $-0x1, %ebp
sete %r14b
movq %rbx, %rdi
callq 0x9bbc
testq %r15, %r15
setne %al
andb %r14b, %al
movq %r15, %r13
cmpb $0x1, %al
jne 0xf152
movq 0x10(%r15), %rax
movq %r15, %r13
cmpq 0x18(%r15), %rax
jae 0xf826
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0xf7e7
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
movq (%rbx), %r14
testq %r14, %r14
je 0xf3c1
movq 0x10(%r14), %rax
cmpq 0x18(%r14), %rax
jae 0xf812
xorl %edx, %edx
xorl %eax, %eax
testb %dl, %dl
cmovneq %rax, %r14
jmp 0xf3c3
movb $0x1, %r13b
cmpl $-0x1, %ebp
sete %al
testq %r15, %r15
setne %cl
andb %al, %cl
cmpb $0x1, %cl
jne 0xf1c1
movq 0x10(%r15), %rax
cmpq 0x18(%r15), %rax
jae 0xf78e
movzbl (%rax), %ebp
cmpl $-0x1, %ebp
setne %al
movb $-0x1, %bpl
testq %r14, %r14
je 0xf1e5
xorb %al, %r13b
jne 0xf1e5
movq 0x10(%r14), %rax
cmpq 0x18(%r14), %rax
jae 0xf7a9
movb (%rax), %bpl
cmpb $-0x40, %bpl
jge 0xf5ac
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0xf79e
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
andl $0x1f, %r12d
shll $0x6, %r12d
andb $0x3f, %bpl
movzbl %bpl, %eax
orl %eax, %r12d
jmp 0xf5c6
cmpb $-0x13, %al
jne 0xf350
cmpl $-0x1, %ebp
sete %r14b
movq %rbx, %rdi
callq 0x9bbc
testq %r15, %r15
setne %al
andb %r14b, %al
movq %r15, %r12
cmpb $0x1, %al
jne 0xf25e
movq 0x10(%r15), %rax
movq %r15, %r12
cmpq 0x18(%r15), %rax
jae 0xf88f
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0xf83e
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
movq (%rbx), %r14
testq %r14, %r14
je 0xf500
movq 0x10(%r14), %rax
cmpq 0x18(%r14), %rax
jae 0xf87a
xorl %r13d, %r13d
xorl %eax, %eax
testb %r13b, %r13b
cmovneq %rax, %r14
jmp 0xf503
movb $0x1, %r12b
cmpl $-0x1, %ebp
sete %al
testq %r14, %r14
setne %cl
andb %al, %cl
movl %ebp, %eax
cmpb $0x1, %cl
jne 0xf2d1
movq 0x10(%r14), %rax
cmpq 0x18(%r14), %rax
jae 0xf7f2
movzbl (%rax), %eax
cmpl $-0x1, %eax
setne %al
movb $-0x1, %r14b
testq %r13, %r13
je 0xf2f5
xorb %al, %r12b
jne 0xf2f5
movq 0x10(%r13), %rax
cmpq 0x18(%r13), %rax
jae 0xf800
movb (%rax), %r14b
movl %r14d, %eax
andb $-0x20, %al
cmpb $-0x60, %al
jne 0xf5ac
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0xfa0e
cmpb $-0x40, %al
jge 0xf5ac
movl %eax, %ebp
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0xf849
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
andb $0x3f, %r14b
movzbl %r14b, %eax
shll $0x6, %eax
andb $0x3f, %bpl
movzbl %bpl, %r12d
jmp 0xf21e
movl %eax, %ecx
andb $-0x2, %cl
cmpb $-0x12, %cl
jne 0xf476
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0xf909
cmpb $-0x40, %al
jge 0xf714
movl %eax, %r14d
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0xfa0e
cmpb $-0x40, %al
jge 0xf714
movl %eax, %ebp
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0xf8dd
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
shll $0xc, %r12d
movzwl %r12w, %eax
andb $0x3f, %r14b
movzbl %r14b, %ecx
jmp 0xf461
movb $0x1, %dl
cmpl $-0x1, %ebp
sete %al
testq %r13, %r13
setne %cl
andb %al, %cl
movl %ebp, %eax
cmpb $0x1, %cl
jne 0xf3e9
movq 0x10(%r13), %rax
cmpq 0x18(%r13), %rax
jae 0xf854
movzbl (%rax), %eax
cmpl $-0x1, %eax
setne %al
movb $-0x1, %r13b
testq %r14, %r14
je 0xf40c
xorb %al, %dl
jne 0xf40c
movq 0x10(%r14), %rax
cmpq 0x18(%r14), %rax
jae 0xf869
movb (%rax), %r13b
cmpb $-0x40, %r13b
jge 0xf5ac
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0xfa0e
cmpb $-0x40, %al
movq 0x10(%rsp), %r14
jge 0xf5d8
movl %eax, %ebp
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0xf8a7
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
shll $0xc, %r12d
movzwl %r12w, %eax
andb $0x3f, %r13b
movzbl %r13b, %ecx
shll $0x6, %ecx
orl %eax, %ecx
andb $0x3f, %bpl
movzbl %bpl, %r12d
orl %ecx, %r12d
jmp 0xf5c6
cmpb $-0x10, %al
jne 0xf5ea
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0xf909
movl %eax, %r14d
leal 0x70(%r14), %eax
cmpb $0x30, %al
jae 0xf714
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0xfa0e
cmpb $-0x40, %al
jge 0xf714
movl %eax, %r12d
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0xfa0e
cmpb $-0x40, %al
jge 0xf714
movl %eax, %ebp
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0xf8e8
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
andb $0x3f, %r14b
movzbl %r14b, %eax
shll $0xc, %eax
andb $0x3f, %r12b
movzbl %r12b, %ecx
jmp 0xf461
movb $0x1, %r13b
cmpl $-0x1, %ebp
sete %al
testq %r12, %r12
setne %cl
andb %al, %cl
movl %ebp, %eax
cmpb $0x1, %cl
jne 0xf52b
movq 0x10(%r12), %rax
cmpq 0x18(%r12), %rax
jae 0xf8b2
movzbl (%rax), %eax
cmpl $-0x1, %eax
setne %al
movb $-0x1, %r12b
testq %r14, %r14
je 0xf54f
xorb %al, %r13b
jne 0xf54f
movq 0x10(%r14), %rax
cmpq 0x18(%r14), %rax
jae 0xf8c1
movb (%rax), %r12b
cmpb $-0x60, %r12b
jge 0xf5ac
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0xfa0e
cmpb $-0x40, %al
movq 0x10(%rsp), %r14
jge 0xf5d8
movl %eax, %ebp
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0xf8d2
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
andb $0x1f, %r12b
movzbl %r12b, %eax
shll $0x6, %eax
andb $0x3f, %bpl
movzbl %bpl, %ecx
leal (%rax,%rcx), %r12d
addl $0xd000, %r12d          # imm = 0xD000
jmp 0xf5c6
callq 0xcf7a
movq 0x10(%rsp), %rcx
movl $0x2, (%rcx)
movq %rax, 0x8(%rcx)
movl $0xffffffff, %r12d      # imm = 0xFFFFFFFF
movl %r12d, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0xcf7a
movl $0x2, (%r14)
movq %rax, 0x8(%r14)
jmp 0xf5c0
leal 0xf(%rax), %ecx
cmpb $0x2, %cl
ja 0xf682
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0xf909
cmpb $-0x40, %al
jge 0xf714
movl %eax, %r14d
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0xfa0e
cmpb $-0x40, %al
jge 0xf714
movb %al, 0xf(%rsp)
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0xfa0e
cmpb $-0x40, %al
jge 0xf714
movl %eax, %ebp
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0xf8f3
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
andl $0x3, %r12d
shll $0x12, %r12d
andb $0x3f, %r14b
movzbl %r14b, %eax
shll $0xc, %eax
orl %r12d, %eax
movb 0xf(%rsp), %cl
andb $0x3f, %cl
movzbl %cl, %ecx
jmp 0xf461
cmpb $-0xc, %al
jne 0xf714
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0xf909
cmpb $-0x70, %al
jge 0xf714
movl %eax, %r14d
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0xfa0e
cmpb $-0x40, %al
jge 0xf714
movl %eax, %r12d
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0xfa0e
cmpb $-0x40, %al
jge 0xf714
movl %eax, %ebp
movq (%rbx), %rdi
movq 0x10(%rdi), %rax
cmpq 0x18(%rdi), %rax
jae 0xf8fe
incq %rax
movq %rax, 0x10(%rdi)
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
andb $0xf, %r14b
movzbl %r14b, %eax
shll $0xc, %eax
andb $0x3f, %r12b
movzbl %r12b, %ecx
shll $0x6, %ecx
orl %eax, %ecx
andb $0x3f, %bpl
movzbl %bpl, %eax
leal (%rax,%rcx), %r12d
addl $0x100000, %r12d        # imm = 0x100000
jmp 0xf5c6
callq 0xcf7a
movl $0x2, (%r13)
movq %rax, 0x8(%r13)
jmp 0xf5c0
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0xf00b
movq (%r15), %rax
movq %r15, %rdi
callq *0x48(%rax)
xorl %ecx, %ecx
cmpl $-0x1, %eax
cmoveq %rcx, %r15
jmp 0xefe2
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0xf066
movq (%r14), %rax
movq %r14, %rdi
callq *0x48(%rax)
cmpl $-0x1, %eax
sete %r13b
jmp 0xf08a
movq (%r15), %rax
movq %r15, %rdi
callq *0x48(%rax)
xorl %ecx, %ecx
cmpl $-0x1, %eax
cmoveq %rcx, %r15
jmp 0xf04e
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0xf0e4
movq (%r15), %rax
movq %r15, %rdi
callq *0x48(%rax)
movl %eax, %ebp
jmp 0xf1c1
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0xf207
movq (%r14), %rax
movq %r14, %rdi
callq *0x48(%rax)
movl %eax, %ebp
jmp 0xf1e5
movq (%r13), %rax
movq %r13, %rdi
callq *0x48(%rax)
cmpl $-0x1, %eax
sete %r12b
jmp 0xf108
movq (%r15), %rax
movq %r15, %rdi
callq *0x48(%rax)
xorl %r14d, %r14d
cmpl $-0x1, %eax
cmovneq %r15, %r14
jmp 0xf0cc
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0xf16a
movq (%r14), %rax
movq %r14, %rdi
callq *0x48(%rax)
jmp 0xf2d1
movq (%r13), %rax
movq %r13, %rdi
callq *0x48(%rax)
movl %eax, %r14d
jmp 0xf2f5
movq (%r14), %rax
movq %r14, %rdi
callq *0x48(%rax)
cmpl $-0x1, %eax
sete %dl
jmp 0xf18d
movq (%r15), %rax
movq %r15, %rdi
callq *0x48(%rax)
xorl %r13d, %r13d
cmpl $-0x1, %eax
cmovneq %r15, %r13
jmp 0xf152
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0xf276
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0xf331
movq (%r13), %rax
movq %r13, %rdi
movl %edx, %r13d
callq *0x48(%rax)
movl %r13d, %edx
jmp 0xf3e9
movq (%r14), %rax
movq %r14, %rdi
callq *0x48(%rax)
movl %eax, %r13d
jmp 0xf40c
movq (%r14), %rax
movq %r14, %rdi
callq *0x48(%rax)
cmpl $-0x1, %eax
sete %r13b
jmp 0xf29a
movq (%r15), %rax
movq %r15, %rdi
callq *0x48(%rax)
xorl %r12d, %r12d
cmpl $-0x1, %eax
cmovneq %r15, %r12
jmp 0xf25e
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0xf44a
movq (%r12), %rax
movq %r12, %rdi
callq *0x48(%rax)
jmp 0xf52b
movq (%r14), %rax
movq %r14, %rdi
callq *0x48(%rax)
movl %eax, %r12d
jmp 0xf54f
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0xf585
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0xf3a5
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0xf4e1
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0xf656
movq (%rdi), %rax
callq *0x50(%rax)
jmp 0xf6dd