// File: /workspace/github_cpp_makefile_star2_O3/ridiculousfish[P]docopt_fish/docopt_fish.cpp
// Function: docopt_fish::docopt_impl::suggest_next_argument(std::vector<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>, std::allocator<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>>> const&, unsigned int) const
suggestion_list_t suggest_next_argument(const string_list_t &argv_with_partial, parse_flags_t flags) const {
        // Set internal flags to generate suggestions
        flags |= flag_generate_suggestions;

        // The last argument is partial
        // Remove it and store it separately
        string_list_t argv = argv_with_partial;
        string_t partial_last_arg;
        if (! argv.empty()) {
            partial_last_arg = argv.back();
            argv.pop_back();
        }
        
        // Try completing a value for the last partial argument
        // This includes both --foo=bar... and -DNDEB...
        if (! partial_last_arg.empty()) {
            suggestion_list_t value_suggestions = this->suggest_value_completion(partial_last_arg);
            if (! value_suggestions.empty()) {
                return value_suggestions;
            }
        }
        
        suggestion_t suggestion;
        arg_classification_t aclass = argv_classifier_t::classify_arguments(argv, all_options, names_to_metadata,
                                                                           flags, nullptr /* errors */, &suggestion);

        // If we got a suggestion, it means that the last argument was of the form
        // --foo, where --foo wants a value. That's all we care about.
        if (!suggestion.token.empty()) {
            return {std::move(suggestion)};
        }
        
        // Perform the actual matching
        match_results_t mr = match_usages(this->usages, flags, this->shortcut_options, aclass, argv);
        
        // Turn the mr suggestion tokens into our annotated suggestions
        suggestion_list_t result;
        result.reserve(mr.suggestions.size());
        for (const rstring_t &tok : mr.suggestions) {
            result.push_back(suggestion_for(tok, this->names_to_metadata));
        }
        
        // Handle combined shorts with the partial argument
        if (! partial_last_arg.empty()) {
            combine_short_suggestions(&result, partial_last_arg);
        }
        
        return result;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x228, %rsp            # imm = 0x228
movl %ecx, %ebp
movq %rsi, %r12
movq %rdi, 0x10(%rsp)
leaq 0x38(%rsp), %r15
movq %r15, %rdi
movq %rdx, %rsi
callq 0xb2a4
leaq 0x28(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq $0x0, -0x8(%rbx)
movl $0x0, (%rbx)
movq 0x8(%r15), %rsi
cmpq %rsi, (%r15)
je 0x950a
addq $-0x20, %rsi
leaq 0x18(%rsp), %rdi
callq 0x62f0
movq 0x40(%rsp), %rax
leaq -0x20(%rax), %rcx
movq %rcx, 0x40(%rsp)
movq -0x20(%rax), %rdi
addq $-0x10, %rax
cmpq %rax, %rdi
je 0x950a
movq (%rax), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x6200
cmpq $0x0, 0x20(%rsp)
je 0x9540
leaq 0x18(%rsp), %rdx
movq 0x10(%rsp), %rdi
movq %r12, %rsi
callq 0xb32e
movq 0x10(%rsp), %rcx
movq (%rcx), %rax
cmpq 0x8(%rcx), %rax
jne 0x9981
movq 0x10(%rsp), %rdi
callq 0xb5cc
orl $0x10000, %ebp          # imm = 0x10000
leaq 0xf8(%rsp), %r14
movq %r14, -0x10(%r14)
xorl %eax, %eax
movq %rax, -0x8(%r14)
movl %eax, (%r14)
leaq 0x118(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movl %eax, (%rcx)
leaq 0x138(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movl %eax, (%rcx)
leaq 0x158(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movl %eax, (%rcx)
movl %eax, 0x10(%rcx)
movq %rax, 0x18(%rcx)
leaq 0x68(%r12), %rdx
leaq 0x80(%r12), %r15
leaq 0xe8(%rsp), %rax
movq %rax, (%rsp)
leaq 0x178(%rsp), %rdi
leaq 0x38(%rsp), %rsi
movq %r15, %rcx
movl %ebp, %r8d
xorl %r9d, %r9d
callq 0x7b02
cmpq $0x0, 0xf0(%rsp)
je 0x9716
movq %r14, %rbp
leaq 0x108(%rsp), %r15
leaq 0x128(%rsp), %r12
leaq 0x148(%rsp), %r13
leaq 0x58(%rsp), %r14
leaq 0xe8(%rsp), %rsi
movq %r14, %rdi
callq 0x63e0
leaq 0x78(%rsp), %rdi
movq %r15, %rsi
callq 0x63e0
leaq 0x98(%rsp), %rdi
movq %r12, %rsi
callq 0x63e0
leaq 0xb8(%rsp), %r15
movq %r15, %rdi
movq %r13, %rsi
callq 0x63e0
movl 0x20(%r13), %eax
movl %eax, 0x20(%r15)
movq 0x28(%r13), %rax
movq %rax, 0x28(%r15)
leaq 0x1b0(%rsp), %rcx
movl $0x1, %edx
movq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0xb5fc
leaq 0xc8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x968b
movq 0xc8(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x6200
leaq 0xa8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
movq %rbp, %r14
leaq 0x118(%rsp), %r15
leaq 0x138(%rsp), %r12
leaq 0x158(%rsp), %r13
je 0x96cc
movq 0xa8(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x6200
leaq 0x88(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x96f2
movq 0x88(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x6200
leaq 0x68(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x98bf
movq 0x68(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
jmp 0x98ba
leaq 0x50(%r12), %rcx
leaq 0x1b0(%rsp), %rdi
leaq 0x178(%rsp), %r8
leaq 0x38(%rsp), %r9
movq %r12, 0x50(%rsp)
movq %r12, %rsi
movl %ebp, %edx
callq 0x12b84
xorps %xmm0, %xmm0
movq 0x10(%rsp), %rdi
movups %xmm0, (%rdi)
movq $0x0, 0x10(%rdi)
movq 0x220(%rsp), %rsi
callq 0xb648
leaq 0x200(%rsp), %rbp
movq 0x10(%rbp), %r12
cmpq %rbp, %r12
je 0x9848
leaq 0x88(%rsp), %r14
leaq 0x68(%rsp), %rbx
leaq 0x58(%rsp), %r13
leaq 0x20(%r12), %rsi
movq %r13, %rdi
movq %r15, %rdx
xorl %ecx, %ecx
callq 0x8556
movq 0x10(%rsp), %rdi
movq %r13, %rsi
callq 0xbf82
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0x97cf
movq 0xc8(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x6200
movq 0x98(%rsp), %rdi
leaq 0xa8(%rsp), %rax
cmpq %rax, %rdi
je 0x97f9
movq 0xa8(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x6200
movq 0x78(%rsp), %rdi
cmpq %r14, %rdi
je 0x9818
movq 0x88(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x6200
movq 0x58(%rsp), %rdi
cmpq %rbx, %rdi
je 0x9834
movq 0x68(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x6200
movq %r12, %rdi
callq 0x6280
movq %rax, %r12
cmpq %rbp, %rax
jne 0x9786
cmpq $0x0, 0x20(%rsp)
je 0x9864
leaq 0x18(%rsp), %rdx
movq 0x50(%rsp), %rdi
movq 0x10(%rsp), %rsi
callq 0xb6f8
leaq 0x1f8(%rsp), %rdi
callq 0xb254
leaq 0x1c8(%rsp), %r14
movq %r14, %rdi
callq 0xd5a4
movq -0x18(%r14), %rdi
testq %rdi, %rdi
leaq 0x28(%rsp), %rbx
leaq 0xf8(%rsp), %r14
leaq 0x118(%rsp), %r15
leaq 0x138(%rsp), %r12
leaq 0x158(%rsp), %r13
je 0x98bf
movq 0x1c0(%rsp), %rsi
subq %rdi, %rsi
callq 0x6200
movq 0x190(%rsp), %rdi
testq %rdi, %rdi
je 0x98dc
movq 0x1a0(%rsp), %rsi
subq %rdi, %rsi
callq 0x6200
movq 0x178(%rsp), %rdi
testq %rdi, %rdi
je 0x98f9
movq 0x188(%rsp), %rsi
subq %rdi, %rsi
callq 0x6200
movq 0x148(%rsp), %rdi
cmpq %r13, %rdi
je 0x991b
movq 0x158(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x6200
movq 0x128(%rsp), %rdi
cmpq %r12, %rdi
je 0x993d
movq 0x138(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x6200
movq 0x108(%rsp), %rdi
cmpq %r15, %rdi
je 0x995f
movq 0x118(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x6200
movq 0xe8(%rsp), %rdi
cmpq %r14, %rdi
je 0x9981
movq 0xf8(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x6200
movq 0x18(%rsp), %rdi
cmpq %rbx, %rdi
je 0x999d
movq 0x28(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x6200
leaq 0x38(%rsp), %rdi
callq 0xb1e0
movq 0x10(%rsp), %rax
addq $0x228, %rsp            # imm = 0x228
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
jmp 0x9a07
jmp 0x99de
movq %rax, %r14
leaq 0x58(%rsp), %rdi
callq 0xae34
jmp 0x9a07
movq %rax, %r14
jmp 0x9a14
movq %rax, %r14
jmp 0x9a21
movq %rax, %r14
jmp 0x99f0
movq %rax, %r14
leaq 0x58(%rsp), %rdi
callq 0xae34
movq 0x10(%rsp), %rdi
callq 0xb5cc
leaq 0x1b0(%rsp), %rdi
callq 0xb140
leaq 0x178(%rsp), %rdi
callq 0xb110
leaq 0xe8(%rsp), %rdi
callq 0xae34
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x9a42
movq 0x28(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x6200
leaq 0x38(%rsp), %rdi
callq 0xb1e0
movq %r14, %rdi
callq 0x6360