[*] Binary protection state of keyctl

  
  	Full RELRO     Canary found      NX enabled   PIE enabled  No RPATH     No RUNPATH   No Symbols


[*] Function fprintf tear down of keyctl

    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/bin/keyctl @ 0x1c2c */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00001c2c ()                      | void fcn_00001c2c (char * s) {
                                                 |     int16_t var_0h_2;
                                                 |     char * * endptr;
                                                 |     int16_t var_ch;
                                                 |     r0 = s;
    0x00001c2c blmi 0x15d458c                    |     __asm ("blmi 0x15d458c");
    0x00001c30 push {r4, r5, r6, lr}             |     
    0x00001c32 sub sp, 0x10                      |     
    0x00001c34 add r2, pc                        |     r2 += pc;
    0x00001c36 ldr r5, [pc, 0x158]               |     
    0x00001c38 mov r4, r0                        |     r4 = r0;
    0x00001c3a ldr r3, [r2, r3]                  |     r3 = *((r2 + r3));
    0x00001c3c add r5, pc                        |     r5 = 0x39d2;
    0x00001c3e ldr r3, [r3]                      |     r3 = *(r3);
    0x00001c40 str r3, [sp, 0xc]                 |     var_ch = r3;
    0x00001c42 mov.w r3, 0                       |     r3 = 0;
    0x00001c46 ldrb r3, [r0]                     |     r3 = *(r0);
    0x00001c48 cmp r3, 0x40                      |     
                                                 |     if (r3 == 0x40) {
    0x00001c4a beq 0x1cc4                        |         goto label_2;
                                                 |     }
    0x00001c4c cmp r3, 0x25                      |     
                                                 |     if (r3 != 0x25) {
    0x00001c4e bne 0x1c9c                        |         goto label_3;
                                                 |     }
    0x00001c50 ldrb r3, [r0, 1]                  |     r3 = *((r0 + 1));
    0x00001c52 cmp r3, 0                         |     
                                                 |     if (r3 == 0) {
    0x00001c54 beq 0x1d48                        |         goto label_4;
                                                 |     }
    0x00001c56 cmp r3, 0x3a                      |     
                                                 |     if (r3 == 0x3a) {
    0x00001c58 beq 0x1d1c                        |         goto label_5;
                                                 |     }
    0x00001c5a adds r6, r0, 1                    |     r6 = r0 + 1;
    0x00001c5c movs r1, 0x3a                     |     r1 = 0x3a;
    0x00001c5e mov r0, r6                        |     r0 = r6;
    0x00001c60 blx 0x17c8                        |     strchr (r0, r1);
    0x00001c62 ldc p6, c4, [r2, 0x10]!           |     __asm ("ldc p6, c4, [r2, 0x10]!");
    0x00001c66 cmp r0, 0                         |     
                                                 |     if (r0 == 0) {
    0x00001c68 beq 0x1d48                        |         goto label_4;
                                                 |     }
    0x00001c6a movs r3, 0                        |     r3 = 0;
    0x00001c6c strb r3, [r4], 1                  |     *(r4) = r3;
                                                 |     r4++;
                                                 | label_1:
    0x00001c70 ldrb r3, [r4]                     |     r3 = *(r4);
    0x00001c72 cmp r3, 0                         |     
                                                 |     if (r3 == 0) {
    0x00001c74 beq 0x1d48                        |         goto label_4;
                                                 |     }
    0x00001c76 movs r2, 0                        |     r2 = 0;
    0x00001c78 mov r1, r4                        |     r1 = r4;
    0x00001c7a mov r0, r6                        |     r0 = r6;
    0x00001c7c blx 0x166c                        |     r0 = find_key_by_type_and_desc ();
    0x00001c80 adds r3, r0, 1                    |     r3 = r0 + 1;
                                                 |     if (r3 == r0) {
    0x00001c82 beq 0x1d6c                        |         goto label_6;
                                                 |     }
                                                 |     do {
                                                 | label_0:
    0x00001c84 ldr r2, [pc, 0x10c]               |         
    0x00001c86 ldr r3, [pc, 0x104]               |         r3 = *(0x1d8e);
    0x00001c88 add r2, pc                        |         r2 = 0x3a20;
    0x00001c8a ldr r3, [r2, r3]                  |         r3 = *(0x3a20);
    0x00001c8c ldr r2, [r3]                      |         r2 = *(0x3a20);
    0x00001c8e ldr r3, [sp, 0xc]                 |         r3 = var_ch;
    0x00001c90 eors r2, r3                       |         r2 ^= r3;
    0x00001c92 mov.w r3, 0                       |         r3 = 0;
                                                 |         if (r2 != r3) {
    0x00001c96 bne 0x1d60                        |             goto label_7;
                                                 |         }
    0x00001c98 add sp, 0x10                      |         
    0x00001c9a pop {r4, r5, r6, pc}              |         
                                                 | label_3:
    0x00001c9c movs r2, 0                        |         r2 = 0;
    0x00001c9e add r1, sp, 8                     |         r1 += endptr;
    0x00001ca0 blx 0x17b0                        |         strtoul (r0, r1, r2);
    0x00001ca4 ldr r3, [sp, 8]                   |         r3 = endptr;
    0x00001ca6 ldrb r3, [r3]                     |         r3 = *(r3);
    0x00001ca8 cmp r3, 0                         |         
    0x00001caa beq 0x1c84                        |         
                                                 |     } while (r3 == 0);
    0x00001cac ldr r2, [pc, 0xe8]                |     
    0x00001cae ldr r0, [pc, 0xec]                |     r0 = *(0x1d9e);
    0x00001cb0 add r2, pc                        |     r2 = 0x3a4c;
                                                 |     do {
    0x00001cb2 ldr r0, [r5, r0]                  |         r0 = *((r5 + r0));
    0x00001cb4 mov r3, r4                        |         r3 = r4;
    0x00001cb6 movs r1, 1                        |         r1 = 1;
    0x00001cb8 ldr r0, [r0]                      |         r0 = *(r0);
    0x00001cba blx 0x1858                        |         fprintf_chk ()
    0x00001cbe movs r0, 2                        |         r0 = 2;
    0x00001cc0 blx 0x1780                        |         exit (r0);
                                                 | label_2:
    0x00001cc4 ldr r1, [pc, 0xd8]                |         
    0x00001cc6 add r1, pc                        |         r1 = 0x3a6a;
    0x00001cc8 blx 0x1600                        |         r0 = strcmp (r0, r1);
                                                 |         if (r0 != 0) {
    0x00001ccc cbz r0, 0x1d24                    |             
    0x00001cce ldr r1, [pc, 0xd4]                |             
    0x00001cd0 mov r0, r4                        |             r0 = r4;
    0x00001cd2 add r1, pc                        |             r1 = 0x3a7c;
    0x00001cd4 blx 0x1600                        |             r0 = strcmp (r0, r1);
                                                 |             if (r0 == 0) {
    0x00001cd8 cbz r0, 0x1d2a                    |                 goto label_8;
                                                 |             }
    0x00001cda ldr r1, [pc, 0xcc]                |             
    0x00001cdc mov r0, r4                        |             r0 = r4;
    0x00001cde add r1, pc                        |             r1 = 0x3a8c;
    0x00001ce0 blx 0x1600                        |             r0 = strcmp (r0, r1);
                                                 |             if (r0 == 0) {
    0x00001ce4 cbz r0, 0x1d30                    |                 goto label_9;
                                                 |             }
    0x00001ce6 ldr r1, [pc, 0xc4]                |             
    0x00001ce8 mov r0, r4                        |             r0 = r4;
    0x00001cea add r1, pc                        |             r1 = 0x3a9c;
    0x00001cec blx 0x1600                        |             r0 = strcmp (r0, r1);
                                                 |             if (r0 == 0) {
    0x00001cf0 cbz r0, 0x1d36                    |                 goto label_10;
                                                 |             }
    0x00001cf2 ldr r1, [pc, 0xbc]                |             
    0x00001cf4 mov r0, r4                        |             r0 = r4;
    0x00001cf6 add r1, pc                        |             r1 = 0x3aac;
    0x00001cf8 blx 0x1600                        |             r0 = strcmp (r0, r1);
                                                 |             if (r0 == 0) {
    0x00001cfc cbz r0, 0x1d3c                    |                 goto label_11;
                                                 |             }
    0x00001cfe ldr r1, [pc, 0xb4]                |             
    0x00001d00 mov r0, r4                        |             r0 = r4;
    0x00001d02 add r1, pc                        |             r1 = 0x3abc;
    0x00001d04 blx 0x1600                        |             r0 = strcmp (r0, r1);
                                                 |             if (r0 == 0) {
    0x00001d08 cbz r0, 0x1d42                    |                 goto label_12;
                                                 |             }
    0x00001d0a ldr r1, [pc, 0xac]                |             
    0x00001d0c mov r0, r4                        |             r0 = r4;
    0x00001d0e add r1, pc                        |             r1 = 0x3acc;
    0x00001d10 blx 0x1600                        |             r0 = strcmp (r0, r1);
                                                 |             if (r0 != 0) {
    0x00001d14 cbnz r0, 0x1d64                   |                 goto label_13;
                                                 |             }
    0x00001d16 mvn r0, 6                         |             r0 = ~6;
    0x00001d1a b 0x1c84                          |             goto label_0;
                                                 | label_5:
    0x00001d1c ldr r6, [pc, 0x9c]                |             
    0x00001d1e adds r4, 2                        |             r4 += 2;
    0x00001d20 add r6, pc                        |             r6 = 0x3ae0;
    0x00001d22 b 0x1c70                          |             goto label_1;
                                                 |         }
    0x00001d24 mov.w r0, -1                      |         r0 = -1;
    0x00001d28 b 0x1c84                          |         goto label_0;
                                                 | label_8:
    0x00001d2a mvn r0, 1                         |         r0 = ~1;
    0x00001d2e b 0x1c84                          |         goto label_0;
                                                 | label_9:
    0x00001d30 mvn r0, 2                         |         r0 = ~2;
    0x00001d34 b 0x1c84                          |         goto label_0;
                                                 | label_10:
    0x00001d36 mvn r0, 3                         |         r0 = ~3;
    0x00001d3a b 0x1c84                          |         goto label_0;
                                                 | label_11:
    0x00001d3c mvn r0, 4                         |         r0 = ~4;
    0x00001d40 b 0x1c84                          |         goto label_0;
                                                 | label_12:
    0x00001d42 mvn r0, 5                         |         r0 = ~5;
    0x00001d46 b 0x1c84                          |         goto label_0;
                                                 | label_4:
    0x00001d48 ldr r3, [pc, 0x50]                |         
    0x00001d4a movs r2, 0x1b                     |         r2 = 0x1b;
    0x00001d4c ldr r0, [pc, 0x70]                |         
    0x00001d4e movs r1, 1                        |         r1 = 1;
    0x00001d50 ldr r3, [r5, r3]                  |         r3 = *((r5 + r3));
    0x00001d52 add r0, pc                        |         r0 = 0x3b16;
    0x00001d54 ldr r3, [r3]                      |         r3 = *(0x1d9c);
    0x00001d56 blx 0x16d8                        |         fwrite (r0, r1, r2, r3);
    0x00001d5a movs r0, 2                        |         r0 = 2;
    0x00001d5c blx 0x1780                        |         r0 = exit (r0);
                                                 | label_7:
    0x00001d60 blx 0x169c                        |         stack_chk_fail ();
                                                 | label_13:
    0x00001d64 ldr r2, [pc, 0x5c]                |         
    0x00001d66 ldr r0, [pc, 0x34]                |         r0 = *(0x1d9e);
    0x00001d68 add r2, pc                        |         r2 = 0x3b30;
    0x00001d6a b 0x1cb2                          |         
                                                 |     } while (1);
                                                 | label_6:
    0x00001d6c ldr r1, [pc, 0x2c]                |     r1 = *(0x1d9c);
    0x00001d6e mov r3, r6                        |     r3 = r6;
    0x00001d70 ldr r2, [pc, 0x54]                |     
    0x00001d72 ldr r0, [r5, r1]                  |     r0 = *((r5 + r1));
    0x00001d74 movs r1, 1                        |     r1 = 1;
    0x00001d76 str r4, [sp]                      |     *(sp) = r4;
    0x00001d78 add r2, pc                        |     r2 = 0x3b44;
    0x00001d7a ldr r0, [r0]                      |     r0 = *(r0);
    0x00001d7c blx 0x1858                        |     fprintf_chk ()
    0x00001d80 movs r0, 1                        |     r0 = 1;
    0x00001d82 blx 0x1780                        |     exit (r0);
    0x00001d86 nop                               |     
    0x00001d88 rsbs r0, r5, 0                    |     r0 = r5 - ;
    0x00001d8a movs r1, r0                       |     r1 = r0;
    0x00001d8c lsls r0, r0, 5                    |     r0 <<= 5;
    0x00001d8e movs r0, r0                       |     
    0x00001d90 rsbs r0, r4, 0                    |     r0 = r4 - ;
    0x00001d92 movs r1, r0                       |     r1 = r0;
    0x00001d94 tst r4, r2                        |     
    0x00001d96 movs r1, r0                       |     r1 = r0;
    0x00001d98 movs r7, 0xa0                     |     r7 = 0xa0;
    0x00001d9a movs r0, r0                       |     
    0x00001d9c lsls r4, r0, 5                    |     r4 = r0 << 5;
    0x00001d9e movs r0, r0                       |     
    0x00001da0 movs r7, 0x3e                     |     r7 = 0x3e;
    0x00001da2 movs r0, r0                       |     
    0x00001da4 movs r7, 0x36                     |     r7 = 0x36;
    0x00001da6 movs r0, r0                       |     
    0x00001da8 movs r7, 0x2e                     |     r7 = 0x2e;
    0x00001daa movs r0, r0                       |     
    0x00001dac movs r7, 0x26                     |     r7 = 0x26;
    0x00001dae movs r0, r0                       |     
    0x00001db0 movs r7, 0x1e                     |     r7 = 0x1e;
    0x00001db2 movs r0, r0                       |     
    0x00001db4 movs r7, 0x16                     |     r7 = 0x16;
    0x00001db6 movs r0, r0                       |     
    0x00001db8 movs r7, 0xe                      |     r7 = 0xe;
    0x00001dba movs r0, r0                       |     
    0x00001dbc cmp r2, 0xc4                      |     
    0x00001dbe movs r0, r0                       |     
    0x00001dc0 movs r7, 0x16                     |     r7 = 0x16;
    0x00001dc2 movs r0, r0                       |     
    0x00001dc4 movs r6, 0xb8                     |     r6 = 0xb8;
    0x00001dc6 movs r0, r0                       |     
    0x00001dc8 movs r6, 0xc4                     |     r6 = 0xc4;
    0x00001dca movs r0, r0                       |     
                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/bin/keyctl @ 0x2440 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00002440 ()                                      | void fcn_00002440 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_bp_4h;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_24h_3;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_2ch_3;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     char * s;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int32_t var_4ch_3;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_8h_2;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h_2;
                                                                 |     int16_t var_14h_2;
                                                                 |     int16_t var_1ch_2;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h_2;
                                                                 |     int16_t var_28h_2;
                                                                 |     int16_t var_2ch_2;
                                                                 |     int16_t var_30h_2;
                                                                 |     int16_t var_34h_2;
                                                                 |     int16_t var_38h_2;
                                                                 |     int16_t var_3ch_2;
                                                                 |     char * ptr;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch_2;
                                                                 |     int16_t var_50h;
                                                                 |     char * s1;
                                                                 |     int16_t var_15ch;
                                                                 |     int16_t var_0h_3;
                                                                 |     int16_t var_4h_3;
                                                                 |     int16_t var_8h_3;
                                                                 |     int16_t var_ch_2;
                                                                 |     int32_t var_10h_3;
                                                                 |     int32_t var_10h_4;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00002440 svcmi 0xf0e92d                                    |     __asm ("svcmi 0xf0e92d");
    0x00002444 mov r4, r0                                        |     r4 = r0;
    0x00002446 ldr r6, [pc, 0x12c]                               |     
    0x00002448 sub sp, 0x1c                                      |     
    0x0000244a mov r7, r1                                        |     r7 = r1;
    0x0000244c mov sb, r2                                        |     sb = r2;
    0x0000244e mov r5, r3                                        |     r5 = r3;
    0x00002450 add r6, pc                                        |     r6 = 0x49ca;
    0x00002452 ldr.w fp, [r6, 4]                                 |     fp = *(0x49ce);
    0x00002456 cmp.w fp, 0                                       |     
    0x00002458 lsrs r0, r0, 0x1c                                 |     r0 >>= 0x1c;
                                                                 |     if (r0 == r0) {
    0x0000245a beq 0x24fe                                        |         goto label_9;
                                                                 |     }
    0x0000245c ldr.w sl, [r6, 8]                                 |     sl = *((r6 + 8));
                                                                 | label_0:
    0x00002460 lsr.w ip, r7, 0x18                                |     
    0x00002464 cmp sl, sb                                        |     
    0x00002466 itt eq                                            |     
                                                                 |     if (sl != sb) {
    0x00002468 orreq r1, ip, r7, lsr 16                          |         r1 = ip | (r7 >> 16);
                                                                 |     }
                                                                 |     if (sl == sb) {
    0x0000246c and r1, r1, 0x3f                                  |         r1 &= 0x3f;
                                                                 |     }
                                                                 |     if (sl == sb) {
    0x00002470 beq 0x24a0                                        |         goto label_1;
                                                                 |     }
    0x00002472 adds r1, r5, 1                                    |     r1 = r5 + 1;
                                                                 |     if (r1 == r5) {
    0x00002474 beq 0x255a                                        |         goto label_10;
                                                                 |     }
    0x00002476 ldr r3, [pc, 0x100]                               |     
    0x00002478 add r3, pc                                        |     r3 = 0x49f6;
    0x0000247a ldr r2, [r3, 0xc]                                 |     r2 = *(0x4a02);
    0x0000247c cmp r2, r5                                        |     
                                                                 |     if (r2 == r5) {
    0x0000247e beq 0x2498                                        |         goto label_11;
                                                                 |     }
    0x00002480 ldrd r2, r0, [r3, 0x10]                           |     __asm ("ldrd r2, r0, [r3, 0x10]");
    0x00002484 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x00002486 ble 0x255a                                        |         goto label_10;
                                                                 |     }
    0x00002488 subs r0, 4                                        |     r0 -= 4;
    0x0000248a b 0x2490                                          |     
                                                                 |     while (r3 != r5) {
    0x0000248c subs r2, 1                                        |         r2--;
                                                                 |         if (r2 == 1) {
    0x0000248e beq 0x255a                                        |             goto label_10;
                                                                 |         }
    0x00002490 ldr r3, [r0, 4]!                                  |         r3 = *((r0 += 4));
    0x00002494 cmp r3, r5                                        |         
    0x00002496 bne 0x248c                                        |         
                                                                 |     }
                                                                 | label_11:
    0x00002498 orr.w r1, ip, r7, lsr 8                           |     r1 = ip | (r7 >> 8);
    0x0000249c and r1, r1, 0x3f                                  |     r1 &= 0x3f;
                                                                 | label_1:
    0x000024a0 tst.w r1, 0x20                                    |     
    0x000024a4 mov r0, r4                                        |     r0 = r4;
    0x000024a6 ite ne                                            |     
                                                                 |     if ((r1 & 0x20) == 0) {
    0x000024a8 movne r3, 0x61                                    |         r3 = 0x61;
                                                                 |     }
                                                                 |     if ((r1 & 0x20) != 0) {
    0x000024aa moveq r3, 0x2d                                    |         r3 = 0x2d;
                                                                 |     }
    0x000024ac tst.w r1, 0x10                                    |     
    0x000024b0 str r3, [sp]                                      |     *(sp) = r3;
    0x000024b2 ite ne                                            |     
                                                                 |     if ((r1 & 0x10) == 0) {
    0x000024b4 movne r3, 0x6c                                    |         r3 = 0x6c;
                                                                 |     }
                                                                 |     if ((r1 & 0x10) != 0) {
    0x000024b6 moveq r3, 0x2d                                    |         r3 = 0x2d;
                                                                 |     }
    0x000024b8 tst.w r1, 8                                       |     
    0x000024bc str r3, [sp, 4]                                   |     var_4h_3 = r3;
    0x000024be ite ne                                            |     
                                                                 |     if ((r1 & 8) == 0) {
    0x000024c0 movne r3, 0x73                                    |         r3 = 0x73;
                                                                 |     }
                                                                 |     if ((r1 & 8) != 0) {
    0x000024c2 moveq r3, 0x2d                                    |         r3 = 0x2d;
                                                                 |     }
    0x000024c4 tst.w r1, 4                                       |     
    0x000024c8 str r3, [sp, 8]                                   |     var_8h_3 = r3;
    0x000024ca ite ne                                            |     
                                                                 |     if ((r1 & 4) == 0) {
    0x000024cc movne r4, 0x77                                    |         r4 = 0x77;
                                                                 |     }
                                                                 |     if ((r1 & 4) != 0) {
    0x000024ce moveq r4, 0x2d                                    |         r4 = 0x2d;
                                                                 |     }
    0x000024d0 ldr r3, [pc, 0xa8]                                |     
    0x000024d2 tst.w r1, 2                                       |     
    0x000024d6 ite ne                                            |     
                                                                 |     if ((r1 & 2) == 0) {
    0x000024d8 movne r2, 0x72                                    |         r2 = 0x72;
                                                                 |     }
                                                                 |     if ((r1 & 2) != 0) {
    0x000024da moveq r2, 0x2d                                    |         r2 = 0x2d;
                                                                 |     }
    0x000024dc tst.w r1, 1                                       |     
    0x000024e0 str r4, [sp, 0xc]                                 |     var_ch_2 = r4;
    0x000024e2 ite ne                                            |     
                                                                 |     if ((r1 & 1) == 0) {
    0x000024e4 movne r1, 0x76                                    |         r1 = 0x76;
                                                                 |     }
                                                                 |     if ((r1 & 1) != 0) {
    0x000024e6 moveq r1, 0x2d                                    |         r1 = 0x2d;
                                                                 |     }
    0x000024e8 strd r2, r1, [sp, 0x10]                           |     __asm ("strd r2, r1, [var_10h_3]");
    0x000024ec add r3, pc                                        |     r3 = 0x4a6c;
    0x000024ee mov.w r2, -1                                      |     r2 = -1;
    0x000024f2 movs r1, 1                                        |     r1 = 1;
    0x000024f4 blx 0x1810                                        |     sprintf_chk ();
    0x000024f8 add sp, 0x1c                                      |     
    0x000024fa pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_9:
    0x000024fe movs r3, 1                                        |     r3 = 1;
    0x00002500 str r3, [r6, 4]                                   |     *((r6 + 4)) = r3;
    0x00002502 blx 0x16b4                                        |     r0 = geteuid ();
    0x00002506 mov sl, r0                                        |     sl = r0;
    0x00002508 str r0, [r6, 8]                                   |     *((r6 + 8)) = r0;
    0x0000250a blx 0x16cc                                        |     getegid ();
    0x0000250e mov r1, fp                                        |     r1 = fp;
    0x00002510 mov r8, r0                                        |     r8 = r0;
    0x00002512 str r0, [r6, 0xc]                                 |     *((r6 + 0xc)) = r0;
    0x00002514 mov r0, fp                                        |     r0 = fp;
    0x00002516 blx 0x18b8                                        |     getgroups ();
    0x0000251a cmp.w r8, -1                                      |     
    0x0000251e it ne                                             |     
                                                                 |     if (r8 != -1) {
    0x00002520 cmpne sl, -1                                      |         __asm ("cmpne sl, -1");
                                                                 |     }
    0x00002524 mov fp, r0                                        |     
    0x00002526 ite eq                                            |     
                                                                 |     if (r8 != -1) {
    0x00002528 moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r8 == -1) {
    0x0000252a movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0000252c cmp.w r0, -1                                      |     
    0x00002530 it eq                                             |     
                                                                 |     if (r0 != -1) {
    0x00002532 orreq r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x00002536 str r0, [r6, 0x10]                                |     *((r6 + 0x10)) = r0;
                                                                 |     if (r3 != 0) {
    0x00002538 cbnz r3, 0x2564                                   |         goto label_12;
                                                                 |     }
    0x0000253a movs r1, 4                                        |     r1 = 4;
    0x0000253c blx 0x15c4                                        |     calloc (r0, r1);
    0x0000253e strex r6, r4, [r2, 4]                             |     __asm ("strex r6, r4, [r2, 4]");
    0x00002542 str r0, [r6, 0x14]                                |     *((r6 + 0x14)) = r0;
                                                                 |     if (r0 == 0) {
    0x00002544 cbz r0, 0x256c                                    |         goto label_13;
                                                                 |     }
    0x00002546 mov r0, fp                                        |     r0 = fp;
    0x00002548 blx 0x18b8                                        |     r0 = getgroups ();
    0x0000254c cmp r0, 0                                         |     
    0x0000254e str r0, [r6, 0x10]                                |     *((r6 + 0x10)) = r0;
                                                                 |     if (r0 >= 0) {
    0x00002550 bge 0x2460                                        |         goto label_0;
                                                                 |     }
    0x00002552 ldr r0, [pc, 0x2c]                                |     
    0x00002554 add r0, pc                                        |     r0 = 0x4ada;
    0x00002556 bl 0x1dcc                                         |     fcn_00001dcc ();
                                                                 | label_10:
    0x0000255a orr.w r1, ip, r7                                  |     r1 = ip | r7;
    0x0000255e and r1, r1, 0x3f                                  |     r1 &= 0x3f;
    0x00002562 b 0x24a0                                          |     goto label_1;
                                                                 | label_12:
    0x00002564 ldr r0, [pc, 0x1c]                                |     
    0x00002566 add r0, pc                                        |     r0 = 0x4aee;
    0x00002568 bl 0x1dcc                                         |     fcn_00001dcc ();
                                                                 | label_13:
    0x0000256c ldr r0, [pc, 0x18]                                |     
    0x0000256e add r0, pc                                        |     r0 = 0x4afa;
    0x00002570 bl 0x1dcc                                         |     fcn_00001dcc ();
    0x00002574 subs r3, 0xb8                                     |     r3 -= 0xb8;
    0x00002576 movs r1, r0                                       |     r1 = r0;
    0x00002578 subs r3, 0x90                                     |     r3 -= 0x90;
    0x0000257a movs r1, r0                                       |     r1 = r0;
    0x0000257c movs r1, 0x84                                     |     r1 = 0x84;
    0x0000257e movs r0, r0                                       |     
    0x00002580 movs r1, 4                                        |     r1 = 4;
    0x00002582 movs r0, r0                                       |     
    0x00002584 movs r0, 0xca                                     |     r0 = 0xca;
    0x00002586 movs r0, r0                                       |     
    0x00002588 movs r0, 0xe2                                     |     r0 = 0xe2;
    0x0000258a movs r0, r0                                       |     
    0x0000258c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00002590 mov fp, r1                                        |     
    0x00002592 ldr r4, [pc, 0x238]                               |     
    0x00002594 cmp.w fp, 0x20                                    |     
    0x00002598 sub sp, 0x164                                     |     
    0x0000259a ldr r1, [pc, 0x234]                               |     r1 = *(0x27d2);
    0x0000259c add r4, pc                                        |     r4 = 0x4d6e;
    0x0000259e ldr r7, [pc, 0x234]                               |     
    0x000025a0 ldr r1, [r4, r1]                                  |     
    0x000025a2 add r7, pc                                        |     r7 = 0x4d7c;
    0x000025a4 ldr r1, [r1]                                      |     r1 = *(0x4d6e);
    0x000025a6 str r1, [sp, 0x15c]                               |     var_15ch = r1;
    0x000025a8 mov.w r1, 0                                       |     r1 = 0;
    0x000025ac strd r3, r2, [sp, 0x1c]                           |     __asm ("strd r3, r2, [var_1ch_2]");
    0x000025b0 ble 0x25d2                                        |     
                                                                 |     while (r0 != 0) {
    0x000025b2 movs r4, 0                                        |         r4 = 0;
                                                                 | label_3:
    0x000025b4 ldr r2, [pc, 0x220]                               |         
    0x000025b6 ldr r3, [pc, 0x218]                               |         r3 = *(0x27d2);
    0x000025b8 add r2, pc                                        |         r2 = 0x4d94;
    0x000025ba ldr r3, [r2, r3]                                  |         r3 = *(0x4d94);
    0x000025bc ldr r2, [r3]                                      |         r2 = *(0x4d94);
    0x000025be ldr r3, [sp, 0x15c]                               |         r3 = var_15ch;
    0x000025c0 eors r2, r3                                       |         r2 ^= r3;
    0x000025c2 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000025c6 bne.w 0x27a6                                      |             goto label_14;
                                                                 |         }
    0x000025ca mov r0, r4                                        |         r0 = r4;
    0x000025cc add sp, 0x164                                     |         
    0x000025ce pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x000025d2 add r6, sp, 0x40                                  |         r6 += ptr;
    0x000025d4 mov r4, r0                                        |         r4 = r0;
    0x000025d6 mov r1, r6                                        |         r1 = r6;
    0x000025d8 blx 0x16f0                                        |         r0 = keyctl_describe_alloc ();
    0x000025dc cmp r0, 0                                         |         
                                                                 |         if (r0 < 0) {
    0x000025de blt.w 0x276e                                      |             goto label_15;
                                                                 |         }
    0x000025e0 strh r6, [r0, 6]                                  |         *((r0 + 6)) = r6;
    0x000025e2 ldr r1, [pc, 0x1f8]                               |         
    0x000025e4 add r3, sp, 0x4c                                  |         r3 += var_4ch_2;
    0x000025e6 str r3, [sp, 8]                                   |         var_8h_2 = r3;
    0x000025e8 add r5, sp, 0x5c                                  |         r5 += s1;
    0x000025ea add.w sb, sp, 0x44                                |         sb += var_44h;
    0x000025ee add.w r8, sp, 0x48                                |         r8 += var_48h;
    0x000025f2 add.w sl, sp, 0x38                                |         sl += var_38h_2;
    0x000025f6 str r3, [sp, 0x24]                                |         var_24h_2 = r3;
    0x000025f8 movs r3, 0                                        |         r3 = 0;
    0x000025fa str.w r8, [sp]                                    |         __asm ("str.w r8, [sp]");
    0x000025fe str.w sl, [sp, 4]                                 |         __asm ("str.w sl, [var_4h_2]");
    0x00002602 add r1, pc                                        |         r1 = 0x4de4;
    0x00002604 strb r3, [r5]                                     |         *(r5) = r3;
    0x00002606 mov r2, r5                                        |         r2 = r5;
    0x00002608 str.w r3, [sb]                                    |         __asm ("str.w r3, [sb]");
    0x0000260a adds r0, 0                                        |         r0 += 0;
    0x0000260c str.w r3, [r8]                                    |         __asm ("str.w r3, [r8]");
    0x00002610 str.w r3, [sl]                                    |         __asm ("str.w r3, [sl]");
    0x00002614 mov r3, sb                                        |         r3 = sb;
    0x00002616 ldr r0, [r6]                                      |         r0 = *(r6);
    0x00002618 blx 0x181c                                        |         r0 = isoc99_sscanf ();
    0x0000261c cmp r0, 4                                         |         
                                                                 |         if (r0 != 4) {
    0x0000261e bne.w 0x27aa                                      |             goto label_16;
                                                                 |         }
    0x00002622 add r7, sp, 0x50                                  |         r7 += var_50h;
    0x00002624 ldr.w r3, [r8]                                    |         r3 = *(r8);
    0x00002628 ldr.w r1, [sl]                                    |         r1 = *(sl);
    0x0000262c mov r0, r7                                        |         r0 = r7;
    0x0000262e ldr.w r2, [sb]                                    |         r2 = *(sb);
    0x00002632 bl 0x2440                                         |         fcn_00002440 (r0, r1, r2, r3);
    0x00002636 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch_2;
    0x00002638 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0000263a bne 0x2732                                        |             goto label_17;
                                                                 |         }
    0x0000263c cmp.w fp, 0                                       |         
    0x00002640 ldr.w r3, [sb]                                    |         r3 = *(sb);
    0x00002644 ldr.w r2, [r8]                                    |         r2 = *(r8);
                                                                 |         if (fp <= 0) {
    0x00002648 ble.w 0x279a                                      |             goto label_18;
                                                                 |         }
    0x0000264c ldr r1, [pc, 0x190]                               |         
    0x0000264e add r1, pc                                        |         r1 = 0x4e32;
                                                                 | label_5:
    0x00002650 strd r3, r2, [sp]                                 |         __asm ("strd r3, r2, [sp]");
    0x00002654 movs r0, 1                                        |         r0 = 1;
    0x00002656 ldr r3, [sp, 0x24]                                |         r3 = var_24h_2;
    0x00002658 str r1, [sp, 0xc]                                 |         var_ch = r1;
    0x0000265a ldr r1, [r3]                                      |         r1 = *(r3);
    0x0000265c mov r3, r7                                        |         r3 = r7;
    0x0000265e str r5, [sp, 0x10]                                |         var_10h_2 = r5;
    0x00002660 ldr r2, [r6]                                      |         r2 = *(r6);
    0x00002662 add r2, r1                                        |         r2 += r1;
    0x00002664 ldr r1, [pc, 0x17c]                               |         
    0x00002666 str r2, [sp, 0x14]                                |         var_14h_2 = r2;
    0x00002668 ldr r2, [pc, 0x17c]                               |         
    0x0000266a add r1, pc                                        |         r1 = 0x4e52;
    0x0000266c add r2, pc                                        |         r2 = "<key> <timeout> <keyring>";
    0x0000266e adds r2, 0x18                                     |         r2 += 0x18;
    0x00002670 str r2, [sp, 8]                                   |         var_8h_2 = r2;
    0x00002672 mov r2, r4                                        |         r2 = r4;
    0x00002674 blx 0x1834                                        |         printf_chk ();
                                                                 | label_2:
    0x00002678 ldr r7, [pc, 0x170]                               |         
    0x0000267a ldr r0, [r6]                                      |         r0 = *(r6);
    0x0000267c blx 0x163c                                        |         free (r0);
    0x00002680 add r7, pc                                        |         r7 = 0x4e70;
    0x00002682 mov r0, r5                                        |         r0 = r5;
    0x00002684 mov r1, r7                                        |         r1 = r7;
    0x00002686 blx 0x1600                                        |         r0 = strcmp (r0, r1);
    0x0000268a cmp r0, 0                                         |         
    0x0000268c bne 0x25b2                                        |         
                                                                 |     }
    0x0000268e add.w sb, sp, 0x3c                                |     sb += var_3ch_2;
    0x00002692 mov r0, r4                                        |     r0 = r4;
    0x00002694 mov r1, sb                                        |     r1 = sb;
    0x00002696 blx 0x18ac                                        |     r0 = keyctl_read_alloc ();
    0x0000269a subs r6, r0, 0                                    |     r6 = r0 - 0;
                                                                 |     if (r6 < r0) {
    0x0000269c blt.w 0x27c2                                      |         goto label_19;
                                                                 |     }
    0x000026a0 cmp r6, 3                                         |     
    0x000026a2 ldr.w r8, [sb]                                    |     r8 = *(sb);
    0x000026a6 lsr.w r4, r6, 2                                   |     r4 = r6 >> 2;
                                                                 |     if (r6 <= 3) {
    0x000026aa ble 0x272a                                        |         goto label_20;
                                                                 |     }
    0x000026ac ldr r3, [pc, 0x140]                               |     
    0x000026ae cmp.w fp, 0                                       |     
    0x000026b2 ldr r2, [pc, 0x140]                               |     
    0x000026b4 str.w fp, [sp, 0x24]                              |     __asm ("str.w fp, [var_24h_2]");
    0x000026b8 add r3, pc                                        |     r3 = 0x4eac;
    0x000026ba add r3, fp                                        |     r3 += fp;
    0x000026bc add r2, pc                                        |     r2 = 0x4eb6;
    0x000026be str r3, [sp, 0x2c]                                |     var_2ch_2 = r3;
    0x000026c0 ldr r3, [pc, 0x134]                               |     
    0x000026c2 str r2, [sp, 0x34]                                |     var_34h_2 = r2;
    0x000026c4 add.w r2, fp, 4                                   |     r2 += var_bp_4h;
    0x000026c8 str r2, [sp, 0x28]                                |     var_28h_2 = r2;
    0x000026ca it eq                                             |     
                                                                 |     if (fp != 0) {
    0x000026cc moveq r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x000026ce add r3, pc                                        |     r3 = 0x4eca;
    0x000026d0 add.w sl, r3, fp                                  |     sl = r3 + fp;
    0x000026d4 ldr.w fp, [sp, 0x1c]                              |     fp = var_1ch_2;
    0x000026d8 str.w sb, [sp, 0x1c]                              |     __asm ("str.w sb, [var_1ch_2]");
    0x000026dc mov sb, r2                                        |     sb = r2;
    0x000026de str r3, [sp, 0x30]                                |     var_30h_2 = r3;
                                                                 |     do {
    0x000026e0 mov r1, r7                                        |         r1 = r7;
    0x000026e2 mov r0, r5                                        |         r0 = r5;
    0x000026e4 blx 0x1600                                        |         strcmp (r0, r1);
    0x000026e8 add.w r8, r8, 4                                   |         r8 += 4;
    0x000026ec subs r6, 4                                        |         r6 -= 4;
    0x000026ee mov r3, r0                                        |         r3 = r0;
                                                                 |         if (r0 == 0) {
    0x000026f0 cbnz r0, 0x271e                                   |             
    0x000026f2 ldr r2, [sp, 0x24]                                |             r2 = var_24h_2;
    0x000026f4 ldr r0, [r8, -0x4]                                |             r0 = *((r8 - 0x4));
    0x000026f8 cmp r2, 0                                         |             
                                                                 |             if (r2 != 0) {
    0x000026fa bne 0x277e                                        |                 goto label_21;
                                                                 |             }
    0x000026fc ldr r2, [sp, 0x34]                                |             r2 = var_34h_2;
    0x000026fe movs r3, 0x20                                     |             r3 = 0x20;
    0x00002700 strh r3, [r2, 0x18]                               |             *((r2 + 0x18)) = r3;
                                                                 | label_4:
    0x00002702 ldr r3, [sp, 0x20]                                |             r3 = var_20h;
                                                                 |             if (r3 != 0) {
    0x00002704 cbz r3, 0x270c                                    |                 
    0x00002706 ldr r2, [sp, 0x2c]                                |                 r2 = var_2ch_2;
    0x00002708 movs r3, 0x7c                                     |                 r3 = 0x7c;
    0x0000270a strb r3, [r2, 0x18]                               |                 *((r2 + 0x18)) = r3;
                                                                 |             }
    0x0000270c cmp r6, 3                                         |             
    0x0000270e mov r3, fp                                        |             r3 = fp;
    0x00002710 ite ls                                            |             
                                                                 |             if (r6 > 3) {
    0x00002712 movls r2, 0                                       |                 r2 = 0;
                                                                 |             }
                                                                 |             if (r6 <= 3) {
    0x00002714 movhi r2, 1                                       |                 r2 = 1;
                                                                 |             }
    0x00002716 mov r1, sb                                        |             r1 = sb;
    0x00002718 bl 0x258c                                         |             r0 = void (*0x258c)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0000271c add r4, r0                                        |             r4 += r0;
                                                                 |         }
    0x0000271e cmp r6, 3                                         |         
    0x00002720 bhi 0x26e0                                        |         
                                                                 |     } while (r6 > 3);
    0x00002722 ldr.w sb, [sp, 0x1c]                              |     sb = var_1ch_2;
    0x00002726 ldr.w r8, [sb]                                    |     r8 = *(sb);
                                                                 | label_20:
    0x0000272a mov r0, r8                                        |     r0 = r8;
    0x0000272c blx 0x163c                                        |     free (r0);
    0x0000272e invalid                                           |     
                                                                 | label_17:
    0x00002732 cmp.w fp, 0                                       |     
    0x00002736 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x0000273a ldr.w r2, [r8]                                    |     r2 = *(r8);
    0x0000273c movs r0, 0                                        |     r0 = 0;
                                                                 |     if (r0 <= 0) {
    0x0000273e ble 0x27a0                                        |         goto label_22;
                                                                 |     }
    0x00002740 ldr r1, [pc, 0xb8]                                |     
    0x00002742 add r1, pc                                        |     r1 = 0x4f42;
                                                                 |     do {
    0x00002744 strd r3, r2, [sp]                                 |         __asm ("strd r3, r2, [sp]");
    0x00002748 movs r0, 1                                        |         r0 = 1;
    0x0000274a ldr r3, [sp, 0x24]                                |         r3 = var_24h_2;
    0x0000274c str r1, [sp, 0xc]                                 |         var_ch = r1;
    0x0000274e ldr r1, [r3]                                      |         r1 = *(r3);
    0x00002750 mov r3, r7                                        |         r3 = r7;
    0x00002752 str r5, [sp, 0x10]                                |         var_10h_2 = r5;
    0x00002754 ldr r2, [r6]                                      |         r2 = *(r6);
    0x00002756 add r2, r1                                        |         r2 += r1;
    0x00002758 ldr r1, [pc, 0xa4]                                |         
    0x0000275a str r2, [sp, 0x14]                                |         var_14h_2 = r2;
    0x0000275c ldr r2, [pc, 0xa4]                                |         
    0x0000275e add r1, pc                                        |         r1 = 0x4f62;
    0x00002760 add r2, pc                                        |         r2 = 0x4f68;
    0x00002762 adds r2, 0x18                                     |         r2 += 0x18;
    0x00002764 str r2, [sp, 8]                                   |         var_8h_2 = r2;
    0x00002766 mov r2, r4                                        |         r2 = r4;
    0x00002768 blx 0x1834                                        |         printf_chk ();
    0x0000276c b 0x2678                                          |         goto label_2;
                                                                 | label_15:
    0x0000276e ldr r1, [pc, 0x98]                                |         
    0x00002770 mov r2, r4                                        |         r2 = r4;
    0x00002772 movs r0, 1                                        |         r0 = 1;
    0x00002774 movs r4, 0                                        |         r4 = 0;
    0x00002776 add r1, pc                                        |         r1 = "<type> <desc> [<dest_keyring>]";
    0x00002778 blx 0x1834                                        |         printf_chk ();
    0x0000277c b 0x25b4                                          |         goto label_3;
                                                                 | label_21:
    0x0000277e movs r2, 0x20                                     |         r2 = 0x20;
    0x00002780 ldr r1, [sp, 0x28]                                |         r1 = var_28h_2;
    0x00002782 strb.w r2, [sl, 0x18]                             |         *((sl + 0x18)) = r2;
    0x00002786 strb.w r2, [sl, 0x19]                             |         *((sl + 0x19)) = r2;
    0x0000278a strb.w r2, [sl, 0x1a]                             |         *((sl + 0x1a)) = r2;
    0x0000278e strb.w r2, [sl, 0x1b]                             |         *((sl + 0x1b)) = r2;
    0x00002792 ldr r2, [sp, 0x30]                                |         r2 = var_30h_2;
    0x00002794 add r2, r1                                        |         r2 += r1;
    0x00002796 strb r3, [r2, 0x18]                               |         *((r2 + 0x18)) = r3;
    0x00002798 b 0x2702                                          |         goto label_4;
                                                                 | label_18:
    0x0000279a ldr r1, [pc, 0x70]                                |         
    0x0000279c add r1, pc                                        |         r1 = 0x4fae;
    0x0000279e b 0x2650                                          |         goto label_5;
                                                                 | label_22:
    0x000027a0 ldr r1, [pc, 0x6c]                                |         
    0x000027a2 add r1, pc                                        |         r1 = 0x4fb6;
    0x000027a4 b 0x2744                                          |         
                                                                 |     } while (1);
                                                                 | label_14:
    0x000027a6 blx 0x169c                                        |     stack_chk_fail ();
                                                                 | label_16:
    0x000027aa ldr r0, [pc, 0x68]                                |     
    0x000027ac mov r3, r4                                        |     r3 = r4;
    0x000027ae ldr r2, [pc, 0x68]                                |     
    0x000027b0 movs r1, 1                                        |     r1 = 1;
    0x000027b2 ldr r0, [r7, r0]                                  |     r0 = *((r7 + r0));
    0x000027b4 add r2, pc                                        |     r2 = 0x4fd2;
    0x000027b6 ldr r0, [r0]                                      |     r0 = *(0x2816);
    0x000027b8 blx 0x1858                                        |     fprintf_chk ()
    0x000027bc movs r0, 3                                        |     r0 = 3;
    0x000027be blx 0x1780                                        |     exit (r0);
                                                                 | label_19:
    0x000027c2 ldr r0, [pc, 0x58]                                |     
    0x000027c4 add r0, pc                                        |     r0 = 0x4fe6;
    0x000027c6 bl 0x1dcc                                         |     fcn_00001dcc ();
    0x000027ca nop                                               |     
    0x000027cc subs r1, 0                                        |     
    0x000027ce movs r1, r0                                       |     r1 = r0;
    0x000027d0 lsls r0, r0, 5                                    |     r0 <<= 5;
    0x000027d2 movs r0, r0                                       |     
    0x000027d4 subs r0, 0xfa                                     |     r0 -= 0xfa;
    0x000027d6 movs r1, r0                                       |     r1 = r0;
    0x000027d8 subs r0, 0xe4                                     |     r0 -= 0xe4;
    0x000027da movs r1, r0                                       |     r1 = r0;
    0x000027dc movs r0, 0x9e                                     |     r0 = 0x9e;
    0x000027de movs r0, r0                                       |     
    0x000027e0 movs r0, 0x32                                     |     r0 = 0x32;
    0x000027e2 movs r0, r0                                       |     
    0x000027e4 movs r0, 0x6a                                     |     r0 = 0x6a;
    0x000027e6 movs r0, r0                                       |     
    0x000027e8 subs r1, 0x9c                                     |     r1 -= 0x9c;
    0x000027ea movs r1, r0                                       |     r1 = r0;
    0x000027ec movs r1, 0x64                                     |     r1 = 0x64;
    0x000027ee movs r0, r0                                       |     
    0x000027f0 subs r1, 0x50                                     |     r1 -= 0x50;
    0x000027f2 movs r1, r0                                       |     r1 = r0;
    0x000027f4 subs r1, 0x4c                                     |     r1 -= 0x4c;
    0x000027f6 movs r1, r0                                       |     r1 = r0;
    0x000027f8 subs r1, 0x3a                                     |     r1 -= 0x3a;
    0x000027fa movs r1, r0                                       |     r1 = r0;
    0x000027fc subs r6, r7, 4                                    |     r6 = r7 - 4;
    0x000027fe movs r0, r0                                       |     
    0x00002800 subs r6, r2, 5                                    |     r6 = r2 - 5;
    0x00002802 movs r0, r0                                       |     
    0x00002804 subs r0, 0xa8                                     |     r0 -= 0xa8;
    0x00002806 movs r1, r0                                       |     r1 = r0;
    0x00002808 subs r6, r1, 4                                    |     r6 = r1 - 4;
    0x0000280a movs r0, r0                                       |     
    0x0000280c subs r0, r6, r3                                   |     r0 = r6 - r3;
    0x0000280e movs r0, r0                                       |     
    0x00002810 subs r2, r5, r3                                   |     r2 = r5 - r3;
    0x00002812 movs r0, r0                                       |     
    0x00002814 lsls r4, r0, 5                                    |     r4 = r0 << 5;
    0x00002816 movs r0, r0                                       |     
    0x00002818 adds r4, r4, 7                                    |     r4 += 7;
    0x0000281a movs r0, r0                                       |     
    0x0000281c subs r0, r2, 1                                    |     r0 = r2 - 1;
    0x0000281e movs r0, r0                                       |     
    0x00002820 cmp r0, 1                                         |     
    0x00002822 push {r3, lr}                                     |     
                                                                 |     if (r0 <= 1) {
    0x00002824 ble 0x2848                                        |         goto label_23;
                                                                 |     }
    0x00002826 mov r5, r1                                        |     r5 = r1;
    0x00002828 ldr r1, [pc, 0x68]                                |     
    0x0000282a mov r4, r0                                        |     r4 = r0;
    0x0000282c ldr r0, [r5, 4]                                   |     r0 = *((r5 + 4));
    0x0000282e add r1, pc                                        |     r1 = 0x50c6;
    0x00002830 blx 0x1600                                        |     r0 = strcmp (r0, r1);
                                                                 |     if (r0 == 0) {
    0x00002834 cbz r0, 0x2840                                    |         goto label_24;
                                                                 |     }
    0x00002836 movs r6, 0                                        |     r6 = 0;
                                                                 |     do {
    0x00002838 cmp r4, 2                                         |         
                                                                 |         if (r4 <= 2) {
    0x0000283a ble 0x2872                                        |             goto label_25;
                                                                 |         }
    0x0000283c bl 0x1af0                                         |         fcn_00001af0 ();
                                                                 | label_24:
    0x00002840 subs r4, 1                                        |         r4--;
    0x00002842 adds r5, 4                                        |         r5 += 4;
    0x00002844 movs r6, 1                                        |         r6 = 1;
    0x00002846 b 0x2838                                          |         
                                                                 |     } while (1);
                                                                 | label_23:
    0x00002848 ldr r0, [pc, 0x4c]                                |     
    0x0000284a movs r6, 0                                        |     r6 = 0;
    0x0000284c mvn r4, 2                                         |     r4 = ~2;
    0x00002850 add r0, pc                                        |     r0 = 0x50ec;
                                                                 |     do {
                                                                 | label_6:
    0x00002852 blx 0x172c                                        |         puts (r0);
    0x00002856 movs r1, 0                                        |         r1 = 0;
    0x00002858 mov r0, r4                                        |         r0 = r4;
    0x0000285a blx 0x187c                                        |         r0 = keyctl_get_keyring_ID ();
    0x0000285e adds r3, r0, 1                                    |         r3 = r0 + 1;
                                                                 |         if (r3 == r0) {
    0x00002860 beq 0x288c                                        |             goto label_26;
                                                                 |         }
    0x00002862 movs r2, 0                                        |         r2 = 0;
    0x00002864 mov r3, r6                                        |         r3 = r6;
    0x00002866 mov r1, r2                                        |         r1 = r2;
    0x00002868 bl 0x258c                                         |         void (*0x258c)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0000286c movs r0, 0                                        |         r0 = 0;
    0x0000286e blx 0x1780                                        |         exit (r0);
                                                                 |         if (r0 != 0) {
                                                                 | label_25:
    0x00002872 bne 0x2882                                        |             goto label_27;
                                                                 |         }
    0x00002874 ldr r0, [r5, 4]                                   |         r0 = *((r5 + 4));
    0x00002876 bl 0x1c2c                                         |         r0 = fcn_00001c2c (r0);
    0x0000287a mov r4, r0                                        |         r4 = r0;
    0x0000287c ldr r0, [pc, 0x1c]                                |         
    0x0000287e add r0, pc                                        |         r0 = 0x511e;
    0x00002880 b 0x2852                                          |         
                                                                 |     } while (1);
                                                                 | label_27:
    0x00002882 ldr r0, [pc, 0x1c]                                |     
    0x00002884 mvn r4, 2                                         |     r4 = ~2;
    0x00002888 add r0, pc                                        |     r0 = 0x512e;
    0x0000288a b 0x2852                                          |     goto label_6;
                                                                 | label_26:
    0x0000288c ldr r0, [pc, 0x14]                                |     
    0x0000288e add r0, pc                                        |     r0 = 0x5136;
    0x00002890 bl 0x1dcc                                         |     fcn_00001dcc ();
    0x00002894 subs r6, r2, 3                                    |     r6 = r2 - 3;
    0x00002896 movs r0, r0                                       |     
    0x00002898 subs r4, r4, 2                                    |     r4 -= 2;
    0x0000289a movs r0, r0                                       |     
    0x0000289c subs r6, r7, 1                                    |     r6 = r7 - 1;
    0x0000289e movs r0, r0                                       |     
    0x000028a0 subs r4, r5, 1                                    |     r4 = r5 - 1;
    0x000028a2 movs r0, r0                                       |     
    0x000028a4 subs r2, r7, 1                                    |     r2 = r7 - 1;
    0x000028a6 movs r0, r0                                       |     
    0x000028a8 ldr r2, [pc, 0x124]                               |     
    0x000028aa cmp r0, 2                                         |     
    0x000028ac ldr r3, [pc, 0x124]                               |     r3 = *(0x29d4);
    0x000028ae push.w {r7, fp, lr}                               |     
    0x000028b2 sub sp, 0x54                                      |     
    0x000028b4 add r2, pc                                        |     r2 = 0x5288;
    0x000028b6 ldr r6, [pc, 0x120]                               |     
    0x000028b8 ldr r3, [r2, r3]                                  |     
    0x000028ba add r6, pc                                        |     r6 = 0x5298;
    0x000028bc ldr r3, [r3]                                      |     r3 = *(0x5288);
    0x000028be str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x000028c0 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r0 != 2) {
    0x000028c4 beq 0x28ca                                        |         
    0x000028c6 bl 0x1af0                                         |         fcn_00001af0 ();
                                                                 |     }
    0x000028ca ldr r0, [r1, 4]                                   |     r0 = *((r1 + 4));
    0x000028cc bl 0x1c2c                                         |     fcn_00001c2c (r0);
    0x000028d0 add r1, sp, 0x28                                  |     r1 += var_28h;
    0x000028d2 blx 0x18ac                                        |     r0 = keyctl_read_alloc ();
    0x000028d6 cmp r0, 0                                         |     
                                                                 |     if (r0 < 0) {
    0x000028d8 blt 0x29a2                                        |         goto label_28;
                                                                 |     }
    0x000028da lsrs r4, r0, 2                                    |     r4 = r0 >> 2;
                                                                 |     if (r4 == r0) {
    0x000028dc beq 0x298e                                        |         goto label_29;
                                                                 |     }
    0x000028de cmp r4, 1                                         |     
                                                                 |     if (r4 == 1) {
    0x000028e0 beq 0x29c6                                        |         goto label_30;
                                                                 |     }
    0x000028e2 ldr r1, [pc, 0xf8]                                |     
    0x000028e4 mov r2, r4                                        |     r2 = r4;
    0x000028e6 movs r0, 1                                        |     r0 = 1;
    0x000028e8 add r1, pc                                        |     r1 = 0x52ca;
    0x000028ea blx 0x1834                                        |     printf_chk ();
                                                                 | label_8:
    0x000028ee ldr r3, [pc, 0xf0]                                |     
    0x000028f0 add r7, sp, 0x2c                                  |     r7 += s;
    0x000028f2 ldr.w r8, [pc, 0xf0]                              |     
    0x000028f6 ldr.w sb, [pc, 0xf0]                              |     
    0x000028fa add r3, pc                                        |     r3 = 0x52e0;
    0x000028fc ldr r5, [sp, 0x28]                                |     r5 = var_28h;
    0x000028fe add r8, pc                                        |     r8 = 0x52e8;
    0x00002900 mov sl, r3                                        |     sl = r3;
    0x00002902 add sb, pc                                        |     sb = 0x52f0;
    0x00002904 str r6, [sp, 0x1c]                                |     var_1ch = r6;
    0x00002906 b 0x2972                                          |     
                                                                 |     while (r0 >= 0) {
    0x00002908 add r3, sp, 0x3c                                  |         r3 += var_3ch;
    0x0000290a ldr r0, [sp, 0x2c]                                |         r0 = s;
    0x0000290c str r3, [sp, 8]                                   |         var_8h = r3;
    0x0000290e add r3, sp, 0x24                                  |         r3 += var_24h;
    0x00002910 str r3, [sp, 4]                                   |         var_4h = r3;
    0x00002912 add r3, sp, 0x34                                  |         r3 += var_28h;
    0x00002914 str r3, [sp]                                      |         *(sp) = r3;
    0x00002916 movs r3, 0                                        |         r3 = 0;
    0x00002918 strd r3, r3, [sp, 0x30]                           |         __asm ("strd r3, r3, [var_28h]");
    0x0000291c add r2, sp, 0x38                                  |         r2 += s;
    0x0000291e str r3, [sp, 0x24]                                |         var_24h = r3;
    0x00002920 mov.w r3, -1                                      |         r3 = -1;
    0x00002924 strd r3, r3, [sp, 0x38]                           |         __asm ("strd r3, r3, [s]");
    0x00002928 mov r1, r8                                        |         r1 = r8;
    0x0000292a add r3, sp, 0x30                                  |         r3 += var_24h;
    0x0000292c blx 0x181c                                        |         r0 = isoc99_sscanf ();
    0x00002930 cmp r0, 3                                         |         
                                                                 |         if (r0 != 3) {
    0x00002932 bne 0x29aa                                        |             goto label_31;
                                                                 |         }
    0x00002934 add.w fp, sp, 0x40                                |         
    0x00002938 ldrd r2, r3, [sp, 0x30]                           |         __asm ("ldrd r2, r3, [var_28h]");
    0x0000293c ldr r1, [sp, 0x24]                                |         r1 = var_24h;
    0x0000293e mov r0, fp                                        |         r0 = fp;
    0x00002940 bl 0x2440                                         |         fcn_00002440 (r0, r1, r2, r3);
    0x00002944 ldr r1, [sp, 0x2c]                                |         r1 = s;
    0x00002946 mov r3, fp                                        |         r3 = fp;
    0x00002948 ldr r0, [sp, 0x3c]                                |         r0 = var_3ch;
    0x0000294a mov r2, r6                                        |         r2 = r6;
    0x0000294c str r1, [sp, 0x10]                                |         var_4h = r1;
    0x0000294e add r1, r0                                        |         r1 += r0;
    0x00002950 movs r0, 1                                        |         r0 = 1;
    0x00002952 str r1, [sp, 0x14]                                |         var_8h = r1;
    0x00002954 ldr r1, [sp, 0x38]                                |         r1 = s;
    0x00002956 strd r1, r1, [sp, 8]                              |         __asm ("strd r1, r1, [var_0h]");
    0x0000295a ldr r1, [sp, 0x34]                                |         r1 = var_28h;
    0x0000295c str r1, [sp, 4]                                   |         var_4h = r1;
    0x0000295e ldr r1, [sp, 0x30]                                |         r1 = var_24h;
    0x00002960 str r1, [sp]                                      |         *(sp) = r1;
    0x00002962 mov r1, sb                                        |         r1 = sb;
    0x00002964 blx 0x1834                                        |         printf_chk ();
    0x00002968 ldr r0, [sp, 0x2c]                                |         r0 = s;
    0x0000296a blx 0x163c                                        |         free (r0);
                                                                 | label_7:
    0x0000296e subs r4, 1                                        |         r4--;
                                                                 |         if (r4 == 1) {
    0x00002970 beq 0x299c                                        |             goto label_32;
                                                                 |         }
    0x00002972 ldr r6, [r5], 4                                   |         r6 = *(r5);
                                                                 |         r5 += 4;
    0x00002976 mov r1, r7                                        |         r1 = r7;
    0x00002978 mov r0, r6                                        |         r0 = r6;
    0x0000297a blx 0x16f0                                        |         r0 = keyctl_describe_alloc ();
    0x0000297e cmp r0, 0                                         |         
    0x00002980 bge 0x2908                                        |         
                                                                 |     }
    0x00002982 mov r2, r6                                        |     r2 = r6;
    0x00002984 mov r1, sl                                        |     r1 = sl;
    0x00002986 movs r0, 1                                        |     r0 = 1;
    0x00002988 blx 0x1834                                        |     printf_chk ();
    0x0000298c b 0x296e                                          |     goto label_7;
                                                                 | label_29:
    0x0000298e ldr r0, [pc, 0x5c]                                |     
    0x00002990 add r0, pc                                        |     r0 = 0x5382;
    0x00002992 blx 0x172c                                        |     puts (r0);
    0x00002996 mov r0, r4                                        |     r0 = r4;
    0x00002998 blx 0x1780                                        |     exit (r0);
                                                                 | label_32:
    0x0000299c mov r0, r4                                        |     r0 = r4;
    0x0000299e blx 0x1780                                        |     exit (r0);
                                                                 | label_28:
    0x000029a2 ldr r0, [pc, 0x4c]                                |     
    0x000029a4 add r0, pc                                        |     r0 = 0x539a;
    0x000029a6 bl 0x1dcc                                         |     fcn_00001dcc ();
                                                                 | label_31:
    0x000029aa mov fp, r6                                        |     
    0x000029ac ldr r0, [pc, 0x44]                                |     
    0x000029ae ldr r6, [sp, 0x1c]                                |     r6 = var_1ch;
    0x000029b0 mov r3, fp                                        |     r3 = fp;
    0x000029b2 ldr r2, [pc, 0x44]                                |     
    0x000029b4 movs r1, 1                                        |     r1 = 1;
    0x000029b6 ldr r0, [r6, r0]                                  |     r0 = *((r6 + r0));
    0x000029b8 add r2, pc                                        |     r2 = 0x53b6;
    0x000029ba ldr r0, [r0]                                      |     r0 = *(0x29f4);
    0x000029bc blx 0x1858                                        |     fprintf_chk ()
    0x000029c0 movs r0, 3                                        |     r0 = 3;
    0x000029c2 blx 0x1780                                        |     exit (r0);
                                                                 | label_30:
    0x000029c6 ldr r0, [pc, 0x34]                                |     
    0x000029c8 add r0, pc                                        |     r0 = 0x53ca;
    0x000029ca blx 0x172c                                        |     puts (r0);
    0x000029ce b 0x28ee                                          |     goto label_8;
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/bin/keyctl @ 0x30f4 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.000030f4 ()                              | void fcn_000030f4 (int16_t arg1, int16_t arg2) {
                                                         |     int16_t var_0h_9;
                                                         |     int16_t var_4h_9;
                                                         |     int32_t var_4h_23;
                                                         |     int16_t var_0h_8;
                                                         |     int16_t var_4h_8;
                                                         |     int32_t var_0h_20;
                                                         |     int32_t var_8h_11;
                                                         |     int32_t var_ch_10;
                                                         |     void * var_0h_10;
                                                         |     int16_t var_4h_7;
                                                         |     int32_t var_4h_24;
                                                         |     int32_t var_8h_12;
                                                         |     int32_t var_ch_11;
                                                         |     int16_t var_10h_2;
                                                         |     int16_t var_8h_5;
                                                         |     int16_t var_ch_5;
                                                         |     int16_t var_0h_11;
                                                         |     char * * var_4h_10;
                                                         |     int16_t var_8h_6;
                                                         |     int16_t var_ch_6;
                                                         |     int16_t var_10h;
                                                         |     int16_t var_14h;
                                                         |     char * * endptr;
                                                         |     int16_t var_0h_7;
                                                         |     int16_t var_4h_6;
                                                         |     int32_t var_0h_18;
                                                         |     int16_t var_0h_6;
                                                         |     int16_t var_4h_5;
                                                         |     int32_t var_0h_17;
                                                         |     int16_t var_0h_5;
                                                         |     int16_t var_8h_10;
                                                         |     int32_t var_ch_9;
                                                         |     int16_t var_0h_4;
                                                         |     int16_t var_0h_16;
                                                         |     int16_t var_0h_3;
                                                         |     int16_t var_8h_4;
                                                         |     int16_t var_ch_4;
                                                         |     int32_t var_4h_22;
                                                         |     int32_t var_0h_21;
                                                         |     int16_t var_0h_2;
                                                         |     int16_t var_4h_4;
                                                         |     int16_t var_ch_8;
                                                         |     char * ptr;
                                                         |     int16_t var_4h_3;
                                                         |     size_t var_2eh;
                                                         |     int16_t var_0h_13;
                                                         |     int16_t var_4h_11;
                                                         |     int16_t var_8h_3;
                                                         |     int16_t var_ch_3;
                                                         |     int16_t var_4h_21;
                                                         |     int16_t var_48h_6;
                                                         |     int16_t var_48h_3;
                                                         |     int16_t var_1040h_6;
                                                         |     int16_t var_4h_20;
                                                         |     int32_t var_0h_22;
                                                         |     int32_t var_4h_25;
                                                         |     int16_t var_8h_9;
                                                         |     int16_t var_1040h_3;
                                                         |     size_t var_0h_14;
                                                         |     int16_t var_4h_12;
                                                         |     int16_t var_8h_2;
                                                         |     int16_t var_ch_2;
                                                         |     int16_t var_4h_19;
                                                         |     int16_t var_48h_5;
                                                         |     int16_t var_48h_2;
                                                         |     int16_t var_1040h_5;
                                                         |     int16_t var_4h_18;
                                                         |     int16_t var_1040h_2;
                                                         |     int32_t var_4h_26;
                                                         |     int16_t var_8h_8;
                                                         |     int16_t var_0h_15;
                                                         |     int16_t var_4h_13;
                                                         |     int16_t var_8h;
                                                         |     size_t var_32h;
                                                         |     int16_t var_ch;
                                                         |     int16_t var_4h_17;
                                                         |     int16_t var_48h_4;
                                                         |     int16_t var_48h;
                                                         |     int16_t var_1040h_4;
                                                         |     int16_t var_4h_16;
                                                         |     int16_t var_1040h;
                                                         |     int16_t var_4h_2;
                                                         |     int32_t var_38h;
                                                         |     int32_t var_34h;
                                                         |     int32_t var_32h_2;
                                                         |     int32_t var_30h;
                                                         |     int32_t var_2eh_2;
                                                         |     int16_t var_4h_15;
                                                         |     int16_t var_40h;
                                                         |     int16_t var_1020h;
                                                         |     int16_t var_1ch;
                                                         |     int16_t var_0h;
                                                         |     int16_t var_4h;
                                                         |     int16_t var_ch_7;
                                                         |     int16_t var_8h_7;
                                                         |     int16_t var_4h_14;
                                                         |     int16_t var_18h;
                                                         |     int16_t var_1000h;
                                                         |     int16_t var_14h_2;
                                                         |     void * buf;
                                                         |     size_t size;
                                                         |     int16_t var_5ch;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
    0x000030f4 ldr r2, [pc, 0xa8]                        |     
    0x000030f6 ldr r3, [pc, 0xac]                        |     r3 = *(0x31a6);
    0x000030f8 push.w {r4, r5, r6, r7, r8, sb, lr}       |     
    0x000030fc mov r6, r1                                |     r6 = r1;
    0x000030fe add r2, pc                                |     r2 = 0x62a2;
    0x00003100 sub sp, 0x64                              |     
    0x00003102 movs r1, 0                                |     r1 = 0;
    0x00003104 mov r7, r0                                |     r7 = r0;
    0x00003106 ldr r3, [r2, r3]                          |     
    0x00003108 ldr.w r8, [pc, 0x9c]                      |     r8 = *(0x000031a8);
    0x0000310c ldr r3, [r3]                              |     r3 = *(0x62a2);
    0x0000310e str r3, [sp, 0x5c]                        |     var_5ch = r3;
    0x00003110 mov.w r3, 0                               |     r3 = 0;
    0x00003114 blx 0x1750                                |     open (r0, r1, r2);
    0x00003116 adds.w lr, ip, r5, lsl 4                  |     lr = ip + (r5 << 4);
    0x0000311a add r8, pc                                |     r8 += pc;
                                                         |     if (lr >= ip) {
    0x0000311c blt 0x3174                                |         
    0x0000311e mov r1, sp                                |         r1 = sp;
    0x00003120 blx 0x190c                                |         r0 = fstat (r0, r1);
    0x00003124 cmp r0, 0                                 |         
                                                         |         if (r0 < 0) {
    0x00003126 blt 0x3174                                |             goto label_6;
                                                         |         }
    0x00003128 ldr.w sb, [sp, 0x2c]                      |         sb = size;
    0x0000312c mov r0, sb                                |         r0 = sb;
    0x0000312e blx 0x1738                                |         r0 = malloc (r0);
    0x00003132 mov r4, r0                                |         r4 = r0;
                                                         |         if (r0 == 0) {
    0x00003134 cbz r0, 0x3198                            |             goto label_7;
                                                         |         }
    0x00003136 mov r1, r0                                |         r1 = r0;
    0x00003138 mov r2, sb                                |         r2 = sb;
    0x0000313a mov r0, r5                                |         r0 = r5;
    0x0000313c blx 0x1624                                |         r0 = read (r0, r1, r2);
    0x00003140 adds r3, r0, 1                            |         r3 = r0 + 1;
                                                         |         if (r3 == r0) {
    0x00003142 beq 0x3174                                |             goto label_6;
                                                         |         }
    0x00003144 ldr r3, [sp, 0x2c]                        |         r3 = size;
    0x00003146 cmp r3, r0                                |         
                                                         |         if (r3 != r0) {
    0x00003148 bne 0x317e                                |             goto label_8;
                                                         |         }
    0x0000314a mov r0, r5                                |         r0 = r5;
    0x0000314c blx 0x1918                                |         r0 = close (r0);
    0x00003150 cmp r0, 0                                 |         
                                                         |         if (r0 < 0) {
    0x00003152 blt 0x3174                                |             goto label_6;
                                                         |         }
    0x00003154 ldr r3, [sp, 0x2c]                        |         r3 = size;
    0x00003156 ldr r2, [pc, 0x54]                        |         
    0x00003158 str r3, [r6]                              |         *(r6) = r3;
    0x0000315a ldr r3, [pc, 0x48]                        |         r3 = *(0x31a6);
    0x0000315c add r2, pc                                |         r2 = 0x630e;
    0x0000315e ldr r3, [r2, r3]                          |         r3 = *(0x630e);
    0x00003160 ldr r2, [r3]                              |         r2 = *(0x630e);
    0x00003162 ldr r3, [sp, 0x5c]                        |         r3 = var_5ch;
    0x00003164 eors r2, r3                               |         r2 ^= r3;
    0x00003166 mov.w r3, 0                               |         r3 = 0;
                                                         |         if (r2 != r3) {
    0x0000316a bne 0x317a                                |             goto label_9;
                                                         |         }
    0x0000316c mov r0, r4                                |         r0 = r4;
    0x0000316e add sp, 0x64                              |         
    0x00003170 pop.w {r4, r5, r6, r7, r8, sb, pc}        |         
                                                         |     }
                                                         | label_6:
    0x00003174 mov r0, r7                                |     r0 = r7;
    0x00003176 bl 0x1dcc                                 |     fcn_00001dcc ();
                                                         | label_9:
    0x0000317a blx 0x169c                                |     stack_chk_fail ();
                                                         | label_8:
    0x0000317e ldr r0, [pc, 0x30]                        |     
    0x00003180 mov r3, r7                                |     r3 = r7;
    0x00003182 ldr r2, [pc, 0x30]                        |     
    0x00003184 movs r1, 1                                |     r1 = 1;
    0x00003186 ldr.w r0, [r8, r0]                        |     r0 = *((r8 + r0));
    0x0000318a add r2, pc                                |     r2 = 0x6344;
    0x0000318c ldr r0, [r0]                              |     r0 = *(0x31b2);
    0x0000318e blx 0x1858                                |     fprintf_chk ()
    0x00003192 movs r0, 1                                |     r0 = 1;
    0x00003194 blx 0x1780                                |     exit (r0);
                                                         | label_7:
    0x00003198 ldr r0, [pc, 0x1c]                        |     
    0x0000319a add r0, pc                                |     r0 = 0x6356;
    0x0000319c bl 0x1dcc                                 |     fcn_00001dcc ();
    0x000031a0 cmp r5, 0x9e                              |     
    0x000031a2 movs r1, r0                               |     r1 = r0;
    0x000031a4 lsls r0, r0, 5                            |     r0 <<= 5;
    0x000031a6 movs r0, r0                               |     
    0x000031a8 cmp r5, 0x82                              |     
    0x000031aa movs r1, r0                               |     r1 = r0;
    0x000031ac cmp r5, 0x40                              |     
    0x000031ae movs r1, r0                               |     r1 = r0;
    0x000031b0 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x000031b2 movs r0, r0                               |     
    0x000031b4 asrs r2, r0, 0x1f                         |     r2 = r0 >> 0x1f;
    0x000031b6 movs r0, r0                               |     
    0x000031b8 asrs r2, r5, 0x1e                         |     r2 = r5 >> 0x1e;
    0x000031ba movs r0, r0                               |     
    0x000031bc ldr r2, [pc, 0xa8]                        |     
    0x000031be cmp r0, 4                                 |     
    0x000031c0 ldr r3, [pc, 0xa8]                        |     r3 = *(0x326c);
    0x000031c2 push {r7, lr}                             |     
    0x000031c4 sub.w sp, sp, 0x1000                      |     
    0x000031c8 add r2, pc                                |     r2 = 0x6434;
    0x000031ca ldr r6, [pc, 0xa4]                        |     
    0x000031cc sub sp, 0x18                              |     
    0x000031ce ldr r3, [r2, r3]                          |     
    0x000031d0 add.w r4, sp, 0x1000                      |     r4 += var_1000h;
    0x000031d4 add r6, pc                                |     r6 = 0x644a;
    0x000031d6 add.w r4, r4, 0x14                        |     r4 += var_14h_2;
    0x000031da ldr r3, [r3]                              |     r3 = *(0x6434);
    0x000031dc str r3, [r4]                              |     *(r4) = r3;
    0x000031de mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 <= 4) {
    0x000031e2 bgt 0x31e8                                |         
    0x000031e4 bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x000031e8 add r7, sp, 0x18                          |     r7 += var_18h;
    0x000031ea mov r4, r1                                |     r4 = r1;
    0x000031ec sub.w sb, r7, 4                           |     sb -= var_4h_14;
    0x000031f0 add.w r0, r4, 0x14                        |     r0 = r4 + 0x14;
    0x000031f4 mov r1, sb                                |     r1 = sb;
    0x000031f6 bl 0x3048                                 |     fcn_00003048 (r0, r1);
    0x000031fa ldr r0, [r4, 4]                           |     r0 = *((r4 + 4));
    0x000031fc bl 0x1c2c                                 |     fcn_00001c2c (r0);
    0x00003200 ldr r1, [pc, 0x70]                        |     
    0x00003202 mov r8, r0                                |     r8 = r0;
    0x00003204 ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003206 add r1, pc                                |     r1 = 0x647e;
    0x00003208 blx 0x1600                                |     r0 = strcmp (r0, r1);
    0x0000320c mov r5, r0                                |     r5 = r0;
                                                         |     if (r0 != 0) {
    0x0000320e cbz r0, 0x3228                            |         
    0x00003210 ldr r3, [pc, 0x64]                        |         
    0x00003212 movs r2, 0x26                             |         r2 = 0x26;
    0x00003214 ldr r0, [pc, 0x64]                        |         
    0x00003216 movs r1, 1                                |         r1 = 1;
    0x00003218 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x0000321a add r0, pc                                |         r0 = 0x649a;
    0x0000321c ldr r3, [r3]                              |         r3 = *(0x3278);
    0x0000321e blx 0x16d8                                |         fwrite (r0, r1, r2, r3);
    0x00003222 movs r0, 2                                |         r0 = 2;
    0x00003224 blx 0x1780                                |         exit (r0);
                                                         |     }
    0x00003228 ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x0000322a sub.w r1, r7, 0xc                         |     r1 -= var_ch_7;
    0x0000322e bl 0x30f4                                 |     fcn_000030f4 (r0, r1);
    0x00003232 sub.w r1, r7, 8                           |     r1 -= var_8h_7;
    0x00003236 mov r2, r0                                |     r2 = r0;
    0x00003238 ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x0000323a mov r4, r2                                |     r4 = r2;
    0x0000323c bl 0x30f4                                 |     fcn_000030f4 (r0, r1);
    0x00003240 str r0, [sp]                              |     *(sp) = r0;
    0x00003242 mov r2, r4                                |     r2 = r4;
    0x00003244 ldr r3, [r7, -0x8]                        |     r3 = *((r7 - 0x8));
    0x00003248 mov r1, sb                                |     r1 = sb;
    0x0000324a mov r0, r8                                |     r0 = r8;
    0x0000324c str r3, [sp, 4]                           |     var_4h = r3;
    0x0000324e ldr r3, [r7, -0xc]                        |     r3 = var_ch_7;
    0x00003252 blx 0x184c                                |     r0 = keyctl_pkey_verify ();
    0x00003256 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003258 blt 0x3260                                |         
    0x0000325a mov r0, r5                                |         r0 = r5;
    0x0000325c blx 0x1780                                |         exit (r0);
                                                         |     }
    0x00003260 ldr r0, [pc, 0x1c]                        |     
    0x00003262 add r0, pc                                |     r0 = 0x64e6;
    0x00003264 bl 0x1dcc                                 |     fcn_00001dcc ();
    0x00003268 cmp r4, 0xd4                              |     
    0x0000326a movs r1, r0                               |     r1 = r0;
    0x0000326c lsls r0, r0, 5                            |     r0 <<= 5;
    0x0000326e movs r0, r0                               |     
    0x00003270 cmp r4, 0xc8                              |     
    0x00003272 movs r1, r0                               |     r1 = r0;
    0x00003274 asrs r6, r2, 0x1d                         |     r6 = r2 >> 0x1d;
    0x00003276 movs r0, r0                               |     
    0x00003278 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x0000327a movs r0, r0                               |     
    0x0000327c asrs r6, r0, 0x1d                         |     r6 = r0 >> 0x1d;
    0x0000327e movs r0, r0                               |     
    0x00003280 asrs r6, r4, 0x1c                         |     r6 = r4 >> 0x1c;
    0x00003282 movs r0, r0                               |     
    0x00003284 ldr r2, [pc, 0x128]                       |     
    0x00003286 cmp r0, 2                                 |     
    0x00003288 ldr r3, [pc, 0x128]                       |     r3 = *(0x33b4);
    0x0000328a push {r7, lr}                             |     
    0x0000328c sub.w sp, sp, 0x1040                      |     
    0x0000328e ldrb r2, [r0, r6]                         |     r2 = *((r0 + r6));
    0x00003290 add r2, pc                                |     r2 = 0x6644;
    0x00003292 ldr r6, [pc, 0x124]                       |     
    0x00003294 add.w r4, sp, 0x1020                      |     r4 += var_1020h;
    0x00003298 ldr r3, [r2, r3]                          |     
    0x0000329a add.w r4, r4, 0x1c                        |     r4 += var_1ch;
    0x0000329e add r6, pc                                |     r6 = 0x665c;
    0x000032a0 ldr r3, [r3]                              |     r3 = *(0x6644);
    0x000032a2 str r3, [r4]                              |     *(r4) = r3;
    0x000032a4 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 <= 2) {
    0x000032a8 bgt 0x32ae                                |         
    0x000032aa bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x000032ae add r5, sp, 0x40                          |     r5 += var_40h;
    0x000032b0 mov r4, r1                                |     r4 = r1;
    0x000032b2 sub.w r8, r5, 4                           |     r8 -= var_4h_15;
    0x000032b6 add.w r0, r4, 0xc                         |     r0 = r4 + 0xc;
    0x000032ba mov r1, r8                                |     r1 = r8;
    0x000032bc bl 0x3048                                 |     fcn_00003048 (r0, r1);
    0x000032c0 ldr r0, [r4, 4]                           |     r0 = *((r4 + 4));
    0x000032c2 bl 0x1c2c                                 |     fcn_00001c2c (r0);
    0x000032c6 ldr r1, [pc, 0xf4]                        |     
    0x000032c8 mov r7, r0                                |     r7 = r0;
    0x000032ca ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x000032cc add r1, pc                                |     r1 = 0x668e;
    0x000032ce blx 0x1600                                |     r0 = strcmp (r0, r1);
    0x000032d2 mov r4, r0                                |     r4 = r0;
                                                         |     if (r0 != 0) {
    0x000032d4 cbz r0, 0x32ee                            |         
    0x000032d6 ldr r3, [pc, 0xe8]                        |         
    0x000032d8 movs r2, 0x26                             |         r2 = 0x26;
    0x000032da ldr r0, [pc, 0xe8]                        |         
    0x000032dc movs r1, 1                                |         r1 = 1;
    0x000032de ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x000032e0 add r0, pc                                |         r0 = 0x66aa;
    0x000032e2 ldr r3, [r3]                              |         r3 = *(0x33c2);
    0x000032e4 blx 0x16d8                                |         fwrite (r0, r1, r2, r3);
    0x000032e8 movs r0, 2                                |         r0 = 2;
    0x000032ea blx 0x1780                                |         exit (r0);
                                                         |     }
    0x000032ee add r2, sp, 4                             |     r2 += var_4h_2;
    0x000032f0 mov r1, r8                                |     r1 = r8;
    0x000032f2 mov r0, r7                                |     r0 = r7;
    0x000032f4 blx 0x193c                                |     r0 = keyctl_pkey_query ();
    0x000032f8 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x000032fa blt 0x33a8                                |         
    0x000032fc ldr r1, [pc, 0xc8]                        |         
    0x000032fe movs r0, 1                                |         r0 = 1;
    0x00003300 ldr r2, [r5, -0x38]                       |         r2 = var_38h;
    0x00003304 add r1, pc                                |         r1 = 0x66d0;
    0x00003306 blx 0x1834                                |         printf_chk ();
    0x0000330a ldr r1, [pc, 0xc0]                        |         
    0x0000330c movs r0, 1                                |         r0 = 1;
    0x0000330e ldrh r2, [r5, -0x34]                      |         r2 = var_34h;
    0x00003312 add r1, pc                                |         
    0x00003314 blx 0x1834                                |         printf_chk ();
    0x00003316 eor.w sb, lr, sp, asr 16                  |         sb = lr ^ (sp >> 16);
    0x0000331a movs r0, 1                                |         r0 = 1;
    0x0000331c ldrh r2, [r5, -0x32]                      |         r2 = var_32h_2;
    0x00003320 add r1, pc                                |         r1 = 0x9a08;
    0x00003322 blx 0x1834                                |         printf_chk ();
    0x00003326 ldr r1, [pc, 0xac]                        |         
    0x00003328 movs r0, 1                                |         r0 = 1;
    0x0000332a ldrh r2, [r5, -0x30]                      |         r2 = var_30h;
    0x0000332e add r1, pc                                |         r1 = 0x6708;
    0x00003330 blx 0x1834                                |         printf_chk ();
    0x00003334 ldr r1, [pc, 0xa0]                        |         
    0x00003336 movs r0, 1                                |         r0 = 1;
    0x00003338 ldrh r2, [r5, -0x2e]                      |         r2 = var_2eh_2;
    0x0000333c add r1, pc                                |         r1 = 0x6718;
    0x0000333e blx 0x1834                                |         printf_chk ();
    0x00003342 ldr r3, [r5, -0x3c]                       |         r3 = var_4h_2;
    0x00003346 movs r0, 1                                |         r0 = 1;
    0x00003348 ldr r1, [pc, 0x90]                        |         
    0x0000334a tst.w r3, 1                               |         
    0x0000334e ite ne                                    |         
                                                         |         if ((r3 & 1) == 0) {
    0x00003350 movne r2, 0x79                            |             r2 = 0x79;
                                                         |         }
                                                         |         if ((r3 & 1) != 0) {
    0x00003352 moveq r2, 0x6e                            |             r2 = 0x6e;
                                                         |         }
    0x00003354 add r1, pc                                |         r1 = 0x6734;
    0x00003356 blx 0x1834                                |         printf_chk ();
    0x0000335a ldr r3, [r5, -0x3c]                       |         r3 = var_4h_2;
    0x0000335e movs r0, 1                                |         r0 = 1;
    0x00003360 ldr r1, [pc, 0x7c]                        |         
    0x00003362 tst.w r3, 2                               |         
    0x00003366 ite ne                                    |         
                                                         |         if ((r3 & 2) == 0) {
    0x00003368 movne r2, 0x79                            |             r2 = 0x79;
                                                         |         }
                                                         |         if ((r3 & 2) != 0) {
    0x0000336a moveq r2, 0x6e                            |             r2 = 0x6e;
                                                         |         }
    0x0000336c add r1, pc                                |         r1 = 0x6750;
    0x0000336e blx 0x1834                                |         printf_chk ();
    0x00003372 ldr r3, [r5, -0x3c]                       |         r3 = var_4h_2;
    0x00003376 movs r0, 1                                |         r0 = 1;
    0x00003378 ldr r1, [pc, 0x68]                        |         
    0x0000337a tst.w r3, 4                               |         
    0x0000337e ite ne                                    |         
                                                         |         if ((r3 & 4) == 0) {
    0x00003380 movne r2, 0x79                            |             r2 = 0x79;
                                                         |         }
                                                         |         if ((r3 & 4) != 0) {
    0x00003382 moveq r2, 0x6e                            |             r2 = 0x6e;
                                                         |         }
    0x00003384 add r1, pc                                |         r1 = 0x676c;
    0x00003386 blx 0x1834                                |         printf_chk ();
    0x0000338a ldr r3, [r5, -0x3c]                       |         r3 = var_4h_2;
    0x0000338e movs r0, 1                                |         r0 = 1;
    0x00003390 ldr r1, [pc, 0x54]                        |         
    0x00003392 tst.w r3, 8                               |         
    0x00003396 add r1, pc                                |         r1 = 0x6782;
    0x00003398 ite ne                                    |         
                                                         |         if ((r3 & 8) == 0) {
    0x0000339a movne r2, 0x79                            |             r2 = 0x79;
                                                         |         }
                                                         |         if ((r3 & 8) != 0) {
    0x0000339c moveq r2, 0x6e                            |             r2 = 0x6e;
                                                         |         }
    0x0000339e blx 0x1834                                |         printf_chk ();
    0x000033a2 mov r0, r4                                |         r0 = r4;
    0x000033a4 blx 0x1780                                |         exit (r0);
                                                         |     }
    0x000033a8 ldr r0, [pc, 0x40]                        |     
    0x000033aa add r0, pc                                |     r0 = 0x679a;
    0x000033ac bl 0x1dcc                                 |     fcn_00001dcc ();
    0x000033b0 cmp r4, 0xc                               |     
    0x000033b2 movs r1, r0                               |     r1 = r0;
    0x000033b4 lsls r0, r0, 5                            |     r0 <<= 5;
    0x000033b6 movs r0, r0                               |     
    0x000033b8 cmp r3, 0xfe                              |     
    0x000033ba movs r1, r0                               |     r1 = r0;
    0x000033bc asrs r0, r2, 0x1a                         |     r0 = r2 >> 0x1a;
    0x000033be movs r0, r0                               |     
    0x000033c0 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x000033c2 movs r0, r0                               |     
    0x000033c4 asrs r0, r0, 0x1a                         |     r0 >>= 0x1a;
    0x000033c6 movs r0, r0                               |     
    0x000033c8 asrs r4, r5, 0x1a                         |     r4 = r5 >> 0x1a;
    0x000033ca movs r0, r0                               |     
    0x000033cc asrs r6, r5, 0x1a                         |     r6 = r5 >> 0x1a;
    0x000033ce movs r0, r0                               |     
    0x000033d0 asrs r4, r6, 0x1a                         |     r4 = r6 >> 0x1a;
    0x000033d2 movs r0, r0                               |     
    0x000033d4 asrs r2, r7, 0x1a                         |     r2 = r7 >> 0x1a;
    0x000033d6 movs r0, r0                               |     
    0x000033d8 asrs r0, r0, 0x1b                         |     r0 >>= 0x1b;
    0x000033da movs r0, r0                               |     
    0x000033dc asrs r4, r7, 0x1a                         |     r4 = r7 >> 0x1a;
    0x000033de movs r0, r0                               |     
    0x000033e0 asrs r0, r6, 0x1a                         |     r0 = r6 >> 0x1a;
    0x000033e2 movs r0, r0                               |     
    0x000033e4 asrs r4, r4, 0x1a                         |     r4 >>= 0x1a;
    0x000033e6 movs r0, r0                               |     
    0x000033e8 asrs r6, r3, 0x1a                         |     r6 = r3 >> 0x1a;
    0x000033ea movs r0, r0                               |     
    0x000033ec asrs r2, r6, 0x17                         |     r2 = r6 >> 0x17;
    0x000033ee movs r0, r0                               |     
    0x000033f0 ldr r2, [pc, 0xe4]                        |     
    0x000033f2 cmp r0, 3                                 |     
    0x000033f4 ldr r3, [pc, 0xe4]                        |     r3 = *(0x34dc);
    0x000033f6 push.w {r7, fp, lr}                       |     
    0x000033fa sub.w sp, sp, 0x1040                      |     
    0x000033fe add r2, pc                                |     r2 = 0x68da;
    0x00003400 ldr r6, [pc, 0xdc]                        |     
    0x00003402 sub sp, 0xc                               |     
    0x00003404 ldr r3, [r2, r3]                          |     
    0x00003406 add.w r4, sp, 0x1040                      |     r4 += var_1040h;
    0x0000340a add r6, pc                                |     r6 = 0x68ee;
    0x0000340c add.w r4, r4, 4                           |     r4 += var_4h_16;
    0x00003410 ldr r3, [r3]                              |     r3 = *(0x68da);
    0x00003412 str r3, [r4]                              |     *(r4) = r3;
    0x00003414 mov.w r3, 0                               |     r3 = 0;
    0x00003416 lsls r0, r0, 0xc                          |     r0 <<= 0xc;
                                                         |     if (r0 <= r0) {
    0x00003418 bgt 0x341e                                |         
    0x0000341a bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x0000341e add.w sb, sp, 0x48                        |     sb += var_48h;
    0x00003422 mov r4, r1                                |     r4 = r1;
    0x00003424 sub.w r8, sb, 4                           |     r8 -= var_4h_17;
    0x00003428 add.w r0, r4, 0x10                        |     r0 = r4 + 0x10;
    0x0000342c mov r1, r8                                |     r1 = r8;
    0x0000342e bl 0x3048                                 |     fcn_00003048 (r0, r1);
    0x00003432 ldr r0, [r4, 4]                           |     r0 = *((r4 + 4));
    0x00003434 bl 0x1c2c                                 |     fcn_00001c2c (r0);
    0x00003438 ldr r1, [pc, 0xa8]                        |     
    0x0000343a mov r7, r0                                |     r7 = r0;
    0x0000343c ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x0000343e add r1, pc                                |     r1 = 0x6926;
    0x00003440 blx 0x1600                                |     r0 = strcmp (r0, r1);
    0x00003444 mov r5, r0                                |     r5 = r0;
                                                         |     if (r0 != 0) {
    0x00003446 cbz r0, 0x3460                            |         
    0x00003448 ldr r3, [pc, 0x9c]                        |         
    0x0000344a movs r2, 0x26                             |         r2 = 0x26;
    0x0000344c ldr r0, [pc, 0x9c]                        |         
    0x0000344e movs r1, 1                                |         r1 = 1;
    0x00003450 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003452 add r0, pc                                |         r0 = 0x6942;
    0x00003454 ldr r3, [r3]                              |         r3 = *(0x34e8);
    0x00003456 blx 0x16d8                                |         fwrite (r0, r1, r2, r3);
    0x0000345a movs r0, 2                                |         r0 = 2;
    0x0000345c blx 0x1780                                |         exit (r0);
                                                         |     }
    0x00003460 add r1, sp, 8                             |     r1 += var_8h;
    0x00003462 ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00003464 bl 0x30f4                                 |     fcn_000030f4 (r0, r1);
    0x00003468 add r2, sp, 0xc                           |     r2 += var_ch;
    0x0000346a mov sl, r0                                |     sl = r0;
    0x0000346c mov r1, r8                                |     r1 = r8;
    0x0000346e mov r0, r7                                |     r0 = r7;
    0x00003470 blx 0x193c                                |     r0 = keyctl_pkey_query ();
    0x00003474 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003476 blt 0x34b8                                |         
    0x00003478 ldrh fp, [sb, -0x32]                      |         fp = var_32h;
    0x0000347c mov r0, fp                                |         r0 = fp;
    0x0000347e blx 0x1738                                |         r0 = malloc (r0);
    0x00003482 mov r4, r0                                |         r4 = r0;
                                                         |         if (r0 == 0) {
    0x00003484 cbz r0, 0x34ce                            |             goto label_10;
                                                         |         }
    0x00003486 mov r1, r8                                |         r1 = r8;
    0x00003488 str.w fp, [sp, 4]                         |         __asm ("str.w fp, [var_4h_13]");
    0x0000348c mov r2, sl                                |         r2 = sl;
    0x0000348e ldr r3, [sb, -0x40]                       |         r3 = var_8h_8;
    0x00003492 mov r0, r7                                |         r0 = r7;
    0x00003494 str r4, [sp]                              |         *(sp) = r4;
    0x00003496 blx 0x15dc                                |         r0 = keyctl_pkey_sign ();
    0x0000349a subs r1, r0, 0                            |         r1 = r0 - 0;
                                                         |         if (r1 < r0) {
    0x0000349c blt 0x34c0                                |             goto label_11;
                                                         |         }
    0x0000349e ldr r3, [pc, 0x50]                        |         
    0x000034a0 mov r0, r4                                |         r0 = r4;
    0x000034a2 movs r2, 1                                |         r2 = 1;
    0x000034a4 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x000034a6 ldr r3, [r3]                              |         r3 = *(0x34f2);
    0x000034a8 blx 0x16d8                                |         r0 = fwrite (r0, r1, r2, r3);
    0x000034ac cmp r0, 1                                 |         
                                                         |         if (r0 == 1) {
    0x000034ae beq 0x34c8                                |             goto label_12;
                                                         |         }
    0x000034b0 ldr r0, [pc, 0x40]                        |         
    0x000034b2 add r0, pc                                |         r0 = 0x69aa;
    0x000034b4 bl 0x1dcc                                 |         fcn_00001dcc ();
                                                         |     }
    0x000034b8 ldr r0, [pc, 0x3c]                        |     
    0x000034ba add r0, pc                                |     r0 = 0x69b6;
    0x000034bc bl 0x1dcc                                 |     fcn_00001dcc ();
                                                         | label_11:
    0x000034c0 ldr r0, [pc, 0x38]                        |     
    0x000034c2 add r0, pc                                |     r0 = 0x69c2;
    0x000034c4 bl 0x1dcc                                 |     fcn_00001dcc ();
                                                         | label_12:
    0x000034c8 mov r0, r5                                |     r0 = r5;
    0x000034ca blx 0x1780                                |     exit (r0);
                                                         | label_10:
    0x000034ce ldr r0, [pc, 0x30]                        |     
    0x000034d0 add r0, pc                                |     r0 = 0x69d6;
    0x000034d2 bl 0x1dcc                                 |     fcn_00001dcc ();
    0x000034d6 nop                                       |     
    0x000034d8 cmp r2, 0x9e                              |     
    0x000034da movs r1, r0                               |     r1 = r0;
    0x000034dc lsls r0, r0, 5                            |     r0 <<= 5;
    0x000034de movs r0, r0                               |     
    0x000034e0 cmp r2, 0x92                              |     
    0x000034e2 movs r1, r0                               |     r1 = r0;
    0x000034e4 asrs r6, r3, 0x14                         |     r6 = r3 >> 0x14;
    0x000034e6 movs r0, r0                               |     
    0x000034e8 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x000034ea movs r0, r0                               |     
    0x000034ec asrs r6, r1, 0x14                         |     r6 = r1 >> 0x14;
    0x000034ee movs r0, r0                               |     
    0x000034f0 lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x000034f2 movs r0, r0                               |     
    0x000034f4 asrs r2, r4, 0x16                         |     r2 = r4 >> 0x16;
    0x000034f6 movs r0, r0                               |     
    0x000034f8 asrs r2, r4, 0x13                         |     r2 = r4 >> 0x13;
    0x000034fa movs r0, r0                               |     
    0x000034fc asrs r6, r7, 0x15                         |     r6 = r7 >> 0x15;
    0x000034fe movs r0, r0                               |     
    0x00003500 asrs r4, r6, 0x11                         |     r4 = r6 >> 0x11;
    0x00003502 movs r0, r0                               |     
    0x00003504 ldr r2, [pc, 0xe4]                        |     
    0x00003506 cmp r0, 3                                 |     
    0x00003508 ldr r3, [pc, 0xe4]                        |     r3 = *(0x35f0);
    0x0000350a push.w {r7, fp, lr}                       |     
    0x0000350e sub.w sp, sp, 0x1040                      |     
    0x00003512 add r2, pc                                |     r2 = 0x6b02;
    0x00003514 ldr r6, [pc, 0xdc]                        |     
    0x00003516 sub sp, 0xc                               |     
    0x00003518 ldr r3, [r2, r3]                          |     
    0x0000351a add.w r4, sp, 0x1040                      |     r4 += var_1040h_2;
    0x0000351e add r6, pc                                |     r6 = 0x6b16;
    0x00003520 add.w r4, r4, 4                           |     r4 += var_4h_18;
    0x00003524 ldr r3, [r3]                              |     r3 = *(0x6b02);
    0x00003526 str r3, [r4]                              |     *(r4) = r3;
    0x00003528 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 <= 3) {
    0x0000352c bgt 0x3532                                |         
    0x0000352e bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x00003532 add.w sb, sp, 0x48                        |     sb += var_48h_2;
    0x00003536 mov r4, r1                                |     r4 = r1;
    0x00003538 sub.w r8, sb, 4                           |     r8 -= var_4h_19;
    0x0000353c add.w r0, r4, 0x10                        |     r0 = r4 + 0x10;
    0x00003540 mov r1, r8                                |     r1 = r8;
    0x00003542 bl 0x3048                                 |     fcn_00003048 (r0, r1);
    0x00003546 ldr r0, [r4, 4]                           |     r0 = *((r4 + 4));
    0x00003548 bl 0x1c2c                                 |     fcn_00001c2c (r0);
    0x0000354c ldr r1, [pc, 0xa8]                        |     
    0x0000354e mov r7, r0                                |     r7 = r0;
    0x00003550 ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003552 add r1, pc                                |     r1 = 0x6b4e;
    0x00003554 blx 0x1600                                |     r0 = strcmp (r0, r1);
    0x00003558 mov r5, r0                                |     r5 = r0;
                                                         |     if (r0 != 0) {
    0x0000355a cbz r0, 0x3574                            |         
    0x0000355c ldr r3, [pc, 0x9c]                        |         
    0x0000355e movs r2, 0x26                             |         r2 = 0x26;
    0x00003560 ldr r0, [pc, 0x9c]                        |         
    0x00003562 movs r1, 1                                |         r1 = 1;
    0x00003564 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003566 add r0, pc                                |         r0 = 0x6b6a;
    0x00003568 ldr r3, [r3]                              |         r3 = *(0x35fc);
    0x0000356a blx 0x16d8                                |         fwrite (r0, r1, r2, r3);
    0x0000356e movs r0, 2                                |         r0 = 2;
    0x00003570 blx 0x1780                                |         exit (r0);
                                                         |     }
    0x00003574 add r1, sp, 8                             |     r1 += var_8h_2;
    0x00003576 ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00003578 bl 0x30f4                                 |     fcn_000030f4 (r0, r1);
    0x0000357c add r2, sp, 0xc                           |     r2 += var_ch_2;
    0x0000357e mov sl, r0                                |     sl = r0;
    0x00003580 mov r1, r8                                |     r1 = r8;
    0x00003582 mov r0, r7                                |     r0 = r7;
    0x00003584 blx 0x193c                                |     r0 = keyctl_pkey_query ();
    0x00003588 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x0000358a blt 0x35cc                                |         
    0x0000358c ldrh fp, [sb, -0x30]                      |         fp = var_0h_14;
    0x00003590 mov r0, fp                                |         r0 = fp;
    0x00003592 blx 0x1738                                |         r0 = malloc (r0);
    0x00003596 mov r4, r0                                |         r4 = r0;
                                                         |         if (r0 == 0) {
    0x00003598 cbz r0, 0x35e2                            |             goto label_13;
                                                         |         }
    0x0000359a mov r1, r8                                |         r1 = r8;
    0x0000359c str.w fp, [sp, 4]                         |         __asm ("str.w fp, [var_4h_12]");
    0x000035a0 mov r2, sl                                |         r2 = sl;
    0x000035a2 ldr r3, [sb, -0x40]                       |         r3 = var_8h_9;
    0x000035a6 mov r0, r7                                |         r0 = r7;
    0x000035a8 str r4, [sp]                              |         *(sp) = r4;
    0x000035aa blx 0x1870                                |         r0 = keyctl_pkey_decrypt ();
    0x000035ae subs r1, r0, 0                            |         r1 = r0 - 0;
                                                         |         if (r1 < r0) {
    0x000035b0 blt 0x35d4                                |             goto label_14;
                                                         |         }
    0x000035b2 ldr r3, [pc, 0x50]                        |         
    0x000035b4 mov r0, r4                                |         r0 = r4;
    0x000035b6 movs r2, 1                                |         r2 = 1;
    0x000035b8 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x000035ba ldr r3, [r3]                              |         r3 = *(0x3606);
    0x000035bc blx 0x16d8                                |         r0 = fwrite (r0, r1, r2, r3);
    0x000035c0 cmp r0, 1                                 |         
                                                         |         if (r0 == 1) {
    0x000035c2 beq 0x35dc                                |             goto label_15;
                                                         |         }
    0x000035c4 ldr r0, [pc, 0x40]                        |         
    0x000035c6 add r0, pc                                |         r0 = 0x6bd2;
    0x000035c8 bl 0x1dcc                                 |         fcn_00001dcc ();
                                                         |     }
    0x000035cc ldr r0, [pc, 0x3c]                        |     
    0x000035ce add r0, pc                                |     r0 = 0x6bde;
    0x000035d0 bl 0x1dcc                                 |     fcn_00001dcc ();
                                                         | label_14:
    0x000035d4 ldr r0, [pc, 0x38]                        |     
    0x000035d6 add r0, pc                                |     r0 = 0x6bea;
    0x000035d8 bl 0x1dcc                                 |     fcn_00001dcc ();
                                                         | label_15:
    0x000035dc mov r0, r5                                |     r0 = r5;
    0x000035de blx 0x1780                                |     exit (r0);
                                                         | label_13:
    0x000035e2 ldr r0, [pc, 0x30]                        |     
    0x000035e4 add r0, pc                                |     r0 = 0x6bfe;
    0x000035e6 bl 0x1dcc                                 |     fcn_00001dcc ();
    0x000035ea nop                                       |     
    0x000035ec cmp r1, 0x8a                              |     
    0x000035ee movs r1, r0                               |     r1 = r0;
    0x000035f0 lsls r0, r0, 5                            |     r0 <<= 5;
    0x000035f2 movs r0, r0                               |     
    0x000035f4 cmp r1, 0x7e                              |     
    0x000035f6 movs r1, r0                               |     r1 = r0;
    0x000035f8 asrs r2, r1, 0x10                         |     r2 = r1 >> 0x10;
    0x000035fa movs r0, r0                               |     
    0x000035fc lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x000035fe movs r0, r0                               |     
    0x00003600 asrs r2, r7, 0xf                          |     r2 = r7 >> 0xf;
    0x00003602 movs r0, r0                               |     
    0x00003604 lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x00003606 movs r0, r0                               |     
    0x00003608 asrs r6, r1, 0x12                         |     r6 = r1 >> 0x12;
    0x0000360a movs r0, r0                               |     
    0x0000360c asrs r6, r1, 0xf                          |     r6 = r1 >> 0xf;
    0x0000360e movs r0, r0                               |     
    0x00003610 asrs r6, r0, 0x12                         |     r6 = r0 >> 0x12;
    0x00003612 movs r0, r0                               |     
    0x00003614 asrs r0, r4, 0xd                          |     r0 = r4 >> 0xd;
    0x00003616 movs r0, r0                               |     
    0x00003618 ldr r2, [pc, 0xe4]                        |     
    0x0000361a cmp r0, 3                                 |     
    0x0000361c ldr r3, [pc, 0xe4]                        |     r3 = *(0x3704);
    0x0000361e push.w {r7, fp, lr}                       |     
    0x00003622 sub.w sp, sp, 0x1040                      |     
    0x00003626 add r2, pc                                |     r2 = 0x6d2a;
    0x00003628 ldr r6, [pc, 0xdc]                        |     
    0x0000362a sub sp, 0xc                               |     
    0x0000362c ldr r3, [r2, r3]                          |     
    0x0000362e add.w r4, sp, 0x1040                      |     r4 += var_1040h_3;
    0x00003632 add r6, pc                                |     r6 = 0x6d3e;
    0x00003634 add.w r4, r4, 4                           |     r4 += var_4h_20;
    0x00003638 ldr r3, [r3]                              |     r3 = *(0x6d2a);
    0x0000363a str r3, [r4]                              |     *(r4) = r3;
    0x0000363c mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 <= 3) {
    0x00003640 bgt 0x3646                                |         
    0x00003642 bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x00003646 add.w sb, sp, 0x48                        |     sb += var_48h_3;
    0x0000364a mov r4, r1                                |     r4 = r1;
    0x0000364c sub.w r8, sb, 4                           |     r8 -= var_4h_21;
    0x00003650 add.w r0, r4, 0x10                        |     r0 = r4 + 0x10;
    0x00003654 mov r1, r8                                |     r1 = r8;
    0x00003656 bl 0x3048                                 |     fcn_00003048 (r0, r1);
    0x0000365a ldr r0, [r4, 4]                           |     r0 = *((r4 + 4));
    0x0000365c bl 0x1c2c                                 |     fcn_00001c2c (r0);
    0x00003660 ldr r1, [pc, 0xa8]                        |     
    0x00003662 mov r7, r0                                |     r7 = r0;
    0x00003664 ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003666 add r1, pc                                |     r1 = 0x6d76;
    0x00003668 blx 0x1600                                |     r0 = strcmp (r0, r1);
    0x0000366c mov r5, r0                                |     r5 = r0;
                                                         |     if (r0 != 0) {
    0x0000366e cbz r0, 0x3688                            |         
    0x00003670 ldr r3, [pc, 0x9c]                        |         
    0x00003672 movs r2, 0x26                             |         r2 = 0x26;
    0x00003674 ldr r0, [pc, 0x9c]                        |         
    0x00003676 movs r1, 1                                |         r1 = 1;
    0x00003678 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x0000367a add r0, pc                                |         r0 = 0x6d92;
    0x0000367c ldr r3, [r3]                              |         r3 = *(0x3710);
    0x0000367e blx 0x16d8                                |         fwrite (r0, r1, r2, r3);
    0x00003682 movs r0, 2                                |         r0 = 2;
    0x00003684 blx 0x1780                                |         exit (r0);
                                                         |     }
    0x00003688 add r1, sp, 8                             |     r1 += var_8h_3;
    0x0000368a ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x0000368c bl 0x30f4                                 |     fcn_000030f4 (r0, r1);
    0x00003690 add r2, sp, 0xc                           |     r2 += var_ch_3;
    0x00003692 mov sl, r0                                |     sl = r0;
    0x00003694 mov r1, r8                                |     r1 = r8;
    0x00003696 mov r0, r7                                |     r0 = r7;
    0x00003698 blx 0x193c                                |     r0 = keyctl_pkey_query ();
    0x0000369c cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x0000369e blt 0x36e0                                |         
    0x000036a0 ldrh fp, [sb, -0x2e]                      |         fp = var_2eh;
    0x000036a4 mov r0, fp                                |         r0 = fp;
    0x000036a6 blx 0x1738                                |         r0 = malloc (r0);
    0x000036aa mov r4, r0                                |         r4 = r0;
                                                         |         if (r0 == 0) {
    0x000036ac cbz r0, 0x36f6                            |             goto label_16;
                                                         |         }
    0x000036ae mov r1, r8                                |         r1 = r8;
    0x000036b0 str.w fp, [sp, 4]                         |         __asm ("str.w fp, [var_0h_2]");
    0x000036b4 mov r2, sl                                |         r2 = sl;
    0x000036b6 ldr r3, [sb, -0x40]                       |         r3 = var_4h_4;
    0x000036ba mov r0, r7                                |         r0 = r7;
    0x000036bc str r4, [sp]                              |         *(sp) = r4;
    0x000036be blx 0x16a8                                |         r0 = keyctl_pkey_encrypt ();
    0x000036c2 subs r1, r0, 0                            |         r1 = r0 - 0;
                                                         |         if (r1 < r0) {
    0x000036c4 blt 0x36e8                                |             goto label_17;
                                                         |         }
    0x000036c6 ldr r3, [pc, 0x50]                        |         
    0x000036c8 mov r0, r4                                |         r0 = r4;
    0x000036ca movs r2, 1                                |         r2 = 1;
    0x000036cc ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x000036ce ldr r3, [r3]                              |         r3 = *(0x371a);
    0x000036d0 blx 0x16d8                                |         r0 = fwrite (r0, r1, r2, r3);
    0x000036d4 cmp r0, 1                                 |         
                                                         |         if (r0 == 1) {
    0x000036d6 beq 0x36f0                                |             goto label_18;
                                                         |         }
    0x000036d8 ldr r0, [pc, 0x40]                        |         
    0x000036da add r0, pc                                |         r0 = 0x6dfa;
    0x000036dc bl 0x1dcc                                 |         fcn_00001dcc ();
                                                         |     }
    0x000036e0 ldr r0, [pc, 0x3c]                        |     
    0x000036e2 add r0, pc                                |     r0 = 0x6e06;
    0x000036e4 bl 0x1dcc                                 |     fcn_00001dcc ();
                                                         | label_17:
    0x000036e8 ldr r0, [pc, 0x38]                        |     
    0x000036ea add r0, pc                                |     r0 = 0x6e12;
    0x000036ec bl 0x1dcc                                 |     fcn_00001dcc ();
                                                         | label_18:
    0x000036f0 mov r0, r5                                |     r0 = r5;
    0x000036f2 blx 0x1780                                |     exit (r0);
                                                         | label_16:
    0x000036f6 ldr r0, [pc, 0x30]                        |     
    0x000036f8 add r0, pc                                |     r0 = 0x6e26;
    0x000036fa bl 0x1dcc                                 |     fcn_00001dcc ();
    0x000036fe nop                                       |     
    0x00003700 cmp r0, 0x76                              |     
    0x00003702 movs r1, r0                               |     r1 = r0;
    0x00003704 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003706 movs r0, r0                               |     
    0x00003708 cmp r0, 0x6a                              |     
    0x0000370a movs r1, r0                               |     r1 = r0;
    0x0000370c asrs r6, r6, 0xb                          |     r6 >>= 0xb;
    0x0000370e movs r0, r0                               |     
    0x00003710 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00003712 movs r0, r0                               |     
    0x00003714 asrs r6, r4, 0xb                          |     r6 = r4 >> 0xb;
    0x00003716 movs r0, r0                               |     
    0x00003718 lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x0000371a movs r0, r0                               |     
    0x0000371c asrs r2, r7, 0xd                          |     r2 = r7 >> 0xd;
    0x0000371e movs r0, r0                               |     
    0x00003720 asrs r2, r7, 0xa                          |     r2 = r7 >> 0xa;
    0x00003722 movs r0, r0                               |     
    0x00003724 asrs r6, r0, 0xe                          |     r6 = r0 >> 0xe;
    0x00003726 movs r0, r0                               |     
    0x00003728 asrs r4, r1, 9                            |     r4 = r1 >> 9;
    0x0000372a movs r0, r0                               |     
    0x0000372c ldr r2, [pc, 0x4c]                        |     
    0x0000372e cmp r0, 2                                 |     
    0x00003730 ldr r3, [pc, 0x4c]                        |     r3 = *(0x3780);
    0x00003732 push {lr}                                 |     
    0x00003734 sub sp, 0xc                               |     
    0x00003736 add r2, pc                                |     r2 = 0x6eb6;
    0x00003738 ldr r3, [r2, r3]                          |     
    0x0000373a ldr r3, [r3]                              |     r3 = *(0x6eb6);
    0x0000373c str r3, [sp, 4]                           |     var_4h_3 = r3;
    0x0000373e mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 2) {
    0x00003742 beq 0x3748                                |         
    0x00003744 bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x00003748 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x0000374a bl 0x1c2c                                 |     fcn_00001c2c (r0);
    0x0000374e mov r1, sp                                |     r1 = sp;
    0x00003750 blx 0x18ac                                |     r0 = keyctl_read_alloc ();
    0x00003754 subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 >= r0) {
    0x00003756 blt 0x376c                                |         
                                                         |         if (r2 != r0) {
    0x00003758 beq 0x3766                                |             
    0x0000375a ldr r1, [sp]                              |             r1 = *(sp);
    0x0000375c movs r0, 1                                |             r0 = 1;
    0x0000375e blx 0x1840                                |             r0 = write (r0, r1, r2);
    0x00003762 cmp r0, 0                                 |             
                                                         |             if (r0 < 0) {
    0x00003764 blt 0x3774                                |                 goto label_19;
                                                         |             }
                                                         |         }
    0x00003766 movs r0, 0                                |         r0 = 0;
    0x00003768 blx 0x1780                                |         exit (r0);
                                                         |     }
    0x0000376c ldr r0, [pc, 0x14]                        |     
    0x0000376e add r0, pc                                |     r0 = 0x6ef6;
    0x00003770 bl 0x1dcc                                 |     fcn_00001dcc ();
                                                         | label_19:
    0x00003774 ldr r0, [pc, 0x10]                        |     
    0x00003776 add r0, pc                                |     r0 = 0x6f02;
    0x00003778 bl 0x1dcc                                 |     fcn_00001dcc ();
    0x0000377c movs r7, 0x66                             |     r7 = 0x66;
    0x0000377e movs r1, r0                               |     r1 = r0;
    0x00003780 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003782 movs r0, r0                               |     
    0x00003784 lsrs r6, r4, 0x1a                         |     r6 = r4 >> 0x1a;
    0x00003786 movs r0, r0                               |     
    0x00003788 asrs r6, r1, 0xc                          |     r6 = r1 >> 0xc;
    0x0000378a movs r0, r0                               |     
    0x0000378c ldr r2, [pc, 0x50]                        |     
    0x0000378e cmp r0, 3                                 |     
    0x00003790 ldr r3, [pc, 0x50]                        |     r3 = *(0x37e4);
    0x00003792 push {lr}                                 |     
    0x00003794 sub sp, 0xc                               |     
    0x00003796 add r2, pc                                |     r2 = 0x6f7a;
    0x00003798 ldr r3, [r2, r3]                          |     
    0x0000379a ldr r3, [r3]                              |     r3 = *(0x6f7a);
    0x0000379c str r3, [sp, 4]                           |     var_4h_4 = r3;
    0x0000379e mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 3) {
    0x000037a2 beq 0x37a8                                |         
    0x000037a4 bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x000037a8 mov r4, r1                                |     r4 = r1;
    0x000037aa ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x000037ac bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x000037b0 mov r3, r0                                |     r3 = r0;
    0x000037b2 ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x000037b4 mov r4, r3                                |     r4 = r3;
    0x000037b6 bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x000037ba mov r5, r0                                |     r5 = r0;
    0x000037bc mov r0, sp                                |     r0 = sp;
    0x000037be bl 0x2e98                                 |     fcn_00002e98 (r0);
    0x000037c2 ldr r2, [sp]                              |     r2 = *(sp);
    0x000037c4 mov r1, r0                                |     r1 = r0;
    0x000037c6 mov r3, r5                                |     r3 = r5;
    0x000037c8 mov r0, r4                                |     r0 = r4;
    0x000037ca blx 0x1798                                |     r0 = keyctl_instantiate ();
    0x000037ce cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x000037d0 blt 0x37d8                                |         
    0x000037d2 movs r0, 0                                |         r0 = 0;
    0x000037d4 blx 0x1780                                |         exit (r0);
                                                         |     }
    0x000037d8 ldr r0, [pc, 0xc]                         |     
    0x000037da add r0, pc                                |     r0 = 0x6fc6;
    0x000037dc bl 0x1dcc                                 |     fcn_00001dcc ();
    0x000037e0 movs r7, 6                                |     r7 = 6;
    0x000037e2 movs r1, r0                               |     r1 = r0;
    0x000037e4 lsls r0, r0, 5                            |     r0 <<= 5;
    0x000037e6 movs r0, r0                               |     
    0x000037e8 asrs r2, r6, 0xa                          |     r2 = r6 >> 0xa;
    0x000037ea movs r0, r0                               |     
    0x000037ec cmp r0, 4                                 |     
    0x000037ee push {r3, lr}                             |     
                                                         |     if (r0 != 4) {
    0x000037f0 beq 0x37f6                                |         
    0x000037f2 bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x000037f6 mov r4, r1                                |     r4 = r1;
    0x000037f8 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x000037fa bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x000037fe mov r5, r0                                |     r5 = r0;
    0x00003800 ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00003802 bl 0x1c2c                                 |     fcn_00001c2c (r0);
    0x00003806 ldr r6, [r4, 8]                           |     r6 = *((r4 + 8));
    0x00003808 mov r4, r0                                |     r4 = r0;
    0x0000380a mov r0, r6                                |     r0 = r6;
    0x0000380c blx 0x17bc                                |     strlen (r0);
    0x00003810 mov r3, r4                                |     r3 = r4;
    0x00003812 mov r2, r0                                |     r2 = r0;
    0x00003814 mov r1, r6                                |     r1 = r6;
    0x00003816 mov r0, r5                                |     r0 = r5;
    0x00003818 blx 0x1798                                |     r0 = keyctl_instantiate ();
    0x0000381c cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x0000381e blt 0x3826                                |         
    0x00003820 movs r0, 0                                |         r0 = 0;
    0x00003822 blx 0x1780                                |         exit (r0);
                                                         |     }
    0x00003826 ldr r0, [pc, 8]                           |     
    0x00003828 add r0, pc                                |     r0 = 0x705e;
    0x0000382a bl 0x1dcc                                 |     fcn_00001dcc ();
    0x0000382e nop                                       |     
    0x00003830 asrs r4, r4, 9                            |     r4 >>= 9;
    0x00003832 movs r0, r0                               |     
    0x00003834 ldr r2, [pc, 0x54]                        |     
    0x00003836 cmp r0, 4                                 |     
    0x00003838 ldr r3, [pc, 0x54]                        |     r3 = *(0x3890);
    0x0000383a push {lr}                                 |     
    0x0000383c sub sp, 0x14                              |     
    0x0000383e add r2, pc                                |     r2 = 0x70ce;
    0x00003840 ldr r3, [r2, r3]                          |     
    0x00003842 ldr r3, [r3]                              |     r3 = *(0x70ce);
    0x00003844 str r3, [sp, 0xc]                         |     var_ch_4 = r3;
    0x00003846 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 4) {
    0x0000384a beq 0x3850                                |         
    0x0000384c bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x00003850 ldr r0, [r1, 0xc]                         |     r0 = *((r1 + 0xc));
    0x00003852 mov r4, r1                                |     r4 = r1;
    0x00003854 bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x00003858 mov r5, r0                                |     r5 = r0;
    0x0000385a add r0, sp, 8                             |     r0 += var_8h_4;
    0x0000385c bl 0x2e98                                 |     fcn_00002e98 (r0);
    0x00003860 ldr r3, [sp, 8]                           |     r3 = var_8h_4;
    0x00003862 mov r2, r0                                |     r2 = r0;
    0x00003864 ldrd r0, r1, [r4, 4]                      |     __asm ("ldrd r0, r1, [r4, 4]");
    0x00003868 str r5, [sp]                              |     *(sp) = r5;
    0x0000386a blx 0x1720                                |     r0 = add_key ();
    0x0000386e subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 >= r0) {
    0x00003870 blt 0x3882                                |         
    0x00003872 ldr r1, [pc, 0x20]                        |         
    0x00003874 movs r0, 1                                |         r0 = 1;
    0x00003876 add r1, pc                                |         r1 = 0x7110;
    0x00003878 blx 0x1834                                |         printf_chk ();
    0x0000387c movs r0, 0                                |         r0 = 0;
    0x0000387e blx 0x1780                                |         exit (r0);
                                                         |     }
    0x00003882 ldr r0, [pc, 0x14]                        |     
    0x00003884 add r0, pc                                |     r0 = 0x7122;
    0x00003886 bl 0x1dcc                                 |     fcn_00001dcc ();
    0x0000388a nop                                       |     
    0x0000388c movs r6, 0x5e                             |     r6 = 0x5e;
    0x0000388e movs r1, r0                               |     r1 = r0;
    0x00003890 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003892 movs r0, r0                               |     
    0x00003894 lsrs r6, r1, 0x1e                         |     r6 = r1 >> 0x1e;
    0x00003896 movs r0, r0                               |     
    0x00003898 asrs r4, r3, 8                            |     r4 = r3 >> 8;
    0x0000389a movs r0, r0                               |     
    0x0000389c cmp r0, 3                                 |     
    0x0000389e push {lr}                                 |     
    0x000038a0 sub sp, 0xc                               |     
                                                         |     if (r0 != 3) {
    0x000038a2 beq 0x38a8                                |         
    0x000038a4 bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x000038a8 ldr r0, [r1, 8]                           |     r0 = *((r1 + 8));
    0x000038aa mov r4, r1                                |     r4 = r1;
    0x000038ac bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x000038b0 mov r5, r0                                |     r5 = r0;
    0x000038b2 ldr r0, [pc, 0x2c]                        |     
    0x000038b4 movs r3, 0                                |     r3 = 0;
    0x000038b6 ldr r1, [r4, 4]                           |     r1 = *((r4 + 4));
    0x000038b8 mov r2, r3                                |     r2 = r3;
    0x000038ba str r5, [sp]                              |     *(sp) = r5;
    0x000038bc add r0, pc                                |     r0 = 0x71a2;
    0x000038be blx 0x1720                                |     r0 = add_key ();
    0x000038c2 subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 >= r0) {
    0x000038c4 blt 0x38d6                                |         
    0x000038c6 ldr r1, [pc, 0x1c]                        |         
    0x000038c8 movs r0, 1                                |         r0 = 1;
    0x000038ca add r1, pc                                |         r1 = 0x71b4;
    0x000038cc blx 0x1834                                |         printf_chk ();
    0x000038d0 movs r0, 0                                |         r0 = 0;
    0x000038d2 blx 0x1780                                |         exit (r0);
                                                         |     }
    0x000038d6 ldr r0, [pc, 0x10]                        |     
    0x000038d8 add r0, pc                                |     r0 = 0x71c6;
    0x000038da bl 0x1dcc                                 |     fcn_00001dcc ();
    0x000038de nop                                       |     
    0x000038e0 lsrs r0, r5, 0x1c                         |     r0 = r5 >> 0x1c;
    0x000038e2 movs r0, r0                               |     
    0x000038e4 lsrs r2, r7, 0x1c                         |     r2 = r7 >> 0x1c;
    0x000038e6 movs r0, r0                               |     
    0x000038e8 asrs r0, r1, 7                            |     r0 = r1 >> 7;
    0x000038ea movs r0, r0                               |     
    0x000038ec cmp r0, 5                                 |     
    0x000038ee push {lr}                                 |     
    0x000038f0 sub sp, 0xc                               |     
                                                         |     if (r0 != 5) {
    0x000038f2 beq 0x38f8                                |         
    0x000038f4 bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x000038f8 mov r4, r1                                |     r4 = r1;
    0x000038fa ldr r0, [r1, 0x10]                        |     r0 = *((r1 + 0x10));
    0x000038fc bl 0x1c2c                                 |     fcn_00001c2c (r0);
    0x00003900 ldr r6, [r4, 0xc]                         |     r6 = *((r4 + 0xc));
    0x00003902 mov r5, r0                                |     r5 = r0;
    0x00003904 mov r0, r6                                |     r0 = r6;
    0x00003906 blx 0x17bc                                |     strlen (r0);
    0x0000390a mov r2, r6                                |     r2 = r6;
    0x0000390c mov r3, r0                                |     r3 = r0;
    0x0000390e ldrd r0, r1, [r4, 4]                      |     __asm ("ldrd r0, r1, [r4, 4]");
    0x00003912 str r5, [sp]                              |     *(sp) = r5;
    0x00003914 blx 0x1720                                |     add_key ();
    0x00003916 vceq.f32 d1, d4, d2                       |     __asm ("vceq.f32 d1, d4, d2");
                                                         |     if (r0 >= 5) {
    0x0000391a blt 0x392c                                |         
    0x0000391c ldr r1, [pc, 0x14]                        |         
    0x0000391e movs r0, 1                                |         r0 = 1;
    0x00003920 add r1, pc                                |         r1 = 0x7258;
    0x00003922 blx 0x1834                                |         printf_chk ();
    0x00003926 movs r0, 0                                |         r0 = 0;
    0x00003928 blx 0x1780                                |         exit (r0);
                                                         |     }
    0x0000392c ldr r0, [pc, 8]                           |     
    0x0000392e add r0, pc                                |     r0 = 0x726a;
    0x00003930 bl 0x1dcc                                 |     fcn_00001dcc ();
    0x00003934 lsrs r4, r4, 0x1b                         |     r4 >>= 0x1b;
    0x00003936 movs r0, r0                               |     
    0x00003938 asrs r2, r6, 5                            |     r2 = r6 >> 5;
    0x0000393a movs r0, r0                               |     
    0x0000393c cmp r0, 1                                 |     
    0x0000393e push {r3, lr}                             |     
                                                         |     if (r0 != 1) {
    0x00003940 beq 0x3946                                |         
    0x00003942 bl 0x1af0                                 |         r0 = fcn_00001af0 ();
                                                         |     }
    0x00003946 mov r4, r0                                |     r4 = r0;
    0x00003948 movs r0, 0                                |     r0 = 0;
    0x0000394a blx 0x18d0                                |     r0 = keyctl_join_session_keyring ();
    0x0000394e cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003950 blt 0x3980                                |         
    0x00003952 blx 0x1930                                |         r0 = keyctl_session_to_parent ();
    0x00003956 cmp r0, 0                                 |         
                                                         |         if (r0 >= 0) {
    0x00003958 blt 0x3978                                |             
    0x0000395a movs r1, 0                                |             r1 = 0;
    0x0000395c mvn r0, 2                                 |             r0 = ~2;
    0x00003960 blx 0x187c                                |             r0 = keyctl_get_keyring_ID ();
    0x00003964 subs r2, r0, 0                            |             r2 = r0 - 0;
                                                         |             if (r2 < r0) {
    0x00003966 blt 0x3988                                |                 goto label_20;
                                                         |             }
    0x00003968 ldr r1, [pc, 0x24]                        |             
    0x0000396a mov r0, r4                                |             r0 = r4;
    0x0000396c add r1, pc                                |             r1 = 0x7300;
    0x0000396e blx 0x1834                                |             printf_chk ();
    0x00003972 movs r0, 0                                |             r0 = 0;
    0x00003974 blx 0x1780                                |             exit (r0);
                                                         |         }
    0x00003978 ldr r0, [pc, 0x18]                        |         
    0x0000397a add r0, pc                                |         r0 = 0x7312;
    0x0000397c bl 0x1dcc                                 |         fcn_00001dcc ();
                                                         |     }
    0x00003980 ldr r0, [pc, 0x14]                        |     
    0x00003982 add r0, pc                                |     r0 = 0x731e;
    0x00003984 bl 0x1dcc                                 |     fcn_00001dcc ();
                                                         | label_20:
    0x00003988 ldr r0, [pc, 0x10]                        |     
    0x0000398a add r0, pc                                |     r0 = 0x732a;
    0x0000398c bl 0x1dcc                                 |     fcn_00001dcc ();
    0x00003990 lsrs r0, r3, 0x1a                         |     r0 = r3 >> 0x1a;
    0x00003992 movs r0, r0                               |     
    0x00003994 asrs r6, r5, 4                            |     r6 = r5 >> 4;
    0x00003996 movs r0, r0                               |     
    0x00003998 lsrs r6, r1, 0x19                         |     r6 = r1 >> 0x19;
    0x0000399a movs r0, r0                               |     
    0x0000399c asrs r2, r7, 4                            |     r2 = r7 >> 4;
    0x0000399e movs r0, r0                               |     
    0x000039a0 ldr r2, [pc, 0x78]                        |     
    0x000039a2 cmp r0, 4                                 |     
    0x000039a4 ldr r3, [pc, 0x78]                        |     r3 = *(0x3a20);
    0x000039a6 push {r7, lr}                             |     
    0x000039a8 sub sp, 8                                 |     
    0x000039aa add r2, pc                                |     r2 = 0x73ca;
    0x000039ac ldr r5, [pc, 0x74]                        |     
    0x000039ae ldr r3, [r2, r3]                          |     
    0x000039b0 add r5, pc                                |     r5 = 0x73d8;
    0x000039b2 ldr r3, [r3]                              |     r3 = *(0x73ca);
    0x000039b4 str r3, [sp, 4]                           |     var_4h_5 = r3;
    0x000039b6 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 4) {
    0x000039ba beq 0x39c0                                |         
    0x000039bc bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x000039c0 mov r4, r1                                |     r4 = r1;
    0x000039c2 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x000039c4 bl 0x1c2c                                 |     fcn_00001c2c (r0);
    0x000039c8 movs r2, 0xa                              |     r2 = 0xa;
    0x000039ca mov r1, sp                                |     r1 = sp;
    0x000039cc mov r6, r0                                |     r6 = r0;
    0x000039ce ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x000039d0 blx 0x17b0                                |     strtoul (r0, r1, r2);
    0x000039d4 ldr r3, [sp]                              |     r3 = *(sp);
    0x000039d6 mov r7, r0                                |     r7 = r0;
    0x000039d8 ldrb.w r8, [r3]                           |     r8 = *(r3);
    0x000039dc cmp.w r8, 0                               |     
                                                         |     if (r8 == 0) {
    0x000039e0 bne 0x39fc                                |         
    0x000039e2 ldr r0, [r4, 0xc]                         |         r0 = *((r4 + 0xc));
    0x000039e4 bl 0x1c2c                                 |         fcn_00001c2c (r0);
    0x000039e8 mov r1, r7                                |         r1 = r7;
    0x000039ea mov r2, r0                                |         r2 = r0;
    0x000039ec mov r0, r6                                |         r0 = r6;
    0x000039ee blx 0x1630                                |         r0 = keyctl_negate ();
    0x000039f2 cmp r0, 0                                 |         
                                                         |         if (r0 < 0) {
    0x000039f4 blt 0x3a14                                |             goto label_21;
                                                         |         }
    0x000039f6 mov r0, r8                                |         r0 = r8;
    0x000039f8 blx 0x1780                                |         exit (r0);
                                                         |     }
    0x000039fc ldr r0, [pc, 0x28]                        |     
    0x000039fe movs r1, 1                                |     r1 = 1;
    0x00003a00 ldr r2, [pc, 0x28]                        |     
    0x00003a02 ldr r3, [r4, 8]                           |     r3 = *((r4 + 8));
    0x00003a04 ldr r0, [r5, r0]                          |     r0 = *((r5 + r0));
    0x00003a06 add r2, pc                                |     r2 = 0x7436;
    0x00003a08 ldr r0, [r0]                              |     r0 = *(0x3a28);
    0x00003a0a blx 0x1858                                |     fprintf_chk ()
    0x00003a0e movs r0, 2                                |     r0 = 2;
    0x00003a10 blx 0x1780                                |     exit (r0);
                                                         | label_21:
    0x00003a14 ldr r0, [pc, 0x18]                        |     
    0x00003a16 add r0, pc                                |     r0 = 0x744a;
    0x00003a18 bl 0x1dcc                                 |     fcn_00001dcc ();
    0x00003a1c movs r4, 0xf2                             |     r4 = 0xf2;
    0x00003a1e movs r1, r0                               |     r1 = r0;
    0x00003a20 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003a22 movs r0, r0                               |     
    0x00003a24 movs r4, 0xec                             |     r4 = 0xec;
    0x00003a26 movs r1, r0                               |     r1 = r0;
    0x00003a28 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00003a2a movs r0, r0                               |     
    0x00003a2c lsrs r2, r6, 0xb                          |     r2 = r6 >> 0xb;
    0x00003a2e movs r0, r0                               |     
    0x00003a30 lsrs r6, r0, 0x1a                         |     r6 = r0 >> 0x1a;
    0x00003a32 movs r0, r0                               |     
    0x00003a34 cmp r0, 4                                 |     
    0x00003a36 mov r4, r0                                |     r4 = r0;
    0x00003a38 mov r5, r1                                |     r5 = r1;
    0x00003a3a push {r7, lr}                             |     
                                                         |     if (r0 > 4) {
    0x00003a3c ble 0x3a52                                |         
    0x00003a3e ldr r0, [pc, 0x50]                        |         
    0x00003a40 ldr r1, [r1, 4]                           |         r1 = *((r1 + 4));
    0x00003a42 add r0, pc                                |         r0 = 0x74d8;
    0x00003a44 blx 0x1600                                |         r0 = strcmp (r0, r1);
                                                         |         if (r0 != 0) {
    0x00003a48 cbnz r0, 0x3a58                           |             goto label_22;
                                                         |         }
    0x00003a4a subs r4, 1                                |         r4--;
    0x00003a4c adds r5, 4                                |         r5 += 4;
    0x00003a4e mov r6, r0                                |         r6 = r0;
    0x00003a50 b 0x3a54                                  |         
                                                         |     } else {
    0x00003a52 movs r6, 1                                |         r6 = 1;
                                                         |     }
    0x00003a54 cmp r4, 4                                 |     
                                                         |     if (r4 != 4) {
    0x00003a56 beq 0x3a5c                                |         
                                                         | label_22:
    0x00003a58 bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x00003a5c ldr r0, [r5, 4]                           |     r0 = *((r5 + 4));
    0x00003a5e bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x00003a62 mov r4, r0                                |     r4 = r0;
    0x00003a64 ldr r0, [r5, 8]                           |     r0 = *((r5 + 8));
    0x00003a66 bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x00003a6a mov r7, r0                                |     r7 = r0;
    0x00003a6c ldr r0, [r5, 0xc]                         |     r0 = *((r5 + 0xc));
    0x00003a6e bl 0x1c2c                                 |     fcn_00001c2c (r0);
    0x00003a72 mov r3, r6                                |     r3 = r6;
    0x00003a74 mov r2, r0                                |     r2 = r0;
    0x00003a76 mov r1, r7                                |     r1 = r7;
    0x00003a78 mov r0, r4                                |     r0 = r4;
    0x00003a7a blx 0x1924                                |     r0 = keyctl_move ();
    0x00003a7e cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003a80 blt 0x3a88                                |         
    0x00003a82 movs r0, 0                                |         r0 = 0;
    0x00003a84 blx 0x1780                                |         exit (r0);
                                                         |     }
    0x00003a88 ldr r0, [pc, 8]                           |     
    0x00003a8a add r0, pc                                |     r0 = 0x7522;
    0x00003a8c bl 0x1dcc                                 |     fcn_00001dcc ();
    0x00003a90 asrs r2, r3, 2                            |     r2 = r3 >> 2;
    0x00003a92 movs r0, r0                               |     
    0x00003a94 asrs r6, r2, 1                            |     r6 = r2 >> 1;
    0x00003a96 movs r0, r0                               |     
    0x00003a98 cmp r0, 3                                 |     
    0x00003a9a push {r3, lr}                             |     
                                                         |     if (r0 != 3) {
    0x00003a9c beq 0x3aa2                                |         
    0x00003a9e bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x00003aa2 mov r4, r1                                |     r4 = r1;
    0x00003aa4 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003aa6 bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x00003aaa mov r5, r0                                |     r5 = r0;
    0x00003aac ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003aae bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x00003ab2 mov r1, r0                                |     r1 = r0;
    0x00003ab4 mov r0, r5                                |     r0 = r5;
    0x00003ab6 blx 0x15d0                                |     r0 = keyctl_link ();
    0x00003aba cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003abc blt 0x3ac4                                |         
    0x00003abe movs r0, 0                                |         r0 = 0;
    0x00003ac0 blx 0x1780                                |         exit (r0);
                                                         |     }
    0x00003ac4 ldr r0, [pc, 4]                           |     
    0x00003ac6 add r0, pc                                |     r0 = 0x7596;
    0x00003ac8 bl 0x1dcc                                 |     fcn_00001dcc ();
    0x00003acc asrs r6, r4, 0x20                         |     r6 = r4 >> 0x20;
    0x00003ace movs r0, r0                               |     
    0x00003ad0 subs r3, r0, 2                            |     r3 = r0 - 2;
    0x00003ad2 mov r4, r0                                |     r4 = r0;
    0x00003ad4 ldr r0, [pc, 0x7c]                        |     
    0x00003ad6 cmp r3, 1                                 |     
    0x00003ad8 ldr r2, [pc, 0x7c]                        |     r2 = *(0x3b58);
    0x00003ada push {r7, lr}                             |     
    0x00003adc sub sp, 8                                 |     
    0x00003ade add r0, pc                                |     r0 = 0x7636;
    0x00003ae0 ldr r6, [pc, 0x78]                        |     
    0x00003ae2 ldr r2, [r0, r2]                          |     
    0x00003ae4 add r6, pc                                |     r6 = 0x7644;
    0x00003ae6 ldr r2, [r2]                              |     r2 = *(0x7636);
    0x00003ae8 str r2, [sp, 4]                           |     var_4h_6 = r2;
    0x00003aea mov.w r2, 0                               |     r2 = 0;
                                                         |     if (r3 >= 1) {
    0x00003aee bls 0x3af4                                |         
    0x00003af0 bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x00003af4 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003af6 mov r5, r1                                |     r5 = r1;
    0x00003af8 bl 0x1c2c                                 |     fcn_00001c2c (r0);
    0x00003afc cmp r4, 3                                 |     
    0x00003afe mov r7, r0                                |     r7 = r0;
                                                         |     if (r4 == 3) {
    0x00003b00 beq 0x3b28                                |         goto label_23;
                                                         |     }
    0x00003b02 mov.w r0, -1                              |     r0 = -1;
                                                         |     do {
    0x00003b06 mov r1, r7                                |         r1 = r7;
    0x00003b08 blx 0x1648                                |         r0 = keyctl_get_persistent ();
    0x00003b0c subs r2, r0, 0                            |         r2 = r0 - 0;
                                                         |         if (r2 >= r0) {
    0x00003b0e blt 0x3b20                                |             
    0x00003b10 ldr r1, [pc, 0x4c]                        |             
    0x00003b12 movs r0, 1                                |             r0 = 1;
    0x00003b14 add r1, pc                                |             r1 = 0x7678;
    0x00003b16 blx 0x1834                                |             printf_chk ();
    0x00003b1a movs r0, 0                                |             r0 = 0;
    0x00003b1c blx 0x1780                                |             exit (r0);
                                                         |         }
    0x00003b20 ldr r0, [pc, 0x40]                        |         
    0x00003b22 add r0, pc                                |         r0 = 0x768a;
    0x00003b24 bl 0x1dcc                                 |         fcn_00001dcc ();
                                                         | label_23:
    0x00003b28 ldr r0, [r5, 8]                           |         r0 = *((r5 + 8));
    0x00003b2a movs r2, 0                                |         r2 = 0;
    0x00003b2c mov r1, sp                                |         r1 = sp;
    0x00003b2e blx 0x17b0                                |         strtoul (r0, r1, r2);
    0x00003b32 ldr r3, [sp]                              |         r3 = *(sp);
    0x00003b34 ldrb r3, [r3]                             |         r3 = *(r3);
    0x00003b36 cmp r3, 0                                 |         
    0x00003b38 beq 0x3b06                                |         
                                                         |     } while (r3 == 0);
    0x00003b3a ldr r0, [pc, 0x2c]                        |     
    0x00003b3c movs r1, 1                                |     r1 = 1;
    0x00003b3e ldr r2, [pc, 0x2c]                        |     
    0x00003b40 ldr r3, [r5, 8]                           |     r3 = *((r5 + 8));
    0x00003b42 ldr r0, [r6, r0]                          |     r0 = *((r6 + r0));
    0x00003b44 add r2, pc                                |     r2 = 0x76b6;
    0x00003b46 ldr r0, [r0]                              |     r0 = *(0x3b6a);
    0x00003b48 blx 0x1858                                |     fprintf_chk ()
    0x00003b4c movs r0, 2                                |     r0 = 2;
    0x00003b4e blx 0x1780                                |     exit (r0);
    0x00003b52 nop                                       |     
    0x00003b54 movs r3, 0xbe                             |     r3 = 0xbe;
    0x00003b56 movs r1, r0                               |     r1 = r0;
    0x00003b58 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003b5a movs r0, r0                               |     
    0x00003b5c movs r3, 0xb8                             |     r3 = 0xb8;
    0x00003b5e movs r1, r0                               |     r1 = r0;
    0x00003b60 lsrs r0, r6, 0x13                         |     r0 = r6 >> 0x13;
    0x00003b62 movs r0, r0                               |     
    0x00003b64 lsrs r6, r5, 0x1f                         |     r6 = r5 >> 0x1f;
    0x00003b66 movs r0, r0                               |     
    0x00003b68 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00003b6a movs r0, r0                               |     
    0x00003b6c lsrs r4, r6, 0x1e                         |     r4 = r6 >> 0x1e;
    0x00003b6e movs r0, r0                               |     
    0x00003b70 cmp r0, 2                                 |     
    0x00003b72 push {r3, lr}                             |     
                                                         |     if (r0 != 2) {
    0x00003b74 beq 0x3b7a                                |         
    0x00003b76 bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x00003b7a ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003b7c bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x00003b80 blx 0x1708                                |     r0 = keyctl_invalidate ();
    0x00003b84 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003b86 blt 0x3b8e                                |         
    0x00003b88 movs r0, 0                                |         r0 = 0;
    0x00003b8a blx 0x1780                                |         exit (r0);
                                                         |     }
    0x00003b8e ldr r0, [pc, 8]                           |     
    0x00003b90 add r0, pc                                |     r0 = 0x772e;
    0x00003b92 bl 0x1dcc                                 |     fcn_00001dcc ();
    0x00003b96 nop                                       |     
    0x00003b98 lsrs r0, r3, 0x1e                         |     r0 = r3 >> 0x1e;
    0x00003b9a movs r0, r0                               |     
    0x00003b9c ldr r2, [pc, 0xf4]                        |     
    0x00003b9e cmp r0, 6                                 |     
    0x00003ba0 ldr r3, [pc, 0xf4]                        |     r3 = *(0x3c98);
    0x00003ba2 push {r7, lr}                             |     
    0x00003ba4 sub sp, 0x18                              |     
    0x00003ba6 add r2, pc                                |     r2 = 0x783e;
    0x00003ba8 ldr r6, [pc, 0xf0]                        |     
    0x00003baa ldr r3, [r2, r3]                          |     
    0x00003bac add r6, pc                                |     r6 = 0x784c;
    0x00003bae ldr r3, [r3]                              |     r3 = *(0x783e);
    0x00003bb0 str r3, [sp, 0x14]                        |     var_14h = r3;
    0x00003bb2 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 6) {
    0x00003bb6 beq 0x3bbc                                |         
    0x00003bb8 bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x00003bbc mov r4, r1                                |     r4 = r1;
    0x00003bbe ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003bc0 bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x00003bc4 mov r8, r0                                |     r8 = r0;
    0x00003bc6 ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003bc8 bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x00003bcc mov sb, r0                                |     sb = r0;
    0x00003bce ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00003bd0 bl 0x1c2c                                 |     fcn_00001c2c (r0);
    0x00003bd4 movs r1, 0                                |     r1 = 0;
    0x00003bd6 mov sl, r0                                |     sl = r0;
    0x00003bd8 movs r2, 0xa                              |     r2 = 0xa;
    0x00003bda ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x00003bdc blx 0x17b0                                |     r0 = strtoul (r0, r1, r2);
    0x00003be0 adds r1, r0, 1                            |     r1 = r0 + 1;
    0x00003be2 mov r5, r0                                |     r5 = r0;
                                                         |     if (r1 == r0) {
    0x00003be4 beq 0x3c84                                |         goto label_24;
                                                         |     }
    0x00003be6 blx 0x1738                                |     r0 = malloc (r0);
    0x00003bea mov r7, r0                                |     r7 = r0;
    0x00003bec cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00003bee beq 0x3c8c                                |         goto label_25;
                                                         |     }
    0x00003bf0 add r0, sp, 0x10                          |     r0 += var_10h;
    0x00003bf2 bl 0x2e98                                 |     fcn_00002e98 (r0);
    0x00003bf6 str r5, [sp, 0xc]                         |     var_ch_6 = r5;
    0x00003bf8 mov r2, sl                                |     r2 = sl;
    0x00003bfa str r0, [sp]                              |     *(sp) = r0;
    0x00003bfc mov r1, sb                                |     r1 = sb;
    0x00003bfe ldr r3, [r4, 0x14]                        |     r3 = *((r4 + 0x14));
    0x00003c00 mov r0, r8                                |     r0 = r8;
    0x00003c02 ldr r4, [sp, 0x10]                        |     r4 = var_10h;
    0x00003c04 str r7, [sp, 8]                           |     var_8h_6 = r7;
    0x00003c06 str r4, [sp, 4]                           |     var_4h_10 = r4;
    0x00003c08 blx 0x15e8                                |     r0 = keyctl_dh_compute_kdf ();
    0x00003c0c subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 < r0) {
    0x00003c0e blt 0x3c5a                                |         goto label_26;
                                                         |     }
    0x00003c10 ldr.w sb, [pc, 0x8c]                      |     
    0x00003c14 mov r4, r2                                |     r4 = r2;
    0x00003c16 ldr r1, [pc, 0x8c]                        |     
    0x00003c18 subs r5, r7, 1                            |     r5 = r7 - 1;
    0x00003c1a add.w sl, r4, 1                           |     sl = r4 + 1;
    0x00003c1e mov.w r8, 0                               |     r8 = 0;
    0x00003c22 add sb, pc                                |     sb = 0x78c6;
    0x00003c24 movs r0, 1                                |     r0 = 1;
    0x00003c26 add r1, pc                                |     r1 = 0x78d0;
    0x00003c28 blx 0x1834                                |     printf_chk ();
                                                         |     do {
                                                         | label_1:
    0x00003c2c ldrb r2, [r5, 1]!                         |         r2 = *((r5 += 1));
    0x00003c30 mov r1, sb                                |         r1 = sb;
    0x00003c32 movs r0, 1                                |         r0 = 1;
    0x00003c34 blx 0x1834                                |         printf_chk ();
    0x00003c38 sub.w r3, sl, r4                          |         r3 = sl - r4;
    0x00003c3c strb.w r8, [r5]                           |         *(r5) = r8;
    0x00003c40 lsls r2, r3, 0x1b                         |         r2 = r3 << 0x1b;
    0x00003c42 add.w r4, r4, -1                          |         r4 += -1;
                                                         |         if (r2 != r3) {
    0x00003c46 bne 0x3c62                                |             goto label_27;
                                                         |         }
    0x00003c48 cmp r4, 0                                 |         
                                                         |         if (r4 <= 0) {
    0x00003c4a ble 0x3c72                                |             goto label_28;
                                                         |         }
    0x00003c4c movs r0, 0xa                              |         r0 = 0xa;
                                                         | label_0:
    0x00003c4e ldr r3, [pc, 0x58]                        |         r3 = *(0x3caa);
    0x00003c50 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003c52 ldr r1, [r3]                              |         r1 = *(0x3caa);
    0x00003c54 blx 0x18c4                                |         putc (r0, r1);
    0x00003c58 b 0x3c2c                                  |         
                                                         |     } while (1);
                                                         | label_26:
    0x00003c5a ldr r0, [pc, 0x50]                        |     
    0x00003c5c add r0, pc                                |     r0 = 0x790e;
    0x00003c5e bl 0x1dcc                                 |     fcn_00001dcc ();
                                                         | label_27:
    0x00003c62 lsls r3, r3, 0x1e                         |     r3 <<= 0x1e;
                                                         |     if (r3 == r3) {
    0x00003c64 bne 0x3c6e                                |         
    0x00003c66 cmp r4, 0                                 |         
                                                         |         if (r4 <= 0) {
    0x00003c68 ble 0x3c72                                |             goto label_28;
                                                         |         }
    0x00003c6a movs r0, 0x20                             |         r0 = 0x20;
    0x00003c6c b 0x3c4e                                  |         goto label_0;
                                                         |     }
    0x00003c6e cmp r4, 0                                 |     
                                                         |     if (r4 > 0) {
    0x00003c70 bgt 0x3c2c                                |         goto label_1;
                                                         |     }
                                                         | label_28:
    0x00003c72 movs r0, 0xa                              |     r0 = 0xa;
    0x00003c74 blx 0x1828                                |     putchar (r0);
    0x00003c78 mov r0, r7                                |     r0 = r7;
    0x00003c7a blx 0x163c                                |     free (r0);
    0x00003c7e movs r0, 0                                |     r0 = 0;
    0x00003c80 blx 0x1780                                |     exit (r0);
                                                         | label_24:
    0x00003c84 ldr r0, [pc, 0x28]                        |     
    0x00003c86 add r0, pc                                |     r0 = 0x793a;
    0x00003c88 bl 0x1dcc                                 |     fcn_00001dcc ();
                                                         | label_25:
    0x00003c8c ldr r0, [pc, 0x24]                        |     
    0x00003c8e add r0, pc                                |     r0 = 0x7946;
    0x00003c90 bl 0x1dcc                                 |     fcn_00001dcc ();
    0x00003c94 movs r2, 0xf6                             |     r2 = 0xf6;
    0x00003c96 movs r1, r0                               |     r1 = r0;
    0x00003c98 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003c9a movs r0, r0                               |     
    0x00003c9c movs r2, 0xf0                             |     r2 = 0xf0;
    0x00003c9e movs r1, r0                               |     r1 = r0;
    0x00003ca0 lsrs r6, r6, 0x12                         |     r6 >>= 0x12;
    0x00003ca2 movs r0, r0                               |     
    0x00003ca4 lsrs r6, r0, 0x1e                         |     r6 = r0 >> 0x1e;
    0x00003ca6 movs r0, r0                               |     
    0x00003ca8 lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x00003caa movs r0, r0                               |     
    0x00003cac lsrs r0, r7, 0x1c                         |     r0 = r7 >> 0x1c;
    0x00003cae movs r0, r0                               |     
    0x00003cb0 lsrs r6, r6, 0x1a                         |     r6 >>= 0x1a;
    0x00003cb2 movs r0, r0                               |     
    0x00003cb4 lsrs r2, r4, 0x1b                         |     r2 = r4 >> 0x1b;
    0x00003cb6 movs r0, r0                               |     
    0x00003cb8 ldr r6, [pc, 0xdc]                        |     
    0x00003cba cmp r0, 6                                 |     
    0x00003cbc push {r7, lr}                             |     
    0x00003cbe sub sp, 0x10                              |     
    0x00003cc0 add r6, pc                                |     r6 = 0x7a5c;
                                                         |     if (r0 != 6) {
    0x00003cc2 beq 0x3cc8                                |         
    0x00003cc4 bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x00003cc8 mov r4, r1                                |     r4 = r1;
    0x00003cca ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003ccc bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x00003cd0 mov r7, r0                                |     r7 = r0;
    0x00003cd2 ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003cd4 bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x00003cd8 mov sb, r0                                |     sb = r0;
    0x00003cda ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00003cdc bl 0x1c2c                                 |     fcn_00001c2c (r0);
    0x00003ce0 movs r1, 0                                |     r1 = 0;
    0x00003ce2 mov sl, r0                                |     sl = r0;
    0x00003ce4 movs r2, 0xa                              |     r2 = 0xa;
    0x00003ce6 ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x00003ce8 blx 0x17b0                                |     r0 = strtoul (r0, r1, r2);
    0x00003cec adds r1, r0, 1                            |     r1 = r0 + 1;
    0x00003cee mov r5, r0                                |     r5 = r0;
                                                         |     if (r1 == r0) {
    0x00003cf0 beq 0x3d88                                |         goto label_29;
                                                         |     }
    0x00003cf2 blx 0x1738                                |     r0 = malloc (r0);
    0x00003cf6 mov r8, r0                                |     r8 = r0;
    0x00003cf8 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00003cfa beq 0x3d90                                |         goto label_30;
                                                         |     }
    0x00003cfc mov r0, r7                                |     r0 = r7;
    0x00003cfe movs r7, 0                                |     r7 = 0;
    0x00003d00 mov r2, sl                                |     r2 = sl;
    0x00003d02 str r5, [sp, 0xc]                         |     var_ch_5 = r5;
    0x00003d04 mov r1, sb                                |     r1 = sb;
    0x00003d06 ldr r3, [r4, 0x14]                        |     r3 = *((r4 + 0x14));
    0x00003d08 str.w r8, [sp, 8]                         |     __asm ("str.w r8, [var_8h_5]");
    0x00003d0c strd r7, r7, [sp]                         |     __asm ("strd r7, r7, [sp]");
    0x00003d10 blx 0x15e8                                |     r0 = keyctl_dh_compute_kdf ();
    0x00003d14 subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 < r0) {
    0x00003d16 blt 0x3d5e                                |         goto label_31;
                                                         |     }
    0x00003d18 ldr.w sl, [pc, 0x80]                      |     
    0x00003d1c mov r4, r2                                |     r4 = r2;
    0x00003d1e ldr r1, [pc, 0x80]                        |     
    0x00003d20 add.w r5, r8, -1                          |     r5 = r8 + -1;
    0x00003d24 add.w sb, r4, 1                           |     sb = r4 + 1;
    0x00003d28 movs r0, 1                                |     r0 = 1;
    0x00003d2a add sl, pc                                |     sl = 0x7aca;
    0x00003d2c add r1, pc                                |     r1 = 0x7ad2;
    0x00003d2e blx 0x1834                                |     printf_chk ();
                                                         |     do {
                                                         | label_3:
    0x00003d32 ldrb r2, [r5, 1]!                         |         r2 = *((r5 += 1));
    0x00003d36 mov r1, sl                                |         r1 = sl;
    0x00003d38 movs r0, 1                                |         r0 = 1;
    0x00003d3a blx 0x1834                                |         printf_chk ();
    0x00003d3e sub.w r3, sb, r4                          |         r3 = sb - r4;
    0x00003d42 strb r7, [r5]                             |         *(r5) = r7;
    0x00003d44 lsls r2, r3, 0x1b                         |         r2 = r3 << 0x1b;
    0x00003d46 add.w r4, r4, -1                          |         r4 += -1;
                                                         |         if (r2 != r3) {
    0x00003d4a bne 0x3d66                                |             goto label_32;
                                                         |         }
    0x00003d4c cmp r4, 0                                 |         
                                                         |         if (r4 <= 0) {
    0x00003d4e ble 0x3d76                                |             goto label_33;
                                                         |         }
    0x00003d50 movs r0, 0xa                              |         r0 = 0xa;
                                                         | label_2:
    0x00003d52 ldr r3, [pc, 0x50]                        |         r3 = *(0x3da6);
    0x00003d54 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003d56 ldr r1, [r3]                              |         r1 = *(0x3da6);
    0x00003d58 blx 0x18c4                                |         putc (r0, r1);
    0x00003d5c b 0x3d32                                  |         
                                                         |     } while (1);
                                                         | label_31:
    0x00003d5e ldr r0, [pc, 0x48]                        |     
    0x00003d60 add r0, pc                                |     r0 = 0x7b0e;
    0x00003d62 bl 0x1dcc                                 |     fcn_00001dcc ();
                                                         | label_32:
    0x00003d66 lsls r3, r3, 0x1e                         |     r3 <<= 0x1e;
                                                         |     if (r3 == r3) {
    0x00003d68 bne 0x3d72                                |         
    0x00003d6a cmp r4, 0                                 |         
                                                         |         if (r4 <= 0) {
    0x00003d6c ble 0x3d76                                |             goto label_33;
                                                         |         }
    0x00003d6e movs r0, 0x20                             |         r0 = 0x20;
    0x00003d70 b 0x3d52                                  |         goto label_2;
                                                         |     }
    0x00003d72 cmp r4, 0                                 |     
                                                         |     if (r4 > 0) {
    0x00003d74 bgt 0x3d32                                |         goto label_3;
                                                         |     }
                                                         | label_33:
    0x00003d76 movs r0, 0xa                              |     r0 = 0xa;
    0x00003d78 blx 0x1828                                |     putchar (r0);
    0x00003d7c mov r0, r8                                |     r0 = r8;
    0x00003d7e blx 0x163c                                |     free (r0);
    0x00003d82 movs r0, 0                                |     r0 = 0;
    0x00003d84 blx 0x1780                                |     exit (r0);
                                                         | label_29:
    0x00003d88 ldr r0, [pc, 0x20]                        |     
    0x00003d8a add r0, pc                                |     r0 = 0x7b3a;
    0x00003d8c bl 0x1dcc                                 |     fcn_00001dcc ();
                                                         | label_30:
    0x00003d90 ldr r0, [pc, 0x1c]                        |     
    0x00003d92 add r0, pc                                |     r0 = 0x7b46;
    0x00003d94 bl 0x1dcc                                 |     fcn_00001dcc ();
    0x00003d98 movs r1, 0xdc                             |     r1 = 0xdc;
    0x00003d9a movs r1, r0                               |     r1 = r0;
    0x00003d9c lsrs r6, r5, 0xe                          |     r6 = r5 >> 0xe;
    0x00003d9e movs r0, r0                               |     
    0x00003da0 lsrs r0, r0, 0x1a                         |     r0 >>= 0x1a;
    0x00003da2 movs r0, r0                               |     
    0x00003da4 lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x00003da6 movs r0, r0                               |     
    0x00003da8 lsrs r4, r6, 0x18                         |     r4 = r6 >> 0x18;
    0x00003daa movs r0, r0                               |     
    0x00003dac lsrs r2, r6, 0x16                         |     r2 = r6 >> 0x16;
    0x00003dae movs r0, r0                               |     
    0x00003db0 lsrs r6, r3, 0x17                         |     r6 = r3 >> 0x17;
    0x00003db2 movs r0, r0                               |     
    0x00003db4 ldr r2, [pc, 0xb8]                        |     
    0x00003db6 cmp r0, 4                                 |     
    0x00003db8 ldr r3, [pc, 0xb8]                        |     r3 = *(0x3e74);
    0x00003dba push {r7, lr}                             |     
    0x00003dbc sub sp, 8                                 |     
    0x00003dbe add r2, pc                                |     r2 = 0x7c32;
    0x00003dc0 ldr r6, [pc, 0xb4]                        |     
    0x00003dc2 ldr r3, [r2, r3]                          |     
    0x00003dc4 add r6, pc                                |     r6 = 0x7c40;
    0x00003dc6 ldr r3, [r3]                              |     r3 = *(0x7c32);
    0x00003dc8 str r3, [sp, 4]                           |     var_4h_7 = r3;
    0x00003dca mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 4) {
    0x00003dce beq 0x3dd4                                |         
    0x00003dd0 bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x00003dd4 mov r4, r1                                |     r4 = r1;
    0x00003dd6 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003dd8 bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x00003ddc mov r5, r0                                |     r5 = r0;
    0x00003dde ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003de0 bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x00003de4 mov r1, r0                                |     r1 = r0;
    0x00003de6 ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00003de8 mov r4, r1                                |     r4 = r1;
    0x00003dea bl 0x1c2c                                 |     fcn_00001c2c (r0);
    0x00003dee mov r1, r4                                |     r1 = r4;
    0x00003df0 mov r2, r0                                |     r2 = r0;
    0x00003df2 mov r3, sp                                |     r3 = sp;
    0x00003df4 mov r0, r5                                |     r0 = r5;
    0x00003df6 blx 0x17ec                                |     r0 = keyctl_dh_compute_alloc ();
    0x00003dfa subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 < r0) {
    0x00003dfc blt 0x3e68                                |         goto label_34;
                                                         |     }
    0x00003dfe ldr r1, [pc, 0x7c]                        |     
    0x00003e00 movs r0, 1                                |     r0 = 1;
    0x00003e02 mov r4, r2                                |     r4 = r2;
    0x00003e04 ldr.w sb, [pc, 0x78]                      |     
    0x00003e08 add.w r8, r4, 1                           |     r8 = r4 + 1;
    0x00003e0c movs r7, 0                                |     r7 = 0;
    0x00003e0e add r1, pc                                |     r1 = 0x7c90;
    0x00003e10 blx 0x1834                                |     printf_chk ();
    0x00003e14 ldr r5, [sp]                              |     r5 = *(sp);
    0x00003e16 add sb, pc                                |     sb = 0x7c9a;
    0x00003e18 subs r5, 1                                |     r5--;
                                                         |     do {
                                                         | label_5:
    0x00003e1a ldrb r2, [r5, 1]!                         |         r2 = *((r5 += 1));
    0x00003e1e mov r1, sb                                |         r1 = sb;
    0x00003e20 movs r0, 1                                |         r0 = 1;
    0x00003e22 blx 0x1834                                |         printf_chk ();
    0x00003e26 sub.w r3, r8, r4                          |         r3 = r8 - r4;
    0x00003e2a strb r7, [r5]                             |         *(r5) = r7;
    0x00003e2c lsls r2, r3, 0x1b                         |         r2 = r3 << 0x1b;
    0x00003e2e add.w r4, r4, -1                          |         r4 += -1;
                                                         |         if (r2 != r3) {
    0x00003e32 bne 0x3e46                                |             goto label_35;
                                                         |         }
    0x00003e34 cmp r4, 0                                 |         
                                                         |         if (r4 <= 0) {
    0x00003e36 ble 0x3e56                                |             goto label_36;
                                                         |         }
    0x00003e38 movs r0, 0xa                              |         r0 = 0xa;
                                                         | label_4:
    0x00003e3a ldr r3, [pc, 0x48]                        |         r3 = *(0x3e86);
    0x00003e3c ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003e3e ldr r1, [r3]                              |         r1 = *(0x3e86);
    0x00003e40 blx 0x18c4                                |         putc (r0, r1);
    0x00003e44 b 0x3e1a                                  |         
                                                         |     } while (1);
                                                         | label_35:
    0x00003e46 lsls r3, r3, 0x1e                         |     r3 <<= 0x1e;
                                                         |     if (r3 == r3) {
    0x00003e48 bne 0x3e52                                |         
    0x00003e4a cmp r4, 0                                 |         
                                                         |         if (r4 <= 0) {
    0x00003e4c ble 0x3e56                                |             goto label_36;
                                                         |         }
    0x00003e4e movs r0, 0x20                             |         r0 = 0x20;
    0x00003e50 b 0x3e3a                                  |         goto label_4;
                                                         |     }
    0x00003e52 cmp r4, 0                                 |     
                                                         |     if (r4 > 0) {
    0x00003e54 bgt 0x3e1a                                |         goto label_5;
                                                         |     }
                                                         | label_36:
    0x00003e56 movs r0, 0xa                              |     r0 = 0xa;
    0x00003e58 blx 0x1828                                |     putchar (r0);
    0x00003e5c ldr r0, [sp]                              |     r0 = *(sp);
    0x00003e5e blx 0x163c                                |     free (r0);
    0x00003e62 movs r0, 0                                |     r0 = 0;
    0x00003e64 blx 0x1780                                |     exit (r0);
    0x00003e66 invalid                                   |     
                                                         | label_34:
    0x00003e68 ldr r0, [pc, 0x1c]                        |     
    0x00003e6a add r0, pc                                |     r0 = 0x7cf6;
    0x00003e6c bl 0x1dcc                                 |     fcn_00001dcc ();
    0x00003e70 movs r0, 0xde                             |     r0 = 0xde;
    0x00003e72 movs r1, r0                               |     r1 = r0;
    0x00003e74 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003e76 movs r0, r0                               |     
    0x00003e78 movs r0, 0xd8                             |     r0 = 0xd8;
    0x00003e7a movs r1, r0                               |     r1 = r0;
    0x00003e7c lsrs r6, r3, 0x16                         |     r6 = r3 >> 0x16;
    0x00003e7e movs r0, r0                               |     
    0x00003e80 lsrs r2, r0, 0xb                          |     r2 = r0 >> 0xb;
    0x00003e82 movs r0, r0                               |     
    0x00003e84 lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x00003e86 movs r0, r0                               |     
    0x00003e88 lsrs r2, r4, 0x15                         |     r2 = r4 >> 0x15;
    0x00003e8a movs r0, r0                               |     
    0x00003e8c cmp r0, 2                                 |     
    0x00003e8e push {r3, lr}                             |     
                                                         |     if (r0 != 2) {
    0x00003e90 beq 0x3e96                                |         
    0x00003e92 bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x00003e96 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003e98 bl 0x1c2c                                 |     r0 = fcn_00001c2c (r0);
    0x00003e9c blx 0x17d4                                |     r0 = keyctl_clear ();
    0x00003ea0 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003ea2 blt 0x3eaa                                |         
    0x00003ea4 movs r0, 0                                |         r0 = 0;
    0x00003ea6 blx 0x1780                                |         exit (r0);
                                                         |     }
    0x00003eaa ldr r0, [pc, 8]                           |     
    0x00003eac add r0, pc                                |     r0 = 0x7d66;
    0x00003eae bl 0x1dcc                                 |     fcn_00001dcc ();
    0x00003eb2 nop                                       |     
    0x00003eb4 lsrs r0, r7, 0x14                         |     r0 = r7 >> 0x14;
    0x00003eb6 movs r0, r0                               |     
    0x00003eb8 ldr r2, [pc, 0x6c]                        |     
    0x00003eba cmp r0, 3                                 |     
    0x00003ebc ldr r3, [pc, 0x6c]                        |     r3 = *(0x3f2c);
    0x00003ebe push {r7, lr}                             |     
    0x00003ec0 sub sp, 8                                 |     
    0x00003ec2 add r2, pc                                |     r2 = 0x7dee;
    0x00003ec4 ldr r5, [pc, 0x68]                        |     
    0x00003ec6 ldr r3, [r2, r3]                          |     
    0x00003ec8 add r5, pc                                |     r5 = 0x7dfc;
    0x00003eca ldr r3, [r3]                              |     r3 = *(0x7dee);
    0x00003ecc str r3, [sp, 4]                           |     var_4h_8 = r3;
    0x00003ece mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 3) {
    0x00003ed2 beq 0x3ed8                                |         
    0x00003ed4 bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x00003ed8 mov r4, r1                                |     r4 = r1;
    0x00003eda ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003edc bl 0x1c2c                                 |     fcn_00001c2c (r0);
    0x00003ee0 mov r1, sp                                |     r1 = sp;
    0x00003ee2 movs r2, 0                                |     r2 = 0;
    0x00003ee4 mov r6, r0                                |     r6 = r0;
    0x00003ee6 ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003ee8 blx 0x17b0                                |     strtoul (r0, r1, r2);
    0x00003eec ldr r3, [sp]                              |     r3 = *(sp);
    0x00003eee mov r1, r0                                |     r1 = r0;
    0x00003ef0 ldrb r7, [r3]                             |     r7 = *(r3);
                                                         |     if (r7 == 0) {
    0x00003ef2 cbnz r7, 0x3f08                           |         
    0x00003ef4 mov.w r2, -1                              |         r2 = -1;
    0x00003ef8 mov r0, r6                                |         r0 = r6;
    0x00003efa blx 0x17a4                                |         r0 = keyctl_chown ();
    0x00003efe cmp r0, 0                                 |         
                                                         |         if (r0 < 0) {
    0x00003f00 blt 0x3f20                                |             goto label_37;
                                                         |         }
    0x00003f02 mov r0, r7                                |         r0 = r7;
    0x00003f04 blx 0x1780                                |         exit (r0);
                                                         |     }
    0x00003f08 ldr r0, [pc, 0x28]                        |     
    0x00003f0a movs r1, 1                                |     r1 = 1;
    0x00003f0c ldr r2, [pc, 0x28]                        |     
    0x00003f0e ldr r3, [r4, 8]                           |     r3 = *((r4 + 8));
    0x00003f10 ldr r0, [r5, r0]                          |     r0 = *((r5 + r0));
    0x00003f12 add r2, pc                                |     r2 = 0x7e4e;
    0x00003f14 ldr r0, [r0]                              |     r0 = *(0x3f34);
    0x00003f16 blx 0x1858                                |     fprintf_chk ()
    0x00003f1a movs r0, 2                                |     r0 = 2;
    0x00003f1c blx 0x1780                                |     exit (r0);
                                                         | label_37:
    0x00003f20 ldr r0, [pc, 0x18]                        |     
    0x00003f22 add r0, pc                                |     r0 = 0x7e62;
    0x00003f24 bl 0x1dcc                                 |     fcn_00001dcc ();
    0x00003f28 subs r2, r3, 7                            |     r2 = r3 - 7;
    0x00003f2a movs r1, r0                               |     r1 = r0;
    0x00003f2c lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003f2e movs r0, r0                               |     
    0x00003f30 subs r4, r2, 7                            |     r4 = r2 - 7;
    0x00003f32 movs r1, r0                               |     r1 = r0;
    0x00003f34 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00003f36 movs r0, r0                               |     
    0x00003f38 lsrs r6, r4, 0xf                          |     r6 = r4 >> 0xf;
    0x00003f3a movs r0, r0                               |     
    0x00003f3c lsrs r2, r2, 0x13                         |     r2 >>= 0x13;
    0x00003f3e movs r0, r0                               |     
    0x00003f40 ldr r2, [pc, 0x6c]                        |     
    0x00003f42 cmp r0, 3                                 |     
    0x00003f44 ldr r3, [pc, 0x6c]                        |     r3 = *(0x3fb4);
    0x00003f46 push {r7, lr}                             |     
    0x00003f48 sub sp, 8                                 |     
    0x00003f4a add r2, pc                                |     r2 = 0x7efe;
    0x00003f4c ldr r5, [pc, 0x68]                        |     
    0x00003f4e ldr r3, [r2, r3]                          |     
    0x00003f50 add r5, pc                                |     r5 = 0x7f0c;
    0x00003f52 ldr r3, [r3]                              |     r3 = *(0x7efe);
    0x00003f54 str r3, [sp, 4]                           |     var_4h_9 = r3;
    0x00003f56 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 3) {
    0x00003f5a beq 0x3f60                                |         
    0x00003f5c bl 0x1af0                                 |         fcn_00001af0 ();
                                                         |     }
    0x00003f60 mov r4, r1                                |     r4 = r1;
    0x00003f62 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003f64 bl 0x1c2c                                 |     fcn_00001c2c (r0);
    0x00003f68 movs r2, 0                                |     r2 = 0;
    0x00003f6a mov r1, sp                                |     r1 = sp;
    0x00003f6c mov r6, r0                                |     r6 = r0;
    0x00003f6e ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003f70 blx 0x17b0                                |     strtoul (r0, r1, r2);
    0x00003f74 ldr r3, [sp]                              |     r3 = *(sp);
    0x00003f76 mov r2, r0                                |     r2 = r0;
    0x00003f78 ldrb r7, [r3]                             |     r7 = *(r3);
                                                         |     if (r7 == 0) {
    0x00003f7a cbnz r7, 0x3f90                           |         
    0x00003f7c mov.w r1, -1                              |         r1 = -1;
    0x00003f80 mov r0, r6                                |         r0 = r6;
    0x00003f82 blx 0x17a4                                |         r0 = keyctl_chown ();
    0x00003f86 cmp r0, 0                                 |         
                                                         |         if (r0 < 0) {
    0x00003f88 blt 0x3fa8                                |             goto label_38;
                                                         |         }
    0x00003f8a mov r0, r7                                |         r0 = r7;
    0x00003f8c blx 0x1780                                |         exit (r0);
                                                         |     }
    0x00003f90 ldr r0, [pc, 0x28]                        |     
    0x00003f92 movs r1, 1                                |     r1 = 1;
    0x00003f94 ldr r2, [pc, 0x28]                        |     
    0x00003f96 ldr r3, [r4, 8]                           |     r3 = *((r4 + 8));
    0x00003f98 ldr r0, [r5, r0]                          |     r0 = *((r5 + r0));
    0x00003f9a add r2, pc                                |     r2 = 0x7f5e;
    0x00003f9c ldr r0, [r0]                              |     r0 = *(0x3fbc);
    0x00003f9e blx 0x1858                                |     fprintf_chk ()
    0x00003fa2 movs r0, 2                                |     r0 = 2;
    0x00003fa4 blx 0x1780                                |     exit (r0);
                                                         | label_38:
    0x00003fa8 ldr r0, [pc, 0x18]                        |     
    0x00003faa add r0, pc                                |     r0 = 0x7f72;
    0x00003fac bl 0x1dcc                                 |     fcn_00001dcc ();
    0x00003fb0 subs r2, r2, 5                            |     r2 -= 5;
    0x00003fb2 movs r1, r0                               |     r1 = r0;
    0x00003fb4 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003fb6 movs r0, r0                               |     
    0x00003fb8 subs r4, r1, 5                            |     r4 = r1 - 5;
    0x00003fba movs r1, r0                               |     r1 = r0;
    0x00003fbc lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00003fbe movs r0, r0                               |     
    0x00003fc0 lsrs r2, r5, 0x11                         |     r2 = r5 >> 0x11;
    0x00003fc2 movs r0, r0                               |     
    0x00003fc4 lsrs r2, r1, 0x11                         |     r2 = r1 >> 0x11;
    0x00003fc6 movs r0, r0                               |     
    0x00003fc8 push {r3, lr}                             |     
    0x00003fca ldr r3, [sp, 8]                           |     r3 = var_0h_9;
    0x00003fcc ldr r3, [r3]                              |     r3 = *(r3);
    0x00003fce cmp r3, r1                                |     
    0x00003fd0 it ne                                     |     
                                                         |     if (r3 == r1) {
    0x00003fd2 movne r0, 0                               |         r0 = 0;
                                                         |     }
                                                         |     if (r3 != r1) {
    0x00003fd4 beq 0x3fd8                                |         
    0x00003fd6 pop {r3, pc}                              |         
                                                         |     }
    0x00003fd8 mov r1, r0                                |     r1 = r0;
    0x00003fda mov r0, r3                                |     r0 = r3;
    0x00003fdc blx 0x16fc                                |     r0 = keyctl_unlink ();
    0x00003fe0 mvns r0, r0                               |     r0 = ~r0;
    0x00003fe2 lsrs r0, r0, 0x1f                         |     r0 >>= 0x1f;
    0x00003fe4 pop {r3, pc}                              |     
                                                         | }

[*] Function fprintf used 10 times keyctl