// File: /workspace/github_c_makefile_star2_O0/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_indev.c
// Function: indev_proc_release
static void indev_proc_release(lv_indev_proc_t * proc)
{
    if(proc->wait_until_release != 0) {
        proc->types.pointer.act_obj  = NULL;
        proc->types.pointer.last_obj = NULL;
        proc->pr_timestamp           = 0;
        proc->longpr_rep_timestamp   = 0;
        proc->wait_until_release     = 0;
    }
    indev_obj_act = proc->types.pointer.act_obj;

    /*Forget the act obj and send a released signal */
    if(indev_obj_act) {
        /* If the object was protected against press lost then it possible that
         * the object is already not pressed but still it is the `act_obj`.
         * In this case send the `LV_SIGNAL_RELEASED/CLICKED` instead of `LV_SIGNAL_PRESS_LOST` if
         * the indev is ON the `types.pointer.act_obj` */
        if(lv_obj_is_protected(indev_obj_act, LV_PROTECT_PRESS_LOST)) {
            indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_RELEASED, indev_act);
            if(indev_reset_check(proc)) return;

            if(proc->types.pointer.drag_in_prog == 0) {
                if(proc->long_pr_sent == 0) {
                    lv_event_send(indev_obj_act, LV_EVENT_SHORT_CLICKED, NULL);
                    if(indev_reset_check(proc)) return;
                }

                lv_event_send(indev_obj_act, LV_EVENT_CLICKED, NULL);
                if(indev_reset_check(proc)) return;
            }

            lv_event_send(indev_obj_act, LV_EVENT_RELEASED, NULL);
            if(indev_reset_check(proc)) return;
        }
        /* The simple case: `act_obj` was not protected against press lost.
         * If it is already not pressed then `indev_proc_press` would set `indev_obj_act = NULL`*/
        else {
            indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_RELEASED, indev_act);
            if(indev_reset_check(proc)) return;

            if(proc->long_pr_sent == 0 && proc->types.pointer.drag_in_prog == 0) {
                lv_event_send(indev_obj_act, LV_EVENT_SHORT_CLICKED, NULL);
                if(indev_reset_check(proc)) return;
            }

            if(proc->types.pointer.drag_in_prog == 0) {
                lv_event_send(indev_obj_act, LV_EVENT_CLICKED, NULL);
                if(indev_reset_check(proc)) return;
            }

            lv_event_send(indev_obj_act, LV_EVENT_RELEASED, NULL);
            if(indev_reset_check(proc)) return;
        }

        if(indev_reset_check(proc)) return;

        /*Handle click focus*/
        bool click_focus_sent = false;
#if LV_USE_GROUP
        lv_group_t * g = lv_obj_get_group(indev_obj_act);

        /*Check, if the parent is in a group and focus on it.*/
        /*Respect the click focus protection*/
        if(lv_obj_is_protected(indev_obj_act, LV_PROTECT_CLICK_FOCUS) == false) {
            lv_obj_t * parent = indev_obj_act;

            while(g == NULL) {
                parent = lv_obj_get_parent(parent);
                if(parent == NULL) break;

                /*Ignore is the protected against click focus*/
                if(lv_obj_is_protected(parent, LV_PROTECT_CLICK_FOCUS)) {
                    parent = NULL;
                    break;
                }
                g = lv_obj_get_group(parent);
            }

            /* If a parent is in a group make it focused.
             * `LV_EVENT_FOCUSED/DEFOCUSED` will be sent by `lv_group_focus_obj`*/
            if(g && parent) {
                if(lv_group_get_click_focus(g)) {
                    click_focus_sent = true;
                    lv_group_focus_obj(parent);
                }
            }
        }
#endif

        /* Send defocus to the lastly "active" object and foucus to the new one.
         * DO not sent the events if they was sent by the click focus*/
        if(proc->types.pointer.last_pressed != indev_obj_act && click_focus_sent == false) {
            lv_event_send(proc->types.pointer.last_pressed, LV_EVENT_DEFOCUSED, NULL);
            if(indev_reset_check(proc)) return;

            lv_event_send(proc->types.pointer.act_obj, LV_EVENT_FOCUSED, NULL);
            if(indev_reset_check(proc)) return;

            proc->types.pointer.last_pressed = indev_obj_act;
        }

        if(indev_reset_check(proc)) return;

        /*Send LV_EVENT_DRAG_THROW_BEGIN if required */
        /*If drag parent is active check recursively the drag_parent attribute*/
        lv_obj_t * drag_obj = indev_obj_act;
        while(lv_obj_get_drag_parent(drag_obj) != false && drag_obj != NULL) {
            drag_obj = lv_obj_get_parent(drag_obj);
        }

        if(drag_obj) {
            if(lv_obj_get_drag_throw(drag_obj) && proc->types.pointer.drag_in_prog) {
                lv_event_send(drag_obj, LV_EVENT_DRAG_THROW_BEGIN, NULL);
                if(indev_reset_check(proc)) return;
            }
        }

        proc->types.pointer.act_obj = NULL;
        proc->pr_timestamp          = 0;
        proc->longpr_rep_timestamp  = 0;
    }

    /*The reset can be set in the signal function.
     * In case of reset query ignore the remaining parts.*/
    if(proc->types.pointer.last_obj != NULL && proc->reset_query == 0) {
        indev_drag_throw(proc);
        if(indev_reset_check(proc)) return;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movb 0x48(%rax), %al
shrb $0x3, %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
je 0x563e
movq -0x8(%rbp), %rax
movq $0x0, 0x20(%rax)
movq -0x8(%rbp), %rax
movq $0x0, 0x28(%rax)
movq -0x8(%rbp), %rax
movl $0x0, 0x40(%rax)
movq -0x8(%rbp), %rax
movl $0x0, 0x44(%rax)
movq -0x8(%rbp), %rax
movb 0x48(%rax), %cl
andb $-0x9, %cl
orb $0x0, %cl
movb %cl, 0x48(%rax)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, 0x83923(%rip)     # 0x88f70
cmpq $0x0, 0x8391b(%rip)     # 0x88f70
je 0x5a54
movq 0x8390e(%rip), %rdi     # 0x88f70
movl $0x10, %esi
callq 0xa7d0
testb $0x1, %al
jne 0x5675
jmp 0x5751
movq 0x838f4(%rip), %rax     # 0x88f70
movq 0x30(%rax), %rax
movq 0x838e9(%rip), %rdi     # 0x88f70
movq 0x838da(%rip), %rdx     # 0x88f68
movl $0xb, %esi
callq *%rax
movq -0x8(%rbp), %rdi
callq 0x5ee0
testb $0x1, %al
jne 0x56a4
jmp 0x56a9
jmp 0x5a8e
movq -0x8(%rbp), %rax
movb 0x38(%rax), %al
shrb %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x5723
movq -0x8(%rbp), %rax
movb 0x48(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x56f8
movq 0x8389c(%rip), %rdi     # 0x88f70
movl $0x3, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x7990
movq -0x8(%rbp), %rdi
callq 0x5ee0
testb $0x1, %al
jne 0x56f1
jmp 0x56f6
jmp 0x5a8e
jmp 0x56f8
movq 0x83871(%rip), %rdi     # 0x88f70
movl $0x6, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x7990
movq -0x8(%rbp), %rdi
callq 0x5ee0
testb $0x1, %al
jne 0x571c
jmp 0x5721
jmp 0x5a8e
jmp 0x5723
movq 0x83846(%rip), %rdi     # 0x88f70
movl $0x7, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x7990
movq -0x8(%rbp), %rdi
callq 0x5ee0
testb $0x1, %al
jne 0x5747
jmp 0x574c
jmp 0x5a8e
jmp 0x583d
movq 0x83818(%rip), %rax     # 0x88f70
movq 0x30(%rax), %rax
movq 0x8380d(%rip), %rdi     # 0x88f70
movq 0x837fe(%rip), %rdx     # 0x88f68
movl $0xb, %esi
callq *%rax
movq -0x8(%rbp), %rdi
callq 0x5ee0
testb $0x1, %al
jne 0x5780
jmp 0x5785
jmp 0x5a8e
movq -0x8(%rbp), %rax
movb 0x48(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x57d4
movq -0x8(%rbp), %rax
movb 0x38(%rax), %al
shrb %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x57d4
movq 0x837c0(%rip), %rdi     # 0x88f70
movl $0x3, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x7990
movq -0x8(%rbp), %rdi
callq 0x5ee0
testb $0x1, %al
jne 0x57cd
jmp 0x57d2
jmp 0x5a8e
jmp 0x57d4
movq -0x8(%rbp), %rax
movb 0x38(%rax), %al
shrb %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x5812
movq 0x83782(%rip), %rdi     # 0x88f70
movl $0x6, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x7990
movq -0x8(%rbp), %rdi
callq 0x5ee0
testb $0x1, %al
jne 0x580b
jmp 0x5810
jmp 0x5a8e
jmp 0x5812
movq 0x83757(%rip), %rdi     # 0x88f70
movl $0x7, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x7990
movq -0x8(%rbp), %rdi
callq 0x5ee0
testb $0x1, %al
jne 0x5836
jmp 0x583b
jmp 0x5a8e
jmp 0x583d
movq -0x8(%rbp), %rdi
callq 0x5ee0
testb $0x1, %al
jne 0x584c
jmp 0x5851
jmp 0x5a8e
movb $0x0, -0x9(%rbp)
movq 0x83714(%rip), %rdi     # 0x88f70
callq 0x77c0
movq %rax, -0x18(%rbp)
movq 0x83704(%rip), %rdi     # 0x88f70
movl $0x20, %esi
callq 0xa7d0
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x5907
movq 0x836e5(%rip), %rax     # 0x88f70
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0x58d9
movq -0x20(%rbp), %rdi
callq 0x71b0
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x58ac
jmp 0x58d9
movq -0x20(%rbp), %rdi
movl $0x20, %esi
callq 0xa7d0
testb $0x1, %al
jne 0x58c0
jmp 0x58ca
movq $0x0, -0x20(%rbp)
jmp 0x58d9
movq -0x20(%rbp), %rdi
callq 0x77c0
movq %rax, -0x18(%rbp)
jmp 0x588f
cmpq $0x0, -0x18(%rbp)
je 0x5905
cmpq $0x0, -0x20(%rbp)
je 0x5905
movq -0x18(%rbp), %rdi
callq 0x3330
testb $0x1, %al
jne 0x58f6
jmp 0x5903
movb $0x1, -0x9(%rbp)
movq -0x20(%rbp), %rdi
callq 0x29c0
jmp 0x5905
jmp 0x5907
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
cmpq 0x8365a(%rip), %rax     # 0x88f70
je 0x5988
movb -0x9(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x5988
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
movl $0xd, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x7990
movq -0x8(%rbp), %rdi
callq 0x5ee0
testb $0x1, %al
jne 0x594a
jmp 0x594f
jmp 0x5a8e
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
movl $0xc, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x7990
movq -0x8(%rbp), %rdi
callq 0x5ee0
testb $0x1, %al
jne 0x5974
jmp 0x5979
jmp 0x5a8e
movq 0x835f0(%rip), %rcx     # 0x88f70
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x8(%rbp), %rdi
callq 0x5ee0
testb $0x1, %al
jne 0x5997
jmp 0x599c
jmp 0x5a8e
movq 0x835cd(%rip), %rax     # 0x88f70
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
callq 0xa610
andb $0x1, %al
movzbl %al, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x29(%rbp)
je 0x59ca
cmpq $0x0, -0x28(%rbp)
setne %al
movb %al, -0x29(%rbp)
movb -0x29(%rbp), %al
testb $0x1, %al
jne 0x59d3
jmp 0x59e2
movq -0x28(%rbp), %rdi
callq 0x71b0
movq %rax, -0x28(%rbp)
jmp 0x59a7
cmpq $0x0, -0x28(%rbp)
je 0x5a32
movq -0x28(%rbp), %rdi
callq 0xa5b0
testb $0x1, %al
jne 0x59f8
jmp 0x5a30
movq -0x8(%rbp), %rax
movb 0x38(%rax), %al
shrb %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
je 0x5a30
movq -0x28(%rbp), %rdi
movl $0xa, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x7990
movq -0x8(%rbp), %rdi
callq 0x5ee0
testb $0x1, %al
jne 0x5a2c
jmp 0x5a2e
jmp 0x5a8e
jmp 0x5a30
jmp 0x5a32
movq -0x8(%rbp), %rax
movq $0x0, 0x20(%rax)
movq -0x8(%rbp), %rax
movl $0x0, 0x40(%rax)
movq -0x8(%rbp), %rax
movl $0x0, 0x44(%rax)
movq -0x8(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x5a8e
movq -0x8(%rbp), %rax
movb 0x48(%rax), %al
shrb %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x5a8e
movq -0x8(%rbp), %rdi
callq 0x5b90
movq -0x8(%rbp), %rdi
callq 0x5ee0
testb $0x1, %al
jne 0x5a8a
jmp 0x5a8c
jmp 0x5a8e
jmp 0x5a8e
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)