// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_verb_unindent
bool ce_vim_verb_unindent(CeVim_t* vim, const CeVimAction_t* action, CeRange_t motion_range, CeView_t* view,
                          CePoint_t* cursor, CeVimVisualData_t* visual, CeVimBufferData_t* buffer_data,
                          const CeConfigOptions_t* config_options){
     bool chain = false;
     ce_range_sort(&motion_range);
     CePoint_t end_cursor = {cursor->x - config_options->tab_width, cursor->y};
     if(end_cursor.x < 0) end_cursor.x = 0;
     for(int64_t i = motion_range.start.y; i <= motion_range.end.y; i++){
          // calc indentation
          CePoint_t indentation_point = {0, i};
          int64_t tab_width = 0;

          // figure out how much we can unindent
          for(int64_t s = 0; s < config_options->tab_width; s++){
               if(isblank((int)(view->buffer->lines[i][s]))){
                    tab_width++;
               }else{
                    break;
               }
          }

          if(tab_width && tab_width < 255){
               // build indentation string
               char remove_string[256];
               memset(remove_string, ' ', tab_width);
               remove_string[tab_width] = 0;

               ce_buffer_remove_string_change(view->buffer, indentation_point, strlen(remove_string), cursor, *cursor, chain);
               chain = true;
          }
     }

     if(vim->mode == CE_VIM_MODE_VISUAL_LINE) end_cursor.y = motion_range.start.y;
     if(chain) *cursor = end_cursor; // if we did any indentation at all, update the cursor
     vim->mode = CE_VIM_MODE_NORMAL;
     return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x190, %rsp            # imm = 0x190
movq %rdi, %rax
movq 0x30(%rbp), %rdi
leaq 0x10(%rbp), %rdi
movq %rdi, -0x178(%rbp)
movq %rax, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movb $0x0, -0x31(%rbp)
callq 0x12840
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq 0x30(%rbp), %rcx
subq 0x8(%rcx), %rax
movq %rax, -0x48(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x48(%rbp)
jge 0x3adcc
movq $0x0, -0x48(%rbp)
movq -0x178(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x178(%rbp), %rcx
movq -0x50(%rbp), %rax
cmpq 0x18(%rcx), %rax
jg 0x3af10
movq $0x0, -0x60(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x58(%rbp)
movq $0x0, -0x68(%rbp)
movq $0x0, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq 0x30(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jge 0x3ae70
callq 0xd700
movq (%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x40(%rcx), %rcx
movq (%rcx), %rcx
movq -0x50(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movq -0x70(%rbp), %rdx
movsbl (%rcx,%rdx), %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x3ae5e
movq -0x68(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x68(%rbp)
jmp 0x3ae60
jmp 0x3ae70
jmp 0x3ae62
movq -0x70(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x70(%rbp)
jmp 0x3ae10
cmpq $0x0, -0x68(%rbp)
je 0x3aefd
cmpq $0xff, -0x68(%rbp)
jge 0x3aefd
leaq -0x170(%rbp), %rdi
movq -0x68(%rbp), %rdx
movl $0x20, %esi
callq 0xd290
movq -0x68(%rbp), %rax
movb $0x0, -0x170(%rbp,%rax)
movq -0x18(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x180(%rbp)
leaq -0x170(%rbp), %rdi
callq 0xd200
movq -0x180(%rbp), %rdi
movq %rax, %rcx
movq -0x20(%rbp), %r8
movq -0x20(%rbp), %r9
movb -0x31(%rbp), %al
movq -0x60(%rbp), %rsi
movq -0x58(%rbp), %rdx
andb $0x1, %al
movq (%r9), %r10
movq %r10, (%rsp)
movq 0x8(%r9), %r9
movq %r9, 0x8(%rsp)
movzbl %al, %r9d
callq 0x110a0
movb $0x1, -0x31(%rbp)
jmp 0x3aeff
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x3addb
movq -0x8(%rbp), %rax
cmpl $0x3, (%rax)
jne 0x3af28
movq -0x178(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
testb $0x1, -0x31(%rbp)
je 0x3af41
movq -0x20(%rbp), %rax
movq -0x48(%rbp), %rcx
movq %rcx, (%rax)
movq -0x40(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x8(%rbp), %rax
movl $0x0, (%rax)
movb $0x1, %al
andb $0x1, %al
addq $0x190, %rsp            # imm = 0x190
popq %rbp
retq
nopl (%rax,%rax)