[*] 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-80367616.squashfs_v4_le_extract/usr/bin/keyctl @ 0x1ca0 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.00001ca0 ()                  | void fcn_00001ca0 (char * s) {
                                             |     int16_t var_0h_2;
                                             |     char * * endptr;
                                             |     int16_t var_ch;
                                             |     r0 = s;
    0x00001ca0 blmi 0x15d4600                |     __asm ("blmi aav.0x000051f4");
    0x00001ca4 push {r4, r5, r6, lr}         |     
    0x00001ca6 sub sp, 0x10                  |     
    0x00001ca8 add r2, pc                    |     r2 += pc;
    0x00001caa ldr r5, [pc, 0x158]           |     
    0x00001cac mov r4, r0                    |     r4 = r0;
    0x00001cae ldr r3, [r2, r3]              |     r3 = *((r2 + r3));
    0x00001cb0 add r5, pc                    |     r5 = 0x3aba;
    0x00001cb2 ldr r3, [r3]                  |     r3 = *(r3);
    0x00001cb4 str r3, [sp, 0xc]             |     var_ch = r3;
    0x00001cb6 mov.w r3, 0                   |     r3 = 0;
    0x00001cba ldrb r3, [r0]                 |     r3 = *(r0);
    0x00001cbc cmp r3, 0x40                  |     
                                             |     if (r3 == 0x40) {
    0x00001cbe beq 0x1d38                    |         goto label_2;
                                             |     }
    0x00001cc0 cmp r3, 0x25                  |     
                                             |     if (r3 != 0x25) {
    0x00001cc2 bne 0x1d10                    |         goto label_3;
                                             |     }
    0x00001cc4 ldrb r3, [r0, 1]              |     r3 = *((r0 + 1));
    0x00001cc6 cmp r3, 0                     |     
                                             |     if (r3 == 0) {
    0x00001cc8 beq 0x1dbc                    |         goto label_4;
                                             |     }
    0x00001cca cmp r3, 0x3a                  |     
                                             |     if (r3 == 0x3a) {
    0x00001ccc beq 0x1d90                    |         goto label_5;
                                             |     }
    0x00001cce adds r6, r0, 1                |     r6 = r0 + 1;
    0x00001cd0 movs r1, 0x3a                 |     r1 = 0x3a;
    0x00001cd2 mov r0, r6                    |     r0 = r6;
    0x00001cd4 blx 0x1850                    |     r0 = strchr (r0, r1);
    0x00001cd8 mov r4, r0                    |     r4 = r0;
    0x00001cda cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00001cdc beq 0x1dbc                    |         goto label_4;
                                             |     }
    0x00001cde movs r3, 0                    |     r3 = 0;
    0x00001ce0 strb r3, [r4], 1              |     *(r4) = r3;
                                             |     r4++;
                                             | label_1:
    0x00001ce4 ldrb r3, [r4]                 |     r3 = *(r4);
    0x00001ce6 cmp r3, 0                     |     
                                             |     if (r3 == 0) {
    0x00001ce8 beq 0x1dbc                    |         goto label_4;
                                             |     }
    0x00001cea movs r2, 0                    |     r2 = 0;
    0x00001cec mov r1, r4                    |     r1 = r4;
    0x00001cee mov r0, r6                    |     r0 = r6;
    0x00001cf0 blx 0x16f4                    |     find_key_by_type_and_desc ();
    0x00001cf2 stc p12, c1, [r0, -0x10c]     |     __asm ("stc p12, c1, [r0, -0x10c]");
                                             |     if (r2 == 0) {
    0x00001cf6 beq 0x1de0                    |         goto label_6;
                                             |     }
                                             |     do {
                                             | label_0:
    0x00001cf8 ldr r2, [pc, 0x10c]           |         
    0x00001cfa ldr r3, [pc, 0x104]           |         r3 = *(0x1e02);
    0x00001cfc add r2, pc                    |         r2 = 0x3b08;
    0x00001cfe ldr r3, [r2, r3]              |         r3 = *(0x3b08);
    0x00001d00 ldr r2, [r3]                  |         r2 = *(0x3b08);
    0x00001d02 ldr r3, [sp, 0xc]             |         r3 = var_ch;
    0x00001d04 eors r2, r3                   |         r2 ^= r3;
    0x00001d06 mov.w r3, 0                   |         r3 = 0;
                                             |         if (r2 != r3) {
    0x00001d0a bne 0x1dd4                    |             goto label_7;
                                             |         }
    0x00001d0c add sp, 0x10                  |         
    0x00001d0e pop {r4, r5, r6, pc}          |         
                                             | label_3:
    0x00001d10 movs r2, 0                    |         r2 = 0;
    0x00001d12 add r1, sp, 8                 |         r1 += endptr;
    0x00001d14 blx 0x1838                    |         strtoul (r0, r1, r2);
    0x00001d16 vldr d9, [r0, 8]              |         __asm ("vldr d9, [r0, 8]");
    0x00001d1a ldrb r3, [r3]                 |         r3 = *(r3);
    0x00001d1c cmp r3, 0                     |         
    0x00001d1e beq 0x1cf8                    |         
                                             |     } while (r3 == 0);
    0x00001d20 ldr r2, [pc, 0xe8]            |     
    0x00001d22 ldr r0, [pc, 0xec]            |     r0 = *(0x1e12);
    0x00001d24 add r2, pc                    |     r2 = 0x3b34;
                                             |     do {
    0x00001d26 ldr r0, [r5, r0]              |         r0 = *((r5 + r0));
    0x00001d28 mov r3, r4                    |         r3 = r4;
    0x00001d2a movs r1, 1                    |         r1 = 1;
    0x00001d2c ldr r0, [r0]                  |         r0 = *(r0);
    0x00001d2e blx 0x18e0                    |         fprintf_chk ()
    0x00001d32 movs r0, 2                    |         r0 = 2;
    0x00001d34 blx 0x1808                    |         exit (r0);
                                             | label_2:
    0x00001d38 ldr r1, [pc, 0xd8]            |         
    0x00001d3a add r1, pc                    |         r1 = 0x3b52;
    0x00001d3c blx 0x1688                    |         r0 = strcmp (r0, r1);
                                             |         if (r0 != 0) {
    0x00001d40 cbz r0, 0x1d98                |             
    0x00001d42 ldr r1, [pc, 0xd4]            |             
    0x00001d44 mov r0, r4                    |             r0 = r4;
    0x00001d46 add r1, pc                    |             r1 = 0x3b64;
    0x00001d48 blx 0x1688                    |             r0 = strcmp (r0, r1);
                                             |             if (r0 == 0) {
    0x00001d4c cbz r0, 0x1d9e                |                 goto label_8;
                                             |             }
    0x00001d4e ldr r1, [pc, 0xcc]            |             
    0x00001d50 mov r0, r4                    |             r0 = r4;
    0x00001d52 add r1, pc                    |             r1 = 0x3b74;
    0x00001d54 blx 0x1688                    |             r0 = strcmp (r0, r1);
                                             |             if (r0 == 0) {
    0x00001d58 cbz r0, 0x1da4                |                 goto label_9;
                                             |             }
    0x00001d5a ldr r1, [pc, 0xc4]            |             
    0x00001d5c mov r0, r4                    |             r0 = r4;
    0x00001d5e add r1, pc                    |             r1 = 0x3b84;
    0x00001d60 blx 0x1688                    |             r0 = strcmp (r0, r1);
                                             |             if (r0 == 0) {
    0x00001d64 cbz r0, 0x1daa                |                 goto label_10;
                                             |             }
    0x00001d66 ldr r1, [pc, 0xbc]            |             
    0x00001d68 mov r0, r4                    |             r0 = r4;
    0x00001d6a add r1, pc                    |             r1 = 0x3b94;
    0x00001d6c blx 0x1688                    |             r0 = strcmp (r0, r1);
                                             |             if (r0 == 0) {
    0x00001d70 cbz r0, 0x1db0                |                 goto label_11;
                                             |             }
    0x00001d72 ldr r1, [pc, 0xb4]            |             
    0x00001d74 mov r0, r4                    |             r0 = r4;
    0x00001d76 add r1, pc                    |             r1 = 0x3ba4;
    0x00001d78 blx 0x1688                    |             r0 = strcmp (r0, r1);
                                             |             if (r0 == 0) {
    0x00001d7c cbz r0, 0x1db6                |                 goto label_12;
                                             |             }
    0x00001d7e ldr r1, [pc, 0xac]            |             
    0x00001d80 mov r0, r4                    |             r0 = r4;
    0x00001d82 add r1, pc                    |             r1 = 0x3bb4;
    0x00001d84 blx 0x1688                    |             r0 = strcmp (r0, r1);
                                             |             if (r0 != 0) {
    0x00001d88 cbnz r0, 0x1dd8               |                 goto label_13;
                                             |             }
    0x00001d8a mvn r0, 6                     |             r0 = ~6;
    0x00001d8e b 0x1cf8                      |             goto label_0;
                                             | label_5:
    0x00001d90 ldr r6, [pc, 0x9c]            |             
    0x00001d92 adds r4, 2                    |             r4 += 2;
    0x00001d94 add r6, pc                    |             r6 = 0x3bc8;
    0x00001d96 b 0x1ce4                      |             goto label_1;
                                             |         }
    0x00001d98 mov.w r0, -1                  |         r0 = -1;
    0x00001d9c b 0x1cf8                      |         goto label_0;
                                             | label_8:
    0x00001d9e mvn r0, 1                     |         r0 = ~1;
    0x00001da2 b 0x1cf8                      |         goto label_0;
                                             | label_9:
    0x00001da4 mvn r0, 2                     |         r0 = ~2;
    0x00001da8 b 0x1cf8                      |         goto label_0;
                                             | label_10:
    0x00001daa mvn r0, 3                     |         r0 = ~3;
    0x00001dae b 0x1cf8                      |         goto label_0;
                                             | label_11:
    0x00001db0 mvn r0, 4                     |         r0 = ~4;
    0x00001db4 b 0x1cf8                      |         goto label_0;
                                             | label_12:
    0x00001db6 mvn r0, 5                     |         r0 = ~5;
    0x00001dba b 0x1cf8                      |         goto label_0;
                                             | label_4:
    0x00001dbc ldr r3, [pc, 0x50]            |         
    0x00001dbe movs r2, 0x1b                 |         r2 = 0x1b;
    0x00001dc0 ldr r0, [pc, 0x70]            |         
    0x00001dc2 movs r1, 1                    |         r1 = 1;
    0x00001dc4 ldr r3, [r5, r3]              |         r3 = *((r5 + r3));
    0x00001dc6 add r0, pc                    |         r0 = 0x3bfe;
    0x00001dc8 ldr r3, [r3]                  |         r3 = *(0x1e10);
    0x00001dca blx 0x1760                    |         fwrite (r0, r1, r2, r3);
    0x00001dce movs r0, 2                    |         r0 = 2;
    0x00001dd0 blx 0x1808                    |         r0 = exit (r0);
                                             | label_7:
    0x00001dd4 blx 0x1724                    |         stack_chk_fail ();
                                             | label_13:
    0x00001dd8 ldr r2, [pc, 0x5c]            |         
    0x00001dda ldr r0, [pc, 0x34]            |         r0 = *(0x1e12);
    0x00001ddc add r2, pc                    |         r2 = 0x3c18;
    0x00001dde b 0x1d26                      |         
                                             |     } while (1);
                                             | label_6:
    0x00001de0 ldr r1, [pc, 0x2c]            |     r1 = *(0x1e10);
    0x00001de2 mov r3, r6                    |     r3 = r6;
    0x00001de4 ldr r2, [pc, 0x54]            |     
    0x00001de6 ldr r0, [r5, r1]              |     r0 = *((r5 + r1));
    0x00001de8 movs r1, 1                    |     r1 = 1;
    0x00001dea str r4, [sp]                  |     *(sp) = r4;
    0x00001dec add r2, pc                    |     r2 = 0x3c2c;
    0x00001dee ldr r0, [r0]                  |     r0 = *(r0);
    0x00001df0 blx 0x18e0                    |     fprintf_chk ()
    0x00001df4 movs r0, 1                    |     r0 = 1;
    0x00001df6 blx 0x1808                    |     exit (r0);
    0x00001df8 stc p15, c11, [r8, -0]        |     __asm ("stc p15, c11, [r8, -0]");
    0x00001dfc str r4, [r6, r7]              |     *((r6 + r7)) = r4;
    0x00001dfe movs r0, r0                   |     
    0x00001e00 lsls r0, r0, 5                |     r0 <<= 5;
    0x00001e02 movs r0, r0                   |     
    0x00001e04 str r4, [r5, r7]              |     *((r5 + r7)) = r4;
    0x00001e06 movs r0, r0                   |     
    0x00001e08 str r0, [r4, r6]              |     *((r4 + r6)) = r0;
    0x00001e0a movs r0, r0                   |     
    0x00001e0c movs r7, 0xcc                 |     r7 = 0xcc;
    0x00001e0e movs r0, r0                   |     
    0x00001e10 lsls r4, r0, 5                |     r4 = r0 << 5;
    0x00001e12 movs r0, r0                   |     
    0x00001e14 movs r7, 0x6a                 |     r7 = 0x6a;
    0x00001e16 movs r0, r0                   |     
    0x00001e18 movs r7, 0x62                 |     r7 = 0x62;
    0x00001e1a movs r0, r0                   |     
    0x00001e1c movs r7, 0x5a                 |     r7 = 0x5a;
    0x00001e1e movs r0, r0                   |     
    0x00001e20 movs r7, 0x52                 |     r7 = 0x52;
    0x00001e22 movs r0, r0                   |     
    0x00001e24 movs r7, 0x4a                 |     r7 = 0x4a;
    0x00001e26 movs r0, r0                   |     
    0x00001e28 movs r7, 0x42                 |     r7 = 0x42;
    0x00001e2a movs r0, r0                   |     
    0x00001e2c movs r7, 0x3a                 |     r7 = 0x3a;
    0x00001e2e movs r0, r0                   |     
    0x00001e30 cmp r2, 0x54                  |     
    0x00001e32 movs r0, r0                   |     
    0x00001e34 movs r7, 0x42                 |     r7 = 0x42;
    0x00001e36 movs r0, r0                   |     
    0x00001e38 movs r6, 0xe4                 |     r6 = 0xe4;
    0x00001e3a movs r0, r0                   |     
    0x00001e3c movs r6, 0xf0                 |     r6 = 0xf0;
    0x00001e3e movs r0, r0                   |     
                                             | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/keyctl @ 0x24c4 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.000024c4 ()                                  | void fcn_000024c4 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                             |     int16_t var_0h;
                                                             |     int16_t var_4h;
                                                             |     int16_t var_8h;
                                                             |     int16_t var_10h;
                                                             |     int16_t var_14h;
                                                             |     int16_t var_24h_2;
                                                             |     int16_t var_1ch;
                                                             |     int16_t var_2ch_2;
                                                             |     int16_t var_24h;
                                                             |     int16_t var_28h;
                                                             |     char * ptr;
                                                             |     int16_t var_30h;
                                                             |     int16_t var_34h;
                                                             |     int16_t var_38h;
                                                             |     int16_t var_3ch;
                                                             |     int16_t var_40h;
                                                             |     int16_t var_4ch;
                                                             |     int16_t var_0h_2;
                                                             |     int16_t var_4h_2;
                                                             |     int16_t var_8h_2;
                                                             |     int16_t var_ch;
                                                             |     int32_t var_10h_2;
                                                             |     int32_t var_10h_3;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
                                                             |     r3 = arg4;
    0x000024c4 svcmi 0xf0e92d                                |     __asm ("svcmi 0xf0e92d");
    0x000024c8 mov r4, r0                                    |     r4 = r0;
    0x000024ca ldr r6, [pc, 0x12c]                           |     
    0x000024cc sub sp, 0x1c                                  |     
    0x000024ce mov r7, r1                                    |     r7 = r1;
    0x000024d0 mov sb, r2                                    |     sb = r2;
    0x000024d2 mov r5, r3                                    |     r5 = r3;
    0x000024d4 add r6, pc                                    |     r6 = 0x4ad2;
    0x000024d6 ldr.w fp, [r6, 4]                             |     fp = *(0x4ad6);
    0x000024da cmp.w fp, 0                                   |     
                                                             |     if (fp == 0) {
    0x000024de beq 0x2582                                    |         goto label_4;
                                                             |     }
    0x000024e0 ldr.w sl, [r6, 8]                             |     sl = *((r6 + 8));
                                                             | label_0:
    0x000024e4 lsr.w ip, r7, 0x18                            |     
    0x000024e8 cmp sl, sb                                    |     
    0x000024ea itt eq                                        |     
                                                             |     if (sl != sb) {
    0x000024ec orreq r1, ip, r7, lsr 16                      |         r1 = ip | (r7 >> 16);
                                                             |     }
                                                             |     if (sl == sb) {
    0x000024f0 and r1, r1, 0x3f                              |         r1 &= 0x3f;
                                                             |     }
                                                             |     if (sl == sb) {
    0x000024f4 beq 0x2524                                    |         goto label_1;
                                                             |     }
    0x000024f6 adds r1, r5, 1                                |     r1 = r5 + 1;
                                                             |     if (r1 == r5) {
    0x000024f8 beq 0x25de                                    |         goto label_5;
                                                             |     }
    0x000024fa ldr r3, [pc, 0x100]                           |     
    0x000024fc add r3, pc                                    |     r3 = 0x4afe;
    0x000024fe ldr r2, [r3, 0xc]                             |     r2 = *(0x4b0a);
    0x00002500 cmp r2, r5                                    |     
                                                             |     if (r2 == r5) {
    0x00002502 beq 0x251c                                    |         goto label_6;
                                                             |     }
    0x00002504 ldrd r2, r0, [r3, 0x10]                       |     __asm ("ldrd r2, r0, [r3, 0x10]");
    0x00002508 cmp r2, 0                                     |     
                                                             |     if (r2 <= 0) {
    0x0000250a ble 0x25de                                    |         goto label_5;
                                                             |     }
    0x0000250c subs r0, 4                                    |     r0 -= 4;
    0x0000250e b 0x2514                                      |     
                                                             |     while (r3 != r5) {
    0x00002510 subs r2, 1                                    |         r2--;
                                                             |         if (r2 == 1) {
    0x00002512 beq 0x25de                                    |             goto label_5;
                                                             |         }
    0x00002514 ldr r3, [r0, 4]!                              |         r3 = *((r0 += 4));
    0x00002518 cmp r3, r5                                    |         
    0x0000251a bne 0x2510                                    |         
                                                             |     }
                                                             | label_6:
    0x0000251c orr.w r1, ip, r7, lsr 8                       |     r1 = ip | (r7 >> 8);
    0x00002520 and r1, r1, 0x3f                              |     r1 &= 0x3f;
                                                             | label_1:
    0x00002524 tst.w r1, 0x20                                |     
    0x00002528 mov r0, r4                                    |     r0 = r4;
    0x0000252a ite ne                                        |     
                                                             |     if ((r1 & 0x20) == 0) {
    0x0000252c movne r3, 0x61                                |         r3 = 0x61;
                                                             |     }
                                                             |     if ((r1 & 0x20) != 0) {
    0x0000252e moveq r3, 0x2d                                |         r3 = 0x2d;
                                                             |     }
    0x00002530 tst.w r1, 0x10                                |     
    0x00002534 str r3, [sp]                                  |     *(sp) = r3;
    0x00002536 ite ne                                        |     
                                                             |     if ((r1 & 0x10) == 0) {
    0x00002538 movne r3, 0x6c                                |         r3 = 0x6c;
                                                             |     }
                                                             |     if ((r1 & 0x10) != 0) {
    0x0000253a moveq r3, 0x2d                                |         r3 = 0x2d;
                                                             |     }
    0x0000253c tst.w r1, 8                                   |     
    0x00002540 str r3, [sp, 4]                               |     var_4h_2 = r3;
    0x00002542 ite ne                                        |     
                                                             |     if ((r1 & 8) == 0) {
    0x00002544 movne r3, 0x73                                |         r3 = 0x73;
                                                             |     }
                                                             |     if ((r1 & 8) != 0) {
    0x00002546 moveq r3, 0x2d                                |         r3 = 0x2d;
                                                             |     }
    0x00002548 tst.w r1, 4                                   |     
    0x0000254c str r3, [sp, 8]                               |     var_8h_2 = r3;
    0x0000254e ite ne                                        |     
                                                             |     if ((r1 & 4) == 0) {
    0x00002550 movne r4, 0x77                                |         r4 = 0x77;
                                                             |     }
                                                             |     if ((r1 & 4) != 0) {
    0x00002552 moveq r4, 0x2d                                |         r4 = 0x2d;
                                                             |     }
    0x00002554 ldr r3, [pc, 0xa8]                            |     
    0x00002556 tst.w r1, 2                                   |     
    0x00002558 lsrs r2, r0, 0x1c                             |     r2 = r0 >> 0x1c;
    0x0000255a ite ne                                        |     
                                                             |     if (r2 == r0) {
    0x0000255c movne r2, 0x72                                |         r2 = 0x72;
                                                             |     }
                                                             |     if (r2 != r0) {
    0x0000255e moveq r2, 0x2d                                |         r2 = 0x2d;
                                                             |     }
    0x00002560 tst.w r1, 1                                   |     
    0x00002564 str r4, [sp, 0xc]                             |     var_ch = r4;
    0x00002566 ite eq                                        |     
                                                             |     if ((r1 & 1) != 0) {
    0x00002568 moveq r1, 0x2d                                |         r1 = 0x2d;
                                                             |     }
                                                             |     if ((r1 & 1) == 0) {
    0x0000256a movne r1, 0x76                                |         r1 = 0x76;
                                                             |     }
    0x0000256c strd r2, r1, [sp, 0x10]                       |     __asm ("strd r2, r1, [var_10h_2]");
    0x00002570 add r3, pc                                    |     r3 = 0x4b74;
    0x00002572 mov.w r2, -1                                  |     r2 = -1;
    0x00002576 movs r1, 1                                    |     r1 = 1;
    0x00002578 blx 0x1898                                    |     sprintf_chk ();
    0x0000257c add sp, 0x1c                                  |     
    0x0000257e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}    |     
                                                             | label_4:
    0x00002582 movs r3, 1                                    |     r3 = 1;
    0x00002584 str r3, [r6, 4]                               |     *((r6 + 4)) = r3;
    0x00002586 blx 0x173c                                    |     r0 = geteuid ();
    0x0000258a mov sl, r0                                    |     sl = r0;
    0x0000258c str r0, [r6, 8]                               |     *((r6 + 8)) = r0;
    0x0000258e blx 0x1754                                    |     getegid ();
    0x00002592 mov r1, fp                                    |     r1 = fp;
    0x00002594 mov r8, r0                                    |     r8 = r0;
    0x00002596 str r0, [r6, 0xc]                             |     *((r6 + 0xc)) = r0;
    0x00002598 mov r0, fp                                    |     r0 = fp;
    0x0000259a blx 0x1940                                    |     getgroups ();
    0x0000259e cmp.w sl, -1                                  |     
    0x000025a2 it ne                                         |     
                                                             |     if (sl != -1) {
    0x000025a4 cmpne r8, -1                                  |         __asm ("cmpne r8, -1");
                                                             |     }
    0x000025a8 mov fp, r0                                    |     
    0x000025aa ite eq                                        |     
                                                             |     if (sl != -1) {
    0x000025ac moveq r3, 1                                   |         r3 = 1;
                                                             |     }
                                                             |     if (sl == -1) {
    0x000025ae movne r3, 0                                   |         r3 = 0;
                                                             |     }
    0x000025b0 cmp.w r0, -1                                  |     
    0x000025b4 it eq                                         |     
                                                             |     if (r0 != -1) {
    0x000025b6 orreq r3, r3, 1                               |         r3 |= 1;
                                                             |     }
    0x000025ba str r0, [r6, 0x10]                            |     *((r6 + 0x10)) = r0;
                                                             |     if (r3 != 0) {
    0x000025bc cbnz r3, 0x25e8                               |         goto label_7;
                                                             |     }
    0x000025be movs r1, 4                                    |     r1 = 4;
    0x000025c0 blx 0x164c                                    |     r0 = calloc (r0, r1);
    0x000025c4 mov r1, r0                                    |     r1 = r0;
    0x000025c6 str r0, [r6, 0x14]                            |     *((r6 + 0x14)) = r0;
                                                             |     if (r0 == 0) {
    0x000025c8 cbz r0, 0x25f0                                |         goto label_8;
                                                             |     }
    0x000025ca mov r0, fp                                    |     r0 = fp;
    0x000025cc blx 0x1940                                    |     r0 = getgroups ();
    0x000025d0 cmp r0, 0                                     |     
    0x000025d2 str r0, [r6, 0x10]                            |     *((r6 + 0x10)) = r0;
                                                             |     if (r0 >= 0) {
    0x000025d4 bge 0x24e4                                    |         goto label_0;
                                                             |     }
    0x000025d6 ldr r0, [pc, 0x2c]                            |     
    0x000025d8 add r0, pc                                    |     r0 = 0x4be2;
    0x000025da bl 0x1e40                                     |     fcn_00001e40 ();
                                                             | label_5:
    0x000025de orr.w r1, ip, r7                              |     r1 = ip | r7;
    0x000025e2 and r1, r1, 0x3f                              |     r1 &= 0x3f;
    0x000025e6 b 0x2524                                      |     goto label_1;
                                                             | label_7:
    0x000025e8 ldr r0, [pc, 0x1c]                            |     
    0x000025ea add r0, pc                                    |     r0 = 0x4bf6;
    0x000025ec bl 0x1e40                                     |     fcn_00001e40 ();
                                                             | label_8:
    0x000025f0 ldr r0, [pc, 0x18]                            |     
    0x000025f2 add r0, pc                                    |     r0 = 0x4c02;
    0x000025f4 bl 0x1e40                                     |     fcn_00001e40 ();
    0x000025f8 ldr r3, [pc, 0xe0]                            |     r3 = *(0x26dc);
    0x000025fa movs r0, r0                                   |     
    0x000025fc ldr r3, [pc, 0x40]                            |     r3 = *(0x2640);
    0x000025fe movs r0, r0                                   |     
    0x00002600 movs r1, 0xa0                                 |     r1 = 0xa0;
    0x00002602 movs r0, r0                                   |     
    0x00002604 movs r1, 0x20                                 |     r1 = 0x20;
    0x00002606 movs r0, r0                                   |     
    0x00002608 movs r0, 0xe6                                 |     r0 = 0xe6;
    0x0000260a movs r0, r0                                   |     
    0x0000260c movs r0, 0xfe                                 |     r0 = 0xfe;
    0x0000260e movs r0, r0                                   |     
    0x00002610 ldr r2, [pc, 0x124]                           |     
    0x00002612 cmp r0, 2                                     |     
    0x00002614 ldr r3, [pc, 0x124]                           |     r3 = *(0x273c);
    0x00002616 push.w {r7, fp, lr}                           |     
    0x0000261a sub sp, 0x54                                  |     
    0x0000261c add r2, pc                                    |     r2 = 0x4d58;
    0x0000261e ldr r6, [pc, 0x120]                           |     
    0x00002620 ldr r3, [r2, r3]                              |     
    0x00002622 add r6, pc                                    |     r6 = 0x4d68;
    0x00002624 ldr r3, [r3]                                  |     r3 = *(0x4d58);
    0x00002626 str r3, [sp, 0x4c]                            |     var_4ch = r3;
    0x00002628 mov.w r3, 0                                   |     r3 = 0;
    0x0000262a lsls r0, r0, 0xc                              |     r0 <<= 0xc;
                                                             |     if (r0 != r0) {
    0x0000262c beq 0x2632                                    |         
    0x0000262e bl 0x1b70                                     |         fcn_00001b70 ();
                                                             |     }
    0x00002632 ldr r0, [r1, 4]                               |     r0 = *((r1 + 4));
    0x00002634 bl 0x1ca0                                     |     fcn_00001ca0 (r0);
    0x00002638 add r1, sp, 0x28                              |     r1 += var_28h;
    0x0000263a blx 0x1934                                    |     r0 = keyctl_read_alloc ();
    0x0000263e cmp r0, 0                                     |     
                                                             |     if (r0 < 0) {
    0x00002640 blt 0x270a                                    |         goto label_9;
                                                             |     }
    0x00002642 lsrs r4, r0, 2                                |     r4 = r0 >> 2;
                                                             |     if (r4 == r0) {
    0x00002644 beq 0x26f6                                    |         goto label_10;
                                                             |     }
    0x00002646 cmp r4, 1                                     |     
                                                             |     if (r4 == 1) {
    0x00002648 beq 0x272e                                    |         goto label_11;
                                                             |     }
    0x0000264a ldr r1, [pc, 0xf8]                            |     
    0x0000264c mov r2, r4                                    |     r2 = r4;
    0x0000264e movs r0, 1                                    |     r0 = 1;
    0x00002650 add r1, pc                                    |     r1 = 0x4d9a;
    0x00002652 blx 0x18bc                                    |     printf_chk ();
                                                             | label_3:
    0x00002656 ldr r3, [pc, 0xf0]                            |     
    0x00002658 add r7, sp, 0x2c                              |     r7 += ptr;
    0x0000265a ldr.w r8, [pc, 0xf0]                          |     
    0x0000265e ldr.w sb, [pc, 0xf0]                          |     
    0x00002662 add r3, pc                                    |     r3 = "<key> <gid>";
    0x00002664 ldr r5, [sp, 0x28]                            |     r5 = var_28h;
    0x00002666 add r8, pc                                    |     r8 = 0x4db8;
    0x00002668 mov fp, r3                                    |     
    0x0000266a add sb, pc                                    |     sb = 0x4dc0;
    0x0000266c str r6, [sp, 0x1c]                            |     var_1ch = r6;
    0x0000266e b 0x26da                                      |     
                                                             |     while (r4 >= 1) {
    0x00002670 add r3, sp, 0x3c                              |         r3 += var_3ch;
    0x00002672 ldr r0, [sp, 0x2c]                            |         r0 = ptr;
    0x00002674 str r3, [sp, 8]                               |         var_8h = r3;
    0x00002676 add r3, sp, 0x24                              |         r3 += var_24h;
    0x00002678 str r3, [sp, 4]                               |         var_4h = r3;
    0x0000267a add r3, sp, 0x34                              |         r3 += var_28h;
    0x0000267c str r3, [sp]                                  |         *(sp) = r3;
    0x0000267e movs r3, 0                                    |         r3 = 0;
    0x00002680 strd r3, r3, [sp, 0x30]                       |         __asm ("strd r3, r3, [var_28h]");
    0x00002684 add r2, sp, 0x38                              |         r2 += ptr;
    0x00002686 str r3, [sp, 0x24]                            |         var_24h = r3;
    0x00002688 mov.w r3, -1                                  |         r3 = -1;
    0x0000268c strd r3, r3, [sp, 0x38]                       |         __asm ("strd r3, r3, [ptr]");
    0x00002690 mov r1, r8                                    |         r1 = r8;
    0x00002692 add r3, sp, 0x30                              |         r3 += var_24h;
    0x00002694 blx 0x18a4                                    |         r0 = isoc99_sscanf ();
    0x00002698 cmp r0, 3                                     |         
                                                             |         if (r0 != 3) {
    0x0000269a bne 0x2712                                    |             goto label_12;
                                                             |         }
    0x0000269c add.w sl, sp, 0x40                            |         sl += var_34h;
    0x000026a0 ldrd r2, r3, [sp, 0x30]                       |         __asm ("ldrd r2, r3, [var_28h]");
    0x000026a4 ldr r1, [sp, 0x24]                            |         r1 = var_24h;
    0x000026a6 mov r0, sl                                    |         r0 = sl;
    0x000026a8 bl 0x24c4                                     |         fcn_000024c4 (r0, r1, r2, r3);
    0x000026ac ldr r1, [sp, 0x2c]                            |         r1 = ptr;
    0x000026ae mov r3, sl                                    |         r3 = sl;
    0x000026b0 ldr r0, [sp, 0x3c]                            |         r0 = var_3ch;
    0x000026b2 mov r2, r6                                    |         r2 = r6;
    0x000026b4 str r1, [sp, 0x10]                            |         var_4h = r1;
    0x000026b6 add r1, r0                                    |         r1 += r0;
    0x000026b8 movs r0, 1                                    |         r0 = 1;
    0x000026ba str r1, [sp, 0x14]                            |         var_8h = r1;
    0x000026bc ldr r1, [sp, 0x38]                            |         r1 = ptr;
    0x000026be strd r1, r1, [sp, 8]                          |         __asm ("strd r1, r1, [var_0h]");
    0x000026c2 ldr r1, [sp, 0x34]                            |         r1 = var_28h;
    0x000026c4 str r1, [sp, 4]                               |         var_4h = r1;
    0x000026c6 ldr r1, [sp, 0x30]                            |         r1 = var_24h;
    0x000026c8 str r1, [sp]                                  |         *(sp) = r1;
    0x000026ca mov r1, sb                                    |         r1 = sb;
    0x000026cc blx 0x18bc                                    |         printf_chk ();
    0x000026d0 ldr r0, [sp, 0x2c]                            |         r0 = ptr;
    0x000026d2 blx 0x16c4                                    |         free (r0);
                                                             | label_2:
    0x000026d6 subs r4, 1                                    |         r4--;
                                                             |         if (r4 == 1) {
    0x000026d8 beq 0x2704                                    |             goto label_13;
                                                             |         }
    0x000026da ldr r6, [r5], 4                               |         r6 = *(r5);
                                                             |         r5 += 4;
    0x000026de mov r1, r7                                    |         r1 = r7;
    0x000026e0 mov r0, r6                                    |         r0 = r6;
    0x000026e2 blx 0x1778                                    |         keyctl_describe_alloc ();
    0x000026e4 strex r8, r2, [sl]                            |         __asm ("strex r8, r2, [sl]");
    0x000026e8 bge 0x2670                                    |         
                                                             |     }
    0x000026ea mov r2, r6                                    |     r2 = r6;
    0x000026ec mov r1, fp                                    |     r1 = fp;
    0x000026ee movs r0, 1                                    |     r0 = 1;
    0x000026f0 blx 0x18bc                                    |     printf_chk ();
    0x000026f4 b 0x26d6                                      |     goto label_2;
                                                             | label_10:
    0x000026f6 ldr r0, [pc, 0x5c]                            |     
    0x000026f8 add r0, pc                                    |     r0 = 0x4e52;
    0x000026fa blx 0x17b4                                    |     puts (r0);
    0x000026fe mov r0, r4                                    |     r0 = r4;
    0x00002700 blx 0x1808                                    |     exit (r0);
                                                             | label_13:
    0x00002704 mov r0, r4                                    |     r0 = r4;
    0x00002706 blx 0x1808                                    |     exit (r0);
                                                             | label_9:
    0x0000270a ldr r0, [pc, 0x4c]                            |     
    0x0000270c add r0, pc                                    |     r0 = 0x4e6a;
    0x0000270e bl 0x1e40                                     |     fcn_00001e40 ();
                                                             | label_12:
    0x00002712 mov sl, r6                                    |     sl = r6;
    0x00002714 ldr r0, [pc, 0x44]                            |     
    0x00002716 ldr r6, [sp, 0x1c]                            |     r6 = var_1ch;
    0x00002718 mov r3, sl                                    |     r3 = sl;
    0x0000271a ldr r2, [pc, 0x44]                            |     
    0x0000271c movs r1, 1                                    |     r1 = 1;
    0x0000271e ldr r0, [r6, r0]                              |     r0 = *((r6 + r0));
    0x00002720 add r2, pc                                    |     r2 = 0x4e86;
    0x00002722 ldr r0, [r0]                                  |     r0 = *(0x275c);
    0x00002724 blx 0x18e0                                    |     fprintf_chk ()
    0x00002728 movs r0, 3                                    |     r0 = 3;
    0x0000272a blx 0x1808                                    |     exit (r0);
                                                             | label_11:
    0x0000272e ldr r0, [pc, 0x34]                            |     
    0x00002730 add r0, pc                                    |     r0 = 0x4e9a;
    0x00002732 blx 0x17b4                                    |     puts (r0);
    0x00002736 b 0x2656                                      |     goto label_3;
                                                             | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/keyctl @ 0x2f28 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.00002f28 ()                              | void fcn_00002f28 (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_16;
                                                         |     int32_t var_ch_14;
                                                         |     void * var_0h_10;
                                                         |     int16_t var_4h_7;
                                                         |     int32_t var_4h_24;
                                                         |     int32_t var_8h_17;
                                                         |     int32_t var_ch_15;
                                                         |     int16_t var_10h_4;
                                                         |     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_15;
                                                         |     int32_t var_ch_13;
                                                         |     int16_t var_0h_4;
                                                         |     int16_t var_0h_16;
                                                         |     int16_t var_0h_3;
                                                         |     char * s;
                                                         |     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_12;
                                                         |     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_12;
                                                         |     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;
                                                         |     char * var_8h_13;
                                                         |     int32_t var_ch_11;
                                                         |     int16_t var_10h_3;
                                                         |     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_10;
                                                         |     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;
                                                         |     char * var_8h_11;
                                                         |     int32_t var_ch_10;
                                                         |     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;
                                                         |     char * var_8h_9;
                                                         |     int32_t var_ch_9;
                                                         |     int16_t var_10h_2;
                                                         |     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;
                                                         |     char * s1;
                                                         |     int16_t var_ch_8;
                                                         |     int16_t var_1000h;
                                                         |     int16_t var_14h_2;
                                                         |     void * buf;
                                                         |     size_t size;
                                                         |     int16_t var_5ch;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
    0x00002f28 ldr r2, [pc, 0xa8]                        |     
    0x00002f2a ldr r3, [pc, 0xac]                        |     r3 = *(0x2fda);
    0x00002f2c push.w {r4, r5, r6, r7, r8, sb, lr}       |     
    0x00002f30 mov r6, r1                                |     r6 = r1;
    0x00002f32 add r2, pc                                |     r2 = 0x5f0a;
    0x00002f34 sub sp, 0x64                              |     
    0x00002f36 movs r1, 0                                |     r1 = 0;
    0x00002f38 mov r7, r0                                |     r7 = r0;
    0x00002f3a ldr r3, [r2, r3]                          |     
    0x00002f3c ldr.w r8, [pc, 0x9c]                      |     
    0x00002f40 ldr r3, [r3]                              |     r3 = *(0x5f0a);
    0x00002f42 str r3, [sp, 0x5c]                        |     var_5ch = r3;
    0x00002f44 mov.w r3, 0                               |     r3 = 0;
    0x00002f48 blx 0x17d8                                |     r0 = open (r0, r1, r2);
    0x00002f4c subs r5, r0, 0                            |     r5 = r0 - 0;
    0x00002f4e add r8, pc                                |     r8 = 0x5f2e;
                                                         |     if (r5 >= r0) {
    0x00002f50 blt 0x2fa8                                |         
    0x00002f52 mov r1, sp                                |         r1 = sp;
    0x00002f54 blx 0x1994                                |         r0 = fstat (r0, r1);
    0x00002f58 cmp r0, 0                                 |         
                                                         |         if (r0 < 0) {
    0x00002f5a blt 0x2fa8                                |             goto label_6;
                                                         |         }
    0x00002f5c ldr.w sb, [sp, 0x2c]                      |         sb = size;
    0x00002f60 mov r0, sb                                |         r0 = sb;
    0x00002f62 blx 0x17c0                                |         r0 = malloc (r0);
    0x00002f66 mov r4, r0                                |         r4 = r0;
                                                         |         if (r0 == 0) {
    0x00002f68 cbz r0, 0x2fcc                            |             goto label_7;
                                                         |         }
    0x00002f6a mov r1, r0                                |         r1 = r0;
    0x00002f6c mov r2, sb                                |         r2 = sb;
    0x00002f6e mov r0, r5                                |         r0 = r5;
    0x00002f70 blx 0x16ac                                |         r0 = read (r0, r1, r2);
    0x00002f74 adds r3, r0, 1                            |         r3 = r0 + 1;
                                                         |         if (r3 == r0) {
    0x00002f76 beq 0x2fa8                                |             goto label_6;
                                                         |         }
    0x00002f78 ldr r3, [sp, 0x2c]                        |         r3 = size;
    0x00002f7a cmp r3, r0                                |         
                                                         |         if (r3 != r0) {
    0x00002f7c bne 0x2fb2                                |             goto label_8;
                                                         |         }
    0x00002f7e mov r0, r5                                |         r0 = r5;
    0x00002f80 blx 0x19a0                                |         r0 = close (r0);
    0x00002f84 cmp r0, 0                                 |         
                                                         |         if (r0 < 0) {
    0x00002f86 blt 0x2fa8                                |             goto label_6;
                                                         |         }
    0x00002f88 ldr r3, [sp, 0x2c]                        |         r3 = size;
    0x00002f8a ldr r2, [pc, 0x54]                        |         
    0x00002f8c str r3, [r6]                              |         *(r6) = r3;
    0x00002f8e ldr r3, [pc, 0x48]                        |         r3 = *(0x2fda);
    0x00002f90 add r2, pc                                |         r2 = 0x5f76;
    0x00002f92 ldr r3, [r2, r3]                          |         r3 = *(0x5f76);
    0x00002f94 ldr r2, [r3]                              |         r2 = *(0x5f76);
    0x00002f96 ldr r3, [sp, 0x5c]                        |         r3 = var_5ch;
    0x00002f98 eors r2, r3                               |         r2 ^= r3;
    0x00002f9a mov.w r3, 0                               |         r3 = 0;
                                                         |         if (r2 != r3) {
    0x00002f9e bne 0x2fae                                |             goto label_9;
                                                         |         }
    0x00002fa0 mov r0, r4                                |         r0 = r4;
    0x00002fa2 add sp, 0x64                              |         
    0x00002fa4 pop.w {r4, r5, r6, r7, r8, sb, pc}        |         
                                                         |     }
                                                         | label_6:
    0x00002fa8 mov r0, r7                                |     r0 = r7;
    0x00002faa bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_9:
    0x00002fae blx 0x1724                                |     stack_chk_fail ();
                                                         | label_8:
    0x00002fb2 ldr r0, [pc, 0x30]                        |     
    0x00002fb4 mov r3, r7                                |     r3 = r7;
    0x00002fb6 ldr r2, [pc, 0x30]                        |     
    0x00002fb8 movs r1, 1                                |     r1 = 1;
    0x00002fba ldr.w r0, [r8, r0]                        |     r0 = *((r8 + r0));
    0x00002fbe add r2, pc                                |     r2 = 0x5fac;
    0x00002fc0 ldr r0, [r0]                              |     r0 = *(0x2fe6);
    0x00002fc2 blx 0x18e0                                |     fprintf_chk ()
    0x00002fc6 movs r0, 1                                |     r0 = 1;
    0x00002fc8 blx 0x1808                                |     exit (r0);
                                                         | label_7:
    0x00002fcc ldr r0, [pc, 0x1c]                        |     
    0x00002fce add r0, pc                                |     r0 = 0x5fbe;
    0x00002fd0 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00002fd4 subs r7, 0x6a                             |     r7 -= 0x6a;
    0x00002fd6 movs r0, r0                               |     
    0x00002fd8 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00002fda movs r0, r0                               |     
    0x00002fdc subs r7, 0x4e                             |     r7 -= 0x4e;
    0x00002fde movs r0, r0                               |     
    0x00002fe0 subs r7, 0xc                              |     r7 -= 0xc;
    0x00002fe2 movs r0, r0                               |     
    0x00002fe4 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00002fe6 movs r0, r0                               |     
    0x00002fe8 adds r2, r5, r6                           |     r2 = r5 + r6;
    0x00002fea movs r0, r0                               |     
    0x00002fec adds r2, r2, r6                           |     r2 += r6;
    0x00002fee movs r0, r0                               |     
    0x00002ff0 ldr r2, [pc, 0xac]                        |     
    0x00002ff2 cmp r0, 4                                 |     
    0x00002ff4 ldr r3, [pc, 0xac]                        |     r3 = *(0x30a4);
    0x00002ff6 push {r7, lr}                             |     
    0x00002ff8 sub.w sp, sp, 0x1000                      |     
    0x00002ffc add r2, pc                                |     r2 = 0x60a0;
    0x00002ffe ldr r6, [pc, 0xa8]                        |     
    0x00003000 sub sp, 0x18                              |     
    0x00003002 ldr r3, [r2, r3]                          |     
    0x00003004 add.w r4, sp, 0x1000                      |     r4 += var_1000h;
    0x00003008 add r6, pc                                |     r6 = 0x60b6;
    0x0000300a add.w r4, r4, 0x14                        |     r4 += var_14h_2;
    0x0000300e ldr r3, [r3]                              |     r3 = *(0x60a0);
    0x00003010 str r3, [r4]                              |     *(r4) = r3;
    0x00003012 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 <= 4) {
    0x00003016 bgt 0x301c                                |         
    0x00003018 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x0000301c add.w sb, sp, 0x18                        |     sb += var_18h;
    0x00003020 mov r4, r1                                |     r4 = r1;
    0x00003022 sub.w r8, sb, 4                           |     r8 -= var_4h_14;
    0x00003026 add.w r0, r4, 0x14                        |     r0 = r4 + 0x14;
    0x0000302a mov r1, r8                                |     r1 = r8;
    0x0000302c bl 0x2e7c                                 |     fcn_00002e7c (r0, r1);
    0x00003030 ldr r0, [r4, 4]                           |     r0 = *((r4 + 4));
    0x00003032 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003036 ldr r1, [pc, 0x74]                        |     
    0x00003038 mov r7, r0                                |     r7 = r0;
    0x0000303a ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x0000303c add r1, pc                                |     r1 = 0x60ee;
    0x0000303e blx 0x1688                                |     r0 = strcmp (r0, r1);
    0x00003042 mov r5, r0                                |     r5 = r0;
                                                         |     if (r0 != 0) {
    0x00003044 cbz r0, 0x305e                            |         
    0x00003046 ldr r3, [pc, 0x68]                        |         
    0x00003048 movs r2, 0x26                             |         r2 = 0x26;
    0x0000304a ldr r0, [pc, 0x68]                        |         
    0x0000304c movs r1, 1                                |         r1 = 1;
    0x0000304e ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003050 add r0, pc                                |         r0 = 0x610a;
    0x00003052 ldr r3, [r3]                              |         r3 = *(0x30b2);
    0x00003054 blx 0x1760                                |         fwrite (r0, r1, r2, r3);
    0x00003058 movs r0, 2                                |         r0 = 2;
    0x0000305a blx 0x1808                                |         exit (r0);
                                                         |     }
    0x0000305e ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00003060 sub.w r1, sb, 0xc                         |     r1 -= var_ch_7;
    0x00003064 bl 0x2f28                                 |     fcn_00002f28 (r0, r1);
    0x00003068 sub.w r1, sb, 8                           |     r1 -= var_8h_7;
    0x0000306c mov r2, r0                                |     r2 = r0;
    0x0000306e ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x00003070 mov r4, r2                                |     r4 = r2;
    0x00003072 bl 0x2f28                                 |     fcn_00002f28 (r0, r1);
    0x00003076 str r0, [sp]                              |     *(sp) = r0;
    0x00003078 mov r2, r4                                |     r2 = r4;
    0x0000307a ldr r3, [sb, -0x8]                        |     r3 = *((sb - 0x8));
    0x0000307e mov r1, r8                                |     r1 = r8;
    0x00003080 mov r0, r7                                |     r0 = r7;
    0x00003082 str r3, [sp, 4]                           |     var_4h = r3;
    0x00003084 ldr r3, [sb, -0xc]                        |     r3 = var_ch_7;
    0x00003088 blx 0x18d4                                |     r0 = keyctl_pkey_verify ();
    0x0000308c cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x0000308e blt 0x3096                                |         
    0x00003090 mov r0, r5                                |         r0 = r5;
    0x00003092 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003096 ldr r0, [pc, 0x20]                        |     
    0x00003098 add r0, pc                                |     r0 = 0x6156;
    0x0000309a bl 0x1e40                                 |     fcn_00001e40 ();
    0x0000309e nop                                       |     
    0x000030a0 subs r6, 0xa0                             |     r6 -= 0xa0;
    0x000030a2 movs r0, r0                               |     
    0x000030a4 lsls r0, r0, 5                            |     r0 <<= 5;
    0x000030a6 movs r0, r0                               |     
    0x000030a8 subs r6, 0x94                             |     r6 -= 0x94;
    0x000030aa movs r0, r0                               |     
    0x000030ac adds r4, r7, r4                           |     r4 = r7 + r4;
    0x000030ae movs r0, r0                               |     
    0x000030b0 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x000030b2 movs r0, r0                               |     
    0x000030b4 adds r4, r5, r4                           |     r4 = r5 + r4;
    0x000030b6 movs r0, r0                               |     
    0x000030b8 adds r4, r1, r4                           |     r4 = r1 + r4;
    0x000030ba movs r0, r0                               |     
    0x000030bc ldr r2, [pc, 0x128]                       |     
    0x000030be cmp r0, 2                                 |     
    0x000030c0 ldr r3, [pc, 0x128]                       |     r3 = *(0x31ec);
    0x000030c2 push {r7, lr}                             |     
    0x000030c4 sub.w sp, sp, 0x1040                      |     
    0x000030c8 add r2, pc                                |     r2 = 0x62b4;
    0x000030ca ldr r6, [pc, 0x124]                       |     
    0x000030cc add.w r4, sp, 0x1020                      |     r4 += var_1020h;
    0x000030d0 ldr r3, [r2, r3]                          |     
    0x000030d2 add.w r4, r4, 0x1c                        |     r4 += var_1ch;
    0x000030d6 add r6, pc                                |     r6 = 0x62cc;
    0x000030d8 ldr r3, [r3]                              |     r3 = *(0x62b4);
    0x000030da str r3, [r4]                              |     *(r4) = r3;
    0x000030dc mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 <= 2) {
    0x000030e0 bgt 0x30e6                                |         
    0x000030e2 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x000030e6 add r5, sp, 0x40                          |     r5 += var_40h;
    0x000030e8 mov r4, r1                                |     r4 = r1;
    0x000030ea sub.w r8, r5, 4                           |     r8 -= var_4h_15;
    0x000030ee add.w r0, r4, 0xc                         |     r0 += var_ch_8;
    0x000030f0 movs r4, r1                               |     r4 = r1;
    0x000030f2 mov r1, r8                                |     r1 = r8;
    0x000030f4 bl 0x2e7c                                 |     fcn_00002e7c (r0, r1);
    0x000030f6 cdp2 p8, 0xc, c6, c2, c0, 3               |     __asm ("cdp2 p8, 0xc, c6, c2, c0, 3");
    0x000030fa bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x000030fe ldr r1, [pc, 0xf4]                        |     
    0x00003100 mov r7, r0                                |     r7 = r0;
    0x00003102 ldr r0, [r4, 8]                           |     r0 = s1;
    0x00003104 add r1, pc                                |     r1 = 0x62fe;
    0x00003106 blx 0x1688                                |     r0 = strcmp (r0, r1);
    0x0000310a mov r4, r0                                |     r4 = r0;
                                                         |     if (r0 != 0) {
    0x0000310c cbz r0, 0x3126                            |         
    0x0000310e ldr r3, [pc, 0xe8]                        |         
    0x00003110 movs r2, 0x26                             |         r2 = 0x26;
    0x00003112 ldr r0, [pc, 0xe8]                        |         
    0x00003114 movs r1, 1                                |         r1 = 1;
    0x00003116 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003118 add r0, pc                                |         r0 = 0x631a;
    0x0000311a ldr r3, [r3]                              |         r3 = *(0x31fa);
    0x0000311c blx 0x1760                                |         fwrite (r0, r1, r2, r3);
    0x00003120 movs r0, 2                                |         r0 = 2;
    0x00003122 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003126 add r2, sp, 4                             |     r2 += var_4h_2;
    0x00003128 mov r1, r8                                |     r1 = r8;
    0x0000312a mov r0, r7                                |     r0 = r7;
    0x0000312c blx 0x19c4                                |     r0 = keyctl_pkey_query ();
    0x00003130 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003132 blt 0x31e0                                |         
    0x00003134 ldr r1, [pc, 0xc8]                        |         
    0x00003136 movs r0, 1                                |         r0 = 1;
    0x00003138 ldr r2, [r5, -0x38]                       |         r2 = var_38h;
    0x0000313c add r1, pc                                |         r1 = 0x6340;
    0x0000313e blx 0x18bc                                |         printf_chk ();
    0x00003142 ldr r1, [pc, 0xc0]                        |         
    0x00003144 movs r0, 1                                |         r0 = 1;
    0x00003146 ldrh r2, [r5, -0x34]                      |         r2 = var_34h;
    0x0000314a add r1, pc                                |         r1 = 0x6354;
    0x0000314c blx 0x18bc                                |         printf_chk ();
    0x00003150 ldr r1, [pc, 0xb4]                        |         
    0x00003152 movs r0, 1                                |         r0 = 1;
    0x00003154 ldrh r2, [r5, -0x32]                      |         r2 = var_32h_2;
    0x00003158 add r1, pc                                |         r1 = 0x6364;
    0x0000315a blx 0x18bc                                |         printf_chk ();
    0x0000315e ldr r1, [pc, 0xac]                        |         
    0x00003160 movs r0, 1                                |         r0 = 1;
    0x00003162 ldrh r2, [r5, -0x30]                      |         r2 = var_30h;
    0x00003166 add r1, pc                                |         r1 = 0x6378;
    0x00003168 blx 0x18bc                                |         printf_chk ();
    0x0000316c ldr r1, [pc, 0xa0]                        |         
    0x0000316e movs r0, 1                                |         r0 = 1;
    0x00003170 ldrh r2, [r5, -0x2e]                      |         r2 = var_2eh_2;
    0x00003174 add r1, pc                                |         r1 = 0x6388;
    0x00003176 blx 0x18bc                                |         printf_chk ();
    0x00003178 sub.w r8, r2, r5, lsr 29                  |         r8 = r2 - (r5 >> 29);
    0x0000317c subs r4, 0x3c                             |         r4 -= 0x3c;
    0x0000317e movs r0, 1                                |         r0 = 1;
    0x00003180 ldr r1, [pc, 0x90]                        |         
    0x00003182 tst.w r3, 1                               |         
    0x00003186 ite eq                                    |         
                                                         |         if ((r3 & 1) != 0) {
    0x00003188 moveq r2, 0x6e                            |             r2 = 0x6e;
                                                         |         }
                                                         |         if ((r3 & 1) == 0) {
    0x0000318a movne r2, 0x79                            |             r2 = 0x79;
                                                         |         }
    0x0000318c add r1, pc                                |         r1 = 0x63a4;
    0x0000318e blx 0x18bc                                |         printf_chk ();
    0x00003192 ldr r3, [r5, -0x3c]                       |         r3 = var_4h_2;
    0x00003196 movs r0, 1                                |         r0 = 1;
    0x00003198 ldr r1, [pc, 0x7c]                        |         
    0x0000319a tst.w r3, 2                               |         
    0x0000319e ite eq                                    |         
                                                         |         if ((r3 & 2) != 0) {
    0x000031a0 moveq r2, 0x6e                            |             r2 = 0x6e;
                                                         |         }
                                                         |         if ((r3 & 2) == 0) {
    0x000031a2 movne r2, 0x79                            |             r2 = 0x79;
                                                         |         }
    0x000031a4 add r1, pc                                |         r1 = 0x63c0;
    0x000031a6 blx 0x18bc                                |         printf_chk ();
    0x000031aa ldr r3, [r5, -0x3c]                       |         r3 = var_4h_2;
    0x000031ae movs r0, 1                                |         r0 = 1;
    0x000031b0 ldr r1, [pc, 0x68]                        |         
    0x000031b2 tst.w r3, 4                               |         
    0x000031b6 ite eq                                    |         
                                                         |         if ((r3 & 4) != 0) {
    0x000031b8 moveq r2, 0x6e                            |             r2 = 0x6e;
                                                         |         }
                                                         |         if ((r3 & 4) == 0) {
    0x000031ba movne r2, 0x79                            |             r2 = 0x79;
                                                         |         }
    0x000031bc add r1, pc                                |         r1 = 0x63dc;
    0x000031be blx 0x18bc                                |         printf_chk ();
    0x000031c2 ldr r3, [r5, -0x3c]                       |         r3 = var_4h_2;
    0x000031c6 movs r0, 1                                |         r0 = 1;
    0x000031c8 ldr r1, [pc, 0x54]                        |         
    0x000031ca tst.w r3, 8                               |         
    0x000031ce add r1, pc                                |         r1 = 0x63f2;
    0x000031d0 ite eq                                    |         
                                                         |         if ((r3 & 8) != 0) {
    0x000031d2 moveq r2, 0x6e                            |             r2 = 0x6e;
                                                         |         }
                                                         |         if ((r3 & 8) == 0) {
    0x000031d4 movne r2, 0x79                            |             r2 = 0x79;
                                                         |         }
    0x000031d6 blx 0x18bc                                |         printf_chk ();
    0x000031da mov r0, r4                                |         r0 = r4;
    0x000031dc blx 0x1808                                |         exit (r0);
                                                         |     }
    0x000031e0 ldr r0, [pc, 0x40]                        |     
    0x000031e2 add r0, pc                                |     r0 = 0x640a;
    0x000031e4 bl 0x1e40                                 |     fcn_00001e40 ();
    0x000031e8 subs r5, 0xd4                             |     r5 -= 0xd4;
    0x000031ea movs r0, r0                               |     
    0x000031ec lsls r0, r0, 5                            |     r0 <<= 5;
    0x000031ee movs r0, r0                               |     
    0x000031f0 subs r5, 0xc6                             |     r5 -= 0xc6;
    0x000031f2 movs r0, r0                               |     
    0x000031f4 adds r4, r6, r1                           |     r4 = r6 + r1;
    0x000031f6 movs r0, r0                               |     
    0x000031f8 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x000031fa movs r0, r0                               |     
    0x000031fc adds r4, r4, r1                           |     r4 += r1;
    0x000031fe movs r0, r0                               |     
    0x00003200 adds r0, r2, r2                           |     r0 = r2 + r2;
    0x00003202 movs r0, r0                               |     
    0x00003204 adds r2, r2, r2                           |     r2 += r2;
    0x00003206 movs r0, r0                               |     
    0x00003208 adds r0, r3, r2                           |     r0 = r3 + r2;
    0x0000320a movs r0, r0                               |     
    0x0000320c adds r6, r3, r2                           |     r6 = r3 + r2;
    0x0000320e movs r0, r0                               |     
    0x00003210 adds r4, r4, r2                           |     r4 += r2;
    0x00003212 movs r0, r0                               |     
    0x00003214 adds r0, r4, r2                           |     r0 = r4 + r2;
    0x00003216 movs r0, r0                               |     
    0x00003218 adds r4, r2, r2                           |     r4 = r2 + r2;
    0x0000321a movs r0, r0                               |     
    0x0000321c adds r0, r1, r2                           |     r0 = r1 + r2;
    0x0000321e movs r0, r0                               |     
    0x00003220 adds r2, r0, r2                           |     r2 = r0 + r2;
    0x00003222 movs r0, r0                               |     
    0x00003224 asrs r6, r2, 0x1f                         |     r6 = r2 >> 0x1f;
    0x00003226 movs r0, r0                               |     
    0x00003228 ldr r2, [pc, 0xe4]                        |     
    0x0000322a cmp r0, 3                                 |     
    0x0000322c ldr r3, [pc, 0xe4]                        |     r3 = *(0x3314);
    0x0000322e push.w {r7, fp, lr}                       |     
    0x00003232 sub.w sp, sp, 0x1040                      |     
    0x00003236 add r2, pc                                |     r2 = 0x654a;
    0x00003238 ldr r6, [pc, 0xdc]                        |     
    0x0000323a sub sp, 0xc                               |     
    0x0000323c ldr r3, [r2, r3]                          |     
    0x0000323e add.w r4, sp, 0x1040                      |     r4 += var_1040h;
    0x00003242 add r6, pc                                |     r6 = 0x655e;
    0x00003244 add.w r4, r4, 4                           |     r4 += var_4h_16;
    0x00003248 ldr r3, [r3]                              |     r3 = *(0x654a);
    0x0000324a str r3, [r4]                              |     *(r4) = r3;
    0x0000324c mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 <= 3) {
    0x00003250 bgt 0x3256                                |         
    0x00003252 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003256 add.w sb, sp, 0x48                        |     sb += var_48h;
    0x0000325a mov r4, r1                                |     r4 = r1;
    0x0000325c sub.w r8, sb, 4                           |     r8 -= var_4h_17;
    0x00003260 add.w r0, r4, 0x10                        |     r0 += var_10h_2;
    0x00003264 mov r1, r8                                |     r1 = r8;
    0x00003266 bl 0x2e7c                                 |     fcn_00002e7c (r0, r1);
    0x0000326a ldr r0, [r4, 4]                           |     r0 = var_40h;
    0x0000326c bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003270 ldr r1, [pc, 0xa8]                        |     
    0x00003272 mov r7, r0                                |     r7 = r0;
    0x00003274 ldr r0, [r4, 8]                           |     r0 = var_8h_9;
    0x00003276 add r1, pc                                |     r1 = 0x6596;
    0x00003278 blx 0x1688                                |     r0 = strcmp (r0, r1);
    0x0000327c mov r5, r0                                |     r5 = r0;
                                                         |     if (r0 != 0) {
    0x0000327e cbz r0, 0x3298                            |         
    0x00003280 ldr r3, [pc, 0x9c]                        |         
    0x00003282 movs r2, 0x26                             |         r2 = 0x26;
    0x00003284 ldr r0, [pc, 0x9c]                        |         
    0x00003286 movs r1, 1                                |         r1 = 1;
    0x00003288 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x0000328a add r0, pc                                |         r0 = 0x65b2;
    0x0000328c ldr r3, [r3]                              |         r3 = *(0x3320);
    0x0000328e blx 0x1760                                |         fwrite (r0, r1, r2, r3);
    0x00003292 movs r0, 2                                |         r0 = 2;
    0x00003294 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003298 add r1, sp, 8                             |     r1 += var_8h;
    0x0000329a ldr r0, [r4, 0xc]                         |     r0 = var_ch_9;
    0x0000329c bl 0x2f28                                 |     fcn_00002f28 (r0, r1);
    0x000032a0 add r2, sp, 0xc                           |     r2 += var_ch;
    0x000032a2 mov sl, r0                                |     sl = r0;
    0x000032a4 mov r1, r8                                |     r1 = r8;
    0x000032a6 mov r0, r7                                |     r0 = r7;
    0x000032a8 blx 0x19c4                                |     keyctl_pkey_query ();
    0x000032aa invalid                                   |     
                                                         |     if (r0 >= 2) {
    0x000032ae blt 0x32f0                                |         
    0x000032b0 ldrh fp, [sb, -0x32]                      |         fp = var_32h;
    0x000032b4 mov r0, fp                                |         r0 = fp;
    0x000032b6 blx 0x17c0                                |         r0 = malloc (r0);
    0x000032ba mov r4, r0                                |         r4 = r0;
                                                         |         if (r0 == 0) {
    0x000032bc cbz r0, 0x3306                            |             goto label_10;
                                                         |         }
    0x000032be mov r1, r8                                |         r1 = r8;
    0x000032c0 str.w fp, [sp, 4]                         |         __asm ("str.w fp, [var_4h_13]");
    0x000032c4 mov r2, sl                                |         r2 = sl;
    0x000032c6 ldr r3, [sb, -0x40]                       |         r3 = var_8h_10;
    0x000032ca mov r0, r7                                |         r0 = r7;
    0x000032cc str r4, [sp]                              |         *(sp) = r4;
    0x000032ce blx 0x1664                                |         r0 = keyctl_pkey_sign ();
    0x000032d2 subs r1, r0, 0                            |         r1 = r0 - 0;
                                                         |         if (r1 < r0) {
    0x000032d4 blt 0x32f8                                |             goto label_11;
                                                         |         }
    0x000032d6 ldr r3, [pc, 0x50]                        |         
    0x000032d8 mov r0, r4                                |         r0 = r4;
    0x000032da movs r2, 1                                |         r2 = 1;
    0x000032dc ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x000032de ldr r3, [r3]                              |         r3 = *(0x332a);
    0x000032e0 blx 0x1760                                |         r0 = fwrite (r0, r1, r2, r3);
    0x000032e4 cmp r0, 1                                 |         
                                                         |         if (r0 == 1) {
    0x000032e6 beq 0x3300                                |             goto label_12;
                                                         |         }
    0x000032e8 ldr r0, [pc, 0x40]                        |         
    0x000032ea add r0, pc                                |         r0 = 0x661a;
    0x000032ec bl 0x1e40                                 |         fcn_00001e40 ();
                                                         |     }
    0x000032f0 ldr r0, [pc, 0x3c]                        |     
    0x000032f2 add r0, pc                                |     r0 = 0x6626;
    0x000032f4 bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_11:
    0x000032f8 ldr r0, [pc, 0x38]                        |     
    0x000032fa add r0, pc                                |     r0 = 0x6632;
    0x000032fc bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_12:
    0x00003300 mov r0, r5                                |     r0 = r5;
    0x00003302 blx 0x1808                                |     exit (r0);
                                                         | label_10:
    0x00003306 ldr r0, [pc, 0x30]                        |     
    0x00003308 add r0, pc                                |     r0 = 0x6646;
    0x0000330a bl 0x1e40                                 |     fcn_00001e40 ();
    0x0000330e nop                                       |     
    0x00003310 subs r4, 0x66                             |     r4 -= 0x66;
    0x00003312 movs r0, r0                               |     
    0x00003314 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003316 movs r0, r0                               |     
    0x00003318 subs r4, 0x5a                             |     r4 -= 0x5a;
    0x0000331a movs r0, r0                               |     
    0x0000331c asrs r2, r0, 0x1c                         |     r2 = r0 >> 0x1c;
    0x0000331e movs r0, r0                               |     
    0x00003320 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00003322 movs r0, r0                               |     
    0x00003324 asrs r2, r6, 0x1b                         |     r2 = r6 >> 0x1b;
    0x00003326 movs r0, r0                               |     
    0x00003328 lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x0000332a movs r0, r0                               |     
    0x0000332c asrs r6, r0, 0x1e                         |     r6 = r0 >> 0x1e;
    0x0000332e movs r0, r0                               |     
    0x00003330 asrs r6, r0, 0x1b                         |     r6 = r0 >> 0x1b;
    0x00003332 movs r0, r0                               |     
    0x00003334 asrs r2, r4, 0x1d                         |     r2 = r4 >> 0x1d;
    0x00003336 movs r0, r0                               |     
    0x00003338 asrs r0, r3, 0x19                         |     r0 = r3 >> 0x19;
    0x0000333a movs r0, r0                               |     
    0x0000333c ldr r2, [pc, 0xe4]                        |     
    0x0000333e cmp r0, 3                                 |     
    0x00003340 ldr r3, [pc, 0xe4]                        |     r3 = *(0x3428);
    0x00003342 push.w {r7, fp, lr}                       |     
    0x00003346 sub.w sp, sp, 0x1040                      |     
    0x0000334a add r2, pc                                |     r2 = 0x6772;
    0x0000334c ldr r6, [pc, 0xdc]                        |     
    0x0000334e sub sp, 0xc                               |     
    0x00003350 ldr r3, [r2, r3]                          |     
    0x00003352 add.w r4, sp, 0x1040                      |     r4 += var_1040h_2;
    0x00003356 add r6, pc                                |     r6 = 0x6786;
    0x00003358 add.w r4, r4, 4                           |     r4 += var_4h_18;
    0x0000335c ldr r3, [r3]                              |     r3 = *(0x6772);
    0x0000335e str r3, [r4]                              |     *(r4) = r3;
    0x00003360 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 <= 3) {
    0x00003364 bgt 0x336a                                |         
    0x00003366 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x0000336a add.w sb, sp, 0x48                        |     sb += var_48h_2;
    0x0000336e mov r4, r1                                |     r4 = r1;
    0x00003370 sub.w r8, sb, 4                           |     r8 -= var_4h_19;
    0x00003374 add.w r0, r4, 0x10                        |     r0 += var_48h;
    0x00003378 mov r1, r8                                |     r1 = r8;
    0x0000337a bl 0x2e7c                                 |     fcn_00002e7c (r0, r1);
    0x0000337e ldr r0, [r4, 4]                           |     r0 = var_48h_4;
    0x00003380 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003384 ldr r1, [pc, 0xa8]                        |     
    0x00003386 mov r7, r0                                |     r7 = r0;
    0x00003388 ldr r0, [r4, 8]                           |     r0 = var_8h_11;
    0x0000338a add r1, pc                                |     r1 = 0x67be;
    0x0000338c blx 0x1688                                |     r0 = strcmp (r0, r1);
    0x00003390 mov r5, r0                                |     r5 = r0;
                                                         |     if (r0 != 0) {
    0x00003392 cbz r0, 0x33ac                            |         
    0x00003394 ldr r3, [pc, 0x9c]                        |         
    0x00003396 movs r2, 0x26                             |         r2 = 0x26;
    0x00003398 ldr r0, [pc, 0x9c]                        |         
    0x0000339a movs r1, 1                                |         r1 = 1;
    0x0000339c ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x0000339e add r0, pc                                |         r0 = 0x67da;
    0x000033a0 ldr r3, [r3]                              |         r3 = *(0x3434);
    0x000033a2 blx 0x1760                                |         fwrite (r0, r1, r2, r3);
    0x000033a6 movs r0, 2                                |         r0 = 2;
    0x000033a8 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x000033ac add r1, sp, 8                             |     r1 += var_8h_2;
    0x000033ae ldr r0, [r4, 0xc]                         |     r0 = var_ch_10;
    0x000033b0 bl 0x2f28                                 |     fcn_00002f28 (r0, r1);
    0x000033b4 add r2, sp, 0xc                           |     r2 += var_ch_2;
    0x000033b6 mov sl, r0                                |     sl = r0;
    0x000033b8 mov r1, r8                                |     r1 = r8;
    0x000033ba mov r0, r7                                |     r0 = r7;
    0x000033bc blx 0x19c4                                |     r0 = keyctl_pkey_query ();
    0x000033c0 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x000033c2 blt 0x3404                                |         
    0x000033c4 ldrh fp, [sb, -0x30]                      |         fp = var_0h_14;
    0x000033c8 mov r0, fp                                |         r0 = fp;
    0x000033ca blx 0x17c0                                |         r0 = malloc (r0);
    0x000033ce mov r4, r0                                |         r4 = r0;
                                                         |         if (r0 == 0) {
    0x000033d0 cbz r0, 0x341a                            |             goto label_13;
                                                         |         }
    0x000033d2 mov r1, r8                                |         r1 = r8;
    0x000033d4 str.w fp, [sp, 4]                         |         __asm ("str.w fp, [var_4h_12]");
    0x000033d8 mov r2, sl                                |         r2 = sl;
    0x000033da ldr r3, [sb, -0x40]                       |         r3 = var_8h_12;
    0x000033de mov r0, r7                                |         r0 = r7;
    0x000033e0 str r4, [sp]                              |         *(sp) = r4;
    0x000033e2 blx 0x18f8                                |         r0 = keyctl_pkey_decrypt ();
    0x000033e6 subs r1, r0, 0                            |         r1 = r0 - 0;
                                                         |         if (r1 < r0) {
    0x000033e8 blt 0x340c                                |             goto label_14;
                                                         |         }
    0x000033ea ldr r3, [pc, 0x50]                        |         
    0x000033ec mov r0, r4                                |         r0 = r4;
    0x000033ee movs r2, 1                                |         r2 = 1;
    0x000033f0 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x000033f2 ldr r3, [r3]                              |         r3 = *(0x343e);
    0x000033f4 blx 0x1760                                |         r0 = fwrite (r0, r1, r2, r3);
    0x000033f8 cmp r0, 1                                 |         
                                                         |         if (r0 == 1) {
    0x000033fa beq 0x3414                                |             goto label_15;
                                                         |         }
    0x000033fc ldr r0, [pc, 0x40]                        |         
    0x000033fe add r0, pc                                |         r0 = 0x6842;
    0x00003400 bl 0x1e40                                 |         fcn_00001e40 ();
                                                         |     }
    0x00003404 ldr r0, [pc, 0x3c]                        |     
    0x00003406 add r0, pc                                |     r0 = 0x684e;
    0x00003408 bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_14:
    0x0000340c ldr r0, [pc, 0x38]                        |     
    0x0000340e add r0, pc                                |     r0 = 0x685a;
    0x00003410 bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_15:
    0x00003414 mov r0, r5                                |     r0 = r5;
    0x00003416 blx 0x1808                                |     exit (r0);
                                                         | label_13:
    0x0000341a ldr r0, [pc, 0x30]                        |     
    0x0000341c add r0, pc                                |     r0 = 0x686e;
    0x0000341e bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003422 nop                                       |     
    0x00003424 subs r3, 0x52                             |     r3 -= 0x52;
    0x00003426 movs r0, r0                               |     
    0x00003428 lsls r0, r0, 5                            |     r0 <<= 5;
    0x0000342a movs r0, r0                               |     
    0x0000342c subs r3, 0x46                             |     r3 -= 0x46;
    0x0000342e movs r0, r0                               |     
    0x00003430 asrs r6, r5, 0x17                         |     r6 = r5 >> 0x17;
    0x00003432 movs r0, r0                               |     
    0x00003434 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00003436 movs r0, r0                               |     
    0x00003438 asrs r6, r3, 0x17                         |     r6 = r3 >> 0x17;
    0x0000343a movs r0, r0                               |     
    0x0000343c lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x0000343e movs r0, r0                               |     
    0x00003440 asrs r2, r6, 0x19                         |     r2 = r6 >> 0x19;
    0x00003442 movs r0, r0                               |     
    0x00003444 asrs r2, r6, 0x16                         |     r2 = r6 >> 0x16;
    0x00003446 movs r0, r0                               |     
    0x00003448 asrs r2, r5, 0x19                         |     r2 = r5 >> 0x19;
    0x0000344a movs r0, r0                               |     
    0x0000344c asrs r4, r0, 0x15                         |     r4 = r0 >> 0x15;
    0x0000344e movs r0, r0                               |     
    0x00003450 ldr r2, [pc, 0xe4]                        |     
    0x00003452 cmp r0, 3                                 |     
    0x00003454 ldr r3, [pc, 0xe4]                        |     r3 = *(0x353c);
    0x00003456 push.w {r7, fp, lr}                       |     
    0x0000345a sub.w sp, sp, 0x1040                      |     
    0x0000345e add r2, pc                                |     r2 = 0x699a;
    0x00003460 ldr r6, [pc, 0xdc]                        |     
    0x00003462 sub sp, 0xc                               |     
    0x00003464 ldr r3, [r2, r3]                          |     
    0x00003466 add.w r4, sp, 0x1040                      |     r4 += var_1040h_3;
    0x0000346a add r6, pc                                |     r6 = 0x69ae;
    0x0000346c add.w r4, r4, 4                           |     r4 += var_4h_20;
    0x00003470 ldr r3, [r3]                              |     r3 = *(0x699a);
    0x00003472 str r3, [r4]                              |     *(r4) = r3;
    0x00003474 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 <= 3) {
    0x00003478 bgt 0x347e                                |         
    0x0000347a bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x0000347e add.w sb, sp, 0x48                        |     sb += var_48h_3;
    0x00003482 mov r4, r1                                |     r4 = r1;
    0x00003484 sub.w r8, sb, 4                           |     r8 -= var_4h_21;
    0x00003488 add.w r0, r4, 0x10                        |     r0 += var_10h_3;
    0x0000348c mov r1, r8                                |     r1 = r8;
    0x0000348e bl 0x2e7c                                 |     fcn_00002e7c (r0, r1);
    0x00003492 ldr r0, [r4, 4]                           |     r0 = var_48h_5;
    0x00003494 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003498 ldr r1, [pc, 0xa8]                        |     
    0x0000349a mov r7, r0                                |     r7 = r0;
    0x0000349c ldr r0, [r4, 8]                           |     r0 = var_8h_13;
    0x0000349e add r1, pc                                |     r1 = 0x69e6;
    0x000034a0 blx 0x1688                                |     r0 = strcmp (r0, r1);
    0x000034a4 mov r5, r0                                |     r5 = r0;
                                                         |     if (r0 != 0) {
    0x000034a6 cbz r0, 0x34c0                            |         
    0x000034a8 ldr r3, [pc, 0x9c]                        |         
    0x000034aa movs r2, 0x26                             |         r2 = 0x26;
    0x000034ac ldr r0, [pc, 0x9c]                        |         
    0x000034ae movs r1, 1                                |         r1 = 1;
    0x000034b0 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x000034b2 add r0, pc                                |         r0 = 0x6a02;
    0x000034b4 ldr r3, [r3]                              |         r3 = *(0x3548);
    0x000034b6 blx 0x1760                                |         r0 = fwrite (r0, r1, r2, r3);
    0x000034b8 ldrd r2, r0, [r4, -0x8]                   |         __asm ("ldrd r2, r0, [r4, -0x8]");
    0x000034bc blx 0x1808                                |         exit (r0);
    0x000034be invalid                                   |         
                                                         |     }
    0x000034c0 add r1, sp, 8                             |     r1 += var_8h_3;
    0x000034c2 ldr r0, [r4, 0xc]                         |     r0 = var_ch_11;
    0x000034c4 bl 0x2f28                                 |     fcn_00002f28 (r0, r1);
    0x000034c8 add r2, sp, 0xc                           |     r2 += var_ch_3;
    0x000034ca mov sl, r0                                |     sl = r0;
    0x000034cc mov r1, r8                                |     r1 = r8;
    0x000034ce mov r0, r7                                |     r0 = r7;
    0x000034d0 blx 0x19c4                                |     r0 = keyctl_pkey_query ();
    0x000034d4 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x000034d6 blt 0x3518                                |         
    0x000034d8 ldrh fp, [sb, -0x2e]                      |         fp = var_2eh;
    0x000034dc mov r0, fp                                |         r0 = fp;
    0x000034de blx 0x17c0                                |         r0 = malloc (r0);
    0x000034e2 mov r4, r0                                |         r4 = r0;
                                                         |         if (r0 == 0) {
    0x000034e4 cbz r0, 0x352e                            |             goto label_16;
                                                         |         }
    0x000034e6 mov r1, r8                                |         r1 = r8;
    0x000034e8 str.w fp, [sp, 4]                         |         __asm ("str.w fp, [var_0h_2]");
    0x000034ec mov r2, sl                                |         r2 = sl;
    0x000034ee ldr r3, [sb, -0x40]                       |         r3 = var_4h_4;
    0x000034f2 mov r0, r7                                |         r0 = r7;
    0x000034f4 str r4, [sp]                              |         *(sp) = r4;
    0x000034f6 blx 0x1730                                |         r0 = keyctl_pkey_encrypt ();
    0x000034fa subs r1, r0, 0                            |         r1 = r0 - 0;
                                                         |         if (r1 < r0) {
    0x000034fc blt 0x3520                                |             goto label_17;
                                                         |         }
    0x000034fe ldr r3, [pc, 0x50]                        |         
    0x00003500 mov r0, r4                                |         r0 = r4;
    0x00003502 movs r2, 1                                |         r2 = 1;
    0x00003504 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003506 ldr r3, [r3]                              |         r3 = *(0x3552);
    0x00003508 blx 0x1760                                |         r0 = fwrite (r0, r1, r2, r3);
    0x0000350c cmp r0, 1                                 |         
                                                         |         if (r0 == 1) {
    0x0000350e beq 0x3528                                |             goto label_18;
                                                         |         }
    0x00003510 ldr r0, [pc, 0x40]                        |         
    0x00003512 add r0, pc                                |         r0 = 0x6a6a;
    0x00003514 bl 0x1e40                                 |         fcn_00001e40 ();
    0x00003516 invalid                                   |         
                                                         |     }
    0x00003518 ldr r0, [pc, 0x3c]                        |     
    0x0000351a add r0, pc                                |     r0 = 0x6a76;
    0x0000351c bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_17:
    0x00003520 ldr r0, [pc, 0x38]                        |     
    0x00003522 add r0, pc                                |     r0 = 0x6a82;
    0x00003524 bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_18:
    0x00003528 mov r0, r5                                |     r0 = r5;
    0x0000352a blx 0x1808                                |     exit (r0);
                                                         | label_16:
    0x0000352e ldr r0, [pc, 0x30]                        |     
    0x00003530 add r0, pc                                |     r0 = 0x6a96;
    0x00003532 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003536 nop                                       |     
    0x00003538 subs r2, 0x3e                             |     r2 -= 0x3e;
    0x0000353a movs r0, r0                               |     
    0x0000353c lsls r0, r0, 5                            |     r0 <<= 5;
    0x0000353e movs r0, r0                               |     
    0x00003540 subs r2, 0x32                             |     r2 -= 0x32;
    0x00003542 movs r0, r0                               |     
    0x00003544 asrs r2, r3, 0x13                         |     r2 = r3 >> 0x13;
    0x00003546 movs r0, r0                               |     
    0x00003548 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x0000354a movs r0, r0                               |     
    0x0000354c asrs r2, r1, 0x13                         |     r2 = r1 >> 0x13;
    0x0000354e movs r0, r0                               |     
    0x00003550 lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x00003552 movs r0, r0                               |     
    0x00003554 asrs r6, r3, 0x15                         |     r6 = r3 >> 0x15;
    0x00003556 movs r0, r0                               |     
    0x00003558 asrs r6, r3, 0x12                         |     r6 = r3 >> 0x12;
    0x0000355a movs r0, r0                               |     
    0x0000355c asrs r2, r5, 0x15                         |     r2 = r5 >> 0x15;
    0x0000355e movs r0, r0                               |     
    0x00003560 asrs r0, r6, 0x10                         |     r0 = r6 >> 0x10;
    0x00003562 movs r0, r0                               |     
    0x00003564 ldr r2, [pc, 0x4c]                        |     
    0x00003566 cmp r0, 2                                 |     
    0x00003568 ldr r3, [pc, 0x4c]                        |     r3 = *(0x35b8);
    0x0000356a push {lr}                                 |     
    0x0000356c sub sp, 0xc                               |     
    0x0000356e add r2, pc                                |     r2 = 0x6b26;
    0x00003570 ldr r3, [r2, r3]                          |     
    0x00003572 ldr r3, [r3]                              |     r3 = *(0x6b26);
    0x00003574 str r3, [sp, 4]                           |     var_4h_3 = r3;
    0x00003576 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 2) {
    0x0000357a beq 0x3580                                |         
    0x0000357c bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003580 ldr r0, [r1, 4]                           |     r0 = var_48h_6;
    0x00003582 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003586 mov r1, sp                                |     r1 = sp;
    0x00003588 blx 0x1934                                |     r0 = keyctl_read_alloc ();
    0x0000358c subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 >= r0) {
    0x0000358e blt 0x35a4                                |         
                                                         |         if (r2 != r0) {
    0x00003590 beq 0x359e                                |             
    0x00003592 ldr r1, [sp]                              |             r1 = *(sp);
    0x00003594 movs r0, 1                                |             r0 = 1;
    0x00003596 blx 0x18c8                                |             r0 = write (r0, r1, r2);
    0x0000359a cmp r0, 0                                 |             
                                                         |             if (r0 < 0) {
    0x0000359c blt 0x35ac                                |                 goto label_19;
                                                         |             }
                                                         |         }
    0x0000359e movs r0, 0                                |         r0 = 0;
    0x000035a0 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x000035a4 ldr r0, [pc, 0x14]                        |     
    0x000035a6 add r0, pc                                |     r0 = 0x6b66;
    0x000035a8 bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_19:
    0x000035ac ldr r0, [pc, 0x10]                        |     
    0x000035ae add r0, pc                                |     r0 = 0x6b72;
    0x000035b0 bl 0x1e40                                 |     fcn_00001e40 ();
    0x000035b4 subs r1, 0x2e                             |     r1 -= 0x2e;
    0x000035b6 movs r0, r0                               |     
    0x000035b8 lsls r0, r0, 5                            |     r0 <<= 5;
    0x000035ba movs r0, r0                               |     
    0x000035bc asrs r6, r1, 4                            |     r6 = r1 >> 4;
    0x000035be movs r0, r0                               |     
    0x000035c0 asrs r2, r6, 0x13                         |     r2 = r6 >> 0x13;
    0x000035c2 movs r0, r0                               |     
    0x000035c4 ldr r2, [pc, 0x50]                        |     
    0x000035c6 cmp r0, 3                                 |     
    0x000035c8 ldr r3, [pc, 0x50]                        |     r3 = *(0x361c);
    0x000035ca push {lr}                                 |     
    0x000035cc sub sp, 0xc                               |     
    0x000035ce add r2, pc                                |     r2 = 0x6bea;
    0x000035d0 ldr r3, [r2, r3]                          |     
    0x000035d2 ldr r3, [r3]                              |     r3 = *(0x6bea);
    0x000035d4 str r3, [sp, 4]                           |     var_4h_4 = r3;
    0x000035d6 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 3) {
    0x000035da beq 0x35e0                                |         
    0x000035dc bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x000035e0 mov r4, r1                                |     r4 = r1;
    0x000035e2 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x000035e4 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x000035e8 mov r3, r0                                |     r3 = r0;
    0x000035ea ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x000035ec mov r4, r3                                |     r4 = r3;
    0x000035ee bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x000035f2 mov r5, r0                                |     r5 = r0;
    0x000035f4 mov r0, sp                                |     r0 = sp;
    0x000035f6 bl 0x2ccc                                 |     fcn_00002ccc (r0);
    0x000035fa ldr r2, [sp]                              |     r2 = *(sp);
    0x000035fc mov r1, r0                                |     r1 = r0;
    0x000035fe mov r3, r5                                |     r3 = r5;
    0x00003600 mov r0, r4                                |     r0 = r4;
    0x00003602 blx 0x1820                                |     r0 = keyctl_instantiate ();
    0x00003606 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003608 blt 0x3610                                |         
    0x0000360a movs r0, 0                                |         r0 = 0;
    0x0000360c blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003610 ldr r0, [pc, 0xc]                         |     
    0x00003612 add r0, pc                                |     r0 = 0x6c36;
    0x00003614 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003616 invalid                                   |     
    0x0000361a movs r0, r0                               |     
    0x0000361c lsls r0, r0, 5                            |     r0 <<= 5;
    0x0000361e movs r0, r0                               |     
    0x00003620 asrs r6, r2, 0x12                         |     r6 = r2 >> 0x12;
    0x00003622 movs r0, r0                               |     
    0x00003624 cmp r0, 4                                 |     
    0x00003626 push {r3, lr}                             |     
                                                         |     if (r0 != 4) {
    0x00003628 beq 0x362e                                |         
    0x0000362a bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x0000362e mov r4, r1                                |     r4 = r1;
    0x00003630 ldr r0, [r1, 4]                           |     r0 = var_0h_3;
    0x00003632 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x00003636 mov r5, r0                                |     r5 = r0;
    0x00003638 ldr r0, [r4, 0xc]                         |     r0 = var_8h_4;
    0x0000363a bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x0000363e ldr r6, [r4, 8]                           |     r6 = s;
    0x00003640 mov r4, r0                                |     r4 = r0;
    0x00003642 mov r0, r6                                |     r0 = r6;
    0x00003644 blx 0x1844                                |     strlen (r0);
    0x00003648 mov r3, r4                                |     r3 = r4;
    0x0000364a mov r2, r0                                |     r2 = r0;
    0x0000364c mov r1, r6                                |     r1 = r6;
    0x0000364e mov r0, r5                                |     r0 = r5;
    0x00003650 blx 0x1820                                |     r0 = keyctl_instantiate ();
    0x00003654 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003656 blt 0x365e                                |         
    0x00003658 movs r0, 0                                |         r0 = 0;
    0x0000365a blx 0x1808                                |         exit (r0);
                                                         |     }
    0x0000365e ldr r0, [pc, 8]                           |     
    0x00003660 add r0, pc                                |     r0 = 0x6cce;
    0x00003662 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003666 nop                                       |     
    0x00003668 asrs r0, r1, 0x11                         |     r0 = r1 >> 0x11;
    0x0000366a movs r0, r0                               |     
    0x0000366c ldr r2, [pc, 0x54]                        |     
    0x0000366e cmp r0, 4                                 |     
    0x00003670 ldr r3, [pc, 0x54]                        |     r3 = *(0x36c8);
    0x00003672 push {lr}                                 |     
    0x00003674 sub sp, 0x14                              |     
    0x00003676 add r2, pc                                |     r2 = 0x6d3e;
    0x00003678 ldr r3, [r2, r3]                          |     
    0x0000367a ldr r3, [r3]                              |     r3 = *(0x6d3e);
    0x0000367c str r3, [sp, 0xc]                         |     var_ch_4 = r3;
    0x0000367e mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 4) {
    0x00003682 beq 0x3688                                |         
    0x00003684 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003688 ldr r0, [r1, 0xc]                         |     r0 = *((r1 + 0xc));
    0x0000368a mov r4, r1                                |     r4 = r1;
    0x0000368c bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x00003690 mov r5, r0                                |     r5 = r0;
    0x00003692 add r0, sp, 8                             |     r0 += var_8h_4;
    0x00003694 bl 0x2ccc                                 |     fcn_00002ccc (r0);
    0x00003698 ldr r3, [sp, 8]                           |     r3 = var_8h_4;
    0x0000369a mov r2, r0                                |     r2 = r0;
    0x0000369c ldrd r0, r1, [r4, 4]                      |     __asm ("ldrd r0, r1, [r4, 4]");
    0x000036a0 str r5, [sp]                              |     *(sp) = r5;
    0x000036a2 blx 0x17a8                                |     r0 = add_key ();
    0x000036a6 subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 >= r0) {
    0x000036a8 blt 0x36ba                                |         
    0x000036aa ldr r1, [pc, 0x20]                        |         
    0x000036ac movs r0, 1                                |         r0 = 1;
    0x000036ae add r1, pc                                |         r1 = 0x6d80;
    0x000036b0 blx 0x18bc                                |         printf_chk ();
    0x000036b4 movs r0, 0                                |         r0 = 0;
    0x000036b6 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x000036ba ldr r0, [pc, 0x14]                        |     
    0x000036bc add r0, pc                                |     r0 = 0x6d92;
    0x000036be bl 0x1e40                                 |     fcn_00001e40 ();
    0x000036c2 nop                                       |     
    0x000036c4 subs r0, 0x26                             |     r0 -= 0x26;
    0x000036c6 movs r0, r0                               |     
    0x000036c8 lsls r0, r0, 5                            |     r0 <<= 5;
    0x000036ca movs r0, r0                               |     
    0x000036cc asrs r2, r3, 5                            |     r2 = r3 >> 5;
    0x000036ce movs r0, r0                               |     
    0x000036d0 asrs r0, r0, 0x10                         |     r0 >>= 0x10;
    0x000036d2 movs r0, r0                               |     
    0x000036d4 cmp r0, 3                                 |     
    0x000036d6 push {lr}                                 |     
    0x000036d8 sub sp, 0xc                               |     
                                                         |     if (r0 != 3) {
    0x000036da beq 0x36e0                                |         
    0x000036dc bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x000036e0 ldr r0, [r1, 8]                           |     r0 = *((r1 + 8));
    0x000036e2 mov r4, r1                                |     r4 = r1;
    0x000036e4 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x000036e8 mov r5, r0                                |     r5 = r0;
    0x000036ea ldr r0, [pc, 0x2c]                        |     
    0x000036ec movs r3, 0                                |     r3 = 0;
    0x000036ee ldr r1, [r4, 4]                           |     r1 = *((r4 + 4));
    0x000036f0 mov r2, r3                                |     r2 = r3;
    0x000036f2 str r5, [sp]                              |     *(sp) = r5;
    0x000036f4 add r0, pc                                |     r0 = 0x6e12;
    0x000036f6 blx 0x17a8                                |     r0 = add_key ();
    0x000036fa subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 >= r0) {
    0x000036fc blt 0x370e                                |         
    0x000036fe ldr r1, [pc, 0x1c]                        |         
    0x00003700 movs r0, 1                                |         r0 = 1;
    0x00003702 add r1, pc                                |         r1 = 0x6e24;
    0x00003704 blx 0x18bc                                |         printf_chk ();
    0x00003708 movs r0, 0                                |         r0 = 0;
    0x0000370a blx 0x1808                                |         exit (r0);
                                                         |     }
    0x0000370e ldr r0, [pc, 0x10]                        |     
    0x00003710 add r0, pc                                |     r0 = 0x6e36;
    0x00003712 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003716 nop                                       |     
    0x00003718 asrs r4, r6, 3                            |     r4 = r6 >> 3;
    0x0000371a movs r0, r0                               |     
    0x0000371c asrs r6, r0, 4                            |     r6 = r0 >> 4;
    0x0000371e movs r0, r0                               |     
    0x00003720 asrs r4, r5, 0xe                          |     r4 = r5 >> 0xe;
    0x00003722 movs r0, r0                               |     
    0x00003724 cmp r0, 5                                 |     
    0x00003726 push {lr}                                 |     
    0x00003728 sub sp, 0xc                               |     
                                                         |     if (r0 != 5) {
    0x0000372a beq 0x3730                                |         
    0x0000372c bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003730 mov r4, r1                                |     r4 = r1;
    0x00003732 ldr r0, [r1, 0x10]                        |     r0 = *((r1 + 0x10));
    0x00003734 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003738 ldr r6, [r4, 0xc]                         |     r6 = *((r4 + 0xc));
    0x0000373a mov r5, r0                                |     r5 = r0;
    0x0000373c mov r0, r6                                |     r0 = r6;
    0x0000373e blx 0x1844                                |     strlen (r0);
    0x00003742 mov r2, r6                                |     r2 = r6;
    0x00003744 mov r3, r0                                |     r3 = r0;
    0x00003746 ldrd r0, r1, [r4, 4]                      |     __asm ("ldrd r0, r1, [r4, 4]");
    0x0000374a str r5, [sp]                              |     *(sp) = r5;
    0x0000374c blx 0x17a8                                |     r0 = add_key ();
    0x00003750 subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 >= r0) {
    0x00003752 blt 0x3764                                |         
    0x00003754 ldr r1, [pc, 0x14]                        |         
    0x00003756 movs r0, 1                                |         r0 = 1;
    0x00003758 add r1, pc                                |         r1 = 0x6ec8;
    0x0000375a blx 0x18bc                                |         printf_chk ();
    0x0000375e movs r0, 0                                |         r0 = 0;
    0x00003760 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003764 ldr r0, [pc, 8]                           |     
    0x00003766 add r0, pc                                |     r0 = 0x6eda;
    0x00003768 bl 0x1e40                                 |     fcn_00001e40 ();
    0x0000376c asrs r0, r6, 2                            |     r0 = r6 >> 2;
    0x0000376e movs r0, r0                               |     
    0x00003770 asrs r6, r2, 0xd                          |     r6 = r2 >> 0xd;
    0x00003772 movs r0, r0                               |     
    0x00003774 cmp r0, 1                                 |     
    0x00003776 push {r3, lr}                             |     
                                                         |     if (r0 != 1) {
    0x00003778 beq 0x377e                                |         
    0x0000377a bl 0x1b70                                 |         r0 = fcn_00001b70 ();
                                                         |     }
    0x0000377e mov r4, r0                                |     r4 = r0;
    0x00003780 movs r0, 0                                |     r0 = 0;
    0x00003782 blx 0x1958                                |     r0 = keyctl_join_session_keyring ();
    0x00003786 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003788 blt 0x37b8                                |         
    0x0000378a blx 0x19b8                                |         r0 = keyctl_session_to_parent ();
    0x0000378e cmp r0, 0                                 |         
                                                         |         if (r0 >= 0) {
    0x00003790 blt 0x37b0                                |             
    0x00003792 movs r1, 0                                |             r1 = 0;
    0x00003794 mvn r0, 2                                 |             r0 = ~2;
    0x00003798 blx 0x1904                                |             r0 = keyctl_get_keyring_ID ();
    0x0000379c subs r2, r0, 0                            |             r2 = r0 - 0;
                                                         |             if (r2 < r0) {
    0x0000379e blt 0x37c0                                |                 goto label_20;
                                                         |             }
    0x000037a0 ldr r1, [pc, 0x24]                        |             
    0x000037a2 mov r0, r4                                |             r0 = r4;
    0x000037a4 add r1, pc                                |             r1 = 0x6f70;
    0x000037a6 blx 0x18bc                                |             printf_chk ();
    0x000037aa movs r0, 0                                |             r0 = 0;
    0x000037ac blx 0x1808                                |             exit (r0);
                                                         |         }
    0x000037b0 ldr r0, [pc, 0x18]                        |         
    0x000037b2 add r0, pc                                |         r0 = 0x6f82;
    0x000037b4 bl 0x1e40                                 |         fcn_00001e40 ();
                                                         |     }
    0x000037b8 ldr r0, [pc, 0x14]                        |     
    0x000037ba add r0, pc                                |     r0 = 0x6f8e;
    0x000037bc bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_20:
    0x000037c0 ldr r0, [pc, 0x10]                        |     
    0x000037c2 add r0, pc                                |     r0 = 0x6f9a;
    0x000037c4 bl 0x1e40                                 |     fcn_00001e40 ();
    0x000037c8 asrs r4, r4, 1                            |     r4 >>= 1;
    0x000037ca movs r0, r0                               |     
    0x000037cc asrs r2, r2, 0xc                          |     r2 >>= 0xc;
    0x000037ce movs r0, r0                               |     
    0x000037d0 asrs r2, r3, 0x20                         |     r2 = r3 >> 0x20;
    0x000037d2 movs r0, r0                               |     
    0x000037d4 asrs r6, r3, 0xc                          |     r6 = r3 >> 0xc;
    0x000037d6 movs r0, r0                               |     
    0x000037d8 ldr r2, [pc, 0x78]                        |     
    0x000037da cmp r0, 4                                 |     
    0x000037dc ldr r3, [pc, 0x78]                        |     r3 = *(0x3858);
    0x000037de push {r7, lr}                             |     
    0x000037e0 sub sp, 8                                 |     
    0x000037e2 add r2, pc                                |     r2 = 0x703a;
    0x000037e4 ldr r5, [pc, 0x74]                        |     
    0x000037e6 ldr r3, [r2, r3]                          |     
    0x000037e8 add r5, pc                                |     r5 = 0x7048;
    0x000037ea ldr r3, [r3]                              |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x000037ec str r3, [sp, 4]                           |     var_4h_5 = r3;
    0x000037ee mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 4) {
    0x000037f2 beq 0x37f8                                |         
    0x000037f4 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x000037f8 mov r4, r1                                |     r4 = r1;
    0x000037fa ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x000037fc bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003800 movs r2, 0xa                              |     r2 = 0xa;
    0x00003802 mov r1, sp                                |     r1 = sp;
    0x00003804 mov r6, r0                                |     r6 = r0;
    0x00003806 ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003808 blx 0x1838                                |     strtoul (r0, r1, r2);
    0x0000380c ldr r3, [sp]                              |     r3 = *(sp);
    0x0000380e mov r7, r0                                |     r7 = r0;
    0x00003810 ldrb.w r8, [r3]                           |     r8 = *(r3);
    0x00003814 cmp.w r8, 0                               |     
    0x00003816 lsrs r0, r0, 0x1c                         |     r0 >>= 0x1c;
                                                         |     if (r0 == r0) {
    0x00003818 bne 0x3834                                |         
    0x0000381a ldr r0, [r4, 0xc]                         |         r0 = *((r4 + 0xc));
    0x0000381c bl 0x1ca0                                 |         fcn_00001ca0 (r0);
    0x00003820 mov r1, r7                                |         r1 = r7;
    0x00003822 mov r2, r0                                |         r2 = r0;
    0x00003824 mov r0, r6                                |         r0 = r6;
    0x00003826 blx 0x16b8                                |         r0 = keyctl_negate ();
    0x0000382a cmp r0, 0                                 |         
                                                         |         if (r0 < 0) {
    0x0000382c blt 0x384c                                |             goto label_21;
                                                         |         }
    0x0000382e mov r0, r8                                |         r0 = r8;
    0x00003830 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003834 ldr r0, [pc, 0x28]                        |     
    0x00003836 movs r1, 1                                |     r1 = 1;
    0x00003838 ldr r2, [pc, 0x28]                        |     
    0x0000383a ldr r3, [r4, 8]                           |     r3 = *((r4 + 8));
    0x0000383c ldr r0, [r5, r0]                          |     r0 = *((r5 + r0));
    0x0000383e add r2, pc                                |     r2 = 0x70a6;
    0x00003840 ldr r0, [r0]                              |     r0 = *(0x3860);
    0x00003842 blx 0x18e0                                |     fprintf_chk ()
    0x00003846 movs r0, 2                                |     r0 = 2;
    0x00003848 blx 0x1808                                |     exit (r0);
                                                         | label_21:
    0x0000384c ldr r0, [pc, 0x18]                        |     
    0x0000384e add r0, pc                                |     r0 = 0x70ba;
    0x00003850 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003854 adds r6, 0xba                             |     r6 += 0xba;
    0x00003856 movs r0, r0                               |     
    0x00003858 lsls r0, r0, 5                            |     r0 <<= 5;
    0x0000385a movs r0, r0                               |     
    0x0000385c adds r6, 0xb4                             |     r6 += 0xb4;
    0x0000385e movs r0, r0                               |     
    0x00003860 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00003862 movs r0, r0                               |     
    0x00003864 lsrs r2, r3, 0x15                         |     r2 = r3 >> 0x15;
    0x00003866 movs r0, r0                               |     
    0x00003868 asrs r2, r2, 1                            |     r2 >>= 1;
    0x0000386a movs r0, r0                               |     
    0x0000386c cmp r0, 4                                 |     
    0x0000386e mov r4, r0                                |     r4 = r0;
    0x00003870 mov r5, r1                                |     r5 = r1;
    0x00003872 push {r7, lr}                             |     
                                                         |     if (r0 > 4) {
    0x00003874 ble 0x388a                                |         
    0x00003876 ldr r0, [pc, 0x50]                        |         
    0x00003878 ldr r1, [r1, 4]                           |         r1 = *((r1 + 4));
    0x0000387a add r0, pc                                |         r0 = 0x7148;
    0x0000387c blx 0x1688                                |         r0 = strcmp (r0, r1);
                                                         |         if (r0 != 0) {
    0x00003880 cbnz r0, 0x3890                           |             goto label_22;
                                                         |         }
    0x00003882 subs r4, 1                                |         r4--;
    0x00003884 adds r5, 4                                |         r5 += 4;
    0x00003886 mov r6, r0                                |         r6 = r0;
    0x00003888 b 0x388c                                  |         
                                                         |     } else {
    0x0000388a movs r6, 1                                |         r6 = 1;
                                                         |     }
    0x0000388c cmp r4, 4                                 |     
                                                         |     if (r4 != 4) {
    0x0000388e beq 0x3894                                |         
                                                         | label_22:
    0x00003890 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003894 ldr r0, [r5, 4]                           |     r0 = *((r5 + 4));
    0x00003896 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x0000389a mov r4, r0                                |     r4 = r0;
    0x0000389c ldr r0, [r5, 8]                           |     r0 = *((r5 + 8));
    0x0000389e bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x000038a2 mov r7, r0                                |     r7 = r0;
    0x000038a4 ldr r0, [r5, 0xc]                         |     r0 = *((r5 + 0xc));
    0x000038a6 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x000038aa mov r3, r6                                |     r3 = r6;
    0x000038ac mov r2, r0                                |     r2 = r0;
    0x000038ae mov r1, r7                                |     r1 = r7;
    0x000038b0 mov r0, r4                                |     r0 = r4;
    0x000038b2 blx 0x19ac                                |     r0 = keyctl_move ();
    0x000038b6 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x000038b8 blt 0x38c0                                |         
    0x000038ba movs r0, 0                                |         r0 = 0;
    0x000038bc blx 0x1808                                |         exit (r0);
                                                         |     }
    0x000038c0 ldr r0, [pc, 8]                           |     
    0x000038c2 add r0, pc                                |     r0 = 0x7192;
    0x000038c4 bl 0x1e40                                 |     fcn_00001e40 ();
    0x000038c8 asrs r6, r7, 9                            |     r6 = r7 >> 9;
    0x000038ca movs r0, r0                               |     
    0x000038cc asrs r2, r7, 8                            |     r2 = r7 >> 8;
    0x000038ce movs r0, r0                               |     
    0x000038d0 cmp r0, 3                                 |     
    0x000038d2 push {r3, lr}                             |     
                                                         |     if (r0 != 3) {
    0x000038d4 beq 0x38da                                |         
    0x000038d6 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x000038da mov r4, r1                                |     r4 = r1;
    0x000038dc ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x000038de bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x000038e2 mov r5, r0                                |     r5 = r0;
    0x000038e4 ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x000038e6 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x000038ea mov r1, r0                                |     r1 = r0;
    0x000038ec mov r0, r5                                |     r0 = r5;
    0x000038ee blx 0x1658                                |     r0 = keyctl_link ();
    0x000038f2 cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x000038f4 blt 0x38fc                                |         
    0x000038f6 movs r0, 0                                |         r0 = 0;
    0x000038f8 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x000038fc ldr r0, [pc, 4]                           |     
    0x000038fe add r0, pc                                |     r0 = 0x7206;
    0x00003900 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003904 asrs r2, r1, 8                            |     r2 = r1 >> 8;
    0x00003906 movs r0, r0                               |     
    0x00003908 subs r3, r0, 2                            |     r3 = r0 - 2;
    0x0000390a mov r4, r0                                |     r4 = r0;
    0x0000390c ldr r0, [pc, 0x7c]                        |     
    0x0000390e cmp r3, 1                                 |     
    0x00003910 ldr r2, [pc, 0x7c]                        |     r2 = *(0x3990);
    0x00003912 push {r7, lr}                             |     
    0x00003914 sub sp, 8                                 |     
    0x00003916 add r0, pc                                |     r0 = 0x72a6;
    0x00003918 ldr r6, [pc, 0x78]                        |     
    0x0000391a ldr r2, [r0, r2]                          |     
    0x0000391c add r6, pc                                |     r6 = 0x72b4;
    0x0000391e ldr r2, [r2]                              |     r2 = imp.__aeabi_unwind_cpp_pr0;
    0x00003920 str r2, [sp, 4]                           |     var_4h_6 = r2;
    0x00003922 mov.w r2, 0                               |     r2 = 0;
                                                         |     if (r3 >= 1) {
    0x00003926 bls 0x392c                                |         
    0x00003928 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x0000392c ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x0000392e mov r5, r1                                |     r5 = r1;
    0x00003930 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003934 cmp r4, 3                                 |     
    0x00003936 mov r7, r0                                |     r7 = r0;
                                                         |     if (r4 == 3) {
    0x00003938 beq 0x3960                                |         goto label_23;
                                                         |     }
    0x0000393a mov.w r0, -1                              |     r0 = -1;
                                                         |     do {
    0x0000393e mov r1, r7                                |         r1 = r7;
    0x00003940 blx 0x16d0                                |         r0 = keyctl_get_persistent ();
    0x00003944 subs r2, r0, 0                            |         r2 = r0 - 0;
                                                         |         if (r2 >= r0) {
    0x00003946 blt 0x3958                                |             
    0x00003948 ldr r1, [pc, 0x4c]                        |             
    0x0000394a movs r0, 1                                |             r0 = 1;
    0x0000394c add r1, pc                                |             r1 = 0x72e8;
    0x0000394e blx 0x18bc                                |             printf_chk ();
    0x00003952 movs r0, 0                                |             r0 = 0;
    0x00003954 blx 0x1808                                |             exit (r0);
                                                         |         }
    0x00003958 ldr r0, [pc, 0x40]                        |         
    0x0000395a add r0, pc                                |         r0 = 0x72fa;
    0x0000395c bl 0x1e40                                 |         fcn_00001e40 ();
                                                         | label_23:
    0x00003960 ldr r0, [r5, 8]                           |         r0 = *((r5 + 8));
    0x00003962 movs r2, 0                                |         r2 = 0;
    0x00003964 mov r1, sp                                |         r1 = sp;
    0x00003966 blx 0x1838                                |         strtoul (r0, r1, r2);
    0x0000396a ldr r3, [sp]                              |         r3 = *(sp);
    0x0000396c ldrb r3, [r3]                             |         r3 = *(r3);
    0x0000396e cmp r3, 0                                 |         
    0x00003970 beq 0x393e                                |         
                                                         |     } while (r3 == 0);
    0x00003972 ldr r0, [pc, 0x2c]                        |     
    0x00003974 movs r1, 1                                |     r1 = 1;
    0x00003976 ldr r2, [pc, 0x2c]                        |     
    0x00003978 ldr r3, [r5, 8]                           |     r3 = *((r5 + 8));
    0x0000397a ldr r0, [r6, r0]                          |     r0 = *((r6 + r0));
    0x0000397c add r2, pc                                |     r2 = 0x7326;
    0x0000397e ldr r0, [r0]                              |     r0 = *(0x39a2);
    0x00003980 blx 0x18e0                                |     fprintf_chk ()
    0x00003984 movs r0, 2                                |     r0 = 2;
    0x00003986 blx 0x1808                                |     exit (r0);
    0x0000398a nop                                       |     
    0x0000398c adds r5, 0x86                             |     r5 += 0x86;
    0x0000398e movs r0, r0                               |     
    0x00003990 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003992 movs r0, r0                               |     
    0x00003994 adds r5, 0x80                             |     r5 += 0x80;
    0x00003996 movs r0, r0                               |     
    0x00003998 lsrs r4, r7, 0x1a                         |     r4 = r7 >> 0x1a;
    0x0000399a movs r0, r0                               |     
    0x0000399c asrs r2, r2, 7                            |     r2 >>= 7;
    0x0000399e movs r0, r0                               |     
    0x000039a0 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x000039a2 movs r0, r0                               |     
    0x000039a4 asrs r0, r3, 6                            |     r0 = r3 >> 6;
    0x000039a6 movs r0, r0                               |     
    0x000039a8 cmp r0, 2                                 |     
    0x000039aa push {r3, lr}                             |     
                                                         |     if (r0 != 2) {
    0x000039ac beq 0x39b2                                |         
    0x000039ae bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x000039b2 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x000039b4 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x000039b8 blx 0x1790                                |     r0 = keyctl_invalidate ();
    0x000039bc cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x000039be blt 0x39c6                                |         
    0x000039c0 movs r0, 0                                |         r0 = 0;
    0x000039c2 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x000039c6 ldr r0, [pc, 8]                           |     
    0x000039c8 add r0, pc                                |     r0 = 0x739e;
    0x000039ca bl 0x1e40                                 |     fcn_00001e40 ();
    0x000039ce nop                                       |     
    0x000039d0 asrs r4, r7, 5                            |     r4 = r7 >> 5;
    0x000039d2 movs r0, r0                               |     
    0x000039d4 ldr r2, [pc, 0x100]                       |     
    0x000039d6 cmp r0, 6                                 |     
    0x000039d8 ldr r3, [pc, 0x100]                       |     r3 = *(0x3adc);
    0x000039da push {r7, lr}                             |     
    0x000039dc sub sp, 0x18                              |     
    0x000039de add r2, pc                                |     r2 = 0x74ba;
    0x000039e0 ldr r6, [pc, 0xfc]                        |     
    0x000039e2 ldr r3, [r2, r3]                          |     
    0x000039e4 add r6, pc                                |     r6 = 0x74c8;
    0x000039e6 ldr r3, [r3]                              |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x000039e8 str r3, [sp, 0x14]                        |     var_14h = r3;
    0x000039ea mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 6) {
    0x000039ee beq 0x39f4                                |         
    0x000039f0 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x000039f4 mov r4, r1                                |     r4 = r1;
    0x000039f6 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x000039f8 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x000039fc mov r8, r0                                |     r8 = r0;
    0x000039fe ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003a00 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x00003a04 mov sb, r0                                |     sb = r0;
    0x00003a06 ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00003a08 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003a0c movs r1, 0                                |     r1 = 0;
    0x00003a0e mov sl, r0                                |     sl = r0;
    0x00003a10 movs r2, 0xa                              |     r2 = 0xa;
    0x00003a12 ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x00003a14 blx 0x1838                                |     strtoul (r0, r1, r2);
    0x00003a16 invalid                                   |     
    0x00003a1a mov r5, r0                                |     r5 = r0;
                                                         |     if (r2 == 0xa) {
    0x00003a1c beq 0x3ac8                                |         goto label_24;
                                                         |     }
    0x00003a1e blx 0x17c0                                |     r0 = malloc (r0);
    0x00003a22 mov r7, r0                                |     r7 = r0;
    0x00003a24 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00003a26 beq 0x3ad0                                |         goto label_25;
                                                         |     }
    0x00003a28 add r0, sp, 0x10                          |     r0 += var_10h;
    0x00003a2a bl 0x2ccc                                 |     fcn_00002ccc (r0);
    0x00003a2e str r5, [sp, 0xc]                         |     var_ch_6 = r5;
    0x00003a30 mov r2, sl                                |     r2 = sl;
    0x00003a32 str r0, [sp]                              |     *(sp) = r0;
    0x00003a34 mov r1, sb                                |     r1 = sb;
    0x00003a36 ldr r3, [r4, 0x14]                        |     r3 = *((r4 + 0x14));
    0x00003a38 mov r0, r8                                |     r0 = r8;
    0x00003a3a ldr r4, [sp, 0x10]                        |     r4 = var_10h;
    0x00003a3c str r7, [sp, 8]                           |     var_8h_6 = r7;
    0x00003a3e str r4, [sp, 4]                           |     var_4h_10 = r4;
    0x00003a40 blx 0x1670                                |     r0 = keyctl_dh_compute_kdf ();
    0x00003a44 subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 < r0) {
    0x00003a46 blt 0x3a90                                |         goto label_26;
                                                         |     }
    0x00003a48 ldr.w sb, [pc, 0x98]                      |     
    0x00003a4c mov r4, r2                                |     r4 = r2;
    0x00003a4e ldr r1, [pc, 0x98]                        |     
    0x00003a50 mov r5, r7                                |     r5 = r7;
    0x00003a52 add.w sl, r4, 1                           |     sl = r4 + 1;
    0x00003a56 mov.w r8, 0                               |     r8 = 0;
    0x00003a5a add sb, pc                                |     sb = 0x7542;
    0x00003a5c movs r0, 1                                |     r0 = 1;
    0x00003a5e add r1, pc                                |     r1 = 0x754c;
    0x00003a60 blx 0x18bc                                |     printf_chk ();
                                                         |     do {
    0x00003a64 ldrb r2, [r5]                             |         r2 = *(r5);
    0x00003a66 mov r1, sb                                |         r1 = sb;
    0x00003a68 movs r0, 1                                |         r0 = 1;
    0x00003a6a blx 0x18bc                                |         printf_chk ();
    0x00003a6e sub.w r3, sl, r4                          |         r3 = sl - r4;
    0x00003a72 strb.w r8, [r5]                           |         *(r5) = r8;
    0x00003a76 lsls r2, r3, 0x1b                         |         r2 = r3 << 0x1b;
                                                         |         if (r2 != r3) {
    0x00003a78 bne 0x3a98                                |             goto label_27;
                                                         |         }
    0x00003a7a subs r4, 1                                |         r4--;
    0x00003a7c cmp r4, 0                                 |         
                                                         |         if (r4 <= 0) {
    0x00003a7e ble 0x3ab6                                |             goto label_28;
                                                         |         }
    0x00003a80 movs r0, 0xa                              |         r0 = 0xa;
                                                         | label_1:
    0x00003a82 ldr r3, [pc, 0x68]                        |         r3 = *(0x3aee);
    0x00003a84 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003a86 ldr r1, [r3]                              |         r1 = *(0x3aee);
    0x00003a88 blx 0x194c                                |         putc (r0, r1);
                                                         | label_0:
    0x00003a8c adds r5, 1                                |         r5++;
    0x00003a8e b 0x3a64                                  |         
                                                         |     } while (1);
                                                         | label_26:
    0x00003a90 ldr r0, [pc, 0x5c]                        |     
    0x00003a92 add r0, pc                                |     r0 = 0x7586;
    0x00003a94 bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_27:
    0x00003a98 tst.w r3, 3                               |     
    0x00003a9c add.w r4, r4, -1                          |     r4 += -1;
    0x00003aa0 ite eq                                    |     
                                                         |     if ((r3 & 3) != 0) {
    0x00003aa2 moveq r3, 1                               |         r3 = 1;
                                                         |     }
                                                         |     if ((r3 & 3) == 0) {
    0x00003aa4 movne r3, 0                               |         r3 = 0;
                                                         |     }
    0x00003aa6 cmp r4, 0                                 |     
    0x00003aa8 lsl.w r3, r3, 5                           |     r3 <<= 5;
                                                         |     if (r4 <= 0) {
    0x00003aac ble 0x3ab6                                |         goto label_28;
                                                         |     }
    0x00003aae cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00003ab0 beq 0x3a8c                                |         goto label_0;
                                                         |     }
    0x00003ab2 movs r0, 0x20                             |     r0 = 0x20;
    0x00003ab4 b 0x3a82                                  |     goto label_1;
                                                         | label_28:
    0x00003ab6 movs r0, 0xa                              |     r0 = 0xa;
    0x00003ab8 blx 0x18b0                                |     putchar (r0);
    0x00003abc mov r0, r7                                |     r0 = r7;
    0x00003abe blx 0x16c4                                |     free (r0);
    0x00003ac2 movs r0, 0                                |     r0 = 0;
    0x00003ac4 blx 0x1808                                |     exit (r0);
                                                         | label_24:
    0x00003ac8 ldr r0, [pc, 0x28]                        |     
    0x00003aca add r0, pc                                |     r0 = 0x75c2;
    0x00003acc bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_25:
    0x00003ad0 ldr r0, [pc, 0x24]                        |     
    0x00003ad2 add r0, pc                                |     r0 = 0x75ce;
    0x00003ad4 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003ad8 adds r4, 0xbe                             |     r4 += 0xbe;
    0x00003ada movs r0, r0                               |     
    0x00003adc lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003ade movs r0, r0                               |     
    0x00003ae0 adds r4, 0xb8                             |     r4 += 0xb8;
    0x00003ae2 movs r0, r0                               |     
    0x00003ae4 lsrs r2, r3, 0x1a                         |     r2 = r3 >> 0x1a;
    0x00003ae6 movs r0, r0                               |     
    0x00003ae8 asrs r2, r5, 5                            |     r2 = r5 >> 5;
    0x00003aea movs r0, r0                               |     
    0x00003aec lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x00003aee movs r0, r0                               |     
    0x00003af0 asrs r6, r3, 4                            |     r6 = r3 >> 4;
    0x00003af2 movs r0, r0                               |     
    0x00003af4 asrs r6, r1, 2                            |     r6 = r1 >> 2;
    0x00003af6 movs r0, r0                               |     
    0x00003af8 asrs r2, r7, 2                            |     r2 = r7 >> 2;
    0x00003afa movs r0, r0                               |     
    0x00003afc ldr r6, [pc, 0xe8]                        |     
    0x00003afe cmp r0, 6                                 |     
    0x00003b00 push {r7, lr}                             |     
    0x00003b02 sub sp, 0x10                              |     
    0x00003b04 add r6, pc                                |     r6 = 0x76f0;
                                                         |     if (r0 != 6) {
    0x00003b06 beq 0x3b0c                                |         
    0x00003b08 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003b0c mov r4, r1                                |     r4 = r1;
    0x00003b0e ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003b10 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x00003b14 mov r7, r0                                |     r7 = r0;
    0x00003b16 ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003b18 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x00003b1c mov sb, r0                                |     sb = r0;
    0x00003b1e ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00003b20 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003b24 movs r1, 0                                |     r1 = 0;
    0x00003b26 mov sl, r0                                |     sl = r0;
    0x00003b28 movs r2, 0xa                              |     r2 = 0xa;
    0x00003b2a ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x00003b2c blx 0x1838                                |     r0 = strtoul (r0, r1, r2);
    0x00003b30 adds r1, r0, 1                            |     r1 = r0 + 1;
    0x00003b32 mov r5, r0                                |     r5 = r0;
                                                         |     if (r1 == r0) {
    0x00003b34 beq 0x3bd6                                |         goto label_29;
                                                         |     }
    0x00003b36 blx 0x17c0                                |     r0 = malloc (r0);
    0x00003b3a mov r8, r0                                |     r8 = r0;
    0x00003b3c cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00003b3e beq 0x3bde                                |         goto label_30;
                                                         |     }
    0x00003b40 mov r0, r7                                |     r0 = r7;
    0x00003b42 movs r7, 0                                |     r7 = 0;
    0x00003b44 mov r2, sl                                |     r2 = sl;
    0x00003b46 str r5, [sp, 0xc]                         |     var_ch_5 = r5;
    0x00003b48 mov r1, sb                                |     r1 = sb;
    0x00003b4a ldr r3, [r4, 0x14]                        |     r3 = *((r4 + 0x14));
    0x00003b4c str.w r8, [sp, 8]                         |     __asm ("str.w r8, [var_8h_5]");
    0x00003b50 strd r7, r7, [sp]                         |     __asm ("strd r7, r7, [sp]");
    0x00003b52 strb r0, [r0, 0x1c]                       |     *((r0 + 0x1c)) = r0;
    0x00003b54 blx 0x1670                                |     r0 = keyctl_dh_compute_kdf ();
    0x00003b58 subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 < r0) {
    0x00003b5a blt 0x3b9e                                |         goto label_31;
                                                         |     }
    0x00003b5c ldr.w sl, [pc, 0x8c]                      |     
    0x00003b60 mov r4, r2                                |     r4 = r2;
    0x00003b62 ldr r1, [pc, 0x8c]                        |     
    0x00003b64 mov r5, r8                                |     r5 = r8;
    0x00003b66 add.w sb, r4, 1                           |     sb = r4 + 1;
    0x00003b68 lsrs r1, r0, 4                            |     r1 = r0 >> 4;
    0x00003b6a movs r0, 1                                |     r0 = 1;
    0x00003b6c add sl, pc                                |     sl = 0x775c;
    0x00003b6e add r1, pc                                |     r1 = 0x7764;
    0x00003b70 blx 0x18bc                                |     printf_chk ();
                                                         |     do {
    0x00003b74 ldrb r2, [r5]                             |         r2 = *(r5);
    0x00003b76 mov r1, sl                                |         r1 = sl;
    0x00003b78 movs r0, 1                                |         r0 = 1;
    0x00003b7a blx 0x18bc                                |         printf_chk ();
    0x00003b7e sub.w r3, sb, r4                          |         r3 = sb - r4;
    0x00003b82 strb r7, [r5]                             |         *(r5) = r7;
    0x00003b84 lsls r2, r3, 0x1b                         |         r2 = r3 << 0x1b;
                                                         |         if (r2 != r3) {
    0x00003b86 bne 0x3ba6                                |             goto label_32;
                                                         |         }
    0x00003b88 subs r4, 1                                |         r4--;
    0x00003b8a cmp r4, 0                                 |         
                                                         |         if (r4 <= 0) {
    0x00003b8c ble 0x3bc4                                |             goto label_33;
                                                         |         }
    0x00003b8e movs r0, 0xa                              |         r0 = 0xa;
                                                         | label_3:
    0x00003b90 ldr r3, [pc, 0x60]                        |         r3 = *(0x3bf4);
    0x00003b92 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003b94 ldr r1, [r3]                              |         r1 = *(0x3bf4);
    0x00003b96 blx 0x194c                                |         putc (r0, r1);
                                                         | label_2:
    0x00003b9a adds r5, 1                                |         r5++;
    0x00003b9c b 0x3b74                                  |         
                                                         |     } while (1);
                                                         | label_31:
    0x00003b9e ldr r0, [pc, 0x58]                        |     
    0x00003ba0 add r0, pc                                |     r0 = 0x779e;
    0x00003ba2 bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_32:
    0x00003ba6 tst.w r3, 3                               |     
    0x00003baa add.w r4, r4, -1                          |     r4 += -1;
    0x00003bae ite eq                                    |     
                                                         |     if ((r3 & 3) != 0) {
    0x00003bb0 moveq r3, 1                               |         r3 = 1;
                                                         |     }
                                                         |     if ((r3 & 3) == 0) {
    0x00003bb2 movne r3, 0                               |         r3 = 0;
                                                         |     }
    0x00003bb4 cmp r4, 0                                 |     
    0x00003bb6 lsl.w r3, r3, 5                           |     r3 <<= 5;
                                                         |     if (r4 <= 0) {
    0x00003bba ble 0x3bc4                                |         goto label_33;
                                                         |     }
    0x00003bbc cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00003bbe beq 0x3b9a                                |         goto label_2;
                                                         |     }
    0x00003bc0 movs r0, 0x20                             |     r0 = 0x20;
    0x00003bc2 b 0x3b90                                  |     goto label_3;
                                                         | label_33:
    0x00003bc4 movs r0, 0xa                              |     r0 = 0xa;
    0x00003bc6 blx 0x18b0                                |     putchar (r0);
    0x00003bca mov r0, r8                                |     r0 = r8;
    0x00003bcc blx 0x16c4                                |     free (r0);
    0x00003bd0 movs r0, 0                                |     r0 = 0;
    0x00003bd2 blx 0x1808                                |     exit (r0);
                                                         | label_29:
    0x00003bd6 ldr r0, [pc, 0x24]                        |     
    0x00003bd8 add r0, pc                                |     r0 = 0x77da;
    0x00003bda bl 0x1e40                                 |     fcn_00001e40 ();
                                                         | label_30:
    0x00003bde ldr r0, [pc, 0x20]                        |     
    0x00003be0 add r0, pc                                |     r0 = 0x77e6;
    0x00003be2 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003be6 nop                                       |     
    0x00003be8 adds r3, 0x98                             |     r3 += 0x98;
    0x00003bea movs r0, r0                               |     
    0x00003bec lsrs r0, r1, 0x16                         |     r0 = r1 >> 0x16;
    0x00003bee movs r0, r0                               |     
    0x00003bf0 asrs r2, r3, 1                            |     r2 = r3 >> 1;
    0x00003bf2 movs r0, r0                               |     
    0x00003bf4 lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x00003bf6 movs r0, r0                               |     
    0x00003bf8 asrs r0, r2, 0x20                         |     r0 = r2 >> 0x20;
    0x00003bfa movs r0, r0                               |     
    0x00003bfc lsrs r0, r0, 0x1e                         |     r0 >>= 0x1e;
    0x00003bfe movs r0, r0                               |     
    0x00003c00 lsrs r4, r5, 0x1e                         |     r4 = r5 >> 0x1e;
    0x00003c02 movs r0, r0                               |     
    0x00003c04 ldr r2, [pc, 0xc4]                        |     
    0x00003c06 cmp r0, 4                                 |     
    0x00003c08 ldr r3, [pc, 0xc4]                        |     r3 = *(0x3cd0);
    0x00003c0a push {r7, lr}                             |     
    0x00003c0c sub sp, 8                                 |     
    0x00003c0e add r2, pc                                |     r2 = 0x78de;
    0x00003c10 ldr r6, [pc, 0xc0]                        |     
    0x00003c12 ldr r3, [r2, r3]                          |     
    0x00003c14 add r6, pc                                |     r6 = 0x78ec;
    0x00003c16 ldr r3, [r3]                              |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x00003c18 str r3, [sp, 4]                           |     var_4h_7 = r3;
    0x00003c1a mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 4) {
    0x00003c1e beq 0x3c24                                |         
    0x00003c20 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003c24 mov r4, r1                                |     r4 = r1;
    0x00003c26 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003c28 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x00003c2c mov r5, r0                                |     r5 = r0;
    0x00003c2e ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003c30 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x00003c34 mov r1, r0                                |     r1 = r0;
    0x00003c36 ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00003c38 mov r4, r1                                |     r4 = r1;
    0x00003c3a bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003c3e mov r1, r4                                |     r1 = r4;
    0x00003c40 mov r2, r0                                |     r2 = r0;
    0x00003c42 mov r3, sp                                |     r3 = sp;
    0x00003c44 mov r0, r5                                |     r0 = r5;
    0x00003c46 blx 0x1874                                |     r0 = keyctl_dh_compute_alloc ();
    0x00003c4a subs r2, r0, 0                            |     r2 = r0 - 0;
                                                         |     if (r2 < r0) {
    0x00003c4c blt 0x3cc2                                |         goto label_34;
                                                         |     }
    0x00003c4e ldr r1, [pc, 0x88]                        |     
    0x00003c50 movs r0, 1                                |     r0 = 1;
    0x00003c52 ldr.w sb, [pc, 0x88]                      |     
    0x00003c56 mov r4, r2                                |     r4 = r2;
    0x00003c58 add.w r8, r4, 1                           |     r8 = r4 + 1;
    0x00003c5a lsrs r1, r0, 0x20                         |     r1 = r0 >> 0x20;
    0x00003c5c movs r7, 0                                |     r7 = 0;
    0x00003c5e add r1, pc                                |     r1 = 0x793c;
    0x00003c60 blx 0x18bc                                |     printf_chk ();
    0x00003c64 ldr r5, [sp]                              |     r5 = *(sp);
    0x00003c66 add sb, pc                                |     sb = 0x7948;
                                                         |     do {
    0x00003c68 ldrb r2, [r5]                             |         r2 = *(r5);
    0x00003c6a mov r1, sb                                |         r1 = sb;
    0x00003c6c movs r0, 1                                |         r0 = 1;
    0x00003c6e blx 0x18bc                                |         printf_chk ();
    0x00003c72 sub.w r3, r8, r4                          |         r3 = r8 - r4;
    0x00003c76 strb r7, [r5]                             |         *(r5) = r7;
    0x00003c78 lsls r2, r3, 0x1b                         |         r2 = r3 << 0x1b;
                                                         |         if (r2 != r3) {
    0x00003c7a bne 0x3c92                                |             goto label_35;
                                                         |         }
    0x00003c7c subs r4, 1                                |         r4--;
    0x00003c7e cmp r4, 0                                 |         
                                                         |         if (r4 <= 0) {
    0x00003c80 ble 0x3cb0                                |             goto label_36;
                                                         |         }
    0x00003c82 movs r0, 0xa                              |         r0 = 0xa;
                                                         | label_5:
    0x00003c84 ldr r3, [pc, 0x58]                        |         r3 = *(0x3ce0);
    0x00003c86 ldr r3, [r6, r3]                          |         r3 = *((r6 + r3));
    0x00003c88 ldr r1, [r3]                              |         r1 = *(0x3ce0);
    0x00003c8a blx 0x194c                                |         putc (r0, r1);
                                                         | label_4:
    0x00003c8e adds r5, 1                                |         r5++;
    0x00003c90 b 0x3c68                                  |         
                                                         |     } while (1);
                                                         | label_35:
    0x00003c92 tst.w r3, 3                               |     
    0x00003c96 add.w r4, r4, -1                          |     r4 += -1;
    0x00003c9a ite eq                                    |     
                                                         |     if ((r3 & 3) != 0) {
    0x00003c9c moveq r3, 1                               |         r3 = 1;
                                                         |     }
                                                         |     if ((r3 & 3) == 0) {
    0x00003c9e movne r3, 0                               |         r3 = 0;
                                                         |     }
    0x00003ca0 cmp r4, 0                                 |     
    0x00003ca2 lsl.w r3, r3, 5                           |     r3 <<= 5;
                                                         |     if (r4 <= 0) {
    0x00003ca6 ble 0x3cb0                                |         goto label_36;
                                                         |     }
    0x00003ca8 movs r0, 0x20                             |     r0 = 0x20;
    0x00003caa cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00003cac beq 0x3c8e                                |         goto label_4;
                                                         |     }
    0x00003cae b 0x3c84                                  |     goto label_5;
                                                         | label_36:
    0x00003cb0 movs r0, 0xa                              |     r0 = 0xa;
    0x00003cb2 blx 0x18b0                                |     putchar (r0);
    0x00003cb6 ldr r0, [sp]                              |     r0 = *(sp);
    0x00003cb8 blx 0x16c4                                |     free (r0);
    0x00003cbc movs r0, 0                                |     r0 = 0;
    0x00003cbe blx 0x1808                                |     exit (r0);
                                                         | label_34:
    0x00003cc2 ldr r0, [pc, 0x20]                        |     
    0x00003cc4 add r0, pc                                |     r0 = 0x79ae;
    0x00003cc6 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003cca nop                                       |     
    0x00003ccc adds r2, 0x8e                             |     r2 += 0x8e;
    0x00003cce movs r0, r0                               |     
    0x00003cd0 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003cd2 movs r0, r0                               |     
    0x00003cd4 adds r2, 0x88                             |     r2 += 0x88;
    0x00003cd6 movs r0, r0                               |     
    0x00003cd8 lsrs r2, r5, 0x1d                         |     r2 = r5 >> 0x1d;
    0x00003cda movs r0, r0                               |     
    0x00003cdc lsrs r6, r1, 0x12                         |     r6 = r1 >> 0x12;
    0x00003cde movs r0, r0                               |     
    0x00003ce0 lsls r0, r2, 5                            |     r0 = r2 << 5;
    0x00003ce2 movs r0, r0                               |     
    0x00003ce4 lsrs r4, r4, 0x1c                         |     r4 >>= 0x1c;
    0x00003ce6 movs r0, r0                               |     
    0x00003ce8 cmp r0, 2                                 |     
    0x00003cea push {r3, lr}                             |     
                                                         |     if (r0 != 2) {
    0x00003cec beq 0x3cf2                                |         
    0x00003cee bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003cf2 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003cf4 bl 0x1ca0                                 |     r0 = fcn_00001ca0 (r0);
    0x00003cf8 blx 0x185c                                |     r0 = keyctl_clear ();
    0x00003cfc cmp r0, 0                                 |     
                                                         |     if (r0 >= 0) {
    0x00003cfe blt 0x3d06                                |         
    0x00003d00 movs r0, 0                                |         r0 = 0;
    0x00003d02 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003d06 ldr r0, [pc, 8]                           |     
    0x00003d08 add r0, pc                                |     r0 = 0x7a1e;
    0x00003d0a bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003d0e nop                                       |     
    0x00003d10 lsrs r0, r7, 0x1b                         |     r0 = r7 >> 0x1b;
    0x00003d12 movs r0, r0                               |     
    0x00003d14 ldr r2, [pc, 0x6c]                        |     
    0x00003d16 cmp r0, 3                                 |     
    0x00003d18 ldr r3, [pc, 0x6c]                        |     r3 = *(0x3d88);
    0x00003d1a push {r7, lr}                             |     
    0x00003d1c sub sp, 8                                 |     
    0x00003d1e add r2, pc                                |     r2 = 0x7aa6;
    0x00003d20 ldr r5, [pc, 0x68]                        |     
    0x00003d22 ldr r3, [r2, r3]                          |     
    0x00003d24 add r5, pc                                |     r5 = 0x7ab4;
    0x00003d26 ldr r3, [r3]                              |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x00003d28 str r3, [sp, 4]                           |     var_4h_8 = r3;
    0x00003d2a mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 3) {
    0x00003d2e beq 0x3d34                                |         
    0x00003d30 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003d34 mov r4, r1                                |     r4 = r1;
    0x00003d36 ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003d38 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003d3c mov r1, sp                                |     r1 = sp;
    0x00003d3e movs r2, 0                                |     r2 = 0;
    0x00003d40 mov r6, r0                                |     r6 = r0;
    0x00003d42 ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003d44 blx 0x1838                                |     strtoul (r0, r1, r2);
    0x00003d48 ldr r3, [sp]                              |     r3 = *(sp);
    0x00003d4a mov r1, r0                                |     r1 = r0;
    0x00003d4c ldrb r7, [r3]                             |     r7 = *(r3);
                                                         |     if (r7 == 0) {
    0x00003d4e cbnz r7, 0x3d64                           |         
    0x00003d50 mov.w r2, -1                              |         r2 = -1;
    0x00003d54 mov r0, r6                                |         r0 = r6;
    0x00003d56 blx 0x182c                                |         r0 = keyctl_chown ();
    0x00003d5a cmp r0, 0                                 |         
                                                         |         if (r0 < 0) {
    0x00003d5c blt 0x3d7c                                |             goto label_37;
                                                         |         }
    0x00003d5e mov r0, r7                                |         r0 = r7;
    0x00003d60 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003d64 ldr r0, [pc, 0x28]                        |     
    0x00003d66 movs r1, 1                                |     r1 = 1;
    0x00003d68 ldr r2, [pc, 0x28]                        |     
    0x00003d6a ldr r3, [r4, 8]                           |     r3 = *((r4 + 8));
    0x00003d6c ldr r0, [r5, r0]                          |     r0 = *((r5 + r0));
    0x00003d6e add r2, pc                                |     r2 = 0x7b06;
    0x00003d70 ldr r0, [r0]                              |     r0 = *(0x3d90);
    0x00003d72 blx 0x18e0                                |     fprintf_chk ()
    0x00003d76 movs r0, 2                                |     r0 = 2;
    0x00003d78 blx 0x1808                                |     exit (r0);
                                                         | label_37:
    0x00003d7c ldr r0, [pc, 0x18]                        |     
    0x00003d7e add r0, pc                                |     r0 = 0x7b1a;
    0x00003d80 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003d84 adds r1, 0x7e                             |     r1 += 0x7e;
    0x00003d86 movs r0, r0                               |     
    0x00003d88 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003d8a movs r0, r0                               |     
    0x00003d8c adds r1, 0x78                             |     r1 += 0x78;
    0x00003d8e movs r0, r0                               |     
    0x00003d90 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00003d92 movs r0, r0                               |     
    0x00003d94 lsrs r6, r4, 0x16                         |     r6 = r4 >> 0x16;
    0x00003d96 movs r0, r0                               |     
    0x00003d98 lsrs r2, r2, 0x1a                         |     r2 >>= 0x1a;
    0x00003d9a movs r0, r0                               |     
    0x00003d9c ldr r2, [pc, 0x6c]                        |     
    0x00003d9e cmp r0, 3                                 |     
    0x00003da0 ldr r3, [pc, 0x6c]                        |     r3 = *(0x3e10);
    0x00003da2 push {r7, lr}                             |     
    0x00003da4 sub sp, 8                                 |     
    0x00003da6 add r2, pc                                |     r2 = 0x7bb6;
    0x00003da8 ldr r5, [pc, 0x68]                        |     
    0x00003daa ldr r3, [r2, r3]                          |     
    0x00003dac add r5, pc                                |     r5 = 0x7bc4;
    0x00003dae ldr r3, [r3]                              |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x00003db0 str r3, [sp, 4]                           |     var_4h_9 = r3;
    0x00003db2 mov.w r3, 0                               |     r3 = 0;
                                                         |     if (r0 != 3) {
    0x00003db6 beq 0x3dbc                                |         
    0x00003db8 bl 0x1b70                                 |         fcn_00001b70 ();
                                                         |     }
    0x00003dbc mov r4, r1                                |     r4 = r1;
    0x00003dbe ldr r0, [r1, 4]                           |     r0 = *((r1 + 4));
    0x00003dc0 bl 0x1ca0                                 |     fcn_00001ca0 (r0);
    0x00003dc4 movs r2, 0                                |     r2 = 0;
    0x00003dc6 mov r1, sp                                |     r1 = sp;
    0x00003dc8 mov r6, r0                                |     r6 = r0;
    0x00003dca ldr r0, [r4, 8]                           |     r0 = *((r4 + 8));
    0x00003dcc blx 0x1838                                |     strtoul (r0, r1, r2);
    0x00003dd0 ldr r3, [sp]                              |     r3 = *(sp);
    0x00003dd2 mov r2, r0                                |     r2 = r0;
    0x00003dd4 ldrb r7, [r3]                             |     r7 = *(r3);
                                                         |     if (r7 == 0) {
    0x00003dd6 cbnz r7, 0x3dec                           |         
    0x00003dd8 mov.w r1, -1                              |         r1 = -1;
    0x00003ddc mov r0, r6                                |         r0 = r6;
    0x00003dde blx 0x182c                                |         r0 = keyctl_chown ();
    0x00003de2 cmp r0, 0                                 |         
                                                         |         if (r0 < 0) {
    0x00003de4 blt 0x3e04                                |             goto label_38;
                                                         |         }
    0x00003de6 mov r0, r7                                |         r0 = r7;
    0x00003de8 blx 0x1808                                |         exit (r0);
                                                         |     }
    0x00003dec ldr r0, [pc, 0x28]                        |     
    0x00003dee movs r1, 1                                |     r1 = 1;
    0x00003df0 ldr r2, [pc, 0x28]                        |     
    0x00003df2 ldr r3, [r4, 8]                           |     r3 = *((r4 + 8));
    0x00003df4 ldr r0, [r5, r0]                          |     r0 = *((r5 + r0));
    0x00003df6 add r2, pc                                |     r2 = 0x7c16;
    0x00003df8 ldr r0, [r0]                              |     r0 = *(0x3e18);
    0x00003dfa blx 0x18e0                                |     fprintf_chk ()
    0x00003dfe movs r0, 2                                |     r0 = 2;
    0x00003e00 blx 0x1808                                |     exit (r0);
                                                         | label_38:
    0x00003e04 ldr r0, [pc, 0x18]                        |     
    0x00003e06 add r0, pc                                |     r0 = 0x7c2a;
    0x00003e08 bl 0x1e40                                 |     fcn_00001e40 ();
    0x00003e0c adds r0, 0xf6                             |     r0 += 0xf6;
    0x00003e0e movs r0, r0                               |     
    0x00003e10 lsls r0, r0, 5                            |     r0 <<= 5;
    0x00003e12 movs r0, r0                               |     
    0x00003e14 adds r0, 0xf0                             |     r0 += 0xf0;
    0x00003e16 movs r0, r0                               |     
    0x00003e18 lsls r4, r0, 5                            |     r4 = r0 << 5;
    0x00003e1a movs r0, r0                               |     
    0x00003e1c lsrs r2, r5, 0x18                         |     r2 = r5 >> 0x18;
    0x00003e1e movs r0, r0                               |     
    0x00003e20 lsrs r2, r1, 0x18                         |     r2 = r1 >> 0x18;
    0x00003e22 movs r0, r0                               |     
    0x00003e24 push {r3, lr}                             |     
    0x00003e26 ldr r3, [sp, 8]                           |     r3 = var_0h_9;
    0x00003e28 ldr r3, [r3]                              |     r3 = *(r3);
    0x00003e2a cmp r3, r1                                |     
    0x00003e2c it ne                                     |     
                                                         |     if (r3 == r1) {
    0x00003e2e movne r0, 0                               |         r0 = 0;
                                                         |     }
                                                         |     if (r3 != r1) {
    0x00003e30 beq 0x3e34                                |         
    0x00003e32 pop {r3, pc}                              |         
                                                         |     }
    0x00003e34 mov r1, r0                                |     r1 = r0;
    0x00003e36 mov r0, r3                                |     r0 = r3;
    0x00003e38 blx 0x1784                                |     r0 = keyctl_unlink ();
    0x00003e3c mvns r0, r0                               |     r0 = ~r0;
    0x00003e3e lsrs r0, r0, 0x1f                         |     r0 >>= 0x1f;
    0x00003e40 pop {r3, pc}                              |     
                                                         | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/keyctl @ 0x3f58 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.00003f58 ()                                  | void fcn_00003f58 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                             |     char * s1;
                                                             |     int16_t var_0h;
                                                             |     int16_t var_4h;
                                                             |     int16_t var_8h;
                                                             |     int16_t var_ch;
                                                             |     int16_t var_10h;
                                                             |     int16_t var_14h;
                                                             |     int16_t var_18h;
                                                             |     int16_t var_1ch;
                                                             |     int16_t var_20h;
                                                             |     int16_t var_24h;
                                                             |     int16_t var_28h;
                                                             |     int16_t var_2ch;
                                                             |     int16_t var_30h;
                                                             |     int16_t var_34h;
                                                             |     char * ptr;
                                                             |     int16_t var_3ch;
                                                             |     int16_t var_40h;
                                                             |     int16_t var_44h;
                                                             |     int16_t var_48h;
                                                             |     int16_t var_154h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
                                                             |     r3 = arg4;
    0x00003f58 svcmi 0xf0e92d                                |     __asm ("svcmi 0xf0e92d");
    0x00003f5c mov r4, r1                                    |     r4 = r1;
    0x00003f5e ldr r5, [pc, 0x218]                           |     
    0x00003f60 cmp r4, 0x20                                  |     
    0x00003f62 sub sp, 0x15c                                 |     
    0x00003f64 ldr r1, [pc, 0x214]                           |     r1 = *(0x417c);
    0x00003f66 add r5, pc                                    |     r5 = 0x80e4;
    0x00003f68 ldr r7, [pc, 0x214]                           |     
    0x00003f6a ldr r1, [r5, r1]                              |     
    0x00003f6c add r7, pc                                    |     r7 = 0x80f0;
    0x00003f6e ldr r1, [r1]                                  |     r1 = imp.__aeabi_unwind_cpp_pr0;
    0x00003f70 str r1, [sp, 0x154]                           |     var_154h = r1;
    0x00003f72 mov.w r1, 0                                   |     r1 = 0;
    0x00003f76 strd r3, r2, [sp, 0x18]                       |     __asm ("strd r3, r2, [var_18h]");
    0x00003f7a ble 0x3f98                                    |     
                                                             |     while (r0 != 0) {
                                                             | label_0:
    0x00003f7c ldr r2, [pc, 0x204]                           |         
    0x00003f7e ldr r3, [pc, 0x1fc]                           |         r3 = *(0x417e);
    0x00003f80 add r2, pc                                    |         r2 = 0x8108;
    0x00003f82 ldr r3, [r2, r3]                              |         r3 = imp.__aeabi_unwind_cpp_pr0;
    0x00003f84 ldr r2, [r3]                                  |         r2 = imp.__aeabi_unwind_cpp_pr0;
    0x00003f86 ldr r3, [sp, 0x154]                           |         r3 = var_154h;
    0x00003f88 eors r2, r3                                   |         r2 ^= r3;
    0x00003f8a mov.w r3, 0                                   |         r3 = 0;
                                                             |         if (r2 != r3) {
    0x00003f8e bne.w 0x4154                                  |             goto label_5;
                                                             |         }
    0x00003f92 add sp, 0x15c                                 |         
    0x00003f94 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}    |         
    0x00003f98 add r6, sp, 0x38                              |         r6 += ptr;
    0x00003f9a mov r5, r0                                    |         r5 = r0;
    0x00003f9c mov r1, r6                                    |         r1 = r6;
    0x00003f9e blx 0x1778                                    |         r0 = keyctl_describe_alloc ();
    0x00003fa2 cmp r0, 0                                     |         
                                                             |         if (r0 < 0) {
    0x00003fa4 blt.w 0x412a                                  |             goto label_6;
                                                             |         }
    0x00003fa8 ldr r1, [pc, 0x1dc]                           |         
    0x00003faa add r3, sp, 0x44                              |         r3 += var_44h;
    0x00003fac str r3, [sp, 8]                               |         var_8h = r3;
    0x00003fae add.w fp, sp, 0x54                            |         
    0x00003fb2 add.w sb, sp, 0x3c                            |         sb += var_3ch;
    0x00003fb6 add.w r8, sp, 0x40                            |         r8 += var_40h;
    0x00003fba add.w sl, sp, 0x30                            |         sl += var_30h;
    0x00003fbe str r3, [sp, 0x20]                            |         var_20h = r3;
    0x00003fc0 movs r3, 0                                    |         r3 = 0;
    0x00003fc2 str.w r8, [sp]                                |         __asm ("str.w r8, [sp]");
    0x00003fc6 str.w sl, [sp, 4]                             |         __asm ("str.w sl, [var_4h]");
    0x00003fca add r1, pc                                    |         r1 = 0x8156;
    0x00003fcc strb.w r3, [fp]                               |         *(fp) = r3;
    0x00003fd0 mov r2, fp                                    |         r2 = fp;
    0x00003fd2 str.w r3, [sb]                                |         __asm ("str.w r3, [sb]");
    0x00003fd6 str.w r3, [r8]                                |         __asm ("str.w r3, [r8]");
    0x00003fda str.w r3, [sl]                                |         __asm ("str.w r3, [sl]");
    0x00003fde mov r3, sb                                    |         r3 = sb;
    0x00003fe0 ldr r0, [r6]                                  |         r0 = *(r6);
    0x00003fe2 blx 0x18a4                                    |         r0 = isoc99_sscanf ();
    0x00003fe6 cmp r0, 4                                     |         
                                                             |         if (r0 != 4) {
    0x00003fe8 bne.w 0x4158                                  |             goto label_7;
                                                             |         }
    0x00003fec add r7, sp, 0x48                              |         r7 += var_48h;
    0x00003fee ldr.w r3, [r8]                                |         r3 = *(r8);
    0x00003ff2 ldr.w r1, [sl]                                |         r1 = *(sl);
    0x00003ff6 mov r0, r7                                    |         r0 = r7;
    0x00003ff8 ldr.w r2, [sb]                                |         r2 = *(sb);
    0x00003ffc bl 0x24c4                                     |         fcn_000024c4 (r0, r1, r2, r3);
    0x00004000 ldr r3, [sp, 0x18]                            |         r3 = var_18h;
    0x00004002 cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x00004004 bne 0x40ee                                    |             goto label_8;
                                                             |         }
    0x00004006 cmp r4, 0                                     |         
    0x00004008 ldr.w r3, [sb]                                |         r3 = *(sb);
    0x0000400c ldr.w r2, [r8]                                |         r2 = *(r8);
                                                             |         if (r4 <= 0) {
    0x00004010 ble.w 0x4148                                  |             goto label_9;
                                                             |         }
    0x00004014 ldr r1, [pc, 0x174]                           |         
    0x00004016 add r1, pc                                    |         r1 = 0x81a6;
                                                             | label_3:
    0x00004018 strd r3, r2, [sp]                             |         __asm ("strd r3, r2, [sp]");
    0x0000401c movs r0, 1                                    |         r0 = 1;
    0x0000401e ldr r3, [sp, 0x20]                            |         r3 = var_20h;
    0x00004020 str r1, [sp, 0xc]                             |         var_ch = r1;
    0x00004022 ldr r1, [r3]                                  |         r1 = *(r3);
    0x00004024 mov r3, r7                                    |         r3 = r7;
    0x00004026 str.w fp, [sp, 0x10]                          |         __asm ("str.w fp, [var_10h]");
    0x0000402a ldr r2, [r6]                                  |         r2 = *(r6);
    0x0000402c add r2, r1                                    |         r2 += r1;
    0x0000402e ldr r1, [pc, 0x160]                           |         
    0x00004030 str r2, [sp, 0x14]                            |         var_14h = r2;
    0x00004032 ldr r2, [pc, 0x160]                           |         
    0x00004034 add r1, pc                                    |         r1 = 0x81ca;
    0x00004036 add r2, pc                                    |         r2 = 0x81d0;
    0x00004038 adds r2, 0x18                                 |         r2 += 0x18;
    0x0000403a str r2, [sp, 8]                               |         var_8h = r2;
    0x0000403c mov r2, r5                                    |         r2 = r5;
    0x0000403e blx 0x18bc                                    |         printf_chk ();
                                                             | label_1:
    0x00004042 ldr r0, [r6]                                  |         r0 = *(r6);
    0x00004044 ldr r6, [pc, 0x150]                           |         
    0x00004046 blx 0x16c4                                    |         free (r0);
    0x0000404a mov r0, fp                                    |         r0 = fp;
    0x0000404c add r6, pc                                    |         r6 = 0x81e8;
    0x0000404e mov r1, r6                                    |         r1 = r6;
    0x00004050 blx 0x1688                                    |         r0 = strcmp (r0, r1);
    0x00004054 cmp r0, 0                                     |         
    0x00004056 bne 0x3f7c                                    |         
                                                             |     }
    0x00004058 add.w sb, sp, 0x34                            |     sb += var_34h;
    0x0000405c mov r0, r5                                    |     r0 = r5;
    0x0000405e mov r1, sb                                    |     r1 = sb;
    0x00004060 blx 0x1934                                    |     r0 = keyctl_read_alloc ();
    0x00004064 subs r5, r0, 0                                |     r5 = r0 - 0;
                                                             |     if (r5 < r0) {
    0x00004066 blt.w 0x4170                                  |         goto label_10;
                                                             |     }
    0x0000406a cmp r5, 3                                     |     
    0x0000406c ldr.w r8, [sb]                                |     r8 = *(sb);
                                                             |     if (r5 < 3) {
    0x00004070 bls 0x40e6                                    |         goto label_11;
                                                             |     }
    0x00004072 ldr r3, [pc, 0x128]                           |     
    0x00004074 cmp r4, 0                                     |     
    0x00004076 ldr.w sl, [pc, 0x128]                         |     
    0x0000407a add.w r1, r4, 4                               |     r1 = r4 + 4;
    0x0000407e str.w sb, [sp, 0x2c]                          |     __asm ("str.w sb, [var_2ch]");
    0x00004082 it ne                                         |     
                                                             |     if (r4 == 0) {
    0x00004084 movne r7, r1                                  |         r7 = r1;
                                                             |     }
    0x00004086 add r3, pc                                    |     r3 = 0x8228;
    0x00004088 it eq                                         |     
                                                             |     if (r4 != 0) {
    0x0000408a moveq r7, 1                                   |         r7 = 1;
                                                             |     }
    0x0000408c add r3, r4                                    |     r3 += r4;
    0x0000408e add sl, pc                                    |     sl = 0x8234;
    0x00004090 str r3, [sp, 0x20]                            |     var_20h = r3;
    0x00004092 mov sb, r1                                    |     sb = r1;
    0x00004094 ldr r3, [pc, 0x10c]                           |     
    0x00004096 add r3, pc                                    |     r3 = 0x823e;
    0x00004098 str r3, [sp, 0x28]                            |     var_28h = r3;
    0x0000409a add.w r3, sl, 0x18                            |     r3 = sl + 0x18;
    0x0000409e str r3, [sp, 0x24]                            |     var_24h = r3;
                                                             |     do {
    0x000040a0 mov r1, r6                                    |         r1 = r6;
    0x000040a2 mov r0, fp                                    |         r0 = fp;
    0x000040a4 blx 0x1688                                    |         strcmp (r0, r1);
    0x000040a8 add.w r8, r8, 4                               |         r8 += 4;
    0x000040ac subs r5, 4                                    |         r5 -= 4;
    0x000040ae mov r3, r0                                    |         r3 = r0;
                                                             |         if (r0 == 0) {
    0x000040b0 cbnz r0, 0x40da                               |             
    0x000040b2 ldr r0, [r8, -0x4]                            |             r0 = *((r8 - 0x4));
    0x000040b6 cmp r4, 0                                     |             
                                                             |             if (r4 != 0) {
    0x000040b8 bne 0x4138                                    |                 goto label_12;
                                                             |             }
    0x000040ba ldr r2, [sp, 0x28]                            |             r2 = var_28h;
    0x000040bc movs r3, 0x20                                 |             r3 = 0x20;
    0x000040be strh r3, [r2, 0x18]                           |             *((r2 + 0x18)) = r3;
                                                             | label_2:
    0x000040c0 ldr r3, [sp, 0x1c]                            |             r3 = var_1ch;
                                                             |             if (r3 != 0) {
    0x000040c2 cbz r3, 0x40ca                                |                 
    0x000040c4 ldr r2, [sp, 0x20]                            |                 r2 = var_20h;
    0x000040c6 movs r3, 0x7c                                 |                 r3 = 0x7c;
    0x000040c8 strb r3, [r2, 0x18]                           |                 *((r2 + 0x18)) = r3;
                                                             |             }
    0x000040ca cmp r5, 3                                     |             
    0x000040cc ldr r3, [sp, 0x18]                            |             r3 = var_18h;
    0x000040ce ite ls                                        |             
                                                             |             if (r5 > 3) {
    0x000040d0 movls r2, 0                                   |                 r2 = 0;
                                                             |             }
                                                             |             if (r5 <= 3) {
    0x000040d2 movhi r2, 1                                   |                 r2 = 1;
                                                             |             }
    0x000040d4 mov r1, r7                                    |             r1 = r7;
    0x000040d6 bl 0x3f58                                     |             fcn_00003f58 (r0, r1, r2, r3);
                                                             |         }
    0x000040da cmp r5, 3                                     |         
    0x000040dc bhi 0x40a0                                    |         
                                                             |     } while (r5 > 3);
    0x000040de ldr.w sb, [sp, 0x2c]                          |     sb = var_2ch;
    0x000040e2 ldr.w r8, [sb]                                |     r8 = *(sb);
                                                             | label_11:
    0x000040e6 mov r0, r8                                    |     r0 = r8;
    0x000040e8 blx 0x16c4                                    |     free (r0);
    0x000040ec b 0x3f7c                                      |     goto label_0;
                                                             | label_8:
    0x000040ee cmp r4, 0                                     |     
    0x000040f0 ldr.w r3, [sb]                                |     r3 = *(sb);
    0x000040f4 ldr.w r2, [r8]                                |     r2 = *(r8);
                                                             |     if (r4 <= 0) {
    0x000040f8 ble 0x414e                                    |         goto label_13;
                                                             |     }
    0x000040fa ldr r1, [pc, 0xac]                            |     
    0x000040fc add r1, pc                                    |     r1 = 0x82aa;
                                                             |     do {
    0x000040fe strd r3, r2, [sp]                             |         __asm ("strd r3, r2, [sp]");
    0x00004102 movs r0, 1                                    |         r0 = 1;
    0x00004104 ldr r3, [sp, 0x20]                            |         r3 = var_20h;
    0x00004106 str r1, [sp, 0xc]                             |         var_ch = r1;
    0x00004108 ldr r1, [r3]                                  |         r1 = *(r3);
    0x0000410a mov r3, r7                                    |         r3 = r7;
    0x0000410c str.w fp, [sp, 0x10]                          |         __asm ("str.w fp, [var_10h]");
    0x00004110 ldr r2, [r6]                                  |         r2 = *(r6);
    0x00004112 add r2, r1                                    |         r2 += r1;
    0x00004114 ldr r1, [pc, 0x94]                            |         
    0x00004116 str r2, [sp, 0x14]                            |         var_14h = r2;
    0x00004118 ldr r2, [pc, 0x94]                            |         
    0x0000411a add r1, pc                                    |         r1 = 0x82ca;
    0x0000411c add r2, pc                                    |         r2 = 0x82d0;
    0x0000411e adds r2, 0x18                                 |         r2 += 0x18;
    0x00004120 str r2, [sp, 8]                               |         var_8h = r2;
    0x00004122 mov r2, r5                                    |         r2 = r5;
    0x00004124 blx 0x18bc                                    |         printf_chk ();
    0x00004128 b 0x4042                                      |         goto label_1;
                                                             | label_6:
    0x0000412a ldr r1, [pc, 0x88]                            |         
    0x0000412c mov r2, r5                                    |         r2 = r5;
    0x0000412e movs r0, 1                                    |         r0 = 1;
    0x00004130 add r1, pc                                    |         r1 = 0x82ea;
    0x00004132 blx 0x18bc                                    |         printf_chk ();
    0x00004136 b 0x3f7c                                      |         goto label_0;
                                                             | label_12:
    0x00004138 ldr r1, [sp, 0x24]                            |         r1 = var_24h;
    0x0000413a mov.w r2, 0x20202020                          |         r2 = 0x20202020;
    0x0000413e str r2, [r1, r4]                              |         *((r1 + r4)) = r2;
    0x00004140 add.w r2, sl, sb                              |         r2 = sl + sb;
    0x00004144 strb r3, [r2, 0x18]                           |         *((r2 + 0x18)) = r3;
    0x00004146 b 0x40c0                                      |         goto label_2;
                                                             | label_9:
    0x00004148 ldr r1, [pc, 0x6c]                            |         
    0x0000414a add r1, pc                                    |         r1 = 0x8306;
    0x0000414c b 0x4018                                      |         goto label_3;
                                                             | label_13:
    0x0000414e ldr r1, [pc, 0x6c]                            |         
    0x00004150 add r1, pc                                    |         r1 = 0x8312;
    0x00004152 b 0x40fe                                      |         
                                                             |     } while (1);
                                                             | label_5:
    0x00004154 blx 0x1724                                    |     stack_chk_fail ();
                                                             | label_7:
    0x00004158 ldr r0, [pc, 0x64]                            |     
    0x0000415a mov r3, r5                                    |     r3 = r5;
    0x0000415c ldr r2, [pc, 0x64]                            |     
    0x0000415e movs r1, 1                                    |     r1 = 1;
    0x00004160 ldr r0, [r7, r0]                              |     r0 = *((r7 + r0));
    0x00004162 add r2, pc                                    |     r2 = 0x832a;
    0x00004164 ldr r0, [r0]                                  |     r0 = *(0x41c0);
    0x00004166 blx 0x18e0                                    |     fprintf_chk ()
    0x0000416a movs r0, 3                                    |     r0 = 3;
    0x0000416c blx 0x1808                                    |     exit (r0);
                                                             | label_10:
    0x00004170 ldr r0, [pc, 0x54]                            |     
    0x00004172 add r0, pc                                    |     r0 = 0x833e;
    0x00004174 bl 0x1e40                                     |     fcn_00001e40 ();
    0x00004178 cmp r7, 0x36                                  |     
    0x0000417a movs r0, r0                                   |     
    0x0000417c lsls r0, r0, 5                                |     r0 <<= 5;
    0x0000417e movs r0, r0                                   |     
    0x00004180 cmp r7, 0x30                                  |     
    0x00004182 movs r0, r0                                   |     
    0x00004184 cmp r7, 0x1c                                  |     
    0x00004186 movs r0, r0                                   |     
    0x00004188 lsrs r6, r4, 0x12                             |     r6 = r4 >> 0x12;
    0x0000418a movs r0, r0                                   |     
    0x0000418c lsrs r2, r7, 0x10                             |     r2 = r7 >> 0x10;
    0x0000418e movs r0, r0                                   |     
    0x00004190 lsrs r0, r6, 0x11                             |     r0 = r6 >> 0x11;
    0x00004192 movs r0, r0                                   |     
    0x00004194 cmp r7, 0xd6                                  |     
    0x00004196 movs r0, r0                                   |     
    0x00004198 lsls r4, r3, 0x1e                             |     r4 = r3 << 0x1e;
    0x0000419a movs r0, r0                                   |     
    0x0000419c cmp r7, 0x86                                  |     
    0x0000419e movs r0, r0                                   |     
    0x000041a0 cmp r7, 0x7e                                  |     
    0x000041a2 movs r0, r0                                   |     
    0x000041a4 cmp r7, 0x76                                  |     
    0x000041a6 movs r0, r0                                   |     
    0x000041a8 lsrs r4, r2, 0xd                              |     r4 = r2 >> 0xd;
    0x000041aa movs r0, r0                                   |     
    0x000041ac lsrs r2, r5, 0xd                              |     r2 = r5 >> 0xd;
    0x000041ae movs r0, r0                                   |     
    0x000041b0 cmp r6, 0xf0                                  |     
    0x000041b2 movs r0, r0                                   |     
    0x000041b4 lsrs r4, r4, 0xc                              |     r4 >>= 0xc;
    0x000041b6 movs r0, r0                                   |     
    0x000041b8 lsls r2, r4, 7                                |     r2 = r4 << 7;
    0x000041ba movs r0, r0                                   |     
    0x000041bc lsls r4, r3, 7                                |     r4 = r3 << 7;
    0x000041be movs r0, r0                                   |     
    0x000041c0 lsls r4, r0, 5                                |     r4 = r0 << 5;
    0x000041c2 movs r0, r0                                   |     
    0x000041c4 lsls r6, r2, 0x13                             |     r6 = r2 << 0x13;
    0x000041c6 movs r0, r0                                   |     
    0x000041c8 lsls r2, r0, 0x15                             |     r2 = r0 << 0x15;
    0x000041ca movs r0, r0                                   |     
    0x000041cc cmp r0, 1                                     |     
    0x000041ce push {r3, lr}                                 |     
                                                             |     if (r0 <= 1) {
    0x000041d0 ble 0x4200                                    |         goto label_14;
                                                             |     }
    0x000041d2 mov r5, r1                                    |     r5 = r1;
    0x000041d4 ldr r1, [pc, 0x70]                            |     
    0x000041d6 mov r4, r0                                    |     r4 = r0;
    0x000041d8 ldr r0, [r5, 4]                               |     r0 = *((r5 + 4));
    0x000041da add r1, pc                                    |     r1 = 0x8426;
    0x000041dc blx 0x1688                                    |     r0 = strcmp (r0, r1);
                                                             |     if (r0 != 0) {
    0x000041e0 cbnz r0, 0x41ec                               |         goto label_15;
                                                             |     }
    0x000041e2 subs r4, 1                                    |     r4--;
    0x000041e4 cmp r4, 2                                     |     
                                                             |     if (r4 <= 2) {
    0x000041e6 ble 0x422a                                    |         goto label_16;
                                                             |     }
                                                             |     do {
    0x000041e8 bl 0x1b70                                     |         fcn_00001b70 ();
                                                             | label_15:
    0x000041ec cmp r4, 2                                     |         
    0x000041ee bne 0x41e8                                    |         
                                                             |     } while (r4 != 2);
    0x000041f0 movs r6, 0                                    |     r6 = 0;
                                                             | label_4:
    0x000041f2 ldr r0, [r5, 4]                               |     r0 = *((r5 + 4));
    0x000041f4 bl 0x1ca0                                     |     r0 = fcn_00001ca0 (r0);
    0x000041f8 mov r4, r0                                    |     r4 = r0;
    0x000041fa ldr r0, [pc, 0x50]                            |     
    0x000041fc add r0, pc                                    |     r0 = 0x844e;
    0x000041fe b 0x420a                                      |     goto label_17;
                                                             | label_14:
    0x00004200 ldr r0, [pc, 0x4c]                            |     
    0x00004202 movs r6, 0                                    |     r6 = 0;
    0x00004204 mvn r4, 2                                     |     r4 = ~2;
    0x00004208 add r0, pc                                    |     r0 = 0x845c;
                                                             |     do {
                                                             | label_17:
    0x0000420a blx 0x17b4                                    |         puts (r0);
    0x0000420e movs r1, 0                                    |         r1 = 0;
    0x00004210 mov r0, r4                                    |         r0 = r4;
    0x00004212 blx 0x1904                                    |         r0 = keyctl_get_keyring_ID ();
    0x00004216 adds r3, r0, 1                                |         r3 = r0 + 1;
                                                             |         if (r3 == r0) {
    0x00004218 beq 0x423e                                    |             goto label_18;
                                                             |         }
    0x0000421a movs r2, 0                                    |         r2 = 0;
    0x0000421c mov r3, r6                                    |         r3 = r6;
    0x0000421e mov r1, r2                                    |         r1 = r2;
    0x00004220 bl 0x3f58                                     |         fcn_00003f58 (r0, r1, r2, r3);
    0x00004224 movs r0, 0                                    |         r0 = 0;
    0x00004226 blx 0x1808                                    |         exit (r0);
                                                             |         if (r0 == 0) {
                                                             | label_16:
    0x0000422a beq 0x4238                                    |             goto label_19;
                                                             |         }
    0x0000422c ldr r0, [pc, 0x24]                            |         
    0x0000422e movs r6, 1                                    |         r6 = 1;
    0x00004230 mvn r4, 2                                     |         r4 = ~2;
    0x00004234 add r0, pc                                    |         r0 = 0x848c;
    0x00004236 b 0x420a                                      |         
                                                             |     } while (1);
                                                             | label_19:
    0x00004238 adds r5, 4                                    |     r5 += 4;
    0x0000423a movs r6, 1                                    |     r6 = 1;
    0x0000423c b 0x41f2                                      |     goto label_4;
                                                             | label_18:
    0x0000423e ldr r0, [pc, 0x18]                            |     
    0x00004240 add r0, pc                                    |     r0 = 0x849e;
    0x00004242 bl 0x1e40                                     |     fcn_00001e40 ();
    0x00004246 nop                                           |     
    0x00004248 lsrs r2, r7, 0xb                              |     r2 = r7 >> 0xb;
    0x0000424a movs r0, r0                                   |     
    0x0000424c lsrs r0, r2, 0xb                              |     r0 = r2 >> 0xb;
    0x0000424e movs r0, r0                                   |     
    0x00004250 lsrs r4, r7, 0xa                              |     r4 = r7 >> 0xa;
    0x00004252 movs r0, r0                                   |     
    0x00004254 lsrs r0, r2, 0xa                              |     r0 = r2 >> 0xa;
    0x00004256 movs r0, r0                                   |     
    0x00004258 lsrs r0, r3, 0xa                              |     r0 = r3 >> 0xa;
    0x0000425a movs r0, r0                                   |     
                                                             |     /* [14] -r-x section size 8 named .fini */
    0x0000425c ands r0, r1                                   |     r0 &= r1;
    0x0000425e invalid                                       |     
                                                             | }

[*] Function fprintf used 10 times keyctl