// File: attractivechaos[P]udb2/ska_flat_hash_map/./flat_hash_map.hpp
// Function: std::pair<ska::detailv3::sherwood_v3_table<std::pair<unsigned int, unsigned int>, unsigned int, Hash32, ska::detailv3::KeyOrValueHasher<unsigned int, std::pair<unsigned int, unsigned int>, Hash32>, std::equal_to<unsigned int>, ska::detailv3::KeyOrValueEquality<unsigned int, std::pair<unsigned int, unsigned int>, std::equal_to<unsigned int>>, std::allocator<std::pair<unsigned int, unsigned int>>, std::allocator<ska::detailv3::sherwood_v3_entry<std::pair<unsigned int, unsigned int>>>>::templated_iterator<std::pair<unsigned int, unsigned int>>, bool> ska::detailv3::sherwood_v3_table<std::pair<unsigned int, unsigned int>, unsigned int, Hash32, ska::detailv3::KeyOrValueHasher<unsigned int, std::pair<unsigned int, unsigned int>, Hash32>, std::equal_to<unsigned int>, ska::detailv3::KeyOrValueEquality<unsigned int, std::pair<unsigned int, unsigned int>, std::equal_to<unsigned int>>, std::allocator<std::pair<unsigned int, unsigned int>>, std::allocator<ska::detailv3::sherwood_v3_entry<std::pair<unsigned int, unsigned int>>>>::emplace_new_key<std::pair<unsigned int, unsigned int>>(signed char, ska::detailv3::sherwood_v3_entry<std::pair<unsigned int, unsigned int>>*, std::pair<unsigned int, unsigned int>&&)
emplace_new_key(int8_t distance_from_desired, EntryPointer current_entry, Key && key, Args &&... args)
    {
        using std::swap;
        if (num_slots_minus_one == 0 || distance_from_desired == max_lookups || num_elements + 1 > (num_slots_minus_one + 1) * static_cast<double>(_max_load_factor))
        {
            grow();
            return emplace(std::forward<Key>(key), std::forward<Args>(args)...);
        }
        else if (current_entry->is_empty())
        {
            current_entry->emplace(distance_from_desired, std::forward<Key>(key), std::forward<Args>(args)...);
            ++num_elements;
            return { { current_entry }, true };
        }
        value_type to_insert(std::forward<Key>(key), std::forward<Args>(args)...);
        swap(distance_from_desired, current_entry->distance_from_desired);
        swap(to_insert, current_entry->value);
        iterator result = { current_entry };
        for (++distance_from_desired, ++current_entry;; ++current_entry)
        {
            if (current_entry->is_empty())
            {
                current_entry->emplace(distance_from_desired, std::move(to_insert));
                ++num_elements;
                return { result, true };
            }
            else if (current_entry->distance_from_desired < distance_from_desired)
            {
                swap(distance_from_desired, current_entry->distance_from_desired);
                swap(to_insert, current_entry->value);
                ++distance_from_desired;
            }
            else
            {
                ++distance_from_desired;
                if (distance_from_desired == max_lookups)
                {
                    swap(to_insert, result.current->value);
                    grow();
                    return emplace(std::move(to_insert));
                }
            }
        }
    }

// Assembly:
subq $0x88, %rsp
movb %sil, %al
movq %rdi, 0x70(%rsp)
movb %al, 0x6f(%rsp)
movq %rdx, 0x60(%rsp)
movq %rcx, 0x58(%rsp)
movq 0x70(%rsp), %rax
movq %rax, 0x8(%rsp)
cmpq $0x0, 0x8(%rax)
je 0x2135
movq 0x8(%rsp), %rcx
movsbl 0x6f(%rsp), %eax
movsbl 0x11(%rcx), %ecx
cmpl %ecx, %eax
je 0x2135
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rcx
movq 0x18(%rax), %rdx
incq %rdx
movq %rdx, %xmm0
movaps 0xf44(%rip), %xmm3      # 0x3030
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0xf48(%rip), %xmm2      # 0x3040
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
incq %rcx
movq %rcx, %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
movss 0x14(%rax), %xmm2
cvtss2sd %xmm2, %xmm2
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x2171
movq 0x8(%rsp), %rdi
callq 0x2470
movq 0x8(%rsp), %rdi
movq 0x58(%rsp), %rsi
callq 0x1e90
movb %dl, 0x50(%rsp)
movq %rax, 0x48(%rsp)
movq 0x48(%rsp), %rax
movq %rax, 0x78(%rsp)
movb 0x50(%rsp), %al
movb %al, 0x80(%rsp)
jmp 0x2343
movq 0x60(%rsp), %rdi
callq 0x24c0
testb $0x1, %al
jne 0x2181
jmp 0x21d5
movq 0x60(%rsp), %rdi
movb 0x6f(%rsp), %al
movq 0x58(%rsp), %rdx
movsbl %al, %esi
callq 0x24e0
movq 0x8(%rsp), %rax
movq 0x18(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x18(%rax)
movq 0x60(%rsp), %rsi
leaq 0x40(%rsp), %rdi
callq 0x2040
movb $0x1, 0x3f(%rsp)
leaq 0x78(%rsp), %rdi
leaq 0x40(%rsp), %rsi
leaq 0x3f(%rsp), %rdx
callq 0x2060
jmp 0x2343
jmp 0x21d7
movq 0x58(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x34(%rsp)
movq 0x60(%rsp), %rsi
leaq 0x6f(%rsp), %rdi
callq 0x2510
movq 0x60(%rsp), %rsi
addq $0x4, %rsi
leaq 0x34(%rsp), %rdi
callq 0x2540
movq 0x60(%rsp), %rsi
leaq 0x28(%rsp), %rdi
callq 0x2040
movb 0x6f(%rsp), %al
addb $0x1, %al
movb %al, 0x6f(%rsp)
movq 0x60(%rsp), %rax
addq $0xc, %rax
movq %rax, 0x60(%rsp)
movq 0x60(%rsp), %rdi
callq 0x24c0
testb $0x1, %al
jne 0x223d
jmp 0x2280
movq 0x60(%rsp), %rdi
leaq 0x34(%rsp), %rdx
movsbl 0x6f(%rsp), %esi
callq 0x24e0
movq 0x8(%rsp), %rax
movq 0x18(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x18(%rax)
movb $0x1, 0x27(%rsp)
leaq 0x78(%rsp), %rdi
leaq 0x28(%rsp), %rsi
leaq 0x27(%rsp), %rdx
callq 0x2570
jmp 0x2343
movq 0x60(%rsp), %rax
movsbl (%rax), %eax
movsbl 0x6f(%rsp), %ecx
cmpl %ecx, %eax
jge 0x22bf
movq 0x60(%rsp), %rsi
leaq 0x6f(%rsp), %rdi
callq 0x2510
movq 0x60(%rsp), %rsi
addq $0x4, %rsi
leaq 0x34(%rsp), %rdi
callq 0x2540
movb 0x6f(%rsp), %al
addb $0x1, %al
movb %al, 0x6f(%rsp)
jmp 0x232c
movq 0x8(%rsp), %rcx
movb 0x6f(%rsp), %al
addb $0x1, %al
movb %al, 0x6f(%rsp)
movsbl 0x6f(%rsp), %eax
movsbl 0x11(%rcx), %ecx
cmpl %ecx, %eax
jne 0x232a
movq 0x28(%rsp), %rsi
addq $0x4, %rsi
leaq 0x34(%rsp), %rdi
movq %rdi, (%rsp)
callq 0x2540
movq 0x8(%rsp), %rdi
callq 0x2470
movq 0x8(%rsp), %rdi
movq (%rsp), %rsi
callq 0x1e90
movb %dl, 0x18(%rsp)
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
movq %rax, 0x78(%rsp)
movb 0x18(%rsp), %al
movb %al, 0x80(%rsp)
jmp 0x2343
jmp 0x232c
jmp 0x232e
jmp 0x2330
movq 0x60(%rsp), %rax
addq $0xc, %rax
movq %rax, 0x60(%rsp)
jmp 0x222d
movq 0x78(%rsp), %rax
movb 0x80(%rsp), %dl
addq $0x88, %rsp
retq
nopw (%rax,%rax)