// File: attractivechaos[P]udb2/phmap/./phmap.h
// Function: phmap::container_internal::raw_hash_set<phmap::container_internal::FlatHashMapPolicy<unsigned int, unsigned int>, Hash32, phmap::EqualTo<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int>>>::erase_meta_only(phmap::container_internal::raw_hash_set<phmap::container_internal::FlatHashMapPolicy<unsigned int, unsigned int>, Hash32, phmap::EqualTo<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int>>>::const_iterator)
void erase_meta_only(const_iterator it) {
        assert(IsFull(*it.inner_.ctrl_) && "erasing a dangling iterator");
        --size_;
        const size_t index = it.inner_.ctrl_ - ctrl_;
        const size_t index_before = (index - Group::kWidth) & capacity_;
        const auto empty_after = Group(it.inner_.ctrl_).MatchEmpty();
        const auto empty_before = Group(ctrl_ + index_before).MatchEmpty();

        // We count how many consecutive non empties we have to the right and to the
        // left of `it`. If the sum is >= kWidth then there is at least one probe
        // window that might have seen a full group.
        bool was_never_full =
            empty_before && empty_after &&
            static_cast<size_t>(empty_after.TrailingZeros() +
                                empty_before.LeadingZeros()) < Group::kWidth;

        set_ctrl(index, was_never_full ? kEmpty : kDeleted);
        growth_left() += was_never_full;
        infoz_.RecordErase();
    }

// Assembly:
subq $0x98, %rsp
movq %rsi, 0x88(%rsp)
movq %rdx, 0x90(%rsp)
movq %rdi, 0x80(%rsp)
movq 0x80(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x88(%rsp), %rax
movsbl (%rax), %edi
callq 0x1a90
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x2e(%rsp)
jne 0x587b
jmp 0x5883
movb $0x1, %al
movb %al, 0x2e(%rsp)
jmp 0x5883
movb 0x2e(%rsp), %al
testb $0x1, %al
jne 0x588d
jmp 0x588f
jmp 0x58ae
leaq 0x1f7f(%rip), %rdi      # 0x7815
leaq 0x814(%rip), %rsi       # 0x60b1
movl $0x6f6, %edx            # imm = 0x6F6
leaq 0x1fa6(%rip), %rcx      # 0x784f
callq 0x10a0
movq 0x20(%rsp), %rcx
movq 0x10(%rcx), %rax
addq $-0x1, %rax
movq %rax, 0x10(%rcx)
movq 0x88(%rsp), %rax
movq (%rcx), %rdx
subq %rdx, %rax
movq %rax, 0x78(%rsp)
movq 0x78(%rsp), %rax
subq $0x10, %rax
andq 0x18(%rcx), %rax
movq %rax, 0x70(%rsp)
movq 0x88(%rsp), %rsi
leaq 0x50(%rsp), %rdi
callq 0x2ad0
leaq 0x50(%rsp), %rdi
callq 0x2e10
movl %eax, %ecx
movq 0x20(%rsp), %rax
movl %ecx, 0x6c(%rsp)
movq (%rax), %rsi
addq 0x70(%rsp), %rsi
leaq 0x30(%rsp), %rdi
callq 0x2ad0
leaq 0x30(%rsp), %rdi
callq 0x2e10
movl %eax, 0x4c(%rsp)
leaq 0x4c(%rsp), %rdi
callq 0x2e40
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x1f(%rsp)
jne 0x5944
jmp 0x598a
leaq 0x6c(%rsp), %rdi
callq 0x2e40
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x1f(%rsp)
jne 0x595d
jmp 0x598a
leaq 0x6c(%rsp), %rdi
callq 0x5a10
movl %eax, 0x18(%rsp)
leaq 0x4c(%rsp), %rdi
callq 0x5a30
movl %eax, %ecx
movl 0x18(%rsp), %eax
addl %ecx, %eax
cltq
cmpq $0x10, %rax
setb %al
movb %al, 0x1f(%rsp)
movb 0x1f(%rsp), %al
andb $0x1, %al
movb %al, 0x2f(%rsp)
movq 0x78(%rsp), %rax
movq %rax, 0x8(%rsp)
movb 0x2f(%rsp), %cl
movb $-0x80, %al
movb $-0x2, %dl
movb %dl, 0x16(%rsp)
testb $0x1, %cl
movb %al, 0x17(%rsp)
jne 0x59bb
movb 0x16(%rsp), %al
movb %al, 0x17(%rsp)
movq 0x20(%rsp), %rdi
movq 0x8(%rsp), %rsi
movb 0x17(%rsp), %al
movsbl %al, %edx
callq 0x3670
movq 0x20(%rsp), %rdi
movb 0x2f(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
movq %rax, (%rsp)
callq 0x1c90
movq (%rsp), %rcx
movq 0x20(%rsp), %rdi
addq (%rax), %rcx
movq %rcx, (%rax)
addq $0x20, %rdi
callq 0x5a60
addq $0x98, %rsp
retq
nopl (%rax,%rax)