// File: /workspace/github_cpp_makefile_star2_O2/demon386[P]git-store/./libs/program_options/src/cmdline.cpp
// Function: boost::program_options::detail::cmdline::parse_short_option(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&)
vector<option> 
    cmdline::parse_short_option(vector<string>& args)
    {
        const string& tok = args[0];
        if (tok.size() >= 2 && tok[0] == '-' && tok[1] != '-')
        {   
            vector<option> result;

            string name = tok.substr(0,2);
            string adjacent = tok.substr(2);

            // Short options can be 'grouped', so that
            // "-d -a" becomes "-da". Loop, processing one
            // option at a time. We exit the loop when either
            // we've processed all the token, or when the remainder
            // of token is considered to be value, not further grouped
            // option.
            for(;;) {
                const option_description* d;
                try
                {
                     
                    d = m_desc->find_nothrow(name, false, false,
                                                is_style_active(short_case_insensitive));
                } 
                catch(error_with_option_name& e)
                {
                    // add context and rethrow
                    e.add_context(name, name, get_canonical_option_prefix());
                    throw;
                }


                // FIXME: check for 'allow_sticky'.
                if (d && (m_style & allow_sticky) &&
                    d->semantic()->max_tokens() == 0 && !adjacent.empty()) {
                    // 'adjacent' is in fact further option.
                    option opt;
                    opt.string_key = name;
                    result.push_back(opt);

                    if (adjacent.empty())
                    {
                        args.erase(args.begin());
                        break;
                    }

                    name = string("-") + adjacent[0];
                    adjacent.erase(adjacent.begin());
                } else {
                    
                    option opt;
                    opt.string_key = name;
                    opt.original_tokens.push_back(tok);
                    if (!adjacent.empty())
                        opt.value.push_back(adjacent);
                    result.push_back(opt);
                    args.erase(args.begin());                    
                    break;
                }
            }
            return result;
        }
        return vector<option>();
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
movq %rdi, %r8
movq (%rdx), %r14
cmpq $0x2, 0x8(%r14)
jb 0xdcb5
movq (%r14), %rax
cmpb $0x2d, (%rax)
jne 0xdcb5
cmpb $0x2d, 0x1(%rax)
jne 0xdcd6
xorps %xmm0, %xmm0
movups %xmm0, (%r8)
andq $0x0, 0x10(%r8)
movq %r8, %rax
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rdx, %rbx
movq %rsi, %r12
xorps %xmm0, %xmm0
movups %xmm0, (%r8)
andq $0x0, 0x10(%r8)
leaq -0x90(%rbp), %rdi
pushq $0x2
popq %rcx
movq %r14, %rsi
xorl %edx, %edx
movq %r8, -0x38(%rbp)
callq 0xc4f0
movq %rbx, -0x40(%rbp)
leaq -0x68(%rbp), %rdi
pushq $0x2
popq %rdx
pushq $-0x1
popq %rcx
movq %r14, -0x70(%rbp)
movq %r14, %rsi
callq 0xc4f0
leaq -0x110(%rbp), %r14
movq %r12, -0x48(%rbp)
movq 0x20(%r12), %rdi
movl 0x18(%r12), %r8d
shrl $0xb, %r8d
andl $0x1, %r8d
leaq -0x90(%rbp), %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x152bc
testq %rax, %rax
leaq -0xf0(%rbp), %rbx
je 0xde96
testb $0x1, 0x19(%r12)
je 0xde96
movq %rbx, %rdi
movq %rax, %rsi
callq 0x14c94
movq %rbx, %rdi
callq 0xeba4
movq (%rax), %rcx
movq %rax, %rdi
callq *0x10(%rcx)
movl %eax, %ebx
movq -0x60(%rbp), %r15
leaq -0xe8(%rbp), %rdi
callq 0xf63a
testl %ebx, %ebx
leaq -0xf0(%rbp), %rbx
jne 0xde96
testq %r15, %r15
je 0xde96
leaq -0xe0(%rbp), %rax
movq %rax, -0xf0(%rbp)
andq $0x0, -0xe8(%rbp)
movb $0x0, -0xe0(%rbp)
orl $-0x1, -0xd0(%rbp)
xorps %xmm0, %xmm0
leaq -0xe8(%rbp), %rax
movups %xmm0, 0x40(%rax)
movups %xmm0, 0x30(%rax)
movups %xmm0, 0x20(%rax)
andw $0x0, 0x50(%rax)
movq %rbx, %rdi
leaq -0x90(%rbp), %rsi
movq -0x38(%rbp), %r15
callq 0xc2b0
movq %r15, %rdi
movq %rbx, %rsi
callq 0xea8c
movq -0x60(%rbp), %rbx
testq %rbx, %rbx
je 0xde70
movq %r14, %r13
movq %r14, %rdi
leaq 0x1f56b(%rip), %rsi     # 0x2d387
leaq -0x29(%rbp), %rdx
callq 0xc1b0
movq -0x68(%rbp), %rax
movsbl (%rax), %edx
leaq -0x130(%rbp), %r12
movq %r12, %rdi
movq %r13, %rsi
callq 0xef0e
leaq -0x90(%rbp), %rdi
movq %r12, %rsi
callq 0xc5a0
movq %r12, %rdi
callq 0xc9a0
movq %r13, %rdi
callq 0xc9a0
movq -0x68(%rbp), %rsi
leaq -0x68(%rbp), %rdi
callq 0xc5b0
movq -0x48(%rbp), %r12
jmp 0xde7c
movq -0x40(%rbp), %rdi
movq (%rdi), %rsi
callq 0xeb30
leaq -0xf0(%rbp), %rdi
callq 0xeb3a
testq %rbx, %rbx
jne 0xdd25
jmp 0xdf26
leaq -0xf0(%rbp), %rdi
leaq -0xe0(%rbp), %rax
movq %rax, (%rdi)
andq $0x0, 0x8(%rdi)
movb $0x0, 0x10(%rdi)
orl $-0x1, 0x20(%rdi)
xorps %xmm0, %xmm0
movups %xmm0, 0x28(%rdi)
movups %xmm0, 0x38(%rdi)
movups %xmm0, 0x48(%rdi)
andw $0x0, 0x58(%rdi)
leaq -0x90(%rbp), %rsi
movq -0x38(%rbp), %r15
callq 0xc2b0
leaq -0xb0(%rbp), %rdi
movq -0x70(%rbp), %rsi
callq 0xeaf4
cmpq $0x0, -0x60(%rbp)
je 0xdeff
leaq -0xc8(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0xeaf4
leaq -0xf0(%rbp), %rsi
movq %r15, %rdi
callq 0xea8c
movq -0x40(%rbp), %rdi
movq (%rdi), %rsi
callq 0xeb30
leaq -0xf0(%rbp), %rdi
callq 0xeb3a
leaq -0x68(%rbp), %rdi
callq 0xc9a0
leaq -0x90(%rbp), %rdi
callq 0xc9a0
movq %r15, %rax
jmp 0xdcc4
jmp 0xdfce
movq %rax, %r14
jmp 0xdfe6
movq %rax, %r14
jmp 0xdff2
jmp 0xdfce
jmp 0xdfce
jmp 0xdfce
movq %rax, %r14
leaq -0x110(%rbp), %rdi
callq 0xc9a0
jmp 0xdfd1
jmp 0xdfce
movq %rax, %r14
leaq -0xe8(%rbp), %rdi
callq 0xf63a
jmp 0xdfdd
movq %rax, %r14
jmp 0xdfdd
movq %rax, %r14
cmpl $0x1, %edx
jne 0xdfdd
movq %r14, %rdi
callq 0xc1d0
movq %rax, %rbx
movq -0x48(%rbp), %rdi
callq 0xcf48
leaq -0x90(%rbp), %rdx
movq %rbx, %rdi
movq %rdx, %rsi
movl %eax, %ecx
callq 0xeb64
callq 0xc700
movq %rax, %r14
callq 0xc7e0
jmp 0xdfdd
movq %rax, %rdi
callq 0xeb96
movq %rax, %r14
leaq -0xf0(%rbp), %rdi
callq 0xeb3a
leaq -0x68(%rbp), %rdi
callq 0xc9a0
leaq -0x90(%rbp), %rdi
callq 0xc9a0
movq -0x38(%rbp), %rdi
callq 0xeac8
movq %r14, %rdi
callq 0xc850
nop