[*] Binary protection state of dcore

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


[*] Function fprintf tear down of dcore

    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/dcore @ 0x12d8 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000012d8 ()                                      | void fcn_000012d8 (int16_t arg1, int16_t arg2, pid_t arg3, pid_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_8h_2;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     FILE * stream;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int32_t var_24h_2;
                                                                 |     int16_t var_2ch;
                                                                 |     int32_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_59h;
                                                                 |     int16_t var_5ah;
                                                                 |     int16_t var_5bh;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_74h;
                                                                 |     pid_t var_84h_2;
                                                                 |     int16_t var_d4h;
                                                                 |     int16_t var_0h_6;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_84h;
                                                                 |     int16_t var_0h_5;
                                                                 |     int16_t var_1ach;
                                                                 |     int16_t fildes;
                                                                 |     pid_t pid;
                                                                 |     int16_t var_204h;
                                                                 |     int16_t var_20ch;
                                                                 |     int16_t var_0h_2;
                                                                 |     int32_t var_0h_3;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000012d8 ssub8mi fp, r6, r0                                |     __asm ("ssub8mi fp, r6, r0");
    0x000012dc ldr r2, [pc, 0x88]                                |     
    0x000012de mov r4, r3                                        |     r4 = r3;
    0x000012e0 sub sp, 0x14                                      |     
    0x000012e2 movs r7, 5                                        |     r7 = 5;
    0x000012e4 ldr r3, [pc, 0x84]                                |     r3 = *(0x136c);
    0x000012e6 mov r5, r0                                        |     r5 = r0;
    0x000012e8 add r2, pc                                        |     r2 = 0x2654;
    0x000012ea ldr r3, [r2, r3]                                  |     
    0x000012ec movs r2, 0xc                                      |     r2 = 0xc;
    0x000012ee ldr r3, [r3]                                      |     r3 = *(0x2654);
    0x000012f0 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000012f2 mov.w r3, 0                                       |     r3 = 0;
    0x000012f6 str r1, [sp, 8]                                   |     var_8h = r1;
    0x000012f8 mov r1, sp                                        |     r1 = sp;
    0x000012fa strd r7, r4, [sp]                                 |     __asm ("strd r7, r4, [sp]");
    0x000012fe bl 0x1ae0                                         |     fcn_00001ae0 (r0, r1, r2);
    0x00001302 ldr r1, [pc, 0x6c]                                |     
    0x00001304 mov r2, r7                                        |     r2 = r7;
    0x00001306 mov r0, r5                                        |     r0 = r5;
    0x00001308 add r1, pc                                        |     r1 = 0x267e;
    0x0000130a bl 0x1ae0                                         |     fcn_00001ae0 (r0, r1, r2);
    0x0000130e movs r1, 0                                        |     r1 = 0;
    0x00001310 mov r0, r5                                        |     r0 = r5;
    0x00001312 bl 0x1b18                                         |     fcn_00001b18 (r0, r1);
    0x00001316 movs r1, 0                                        |     r1 = 0;
    0x00001318 mov r0, r5                                        |     r0 = r5;
    0x0000131a bl 0x1b18                                         |     fcn_00001b18 (r0, r1);
    0x0000131e movs r1, 0                                        |     r1 = 0;
    0x00001320 mov r0, r5                                        |     r0 = r5;
    0x00001322 bl 0x1b18                                         |     fcn_00001b18 (r0, r1);
    0x00001326 mov r1, r6                                        |     r1 = r6;
    0x00001328 adds r6, r4, 3                                    |     r6 = r4 + 3;
    0x0000132a mov r2, r4                                        |     r2 = r4;
    0x0000132c mov r0, r5                                        |     r0 = r5;
    0x0000132e bic r6, r6, 3                                     |     r6 = BIT_MASK (r6, 3);
    0x00001332 bl 0x1ae0                                         |     fcn_00001ae0 (r0, r1, r2);
    0x00001336 subs r6, r6, r4                                   |     r6 -= r4;
                                                                 |     if (r6 == r6) {
    0x00001338 beq 0x134a                                        |         goto label_7;
                                                                 |     }
    0x0000133a movs r4, 0                                        |     r4 = 0;
                                                                 |     do {
    0x0000133c movs r1, 0                                        |         r1 = 0;
    0x0000133e mov r0, r5                                        |         r0 = r5;
    0x00001340 adds r4, 1                                        |         r4++;
    0x00001342 bl 0x1b18                                         |         fcn_00001b18 (r0, r1);
    0x00001346 cmp r6, r4                                        |         
    0x00001348 bne 0x133c                                        |         
                                                                 |     } while (r6 != r4);
                                                                 | label_7:
    0x0000134a ldr r2, [pc, 0x28]                                |     
    0x0000134c ldr r3, [pc, 0x1c]                                |     r3 = *(0x136c);
    0x0000134e add r2, pc                                        |     r2 = 0x26c8;
    0x00001350 ldr r3, [r2, r3]                                  |     r3 = *(0x26c8);
    0x00001352 ldr r2, [r3]                                      |     r2 = *(0x26c8);
    0x00001354 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00001356 eors r2, r3                                       |     r2 ^= r3;
    0x00001358 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 == r3) {
    0x0000135c bne 0x1362                                        |         
    0x0000135e add sp, 0x14                                      |         
    0x00001360 pop {r4, r5, r6, r7, pc}                          |         
                                                                 |     }
    0x00001362 blx 0xfac                                         |     fprintf_chk ()
    0x00001366 nop                                               |     
    0x00001368 subs r3, 0xe4                                     |     r3 -= 0xe4;
    0x0000136a movs r0, r0                                       |     
    0x0000136c lsls r4, r3, 4                                    |     r4 = r3 << 4;
    0x0000136e movs r0, r0                                       |     
    0x00001370 adds r4, r5, r6                                   |     r4 = r5 + r6;
    0x00001372 movs r0, r0                                       |     
    0x00001374 subs r3, 0x7e                                     |     r3 -= 0x7e;
    0x00001376 movs r0, r0                                       |     
    0x00001378 push {r4, r5, r6, r7, lr}                         |     
    0x0000137a mov r7, r0                                        |     r7 = r0;
    0x0000137c ldr r4, [pc, 0x84]                                |     
    0x0000137e sub.w sp, sp, 0x20c                               |     
    0x00001382 mov r5, sp                                        |     r5 = sp;
    0x00001384 mov r3, r1                                        |     r3 = r1;
    0x00001386 ldr r0, [pc, 0x80]                                |     r0 = *(0x140a);
    0x00001388 movs r1, 1                                        |     r1 = 1;
    0x0000138a add r4, pc                                        |     r4 = 0x2792;
    0x0000138c ldr r2, [pc, 0x7c]                                |     
    0x0000138e ldr r0, [r4, r0]                                  |     
    0x00001390 add r2, pc                                        |     r2 = 0x27a0;
    0x00001392 ldr r0, [r0]                                      |     r0 = *(0x2792);
    0x00001394 str r0, [sp, 0x204]                               |     var_204h = r0;
    0x00001396 mov.w r0, 0                                       |     r0 = 0;
    0x0000139a mov r0, r5                                        |     r0 = r5;
    0x0000139c blx 0xef8                                         |     elf_errmsg ();
    0x000013a0 ldr r1, [pc, 0x6c]                                |     
    0x000013a2 ldr r0, [r5]                                      |     r0 = *(r5);
    0x000013a4 add r1, pc                                        |     r1 = 0x27b8;
    0x000013a6 blx 0xe84                                         |     r0 = fcn_00000e84 ();
                                                                 |     if (r0 == 0) {
    0x000013aa cbz r0, 0x13f2                                    |         goto label_8;
                                                                 |     }
    0x000013ac mov r4, r0                                        |     r4 = r0;
    0x000013ae ldr r0, [r5]                                      |     r0 = *(r5);
    0x000013b0 add r5, sp, 4                                     |     r5 += pid;
    0x000013b2 blx 0xed4                                         |     read (r0, r1, r2);
    0x000013b6 mov r3, r4                                        |     r3 = r4;
    0x000013b8 mov.w r2, 0x200                                   |     r2 = 0x200;
    0x000013bc movs r1, 1                                        |     r1 = 1;
    0x000013be mov r0, r5                                        |     r0 = r5;
    0x000013c0 blx 0x1018                                        |     r0 = kill (r0, r1);
    0x000013c4 mov r6, r0                                        |     r6 = r0;
    0x000013c6 mov r0, r4                                        |     r0 = r4;
    0x000013c8 blx 0xe30                                         |     fcn_00000e30 ();
    0x000013cc mov r3, r6                                        |     r3 = r6;
    0x000013ce mov r2, r5                                        |     r2 = r5;
    0x000013d0 movs r1, 6                                        |     r1 = 6;
    0x000013d2 mov r0, r7                                        |     r0 = r7;
    0x000013d4 bl 0x12d8                                         |     fcn_000012d8 (r0, r1, r2, r3);
                                                                 |     do {
    0x000013d8 ldr r2, [pc, 0x38]                                |         
    0x000013da ldr r3, [pc, 0x2c]                                |         r3 = *(0x140a);
    0x000013dc add r2, pc                                        |         r2 = 0x27f4;
    0x000013de ldr r3, [r2, r3]                                  |         r3 = *(0x27f4);
    0x000013e0 ldr r2, [r3]                                      |         r2 = *(0x27f4);
    0x000013e2 ldr r3, [sp, 0x204]                               |         r3 = var_204h;
    0x000013e4 eors r2, r3                                       |         r2 ^= r3;
    0x000013e6 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000013ea bne 0x1400                                        |             goto label_9;
                                                                 |         }
    0x000013ec add.w sp, sp, 0x20c                               |         
    0x000013f0 pop {r4, r5, r6, r7, pc}                          |         
                                                                 | label_8:
    0x000013f2 ldr r0, [r5]                                      |         r0 = *(r5);
    0x000013f4 blx 0xea0                                         |         fcn_00000ea0 ();
    0x000013f8 ldr r0, [r5]                                      |         r0 = *(r5);
    0x000013fa blx 0xed4                                         |         read (r0, r1, r2);
    0x000013fe b 0x13d8                                          |         
                                                                 |     } while (1);
                                                                 | label_9:
    0x00001400 blx 0xfac                                         |     fprintf_chk ()
    0x00001404 subs r3, 0x42                                     |     r3 -= 0x42;
    0x00001406 movs r0, r0                                       |     
    0x00001408 lsls r4, r3, 4                                    |     r4 = r3 << 4;
    0x0000140a movs r0, r0                                       |     
    0x0000140c adds r0, r2, r1                                   |     r0 = r2 + r1;
    0x0000140e movs r0, r0                                       |     
    0x00001410 adds r4, r1, r1                                   |     r4 = r1 + r1;
    0x00001412 movs r0, r0                                       |     
    0x00001414 subs r2, 0xf0                                     |     r2 -= 0xf0;
    0x00001416 movs r0, r0                                       |     
    0x00001418 ldr r2, [pc, 0xa8]                                |     
    0x0000141a ldr r3, [pc, 0xac]                                |     r3 = *(0x14ca);
    0x0000141c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00001420 sub sp, 0x1b4                                     |     
    0x00001422 add r2, pc                                        |     r2 = 0x28ea;
    0x00001424 mov r5, r1                                        |     r5 = r1;
    0x00001426 mov sb, r0                                        |     sb = r0;
    0x00001428 add.w sl, sp, 0x84                                |     sl += var_84h;
    0x0000142c ldr r3, [r2, r3]                                  |     
    0x0000142e mov r4, sl                                        |     r4 = sl;
    0x00001430 add r7, sp, 0x1ac                                 |     r7 += var_1ach;
    0x00001432 ldr r3, [r3]                                      |     r3 = *(0x28ea);
    0x00001434 str r3, [sp, 0x1ac]                               |     var_1ach = r3;
    0x00001436 mov.w r3, 0                                       |     r3 = 0;
    0x0000143a blx 0x1078                                        |     cxa_finalize ();
    0x0000143e movs r3, 0                                        |     r3 = 0;
    0x00001440 mov r8, r0                                        |     r8 = r0;
    0x00001442 str r3, [r0]                                      |     *(r0) = r3;
    0x00001444 mov fp, r3                                        |     
    0x00001446 bl 0x2980                                         |     r0 = fcn_00002980 ();
    0x0000144a mov r6, r0                                        |     r6 = r0;
    0x0000144c b 0x1458                                          |     
                                                                 |     while (fp != 0) {
                                                                 | label_0:
    0x0000144e str r0, [r4], 4                                   |         *(r4) = r0;
                                                                 |         r4 += 4;
    0x00001452 cmp r4, r7                                        |         
    0x00001454 add fp, r6                                        |         
                                                                 |         if (r4 == r7) {
    0x00001456 beq 0x1492                                        |             goto label_10;
                                                                 |         }
    0x00001458 movs r3, 0                                        |         r3 = 0;
    0x0000145a mov r2, fp                                        |         r2 = fp;
    0x0000145c mov r1, r5                                        |         r1 = r5;
    0x0000145e movs r0, 3                                        |         r0 = 3;
    0x00001460 blx 0xe3c                                         |         fcn_00000e3c ();
    0x00001464 cmp.w fp, 0                                       |         
    0x00001468 it eq                                             |         
                                                                 |         if (fp == 0) {
    0x0000146a cmpeq r0, -1                                      |             __asm ("cmpeq r0, -1");
                                                                 |         }
    0x0000146e bne 0x144e                                        |         
                                                                 |     }
    0x00001470 ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x00001474 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00001476 beq 0x144e                                        |         goto label_0;
                                                                 |     }
    0x00001478 ldr r2, [pc, 0x50]                                |     
    0x0000147a ldr r3, [pc, 0x4c]                                |     r3 = *(0x14ca);
    0x0000147c add r2, pc                                        |     r2 = 0x294c;
    0x0000147e ldr r3, [r2, r3]                                  |     r3 = *(0x294c);
    0x00001480 ldr r2, [r3]                                      |     r2 = *(0x294c);
    0x00001482 ldr r3, [sp, 0x1ac]                               |     r3 = var_1ach;
    0x00001484 eors r2, r3                                       |     r2 ^= r3;
    0x00001486 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 == r3) {
    0x0000148a bne 0x14be                                        |         
    0x0000148c add sp, 0x1b4                                     |         
    0x0000148e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_10:
    0x00001492 add r4, sp, 4                                     |         r4 += var_4h;
    0x00001494 mov r1, r5                                        |         r1 = r5;
    0x00001496 mov r3, r4                                        |         r3 = r4;
    0x00001498 movs r2, 0                                        |         r2 = 0;
    0x0000149a movw r0, 0x4202                                   |         r0 = 0x4202;
    0x0000149e blx 0xe3c                                         |         fcn_00000e3c ();
    0x000014a2 mov r2, r4                                        |         r2 = r4;
    0x000014a4 mov r4, sp                                        |         r4 = sp;
    0x000014a6 mov r1, sl                                        |         r1 = sl;
    0x000014a8 mov r3, r4                                        |         r3 = r4;
    0x000014aa mov r0, r5                                        |         r0 = r5;
    0x000014ac bl 0x2930                                         |         fcn_00002930 (r0, r1, r2, r3);
    0x000014b0 ldr r3, [r4]                                      |         r3 = *(r4);
    0x000014b2 mov r2, r0                                        |         r2 = r0;
    0x000014b4 movs r1, 1                                        |         r1 = 1;
    0x000014b6 mov r0, sb                                        |         r0 = sb;
    0x000014b8 bl 0x12d8                                         |         fcn_000012d8 (r0, r1, r2, r3);
    0x000014ba vaba.u8 q7, q15, q6                               |         __asm ("vaba.u8 q7, q15, q6");
                                                                 |     }
    0x000014be blx 0xfac                                         |     fprintf_chk ()
    0x000014c2 nop                                               |     
    0x000014c4 subs r2, 0xaa                                     |     r2 -= 0xaa;
    0x000014c6 movs r0, r0                                       |     
    0x000014c8 lsls r4, r3, 4                                    |     r4 = r3 << 4;
    0x000014ca movs r0, r0                                       |     
    0x000014cc subs r2, 0x50                                     |     r2 -= 0x50;
    0x000014ce movs r0, r0                                       |     
    0x000014d0 ldr.w r2, [pc, 0x484]                             |     r2 = *(0x00001958);
    0x000014d4 ldr.w r3, [pc, 0x484]                             |     
    0x000014d8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000014dc movs r6, 0                                        |     r6 = 0;
    0x000014de add r2, pc                                        |     r2 += pc;
    0x000014e0 sub sp, 0xdc                                      |     
    0x000014e2 mov r8, r0                                        |     r8 = r0;
    0x000014e4 mov r5, r1                                        |     r5 = r1;
    0x000014e6 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x000014e8 movs r4, 1                                        |     r4 = 1;
    0x000014ea ldr.w r7, [pc, 0x474]                             |     r7 = *(0x00001960);
    0x000014ee mov.w sl, 0x34                                    |     sl = 0x34;
    0x000014f2 ldr r3, [r3]                                      |     r3 = *(0x195c);
    0x000014f4 str r3, [sp, 0xd4]                                |     var_d4h = r3;
    0x000014f6 mov.w r3, 0                                       |     r3 = 0;
    0x000014fa str r6, [sp, 0x38]                                |     var_38h = r6;
    0x000014fc bl 0x2978                                         |     fcn_00002978 ();
    0x00001500 ldr.w r3, [pc, 0x460]                             |     r3 = *(0x00001964);
    0x00001504 add r7, pc                                        |     r7 += pc;
    0x00001506 movs r1, 0x34                                     |     r1 = 0x34;
    0x00001508 str r0, [r7]                                      |     *(r7) = r0;
    0x0000150a movs r0, 1                                        |     r0 = 1;
    0x0000150c add r3, pc                                        |     r3 += pc;
    0x0000150e str r3, [sp, 0x18]                                |     stream = r3;
    0x00001510 blx 0xe78                                         |     fcn_00000e78 ();
    0x00001514 movw r3, 0x457f                                   |     
    0x00001516 strh r7, [r7, r5]                                 |     *((r7 + r5)) = r7;
    0x00001518 strb r6, [r0, 8]                                  |     *((r0 + 8)) = r6;
    0x0000151a movt r3, 0x464c                                   |     r3 = 0x464c457f;
    0x0000151e strb r4, [r0, 6]                                  |     *((r0 + 6)) = r4;
    0x00001520 str r3, [r0]                                      |     *(r0) = r3;
    0x00001522 movw r3, 0x101                                    |     r3 = 0x101;
    0x00001526 strh r3, [r0, 4]                                  |     *((r0 + 4)) = r3;
    0x00001528 mov sb, r0                                        |     sb = r0;
    0x0000152a bl 0x2974                                         |     fcn_00002974 ();
    0x0000152e movs r3, 4                                        |     r3 = 4;
    0x00001530 strh.w r0, [sb, 0x12]                             |     *((sb + 0x12)) = r0;
    0x00001534 strh.w r3, [sb, 0x10]                             |     *((sb + 0x10)) = r3;
    0x00001538 bl 0x2970                                         |     fcn_00002970 ();
    0x0000153c str.w r4, [sb, 0x14]                              |     __asm ("str.w r4, [sb, 0x14]");
    0x00001540 str.w r0, [sb, 0x24]                              |     __asm ("str.w r0, [sb, 0x24]");
    0x00001544 mov r0, r8                                        |     r0 = r8;
    0x00001546 strh.w sl, [sb, 0x28]                             |     *((sb + 0x28)) = sl;
    0x0000154a bl 0x1c5c                                         |     fcn_00001c5c (r0);
    0x0000154e adds r0, 1                                        |     r0++;
                                                                 |     if (r0 == 1) {
    0x00001550 beq.w 0x17c6                                      |         goto label_11;
                                                                 |     }
    0x00001554 ldr r1, [r7]                                      |     r1 = *(r7);
    0x00001556 mov r0, r8                                        |     r0 = r8;
    0x00001558 bl 0x1fb8                                         |     r0 = fcn_00001fb8 (r0, r1, r2);
    0x0000155c mov r7, r0                                        |     r7 = r0;
    0x0000155e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00001560 beq.w 0x17c6                                      |         goto label_11;
                                                                 |     }
    0x00001564 ldr r0, [r0, 0x14]                                |     r0 = *((r0 + 0x14));
    0x00001566 movs r1, 0x20                                     |     r1 = 0x20;
    0x00001568 add.w fp, sp, 0x3c                                |     
    0x0000156c add r0, r4                                        |     r0 += r4;
    0x0000156e blx 0xe78                                         |     fcn_00000e78 ();
    0x00001572 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x00001574 mov.w r0, 0x400                                   |     r0 = 0x400;
    0x00001578 bl 0x1a64                                         |     void (*0x1a64)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0000157c ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x0000157e mov r1, r6                                        |     r1 = r6;
    0x00001580 ldr r6, [pc, 0x3e4]                               |     
    0x00001582 movs r2, 0x7c                                     |     r2 = 0x7c;
    0x00001584 str r0, [sp, 0x38]                                |     var_38h = r0;
    0x00001586 add r3, r4                                        |     r3 += r4;
    0x00001588 str.w sl, [sb, 0x1c]                              |     __asm ("str.w sl, [sb, 0x1c]");
    0x0000158c uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x0000158e add r6, pc                                        |     r6 = 0x2efa;
    0x00001590 str r6, [sp, 0x14]                                |     var_14h = r6;
    0x00001592 strh.w r3, [sb, 0x2c]                             |     *((sb + 0x2c)) = r3;
    0x00001596 lsls r3, r3, 5                                    |     r3 <<= 5;
    0x00001598 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0000159a add r3, sp, 0x58                                  |     r3 += var_58h;
    0x0000159c mov r0, r3                                        |     r0 = r3;
    0x0000159e str r3, [sp, 0x20]                                |     var_20h = r3;
    0x000015a0 movs r3, 0x20                                     |     r3 = 0x20;
    0x000015a2 strh.w r3, [sb, 0x2a]                             |     *((sb + 0x2a)) = r3;
    0x000015a6 blx 0xe90                                         |     fcn_00000e90 ();
    0x000015aa ldr r2, [pc, 0x3c0]                               |     
    0x000015ac mov r3, r8                                        |     r3 = r8;
    0x000015ae mov r1, r4                                        |     r1 = r4;
    0x000015b0 mov r0, fp                                        |     r0 = fp;
    0x000015b2 add r2, pc                                        |     r2 = 0x2f24;
    0x000015b4 blx 0xef8                                         |     elf_errmsg ();
    0x000015b8 mov r1, r6                                        |     r1 = r6;
    0x000015ba ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x000015bc blx 0xe84                                         |     r0 = fcn_00000e84 ();
    0x000015c0 mov r6, r0                                        |     r6 = r0;
    0x000015c2 ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x000015c4 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000015c6 beq.w 0x1a52                                      |         goto label_12;
                                                                 |     }
    0x000015ca add.w sl, sp, 0x84                                |     sl += var_84h_2;
    0x000015ce blx 0xed4                                         |     read (r0, r1, r2);
    0x000015d2 mov r1, r4                                        |     r1 = r4;
    0x000015d4 movs r2, 0x50                                     |     r2 = 0x50;
    0x000015d6 mov r3, r6                                        |     r3 = r6;
    0x000015d8 mov r0, sl                                        |     r0 = sl;
    0x000015da blx 0x1018                                        |     kill (r0, r1);
    0x000015de mov r0, r6                                        |     r0 = r6;
    0x000015e0 blx 0xe30                                         |     fcn_00000e30 ();
    0x000015e4 ldr r2, [pc, 0x388]                               |     
    0x000015e6 mov r1, r4                                        |     r1 = r4;
    0x000015e8 mov r3, r8                                        |     r3 = r8;
    0x000015ea mov r0, fp                                        |     r0 = fp;
    0x000015ec add r2, pc                                        |     r2 = 0x2f60;
    0x000015ee blx 0xef8                                         |     elf_errmsg ();
    0x000015f2 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x000015f4 ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x000015f6 blx 0xe84                                         |     r0 = fcn_00000e84 ();
    0x000015fa mov r4, r0                                        |     r4 = r0;
    0x000015fc ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x000015fe cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00001600 beq.w 0x1a52                                      |         goto label_12;
                                                                 |     }
    0x00001604 blx 0xed4                                         |     read (r0, r1, r2);
    0x00001608 add r3, sp, 0x40                                  |     r3 += var_40h;
    0x0000160a ldr r1, [pc, 0x368]                               |     
    0x0000160c str r3, [sp, 0xc]                                 |     var_ch_2 = r3;
    0x0000160e add r3, sp, 0x44                                  |     r3 += var_44h;
    0x00001610 str r3, [sp, 8]                                   |     var_8h_2 = r3;
    0x00001612 add r3, sp, 0x70                                  |     r3 += var_70h;
    0x00001614 str r3, [sp, 4]                                   |     var_4h_2 = r3;
    0x00001616 add r3, sp, 0x6c                                  |     r3 += var_6ch;
    0x00001618 add r1, pc                                        |     r1 = 0x2f92;
    0x0000161a str r3, [sp]                                      |     *(sp) = r3;
    0x0000161c ldr r6, [pc, 0x358]                               |     
    0x0000161e add r3, sp, 0x68                                  |     r3 += var_68h;
    0x00001620 add.w r2, sp, 0x59                                |     r2 += var_59h;
    0x00001624 mov r0, r4                                        |     r0 = r4;
    0x00001626 blx 0xde8                                         |     fcn_00000de8 ();
    0x0000162a ldrb.w fp, [sp, 0x59]                             |     fp = var_59h;
    0x0000162e add r6, pc                                        |     r6 = 0x2faa;
    0x00001630 mov r0, r6                                        |     r0 = r6;
    0x00001632 mov r1, fp                                        |     r1 = fp;
    0x00001634 blx 0xe6c                                         |     r0 = fcn_00000e6c ();
                                                                 |     if (r0 != 0) {
    0x00001638 cbz r0, 0x163e                                    |         
    0x0000163a subs r0, r0, r6                                   |         r0 -= r6;
    0x0000163c uxtb r0, r0                                       |         r0 = (int8_t) r0;
                                                                 |     }
    0x0000163e ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00001640 sub.w fp, fp, 0x5a                                |     
    0x00001642 lsrs r2, r3, 0xd                                  |     r2 = r3 >> 0xd;
    0x00001644 clz fp, fp                                        |     
    0x00001648 strb.w r0, [sp, 0x58]                             |     var_58h = r0;
    0x0000164c lsr.w fp, fp, 5                                   |     
    0x00001650 mov r0, r4                                        |     r0 = r4;
    0x00001652 str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x00001654 add r4, sp, 0x38                                  |     r4 += var_38h;
    0x00001656 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00001658 strb.w fp, [sp, 0x5a]                             |     var_5ah = fp;
    0x0000165c strb.w r3, [sp, 0x5b]                             |     var_5bh = r3;
    0x00001660 blx 0xe30                                         |     fcn_00000e30 ();
    0x00001662 invalid                                           |     
    0x00001666 movs r2, 0x10                                     |     r2 = 0x10;
    0x00001668 add r0, sp, 0x74                                  |     r0 += var_74h;
    0x0000166a blx 0xe24                                         |     fcn_00000e24 ();
    0x0000166e vldr d16, [pc, 0x2e0]                             |     __asm ("vldr d16, aav.0x000000ff");
    0x00001672 movs r3, 3                                        |     r3 = 3;
    0x00001674 movs r2, 0xc                                      |     r2 = 0xc;
    0x00001676 add r1, sp, 0x48                                  |     r1 += var_48h;
    0x00001678 mov r0, r4                                        |     r0 = r4;
    0x0000167a vstr d16, [sp, 0x48]                              |     __asm ("vstr d16, [sp, 0x48]");
    0x0000167e str r3, [sp, 0x50]                                |     var_50h = r3;
    0x00001680 str.w r8, [sp, 0x64]                              |     __asm ("str.w r8, [var_64h]");
    0x00001684 bl 0x1ae0                                         |     fcn_00001ae0 (r0, r1, r2);
    0x00001688 ldr r1, [pc, 0x2f0]                               |     
    0x0000168a movs r2, 5                                        |     r2 = 5;
    0x0000168c mov r0, r4                                        |     r0 = r4;
    0x0000168e add r1, pc                                        |     r1 = 0x300e;
    0x00001690 bl 0x1ae0                                         |     fcn_00001ae0 (r0, r1, r2);
    0x00001694 movs r1, 0                                        |     r1 = 0;
    0x00001696 mov r0, r4                                        |     r0 = r4;
    0x00001698 bl 0x1b18                                         |     fcn_00001b18 (r0, r1);
    0x0000169c movs r1, 0                                        |     r1 = 0;
    0x0000169e mov r0, r4                                        |     r0 = r4;
    0x000016a0 bl 0x1b18                                         |     fcn_00001b18 (r0, r1);
    0x000016a4 movs r1, 0                                        |     r1 = 0;
    0x000016a6 mov r0, r4                                        |     r0 = r4;
    0x000016a8 bl 0x1b18                                         |     fcn_00001b18 (r0, r1);
    0x000016ac ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x000016ae movs r2, 0x7c                                     |     r2 = 0x7c;
    0x000016b0 mov r0, r4                                        |     r0 = r4;
    0x000016b2 bl 0x1ae0                                         |     fcn_00001ae0 (r0, r1, r2);
                                                                 | label_6:
    0x000016b6 mov r1, r8                                        |     r1 = r8;
    0x000016b8 mov r0, r4                                        |     r0 = r4;
    0x000016ba bl 0x1418                                         |     void (*0x1418)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x000016be ldr r2, [r7, 0x10]                                |     r2 = *((r7 + 0x10));
    0x000016c0 cmp r2, 0                                         |     
    0x000016c2 itt gt                                            |     
                                                                 |     if (r2 <= 0) {
    0x000016c4 movgt r6, 0                                       |         r6 = 0;
                                                                 |     }
                                                                 |     if (r2 <= 0) {
    0x000016c6 movgt sl, r4                                      |         sl = r4;
                                                                 |     }
                                                                 |     if (r2 <= 0) {
    0x000016c8 ble 0x16f2                                        |         goto label_13;
                                                                 |     }
                                                                 |     do {
    0x000016ca ldr r3, [r7, 0xc]                                 |         r3 = *((r7 + 0xc));
    0x000016cc ldr.w r4, [r3, r6, lsl 2]                         |         offset_0 = r6 << 2;
                                                                 |         r4 = *((r3 + offset_0));
    0x000016d0 cmp r8, r4                                        |         
                                                                 |         if (r8 != r4) {
    0x000016d2 beq 0x16ea                                        |             
    0x000016d4 mov r1, r8                                        |             r1 = r8;
    0x000016d6 mov r0, r4                                        |             r0 = r4;
    0x000016d8 bl 0x1c04                                         |             fcn_00001c04 (r0, r1);
    0x000016dc adds r0, 1                                        |             r0++;
                                                                 |             if (r0 != 1) {
    0x000016de beq 0x16e8                                        |                 
    0x000016e0 mov r1, r4                                        |                 r1 = r4;
    0x000016e2 mov r0, sl                                        |                 r0 = sl;
    0x000016e4 bl 0x1418                                         |                 void (*0x1418)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 |             }
    0x000016e8 ldr r2, [r7, 0x10]                                |             r2 = *((r7 + 0x10));
                                                                 |         }
    0x000016ea adds r6, 1                                        |         r6++;
    0x000016ec cmp r2, r6                                        |         
    0x000016ee bgt 0x16ca                                        |         
                                                                 |     } while (r2 > r6);
    0x000016f0 mov r4, sl                                        |     r4 = sl;
                                                                 | label_13:
    0x000016f2 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000016f4 mov r0, r4                                        |     r0 = r4;
    0x000016f6 mov r1, r8                                        |     r1 = r8;
    0x000016f8 adds r3, 0x34                                     |     r3 += 0x34;
    0x000016fa mov r4, r3                                        |     r4 = r3;
    0x000016fc bl 0x1378                                         |     void (*0x1378)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00001700 ldr r6, [sp, 0x1c]                                |     r6 = var_1ch;
    0x00001702 movs r0, 0                                        |     r0 = 0;
    0x00001704 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00001706 movs r2, 1                                        |     r2 = 1;
    0x00001708 str r4, [sp, 0x20]                                |     var_20h = r4;
    0x0000170a str r4, [r6, 4]                                   |     *((r6 + 4)) = r4;
    0x0000170c ldr r4, [r3]                                      |     r4 = *(r3);
    0x0000170e movs r3, 4                                        |     r3 = 4;
    0x00001710 str r3, [r6]                                      |     *(r6) = r3;
    0x00001712 str r0, [r6, 8]                                   |     *((r6 + 8)) = r0;
    0x00001714 mov r1, r4                                        |     r1 = r4;
    0x00001716 str r0, [r6, 0x14]                                |     *((r6 + 0x14)) = r0;
    0x00001718 blx 0xeac                                         |     fcn_00000eac ();
    0x0000171c ldr r2, [pc, 0x260]                               |     
    0x0000171e adds r3, r4, 3                                    |     r3 = r4 + 3;
    0x00001720 str r0, [r6, 0x10]                                |     *((r6 + 0x10)) = r0;
    0x00001722 bic r3, r3, 3                                     |     r3 = BIT_MASK (r3, 3);
    0x00001726 add r2, pc                                        |     r2 = 0x30aa;
    0x00001728 ldr r1, [r2]                                      |     r1 = *(0x30aa);
    0x0000172a ldrd r2, r6, [r7, 0x14]                           |     __asm ("ldrd r2, r6, [r7, 0x14]");
    0x0000172e add.w lr, r1, -1                                  |     lr = r1 + -1;
    0x00001732 rsb.w ip, r1, 0                                   |     
    0x00001736 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00001738 add r3, lr                                        |     r3 += lr;
    0x0000173a cmp r2, 0                                         |     
    0x0000173c add r3, r1                                        |     r3 += r1;
    0x0000173e and.w sl, r3, ip                                  |     sl = r3 & ip;
    0x00001742 it le                                             |     
                                                                 |     if (r2 > 0) {
    0x00001744 movle r3, sl                                      |         r3 = sl;
                                                                 |     }
                                                                 |     if (r2 <= 0) {
    0x00001746 ble 0x180a                                        |         goto label_14;
                                                                 |     }
    0x00001748 ldr r4, [sp, 0x1c]                                |     r4 = var_1ch;
    0x0000174a strd sb, r7, [sp, 0x24]                           |     __asm ("strd sb, r7, [var_24h]");
    0x0000174e strd r8, r5, [sp, 0x30]                           |     __asm ("strd r8, r5, [var_34h]");
    0x00001752 mov r5, sl                                        |     r5 = sl;
    0x00001754 strd ip, lr, [sp, 0x10]                           |     __asm ("strd ip, lr, [var_14h]");
    0x00001758 add.w r3, r4, r2, lsl 5                           |     r3 = r4 + (r2 << 5);
    0x0000175c str.w sl, [sp, 0x2c]                              |     __asm ("str.w sl, [var_2ch]");
    0x00001760 mov sb, r3                                        |     sb = r3;
    0x00001762 b 0x178e                                          |     
                                                                 |     while (r1 != 0) {
    0x00001764 add.w sl, r0, r5                                  |         sl = r0 + r5;
    0x00001768 mov r1, r0                                        |         r1 = r0;
    0x0000176a movs r2, 1                                        |         r2 = 1;
    0x0000176c movs r0, 0                                        |         r0 = 0;
    0x0000176e blx 0xeac                                         |         fcn_00000eac ();
    0x00001772 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00001774 add.w r5, r3, sl                                  |         r5 = r3 + sl;
    0x00001778 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x0000177a ands r5, r3                                       |         r5 &= r3;
                                                                 | label_1:
    0x0000177c str r0, [r4, 0x30]                                |         *((r4 + 0x30)) = r0;
    0x0000177e str.w r8, [r4, 0x28]                              |         __asm ("str.w r8, [r4, 0x28]");
    0x00001782 strd r7, fp, [r4, 0x38]                           |         __asm ("strd r7, fp, [r4, 0x38]");
    0x00001786 adds r4, 0x20                                     |         r4 += 0x20;
    0x00001788 cmp sb, r4                                        |         
    0x0000178a ldr r6, [r6, 0x28]                                |         r6 = *((r6 + 0x28));
                                                                 |         if (sb == r4) {
    0x0000178c beq 0x17fe                                        |             goto label_15;
                                                                 |         }
    0x0000178e ldrd r8, r0, [r6]                                 |         __asm ("ldrd r8, r0, [r6]");
    0x00001792 movs r3, 1                                        |         r3 = 1;
    0x00001794 strd r3, r5, [r4, 0x20]                           |         __asm ("strd r3, r5, [r4, 0x20]");
    0x00001798 sub.w r0, r0, r8                                  |         r0 -= r8;
    0x0000179c str r0, [r4, 0x34]                                |         *((r4 + 0x34)) = r0;
    0x0000179e ldr r7, [r6, 0x14]                                |         r7 = *((r6 + 0x14));
    0x000017a0 ldr r3, [r6, 0x18]                                |         r3 = *((r6 + 0x18));
    0x000017a2 ldr r2, [r6, 0x1c]                                |         r2 = *((r6 + 0x1c));
    0x000017a4 ubfx r1, r7, 1, 1                                 |         r1 = (r7 >> 1) & ((1 << 1) - 1);
    0x000017a8 ldr.w fp, [r6, 0x10]                              |         fp = *((r6 + 0x10));
    0x000017ac orrs r1, r3                                       |         r1 |= r3;
    0x000017ae cmp r2, 0                                         |         
    0x000017b0 ite ne                                            |         
                                                                 |         if (r2 == 0) {
    0x000017b2 movne r1, 0                                       |             r1 = 0;
                                                                 |         }
                                                                 |         if (r2 != 0) {
    0x000017b4 andeq r1, r1, 1                                   |             r1 &= 1;
                                                                 |         }
    0x000017b8 cmp r1, 0                                         |         
    0x000017ba bne 0x1764                                        |         
                                                                 |     }
    0x000017bc movs r2, 1                                        |     r2 = 1;
    0x000017be movs r0, 6                                        |     r0 = 6;
    0x000017c0 blx 0xeac                                         |     fcn_00000eac ();
    0x000017c4 b 0x177c                                          |     goto label_1;
                                                                 | label_11:
    0x000017c6 ldr r1, [pc, 0x1bc]                               |     r1 = *(0x1986);
    0x000017c8 mov r3, r8                                        |     r3 = r8;
    0x000017ca ldr r0, [sp, 0x18]                                |     r0 = stream;
    0x000017cc ldr r2, [pc, 0x1b8]                               |     
    0x000017ce ldr r0, [r0, r1]                                  |     r0 = *((r0 + r1));
    0x000017d0 movs r1, 1                                        |     r1 = 1;
    0x000017d2 add r2, pc                                        |     r2 = 0x315e;
    0x000017d4 ldr r0, [r0]                                      |     r0 = *(r0);
    0x000017d6 blx 0xfb8                                         |     fputc (r0, r1);
    0x000017da mov r0, r8                                        |     r0 = r8;
    0x000017dc bl 0x1bf0                                         |     fcn_00001bf0 (r0);
    0x000017e0 movs r0, 1                                        |     r0 = 1;
                                                                 | label_3:
    0x000017e2 ldr r2, [pc, 0x1a8]                               |     
    0x000017e4 ldr r3, [pc, 0x174]                               |     r3 = *(0x195c);
    0x000017e6 add r2, pc                                        |     r2 = 0x3178;
    0x000017e8 ldr r3, [r2, r3]                                  |     r3 = *(0x3178);
    0x000017ea ldr r2, [r3]                                      |     r2 = *(0x3178);
    0x000017ec ldr r3, [sp, 0xd4]                                |     r3 = var_d4h;
    0x000017ee eors r2, r3                                       |     r2 ^= r3;
    0x000017f0 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x000017f4 bne.w 0x1a60                                      |         goto label_16;
                                                                 |     }
    0x000017f8 add sp, 0xdc                                      |     
    0x000017fa pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_15:
    0x000017fe mov r3, sl                                        |     r3 = sl;
    0x00001800 ldrd sb, r7, [sp, 0x24]                           |     __asm ("ldrd sb, r7, [var_24h]");
    0x00001804 ldrd sl, r8, [sp, 0x2c]                           |     __asm ("ldrd sl, r8, [var_2ch]");
    0x00001808 ldr r5, [sp, 0x34]                                |     r5 = var_34h;
                                                                 | label_14:
    0x0000180a ldr r1, [sp, 0x18]                                |     r1 = stream;
    0x0000180c ldr r2, [pc, 0x174]                               |     r2 = *(0x1984);
    0x0000180e ldr r6, [r1, r2]                                  |     r6 = *((r1 + r2));
    0x00001810 movs r1, 1                                        |     r1 = 1;
    0x00001812 ldr r2, [pc, 0x17c]                               |     
    0x00001814 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00001816 strh r0, [r0]                                     |     *(r0) = r0;
    0x00001818 ldr r0, [r6]                                      |     r0 = *(r6);
    0x0000181a add r2, pc                                        |     r2 = 0x31b0;
    0x0000181c blx 0xfb8                                         |     fputc (r0, r1);
    0x00001820 ldr r2, [r7, 0x10]                                |     r2 = *((r7 + 0x10));
    0x00001822 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x00001824 ble 0x184a                                        |         goto label_17;
                                                                 |     }
    0x00001826 ldr.w fp, [pc, 0x16c]                             |     
    0x0000182a movs r4, 0                                        |     r4 = 0;
    0x0000182c add fp, pc                                        |     fp = 0x31c6;
                                                                 |     do {
    0x0000182e ldr r3, [r7, 0xc]                                 |         r3 = *((r7 + 0xc));
    0x00001830 ldr.w r3, [r3, r4, lsl 2]                         |         offset_1 = r4 << 2;
                                                                 |         r3 = *((r3 + offset_1));
    0x00001834 cmp r3, r8                                        |         
                                                                 |         if (r3 != r8) {
    0x00001836 beq 0x1844                                        |             
    0x00001838 mov r2, fp                                        |             r2 = fp;
    0x0000183a ldr r0, [r6]                                      |             r0 = *(r6);
    0x0000183c movs r1, 1                                        |             r1 = 1;
    0x0000183e blx 0xfb8                                         |             fputc (r0, r1);
    0x00001842 ldr r2, [r7, 0x10]                                |             r2 = *((r7 + 0x10));
                                                                 |         }
    0x00001844 adds r4, 1                                        |         r4++;
    0x00001846 cmp r2, r4                                        |         
    0x00001848 bgt 0x182e                                        |         
                                                                 |     } while (r2 > r4);
                                                                 | label_17:
    0x0000184a ldr r1, [r6]                                      |     r1 = *(r6);
    0x0000184c movs r0, 0xa                                      |     r0 = 0xa;
    0x0000184e blx 0xfc4                                         |     rewinddir ();
    0x00001850 subs.w r2, sl, r4, ror 8                          |     r2 = sl - (r4 >>> 8);
    0x00001854 mov r1, sb                                        |     r1 = sb;
    0x00001856 mov r0, r5                                        |     r0 = r5;
    0x00001858 bl 0x1d64                                         |     fcn_00001d64 (r0, r1, r2);
    0x0000185c ldr r2, [r7, 0x14]                                |     r2 = *((r7 + 0x14));
    0x0000185e mov r4, r0                                        |     r4 = r0;
    0x00001860 ldr r6, [sp, 0x1c]                                |     r6 = var_1ch;
    0x00001862 mov r0, r5                                        |     r0 = r5;
    0x00001864 adds r2, 1                                        |     r2++;
    0x00001866 lsls r2, r2, 5                                    |     r2 <<= 5;
    0x00001868 mov r1, r6                                        |     r1 = r6;
    0x0000186a bl 0x1d64                                         |     r0 = fcn_00001d64 (r0, r1, r2);
    0x0000186e add r4, r0                                        |     r4 += r0;
    0x00001870 mov r0, sb                                        |     r0 = sb;
    0x00001872 blx 0xed4                                         |     read (r0, r1, r2);
    0x00001876 mov r0, r6                                        |     r0 = r6;
    0x00001878 blx 0xed4                                         |     read (r0, r1, r2);
    0x0000187c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0000187e subs.w fp, r3, r4                                 |     
                                                                 |     if (fp == r3) {
    0x00001882 beq.w 0x1a48                                      |         goto label_18;
                                                                 |     }
    0x00001886 ldr.w sb, [pc, 0x110]                             |     sb = *(0x00001998);
    0x0000188a movs r6, 0                                        |     r6 = 0;
    0x0000188c add sb, pc                                        |     sb += pc;
    0x0000188e add.w sb, sb, 8                                   |     sb += 8;
    0x00001892 b 0x189c                                          |     
                                                                 |     while (r1 != r0) {
    0x00001894 add r6, r0                                        |         r6 += r0;
    0x00001896 cmp fp, r6                                        |         
                                                                 |         if (fp < r6) {
    0x00001898 bls.w 0x1a48                                      |             goto label_18;
                                                                 |         }
    0x0000189c sub.w r2, fp, r6                                  |         r2 = fp - r6;
    0x000018a0 mov r1, sb                                        |         r1 = sb;
    0x000018a2 cmp.w r2, 0x400                                   |         
    0x000018a6 mov r0, r5                                        |         r0 = r5;
    0x000018a8 it hs                                             |         
                                                                 |         if (r2 < 0x400) {
    0x000018aa movhs r2, 0x400                                   |             r2 = 0x400;
                                                                 |         }
    0x000018ae bl 0x1d64                                         |         r0 = fcn_00001d64 (r0, r1, r2);
    0x000018b2 adds r1, r0, 1                                    |         r1 = r0 + 1;
    0x000018b4 bne 0x1894                                        |         
                                                                 |     }
                                                                 | label_5:
    0x000018b6 ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x000018b8 add.w sb, r4, r0                                  |     sb = r4 + r0;
    0x000018bc mov r0, r5                                        |     r0 = r5;
    0x000018be ldr r2, [r1], 8                                   |     r2 = *(r1);
                                                                 |     r1 += 8;
    0x000018c2 bl 0x1d64                                         |     r0 = fcn_00001d64 (r0, r1, r2);
    0x000018c6 add sb, r0                                        |     sb += r0;
    0x000018c8 subs.w sb, sl, sb                                 |     sb = sl - sb;
                                                                 |     if (sb == sl) {
    0x000018cc beq 0x18f8                                        |         goto label_19;
                                                                 |     }
    0x000018ce ldr r6, [pc, 0xcc]                                |     
    0x000018d0 movs r4, 0                                        |     r4 = 0;
    0x000018d2 add r6, pc                                        |     r6 = 0x3274;
    0x000018d4 adds r6, 8                                        |     r6 += 8;
    0x000018d6 b 0x18de                                          |     
                                                                 |     while (r2 != r0) {
    0x000018d8 add r4, r0                                        |         r4 += r0;
    0x000018da cmp sb, r4                                        |         
                                                                 |         if (sb < r4) {
    0x000018dc bls 0x18f8                                        |             goto label_19;
                                                                 |         }
    0x000018de sub.w r2, sb, r4                                  |         r2 = sb - r4;
    0x000018e2 mov r1, r6                                        |         r1 = r6;
    0x000018e4 cmp.w r2, 0x400                                   |         
    0x000018e8 mov r0, r5                                        |         r0 = r5;
    0x000018ea it hs                                             |         
                                                                 |         if (r2 < 0x400) {
    0x000018ec movhs r2, 0x400                                   |             r2 = 0x400;
                                                                 |         }
    0x000018f0 bl 0x1d64                                         |         r0 = fcn_00001d64 (r0, r1, r2);
    0x000018f4 adds r2, r0, 1                                    |         r2 = r0 + 1;
    0x000018f6 bne 0x18d8                                        |         
                                                                 |     }
                                                                 | label_19:
    0x000018f8 ldr.w fp, [r7, 0x18]                              |     fp = *((r7 + 0x18));
    0x000018fc mov r4, sl                                        |     r4 = sl;
    0x000018fe cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00001902 beq 0x1a02                                        |         goto label_20;
                                                                 |     }
    0x00001904 ldr.w sb, [pc, 0x98]                              |     sb = *(0x000019a0);
    0x00001908 ldr r3, [pc, 0x98]                                |     
    0x0000190a str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [var_1ch]");
    0x0000190e mov r8, fp                                        |     r8 = fp;
    0x00001910 add sb, pc                                        |     sb += pc;
    0x00001912 add.w sb, sb, 8                                   |     sb += 8;
    0x00001916 add r3, pc                                        |     r3 = 0x32be;
    0x00001918 strd r7, r3, [sp, 0x14]                           |     __asm ("strd r7, r3, [stream]");
                                                                 | label_2:
    0x0000191c ldrd r3, r0, [r8, 0x14]                           |     __asm ("ldrd r3, r0, [r8, 0x14]");
    0x00001920 ldr.w r2, [r8, 0x1c]                              |     r2 = *((r8 + 0x1c));
    0x00001924 ubfx r3, r3, 1, 1                                 |     r3 = (r3 >> 1) & ((1 << 1) - 1);
    0x00001928 orrs r3, r0                                       |     r3 |= r0;
    0x0000192a cmp r2, 0                                         |     
    0x0000192c ite ne                                            |     
                                                                 |     if (r2 == 0) {
    0x0000192e movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 != 0) {
    0x00001930 andeq r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x00001934 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00001936 beq 0x19f2                                        |         goto label_21;
                                                                 |     }
    0x00001938 subs.w fp, sl, r4                                 |     
    0x0000193c ldrd r7, r1, [r8]                                 |     __asm ("ldrd r7, r1, [r8]");
                                                                 |     if (fp == sl) {
    0x00001940 beq.w 0x1a4c                                      |         goto label_22;
                                                                 |     }
    0x00001944 str r4, [sp, 0x10]                                |     var_10h = r4;
    0x00001946 movs r6, 0                                        |     r6 = 0;
    0x00001948 mov r4, fp                                        |     r4 = fp;
    0x0000194a mov fp, r1                                        |     
    0x0000194c b 0x19ae                                          |     
                                                                 |     while (r3 != r0) {
    0x000019a8 add r6, r0                                        |         r6 += r0;
    0x000019aa cmp r4, r6                                        |         
                                                                 |         if (r4 < r6) {
    0x000019ac bls 0x1a3a                                        |             goto label_23;
                                                                 |         }
    0x000019ae subs r2, r4, r6                                   |         r2 = r4 - r6;
    0x000019b0 mov r1, sb                                        |         r1 = sb;
    0x000019b2 cmp.w r2, 0x400                                   |         
    0x000019b6 mov r0, r5                                        |         r0 = r5;
    0x000019b8 it hs                                             |         
                                                                 |         if (r2 < 0x400) {
    0x000019ba movhs r2, 0x400                                   |             r2 = 0x400;
                                                                 |         }
    0x000019be bl 0x1d64                                         |         r0 = fcn_00001d64 (r0, r1, r2);
    0x000019c2 adds r3, r0, 1                                    |         r3 = r0 + 1;
    0x000019c4 bne 0x19a8                                        |         
                                                                 |     }
    0x000019c6 ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x000019c8 mov r1, fp                                        |     r1 = fp;
    0x000019ca ldr.w r2, [r8]                                    |     r2 = *(r8);
                                                                 | label_4:
    0x000019ce ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000019d0 subs r6, r1, r7                                   |     r6 = r1 - r7;
    0x000019d2 add r0, r4                                        |     r0 += r4;
    0x000019d4 adds r4, r0, r6                                   |     r4 = r0 + r6;
    0x000019d6 ldr r0, [r3, 8]                                   |     r0 = *((r3 + 8));
    0x000019d8 movs r3, 0                                        |     r3 = 0;
    0x000019da strd r6, r5, [sp]                                 |     __asm ("strd r6, r5, [sp]");
    0x000019de bl 0x1da0                                         |     fcn_00001da0 (r0, r1, r2);
    0x000019e2 ldr r3, [sp, 0x18]                                |     r3 = stream;
    0x000019e4 ldr r2, [r3]                                      |     r2 = *(r3);
    0x000019e6 subs r3, r2, 1                                    |     r3 = r2 - 1;
    0x000019e8 rsbs r2, r2, 0                                    |     r2 -= ;
    0x000019ea add r3, sl                                        |     r3 += sl;
    0x000019ec add r3, r6                                        |     r3 += r6;
    0x000019ee and.w sl, r2, r3                                  |     sl = r2 & r3;
                                                                 | label_21:
    0x000019f2 ldr.w r8, [r8, 0x28]                              |     r8 = *((r8 + 0x28));
    0x000019f6 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x000019fa bne 0x191c                                        |         goto label_2;
                                                                 |     }
    0x000019fc ldr r7, [sp, 0x14]                                |     r7 = var_14h;
    0x000019fe ldr.w r8, [sp, 0x1c]                              |     r8 = var_1ch;
                                                                 | label_20:
    0x00001a02 ldr r2, [r7, 0x10]                                |     r2 = *((r7 + 0x10));
    0x00001a04 cmp r2, 0                                         |     
    0x00001a06 it gt                                             |     
                                                                 |     if (r2 <= 0) {
    0x00001a08 movgt r4, 0                                       |         r4 = 0;
                                                                 |     }
                                                                 |     if (r2 <= 0) {
    0x00001a0a ble 0x1a24                                        |         goto label_24;
                                                                 |     }
                                                                 |     do {
    0x00001a0c ldr r3, [r7, 0xc]                                 |         r3 = *((r7 + 0xc));
    0x00001a0e ldr.w r0, [r3, r4, lsl 2]                         |         offset_2 = r4 << 2;
                                                                 |         r0 = *((r3 + offset_2));
    0x00001a12 cmp r8, r0                                        |         
                                                                 |         if (r8 != r0) {
    0x00001a14 beq 0x1a1e                                        |             
    0x00001a16 mov r1, r8                                        |             r1 = r8;
    0x00001a18 bl 0x1bf8                                         |             fcn_00001bf8 ();
    0x00001a1c ldr r2, [r7, 0x10]                                |             r2 = *((r7 + 0x10));
                                                                 |         }
    0x00001a1e adds r4, 1                                        |         r4++;
    0x00001a20 cmp r2, r4                                        |         
    0x00001a22 bgt 0x1a0c                                        |         
                                                                 |     } while (r2 > r4);
                                                                 | label_24:
    0x00001a24 mov r0, r8                                        |     r0 = r8;
    0x00001a26 bl 0x1bf0                                         |     fcn_00001bf0 (r0);
    0x00001a2a mov r0, r7                                        |     r0 = r7;
    0x00001a2c bl 0x1f5c                                         |     fcn_00001f5c (r0);
    0x00001a30 ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x00001a32 blx 0xed4                                         |     read (r0, r1, r2);
    0x00001a36 movs r0, 0                                        |     r0 = 0;
    0x00001a38 b 0x17e2                                          |     goto label_3;
                                                                 | label_23:
    0x00001a3a mov r1, fp                                        |     r1 = fp;
    0x00001a3c mov fp, r4                                        |     
    0x00001a3e ldr.w r2, [r8]                                    |     r2 = *(r8);
    0x00001a42 mov r0, fp                                        |     r0 = fp;
    0x00001a44 ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x00001a46 b 0x19ce                                          |     goto label_4;
                                                                 | label_18:
    0x00001a48 mov r0, fp                                        |     r0 = fp;
    0x00001a4a b 0x18b6                                          |     goto label_5;
                                                                 | label_22:
    0x00001a4c mov r2, r7                                        |     r2 = r7;
    0x00001a4e mov r0, fp                                        |     r0 = fp;
    0x00001a50 b 0x19ce                                          |     goto label_4;
                                                                 | label_12:
    0x00001a52 blx 0xea0                                         |     fcn_00000ea0 ();
    0x00001a56 ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x00001a58 add r4, sp, 0x38                                  |     r4 += var_38h;
    0x00001a5a blx 0xed4                                         |     read (r0, r1, r2);
    0x00001a5e b 0x16b6                                          |     goto label_6;
                                                                 | label_16:
    0x00001a60 blx 0xfac                                         |     fprintf_chk ()
    0x00001a64 push {r4, lr}                                     |     
                                                                 |     if (r0 != 0) {
    0x00001a66 cbz r0, 0x1a78                                    |         
    0x00001a68 mov r4, r0                                        |         r4 = r0;
    0x00001a6a adds r0, 0xc                                      |         r0 += 0xc;
    0x00001a6c blx 0xfa0                                         |         stack_chk_fail ();
    0x00001a70 movs r2, 0                                        |         r2 = 0;
    0x00001a72 strd r2, r4, [r0]                                 |         __asm ("strd r2, r4, [r0]");
    0x00001a76 pop {r4, pc}                                      |         
                                                                 |     }
    0x00001a78 movs r0, 0x40                                     |     r0 = 0x40;
    0x00001a7a movs r4, 0x34                                     |     r4 = 0x34;
    0x00001a7c blx 0xfa0                                         |     stack_chk_fail ();
    0x00001a80 movs r2, 0                                        |     r2 = 0;
    0x00001a82 strd r2, r4, [r0]                                 |     __asm ("strd r2, r4, [r0]");
    0x00001a86 pop {r4, 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/dcore @ 0x1b48 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.00001b48 ()                  | void fcn_00001b48 (int16_t arg1, int16_t arg3) {
                                             |     int16_t var_0h;
                                             |     int16_t var_4h;
                                             |     r0 = arg1;
                                             |     r2 = arg3;
    0x00001b48 invalid                       |     
    0x00001b4c ldr r6, [pc, 0x94]            |     
    0x00001b4e mov r4, r0                    |     r4 = r0;
    0x00001b50 sub sp, 8                     |     
    0x00001b52 mov r5, r2                    |     r5 = r2;
    0x00001b54 ldr r0, [pc, 0x90]            |     r0 = *(0x1be8);
    0x00001b56 mov r3, r2                    |     r3 = r2;
    0x00001b58 add r6, pc                    |     r6 = 0x3740;
    0x00001b5a movs r2, 0                    |     r2 = 0;
    0x00001b5c ldr r0, [r6, r0]              |     
    0x00001b5e ldr r0, [r0]                  |     r0 = *(0x3740);
    0x00001b60 str r0, [sp, 4]               |     var_4h = r0;
    0x00001b62 mov.w r0, 0                   |     r0 = 0;
    0x00001b66 movs r0, 0x11                 |     r0 = 0x11;
    0x00001b68 blx 0xe3c                     |     r0 = fcn_00000e3c ();
                                             |     if (r0 != 0) {
    0x00001b6c cbnz r0, 0x1bb6               |         goto label_4;
                                             |     }
                                             | label_1:
    0x00001b6e mov r6, sp                    |     r6 = sp;
    0x00001b70 b 0x1b86                      |     
                                             |     while (r0 >= 0) {
                                             | label_0:
    0x00001b72 ldr r3, [sp]                  |         r3 = *(sp);
    0x00001b74 uxtb r1, r3                   |         r1 = (int8_t) r3;
    0x00001b76 cmp r1, 0x7f                  |         
                                             |         if (r1 != 0x7f) {
    0x00001b78 bne 0x1b9e                    |             goto label_3;
                                             |         }
    0x00001b7a ubfx r3, r3, 8, 8             |         r3 = (r3 >> 8) & ((1 << 8) - 1);
    0x00001b7e cmp r3, 0x13                  |         
                                             |         if (r3 == 0x13) {
    0x00001b80 beq 0x1bc0                    |             goto label_5;
                                             |         }
    0x00001b82 cmp r5, 0x13                  |         
                                             |         if (r5 != 0x13) {
    0x00001b84 bne 0x1bce                    |             goto label_6;
                                             |         }
                                             | label_2:
    0x00001b86 movs r2, 0                    |         r2 = 0;
    0x00001b88 mov r1, r6                    |         r1 = r6;
    0x00001b8a mov r0, r4                    |         r0 = r4;
    0x00001b8c blx 0xf34                     |         r0 = raise (r0);
    0x00001b90 cmp r0, 0                     |         
    0x00001b92 bge 0x1b72                    |         
                                             |     }
    0x00001b94 blx 0x1078                    |     r0 = cxa_finalize ();
    0x00001b98 ldr r3, [r0]                  |     r3 = *(r0);
    0x00001b9a cmp r3, 0x16                  |     
                                             |     if (r3 == 0x16) {
    0x00001b9c beq 0x1b72                    |         goto label_0;
                                             |     }
                                             |     do {
                                             | label_3:
    0x00001b9e ldr r2, [pc, 0x4c]            |         
    0x00001ba0 ldr r3, [pc, 0x44]            |         r3 = *(0x1be8);
    0x00001ba2 add r2, pc                    |         r2 = 0x3794;
    0x00001ba4 ldr r3, [r2, r3]              |         r3 = *(0x3794);
    0x00001ba6 ldr r2, [r3]                  |         r2 = *(0x3794);
    0x00001ba8 ldr r3, [sp, 4]               |         r3 = var_4h;
    0x00001baa eors r2, r3                   |         r2 ^= r3;
    0x00001bac mov.w r3, 0                   |         r3 = 0;
                                             |         if (r2 != r3) {
    0x00001bb0 bne 0x1be0                    |             goto label_7;
                                             |         }
    0x00001bb2 add sp, 8                     |         
    0x00001bb4 pop {r4, r5, r6, pc}          |         
                                             | label_4:
    0x00001bb6 movs r1, 0x13                 |         r1 = 0x13;
    0x00001bb8 mov r0, r4                    |         r0 = r4;
    0x00001bba blx 0x1024                    |         elf_begin ();
    0x00001bbe b 0x1b6e                      |         goto label_1;
                                             | label_5:
    0x00001bc0 mov r3, r5                    |         r3 = r5;
    0x00001bc2 movs r2, 0                    |         r2 = 0;
    0x00001bc4 mov r1, r4                    |         r1 = r4;
    0x00001bc6 movs r0, 0x11                 |         r0 = 0x11;
    0x00001bc8 blx 0xe3c                     |         fcn_00000e3c ();
    0x00001bcc b 0x1b9e                      |         
                                             |     } while (1);
                                             | label_6:
    0x00001bce movs r3, 0                    |     r3 = 0;
    0x00001bd0 mov r1, r4                    |     r1 = r4;
    0x00001bd2 mov r2, r3                    |     r2 = r3;
    0x00001bd4 movs r0, 7                    |     r0 = 7;
    0x00001bd6 blx 0xe3c                     |     r0 = fcn_00000e3c ();
    0x00001bda cmp r0, 0                     |     
                                             |     if (r0 >= 0) {
    0x00001bdc bge 0x1b86                    |         goto label_2;
                                             |     }
    0x00001bde b 0x1b9e                      |     goto label_3;
                                             | label_7:
    0x00001be0 blx 0xfac                     |     fprintf_chk ()
    0x00001be4 adds r3, 0x74                 |     r3 += 0x74;
    0x00001be6 movs r0, r0                   |     
    0x00001be8 lsls r4, r3, 4                |     r4 = r3 << 4;
    0x00001bea movs r0, r0                   |     
    0x00001bec adds r3, 0x2a                 |     r3 += 0x2a;
    0x00001bee 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/dcore @ 0x1fb8 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00001fb8 ()                                      | void fcn_00001fb8 (int16_t arg_38h, int16_t arg1, int16_t arg2) {
                                                                 |     int16_t fildes;
                                                                 |     int16_t var_4h;
                                                                 |     void * s1;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_16h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_ach;
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_4h_3;
                                                                 |     int16_t var_8h_2;
                                                                 |     int16_t var_10h_2;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h_2;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h_2;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h_2;
                                                                 |     void * ptr;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h_2;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h_2;
                                                                 |     int16_t var_98h;
                                                                 |     int16_t var_dch;
                                                                 |     int16_t var_ech;
                                                                 |     int16_t var_f0h;
                                                                 |     int16_t var_f2h;
                                                                 |     int16_t var_f4h;
                                                                 |     int16_t var_f8h;
                                                                 |     int16_t var_1ech;
                                                                 |     int16_t var_3ech;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 | label_15:
    0x00000e9c invalid                                           |     void (*0xea0)() ();
    0x00001fb8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00001fbc mov r2, r1                                        |     r2 = r1;
    0x00001fbe sub.w sp, sp, 0x3f4                               |     
    0x00001fc2 mov sl, r0                                        |     sl = r0;
    0x00001fc4 add r5, sp, 0x4c                                  |     r5 += var_4ch;
    0x00001fc6 movs r3, 0                                        |     r3 = 0;
    0x00001fc8 ldr.w r0, [pc, 0x410]                             |     r0 = "@&@5@";
    0x00001fcc movs r1, 0x1c                                     |     r1 = 0x1c;
    0x00001fce str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x00001fd0 ldr.w r2, [pc, 0x40c]                             |     
    0x00001fd4 add r0, pc                                        |     r0 += pc;
    0x00001fd6 ldr r2, [r0, r2]                                  |     r2 = *((r0 + r2));
    0x00001fd8 movs r0, 1                                        |     r0 = 1;
    0x00001fda ldr r2, [r2]                                      |     r2 = *(0x23e0);
    0x00001fdc str r2, [sp, 0x3ec]                               |     var_3ech = r2;
    0x00001fde mov.w r2, 0                                       |     r2 = 0;
    0x00001fe2 str r3, [r5]                                      |     *(r5) = r3;
    0x00001fe4 blx 0xe78                                         |     r0 = fcn_00000e78 ();
    0x00001fe8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00001fea beq.w 0x233e                                      |         goto label_20;
                                                                 |     }
    0x00001fee ldr r4, [pc, 0x3f4]                               |     
    0x00001ff0 mov r3, sl                                        |     r3 = sl;
    0x00001ff2 ldr r2, [pc, 0x3f4]                               |     
    0x00001ff4 mov r6, r0                                        |     r6 = r0;
    0x00001ff6 movs r1, 1                                        |     r1 = 1;
    0x00001ff8 str.w sl, [r0]                                    |     __asm ("str.w sl, [r0]");
    0x00001ffc add r4, pc                                        |     r4 = 0x43e6;
    0x00001ffe mov r0, r5                                        |     r0 = r5;
    0x00002000 add r2, pc                                        |     r2 = 0x43ee;
    0x00002002 blx 0xef8                                         |     elf_errmsg ();
    0x00002006 mov r1, r4                                        |     r1 = r4;
    0x00002008 ldr r0, [r5]                                      |     r0 = *(r5);
    0x0000200a blx 0xe84                                         |     fcn_00000e84 ();
    0x0000200e str r0, [r6, 4]                                   |     *((r6 + 4)) = r0;
    0x00002010 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00002012 blx 0xed4                                         |     read (r0, r1, r2);
    0x00002016 ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x00002018 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000201a beq.w 0x22fa                                      |         goto label_21;
                                                                 |     }
                                                                 | label_7:
    0x0000201e ldr r2, [pc, 0x3cc]                               |     
    0x00002020 mov r3, sl                                        |     r3 = sl;
    0x00002022 movs r1, 1                                        |     r1 = 1;
    0x00002024 mov r0, r5                                        |     r0 = r5;
    0x00002026 add r2, pc                                        |     r2 = 0x4418;
    0x00002028 blx 0xef8                                         |     elf_errmsg ();
    0x0000202c ldr r0, [r5]                                      |     r0 = *(r5);
    0x0000202e movs r1, 0                                        |     r1 = 0;
    0x00002030 blx 0xd90                                         |     r0 = open (r0, r1, r2);
    0x00002034 subs r3, r0, 0                                    |     r3 = r0 - 0;
    0x00002036 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00002038 str r3, [sp, 0x2c]                                |     ptr = r3;
                                                                 |     if (r3 < r0) {
    0x0000203a blt.w 0x2320                                      |         goto label_22;
                                                                 |     }
    0x0000203e movs r4, 0                                        |     r4 = 0;
    0x00002040 blx 0xed4                                         |     read (r0, r1, r2);
    0x00002044 movs r1, 1                                        |     r1 = 1;
    0x00002046 ldr r0, [sp, 0x2c]                                |     r0 = ptr;
    0x00002048 mov r2, r4                                        |     r2 = r4;
    0x0000204a str r4, [r5]                                      |     *(r5) = r4;
    0x0000204c blx 0x1030                                        |     realloc (r0, r1);
    0x00002050 add r3, sp, 0x98                                  |     r3 += var_98h;
    0x00002052 mov r7, r0                                        |     r7 = r0;
    0x00002054 mov r1, r3                                        |     r1 = r3;
    0x00002056 mov r8, r3                                        |     r8 = r3;
    0x00002058 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0000205a blx 0xff4                                         |     r0 = elf_nextscn ();
    0x0000205e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00002060 beq.w 0x23ae                                      |         goto label_23;
                                                                 |     }
    0x00002064 ldrh.w r3, [r8, 0x38]                             |     r3 = *((r8 + 0x38));
    0x00002068 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000206a beq.w 0x23a4                                      |         goto label_24;
                                                                 |     }
    0x0000206e ldr.w r8, [pc, 0x380]                             |     
    0x00002072 add.w sb, sp, 0x60                                |     sb += var_60h_2;
    0x00002076 ldr.w fp, [sp, 0x38]                              |     fp = var_38h;
    0x0000207a strd r4, r4, [sp, 0x30]                           |     __asm ("strd r4, r4, [sp, 0x30]");
    0x0000207e add r8, pc                                        |     r8 = 0x4474;
    0x00002080 str r4, [sp, 0x28]                                |     var_28h_2 = r4;
    0x00002082 str r4, [sp, 0x18]                                |     var_18h_2 = r4;
                                                                 |     do {
    0x00002084 mov r2, sb                                        |         r2 = sb;
    0x00002086 mov r1, r4                                        |         r1 = r4;
    0x00002088 mov r0, r7                                        |         r0 = r7;
    0x0000208a blx 0x100c                                        |         r0 = fread (r0, r1, r2, r3);
    0x0000208e cmp sb, r0                                        |         
                                                                 |         if (sb != r0) {
    0x00002090 beq 0x20a4                                        |             
    0x00002092 mov.w r0, -1                                      |             r0 = -1;
    0x00002096 blx 0xf04                                         |             getopt (r0, r1, r2);
    0x0000209a mov r1, r8                                        |             r1 = r8;
    0x0000209c mov r2, r0                                        |             r2 = r0;
    0x0000209e movs r0, 1                                        |             r0 = 1;
    0x000020a0 blx 0xe54                                         |             fcn_00000e54 ();
                                                                 |         }
    0x000020a4 ldr.w r2, [sb]                                    |         r2 = *(sb);
    0x000020a8 cmp r2, 2                                         |         
                                                                 |         if (r2 == 2) {
    0x000020aa bne 0x20c2                                        |             
    0x000020ac ldr.w r3, [sb, 0x10]                              |             r3 = *((sb + 0x10));
    0x000020b0 str r3, [sp, 0x28]                                |             var_28h_2 = r3;
    0x000020b2 ldr.w r3, [sb, 0x28]                              |             r3 = *((sb + 0x28));
    0x000020b6 str r3, [sp, 0x30]                                |             var_30h = r3;
    0x000020b8 ldr.w r3, [sb, 0x30]                              |             r3 = *((sb + 0x30));
    0x000020bc str r3, [sp, 0x34]                                |             var_34h = r3;
    0x000020be movs r3, 1                                        |             r3 = 1;
    0x000020c0 str r3, [sp, 0x18]                                |             var_18h_2 = r3;
                                                                 |         }
    0x000020c2 ldrh.w r2, [fp, 0x38]                             |         r2 = *(arg_38h);
    0x000020c6 adds r4, 1                                        |         r4++;
    0x000020c8 cmp r2, r4                                        |         
    0x000020ca bgt 0x2084                                        |         
                                                                 |     } while (r2 > r4);
                                                                 | label_10:
    0x000020cc movw r3, 0x765b                                   |     
    0x000020d0 mov.w fp, 0                                       |     
    0x000020d4 movt r3, 0x7364                                   |     r3 = 0x7364765b;
    0x000020d8 mov r4, fp                                        |     r4 = fp;
    0x000020da str r3, [sp, 0x24]                                |     var_24h = r3;
    0x000020dc movw r3, 0x6c2f                                   |     
    0x000020e0 movt r3, 0x6269                                   |     r3 = 0x62696c2f;
    0x000020e4 add.w r8, sp, 0x1ec                               |     r8 += var_1ech;
    0x000020e8 str r3, [sp, 0x20]                                |     var_20h_2 = r3;
    0x000020ea ldr r3, [pc, 0x308]                               |     
    0x000020ec str.w fp, [sp, 0x10]                              |     __asm ("str.w fp, [var_10h_2]");
    0x000020f0 strd r7, sl, [sp, 0x3c]                           |     __asm ("strd r7, sl, [sp, 0x3c]");
    0x000020f4 add r3, pc                                        |     r3 = 0x44ee;
    0x000020f6 str r5, [sp, 0x44]                                |     var_44h = r5;
    0x000020f8 str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 |     do {
                                                                 | label_2:
    0x000020fa ldr r2, [r6, 4]                                   |         r2 = *((r6 + 4));
    0x000020fc mov.w r1, 0x200                                   |         r1 = 0x200;
    0x00002100 mov r0, r8                                        |         r0 = r8;
    0x00002102 blx 0xe48                                         |         r0 = fcn_00000e48 ();
    0x00002106 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00002108 beq.w 0x2238                                      |             goto label_25;
                                                                 |         }
                                                                 | label_0:
    0x0000210c add r3, sp, 0x58                                  |         r3 += var_58h;
    0x0000210e add.w sb, sp, 0x54                                |         sb += var_54h;
    0x00002112 add.w sl, sp, 0x50                                |         sl += var_50h_2;
    0x00002116 add r7, sp, 0xec                                  |         r7 += var_ech;
    0x00002118 add r5, sp, 0xdc                                  |         r5 += var_dch;
    0x0000211a str r3, [sp, 4]                                   |         var_4h_3 = r3;
    0x0000211c ldr r1, [sp, 0x14]                                |         r1 = var_14h;
    0x0000211e mov r3, sb                                        |         r3 = sb;
    0x00002120 mov r2, sl                                        |         r2 = sl;
    0x00002122 mov r0, r8                                        |         r0 = r8;
    0x00002124 str r7, [sp, 8]                                   |         var_8h_2 = r7;
    0x00002126 str r5, [sp]                                      |         *(sp) = r5;
    0x00002128 blx 0xe18                                         |         r0 = fcn_00000e18 ();
    0x0000212c cmp r0, 3                                         |         
                                                                 |         if (r0 > 3) {
    0x0000212e bgt 0x2190                                        |             goto label_26;
                                                                 |         }
    0x00002130 ldr r1, [pc, 0x2c4]                               |         
    0x00002132 add r5, sp, 0x5c                                  |         r5 += var_5ch;
    0x00002134 mov r2, r5                                        |         r2 = r5;
    0x00002136 mov r0, r8                                        |         r0 = r8;
    0x00002138 add r1, pc                                        |         r1 = 0x4534;
    0x0000213a blx 0xe18                                         |         r0 = fcn_00000e18 ();
    0x0000213e cmp r0, 1                                         |         
                                                                 |         if (r0 == 1) {
    0x00002140 beq.w 0x22a8                                      |             goto label_27;
                                                                 |         }
    0x00002144 ldr r1, [pc, 0x2b4]                               |         
    0x00002146 mov r2, r5                                        |         r2 = r5;
    0x00002148 mov r0, r8                                        |         r0 = r8;
    0x0000214a add r1, pc                                        |         r1 = 0x454a;
    0x0000214c blx 0xe18                                         |         r0 = fcn_00000e18 ();
    0x00002150 cmp r0, 1                                         |         
                                                                 |         if (r0 == 1) {
    0x00002152 beq.w 0x22a8                                      |             goto label_27;
                                                                 |         }
    0x00002156 ldr r1, [pc, 0x2a8]                               |         
    0x00002158 mov r2, r5                                        |         r2 = r5;
    0x0000215a mov r0, r8                                        |         r0 = r8;
    0x0000215c add r1, pc                                        |         r1 = 0x4562;
    0x0000215e blx 0xe18                                         |         r0 = fcn_00000e18 ();
    0x00002162 cmp r0, 1                                         |         
    0x00002164 bne 0x20fa                                        |         
                                                                 |     } while (r0 != 1);
    0x00002166 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00002168 subs r2, r4, 0                                    |     r2 = r4 - 0;
    0x0000216a it ne                                             |     
                                                                 |     if (r2 == r4) {
    0x0000216c movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x0000216e adds.w fp, fp, r3                                 |     
    0x00002172 and r3, r2, 1                                     |     r3 = r2 & 1;
    0x00002176 it ne                                             |     
                                                                 |     if (fp == fp) {
    0x00002178 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0000217a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000217c beq.w 0x2370                                      |         goto label_28;
                                                                 |     }
    0x00002180 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x00002182 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00002184 bne 0x2222                                        |         
    0x00002186 ldr r3, [r4, 0x14]                                |         r3 = *((r4 + 0x14));
    0x00002188 lsls r2, r3, 0x1e                                 |         r2 = r3 << 0x1e;
    0x0000218a it mi                                             |         
                                                                 |         if (r2 >= r3) {
    0x0000218c strmi r0, [r4, 0x1c]                              |             *((r4 + 0x1c)) = r0;
                                                                 |         }
    0x0000218e b 0x2222                                          |         goto label_29;
                                                                 | label_26:
    0x00002190 movs r0, 0x2c                                     |         r0 = 0x2c;
    0x00002192 blx 0xfa0                                         |         stack_chk_fail ();
    0x00002196 movs r3, 0                                        |         r3 = 0;
    0x00002198 vmov.i32 d16, 0                                   |         __asm ("vmov.i32 d16, 0");
    0x0000219c strd r3, r3, [r0, 0x14]                           |         __asm ("strd r3, r3, [r0, 0x14]");
    0x000021a0 add.w r2, r0, 0x24                                |         r2 = r0 + 0x24;
    0x000021a4 str r3, [r0, 0x1c]                                |         *((r0 + 0x1c)) = r3;
    0x000021a6 mov r4, r0                                        |         r4 = r0;
    0x000021a8 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x000021aa vst1.32 {d16}, [r2]                               |         __asm ("vst1.32 {d16}, [r2]");
    0x000021ae str r3, [r0, 0x10]                                |         *((r0 + 0x10)) = r3;
    0x000021b0 mov r0, r7                                        |         r0 = r7;
    0x000021b2 blx 0xf88                                         |         lseek64 ();
    0x000021b6 ldrb r1, [r5]                                     |         r1 = *(r5);
    0x000021b8 str r0, [r4, 0x20]                                |         *((r4 + 0x20)) = r0;
    0x000021ba ldr r0, [sp, 0x24]                                |         r0 = var_24h;
    0x000021bc cmp r1, 0x72                                      |         
    0x000021be ldr.w r3, [sl]                                    |         r3 = *(sl);
    0x000021c2 it eq                                             |         
                                                                 |         if (r1 != 0x72) {
    0x000021c4 moveq r1, 4                                       |             r1 = 4;
                                                                 |         }
    0x000021c6 ldr.w r2, [sb]                                    |         r2 = *(sb);
    0x000021ca it eq                                             |         
                                                                 |         if (r1 != 0x72) {
    0x000021cc streq r1, [r4, 0x14]                              |             *((r4 + 0x14)) = r1;
                                                                 |         }
    0x000021ce ldrb r1, [r5, 1]                                  |         r1 = *((r5 + 1));
    0x000021d0 strd r3, r2, [r4]                                 |         __asm ("strd r3, r2, [r4]");
    0x000021d4 cmp r1, 0x77                                      |         
    0x000021d6 ittt eq                                           |         
                                                                 |         if (r1 != 0x77) {
    0x000021d8 ldreq r1, [r4, 0x14]                              |             r1 = *((r4 + 0x14));
                                                                 |         }
                                                                 |         if (r1 != 0x77) {
    0x000021da orreq r1, r1, 2                                   |             r1 |= 2;
                                                                 |         }
                                                                 |         if (r1 == 0x77) {
    0x000021de str r1, [r4, 0x14]                                |             *((r4 + 0x14)) = r1;
                                                                 |         }
    0x000021e0 ldrb r1, [r5, 2]                                  |         r1 = *((r5 + 2));
    0x000021e2 cmp r1, 0x78                                      |         
    0x000021e4 ittt eq                                           |         
                                                                 |         if (r1 != 0x78) {
    0x000021e6 ldreq r1, [r4, 0x14]                              |             r1 = *((r4 + 0x14));
                                                                 |         }
                                                                 |         if (r1 != 0x78) {
    0x000021e8 orreq r1, r1, 1                                   |             r1 |= 1;
                                                                 |         }
                                                                 |         if (r1 == 0x78) {
    0x000021ec str r1, [r4, 0x14]                                |             *((r4 + 0x14)) = r1;
                                                                 |         }
    0x000021ee ldrb r1, [r5, 3]                                  |         r1 = *((r5 + 3));
    0x000021f0 cmp r1, 0x73                                      |         
    0x000021f2 itt eq                                            |         
                                                                 |         if (r1 != 0x73) {
    0x000021f4 moveq r1, 1                                       |             r1 = 1;
                                                                 |         }
                                                                 |         if (r1 != 0x73) {
    0x000021f6 streq r1, [r4, 0x1c]                              |             *((r4 + 0x1c)) = r1;
                                                                 |         }
    0x000021f8 ldr r1, [r7]                                      |         r1 = *(r7);
    0x000021fa cmp r1, r0                                        |         
                                                                 |         if (r1 == r0) {
    0x000021fc beq 0x22ae                                        |             goto label_30;
                                                                 |         }
                                                                 | label_3:
    0x000021fe ldr r1, [r7]                                      |         r1 = *(r7);
    0x00002200 ldr r0, [sp, 0x20]                                |         r0 = var_20h_2;
    0x00002202 cmp r1, r0                                        |         
                                                                 |         if (r1 == r0) {
    0x00002204 beq 0x22d0                                        |             goto label_31;
                                                                 |         }
                                                                 | label_6:
    0x00002206 ldr r1, [sp, 0x18]                                |         r1 = var_18h_2;
                                                                 |         if (r1 != 0) {
    0x00002208 cbz r1, 0x2214                                    |             
    0x0000220a ldr r1, [sp, 0x38]                                |             r1 = var_38h;
    0x0000220c ldrh r1, [r1, 0x10]                               |             r1 = *((r1 + 0x10));
    0x0000220e cmp r1, 2                                         |             
                                                                 |             if (r1 == 2) {
    0x00002210 beq.w 0x2342                                      |                 goto label_32;
                                                                 |             }
                                                                 |         }
                                                                 | label_4:
    0x00002214 ldr r3, [r6, 0x18]                                |         r3 = *((r6 + 0x18));
    0x00002216 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00002218 bne 0x229c                                        |             goto label_33;
                                                                 |         }
    0x0000221a str r4, [r6, 0x18]                                |         *((r6 + 0x18)) = r4;
                                                                 | label_1:
    0x0000221c ldr r3, [sp, 0x10]                                |         r3 = var_10h_2;
    0x0000221e adds r3, 1                                        |         r3++;
    0x00002220 str r3, [sp, 0x10]                                |         var_10h_2 = r3;
                                                                 |     }
                                                                 | label_29:
    0x00002222 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00002224 mov.w r1, 0x200                                   |     r1 = 0x200;
    0x00002228 mov r0, r8                                        |     r0 = r8;
    0x0000222a mov.w fp, 0                                       |     
    0x0000222e blx 0xe48                                         |     r0 = fcn_00000e48 ();
    0x00002232 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00002234 bne.w 0x210c                                      |         goto label_0;
                                                                 |     }
                                                                 | label_25:
    0x00002238 ldrd sl, r5, [sp, 0x40]                           |     __asm ("ldrd sl, r5, [var_40h]");
    0x0000223c mov sb, r0                                        |     sb = r0;
    0x0000223e ldr r3, [sp, 0x10]                                |     r3 = var_10h_2;
    0x00002240 movs r1, 1                                        |     r1 = 1;
    0x00002242 ldr r2, [pc, 0x1c0]                               |     
    0x00002244 mov r0, r5                                        |     r0 = r5;
    0x00002246 ldr r7, [sp, 0x3c]                                |     r7 = var_3ch;
    0x00002248 str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x0000224a mov r3, sl                                        |     r3 = sl;
    0x0000224c add r2, pc                                        |     r2 = 0x4656;
    0x0000224e blx 0xef8                                         |     elf_errmsg ();
    0x00002252 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00002254 mov r1, sb                                        |     r1 = sb;
    0x00002256 blx 0xd90                                         |     r0 = open (r0, r1, r2);
    0x0000225a cmp r0, 0                                         |     
    0x0000225c str r0, [r6, 8]                                   |     *((r6 + 8)) = r0;
                                                                 |     if (r0 < 0) {
    0x0000225e blt.w 0x2396                                      |         goto label_34;
                                                                 |     }
                                                                 | label_11:
    0x00002262 mov r0, r7                                        |     r0 = r7;
    0x00002264 blx 0xfdc                                         |     puts (r0);
    0x00002268 ldr r0, [r5]                                      |     r0 = *(r5);
    0x0000226a blx 0xed4                                         |     read (r0, r1, r2);
    0x0000226e ldr r0, [sp, 0x2c]                                |     r0 = ptr;
    0x00002270 blx 0xf58                                         |     fwrite (r0, r1, r2, r3);
    0x00002274 mov r0, r6                                        |     r0 = r6;
    0x00002276 bl 0x25a4                                         |     r0 = void (*0x25a4)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
                                                                 |     if (r0 != 0) {
    0x0000227a cbnz r0, 0x22c8                                   |         goto label_35;
                                                                 |     }
                                                                 | label_5:
    0x0000227c ldr r2, [pc, 0x188]                               |     
    0x0000227e ldr r3, [pc, 0x160]                               |     r3 = *(0x23e2);
    0x00002280 add r2, pc                                        |     r2 = 0x468c;
    0x00002282 ldr r3, [r2, r3]                                  |     r3 = *(0x468c);
    0x00002284 ldr r2, [r3]                                      |     r2 = *(0x468c);
    0x00002286 ldr r3, [sp, 0x3ec]                               |     r3 = var_3ech;
    0x00002288 eors r2, r3                                       |     r2 ^= r3;
    0x0000228a mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0000228e bne.w 0x23d6                                      |         goto label_36;
                                                                 |     }
    0x00002292 mov r0, r6                                        |     r0 = r6;
    0x00002294 add.w sp, sp, 0x3f4                               |     
    0x00002298 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 |     do {
                                                                 | label_33:
    0x0000229c mov r2, r3                                        |         r2 = r3;
    0x0000229e ldr r3, [r3, 0x28]                                |         r3 = *((r3 + 0x28));
    0x000022a0 cmp r3, 0                                         |         
    0x000022a2 bne 0x229c                                        |         
                                                                 |     } while (r3 != 0);
    0x000022a4 str r4, [r2, 0x28]                                |     *((r2 + 0x28)) = r4;
    0x000022a6 b 0x221c                                          |     goto label_1;
                                                                 | label_27:
    0x000022a8 ldr r3, [r5]                                      |     r3 = *(r5);
    0x000022aa add fp, r3                                        |     
    0x000022ac b 0x20fa                                          |     goto label_2;
                                                                 | label_30:
    0x000022ae ldrh.w r0, [sp, 0xf0]                             |     r0 = var_f0h;
    0x000022b2 movw r1, 0x5d6f                                   |     r1 = 0x5d6f;
    0x000022b6 cmp r0, r1                                        |     
                                                                 |     if (r0 != r1) {
    0x000022b8 bne 0x21fe                                        |         goto label_3;
                                                                 |     }
    0x000022ba ldrb.w r1, [sp, 0xf2]                             |     r1 = var_f2h;
    0x000022be cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x000022c0 bne 0x21fe                                        |         goto label_3;
                                                                 |     }
                                                                 | label_8:
    0x000022c2 movs r3, 1                                        |     r3 = 1;
    0x000022c4 str r3, [r4, 0x18]                                |     *((r4 + 0x18)) = r3;
    0x000022c6 b 0x2214                                          |     goto label_4;
                                                                 | label_35:
    0x000022c8 mov r0, r6                                        |     r0 = r6;
    0x000022ca bl 0x2748                                         |     fcn_00002748 (r0);
    0x000022ce b 0x227c                                          |     goto label_5;
                                                                 | label_31:
    0x000022d0 ldr r1, [sp, 0xf0]                                |     r1 = var_f0h;
    0x000022d2 cmp r1, r0                                        |     
                                                                 |     if (r1 != r0) {
    0x000022d4 bne 0x2206                                        |         goto label_6;
                                                                 |     }
    0x000022d6 ldr r0, [sp, 0xf4]                                |     r0 = var_f4h;
    0x000022d8 movw r1, 0x7470                                   |     
    0x000022dc movt r1, 0x7268                                   |     r1 = 0x72687470;
    0x000022e0 cmp r0, r1                                        |     
                                                                 |     if (r0 != r1) {
    0x000022e2 bne 0x2206                                        |         goto label_6;
                                                                 |     }
    0x000022e4 ldr r0, [sp, 0xf8]                                |     r0 = var_f8h;
    0x000022e6 movw r1, 0x6165                                   |     
    0x000022ea movt r1, 0x2d64                                   |     r1 = 0x2d646165;
    0x000022ee cmp r0, r1                                        |     
                                                                 |     if (r0 != r1) {
    0x000022f0 bne 0x2206                                        |         goto label_6;
                                                                 |     }
    0x000022f2 mov r0, r4                                        |     r0 = r4;
    0x000022f4 bl 0x2414                                         |     void (*0x2414)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x000022f8 b 0x2214                                          |     goto label_4;
                                                                 | label_21:
    0x000022fa ldr r2, [pc, 0x110]                               |     
    0x000022fc mov r3, sl                                        |     r3 = sl;
    0x000022fe movs r1, 1                                        |     r1 = 1;
    0x00002300 mov r0, r5                                        |     r0 = r5;
    0x00002302 add r2, pc                                        |     r2 = 0x4714;
    0x00002304 blx 0xef8                                         |     elf_errmsg ();
    0x00002308 ldr r0, [r5]                                      |     r0 = *(r5);
    0x0000230a mov r1, r4                                        |     r1 = r4;
    0x0000230c blx 0xe84                                         |     r0 = fcn_00000e84 ();
    0x00002310 mov r7, r0                                        |     r7 = r0;
    0x00002312 str r0, [r6, 4]                                   |     *((r6 + 4)) = r0;
    0x00002314 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00002316 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00002318 beq 0x23c4                                        |         goto label_37;
                                                                 |     }
    0x0000231a blx 0xed4                                         |     read (r0, r1, r2);
    0x0000231e b 0x201e                                          |     goto label_7;
                                                                 | label_22:
    0x00002320 blx 0xea0                                         |     fcn_00000ea0 ();
    0x00002324 mov r0, r6                                        |     r0 = r6;
    0x00002326 movs r7, 0                                        |     r7 = 0;
    0x00002328 blx 0xed4                                         |     read (r0, r1, r2);
                                                                 | label_9:
    0x0000232c mov r0, r7                                        |     r0 = r7;
    0x0000232e blx 0xfdc                                         |     puts (r0);
    0x00002332 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00002334 blx 0xed4                                         |     read (r0, r1, r2);
    0x00002338 ldr r0, [sp, 0x2c]                                |     r0 = ptr;
    0x0000233a blx 0xf58                                         |     fwrite (r0, r1, r2, r3);
                                                                 | label_20:
    0x0000233e movs r6, 0                                        |     r6 = 0;
    0x00002340 b 0x227c                                          |     goto label_5;
                                                                 | label_32:
    0x00002342 ldr r1, [sp, 0x28]                                |     r1 = var_28h_2;
    0x00002344 cmp r3, r1                                        |     
    0x00002346 ldr r1, [r4, 0x14]                                |     r1 = *((r4 + 0x14));
    0x00002348 ite hi                                            |     
                                                                 |     if (r3 <= r1) {
    0x0000234a movhi r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 > r1) {
    0x0000234c movls r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0000234e eor r1, r1, 2                                     |     r1 ^= 2;
    0x00002352 ands.w r3, r3, r1, lsr 1                          |     r3 &= (r1 >> 1);
                                                                 |     if (r3 == r3) {
    0x00002356 beq.w 0x2214                                      |         goto label_4;
                                                                 |     }
    0x0000235a ldr r1, [sp, 0x28]                                |     r1 = var_28h_2;
    0x0000235c ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0000235e adds r3, r1, r3                                   |     r3 = r1 + r3;
    0x00002360 cmp r2, r3                                        |     
                                                                 |     if (r2 <= r3) {
    0x00002362 blo.w 0x2214                                      |         goto label_4;
                                                                 |     }
    0x00002366 strd r1, r3, [r4]                                 |     __asm ("strd r1, r3, [r4]");
    0x0000236a ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0000236c str r3, [r4, 0x10]                                |     *((r4 + 0x10)) = r3;
    0x0000236e b 0x22c2                                          |     goto label_8;
                                                                 | label_28:
    0x00002370 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00002372 ldrh r3, [r3, 0x10]                               |     r3 = *((r3 + 0x10));
    0x00002374 cmp r3, 3                                         |     
                                                                 |     if (r3 != 3) {
    0x00002376 bne.w 0x20fa                                      |         goto label_2;
                                                                 |     }
    0x0000237a cmp.w fp, 0                                       |     
    0x0000237e ite eq                                            |     
                                                                 |     if (fp != 0) {
    0x00002380 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (fp == 0) {
    0x00002382 andne r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x00002386 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00002388 beq.w 0x20fa                                      |         goto label_2;
                                                                 |     }
    0x0000238c ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x0000238e lsls r3, r3, 0x1e                                 |     r3 <<= 0x1e;
    0x00002390 it pl                                             |     
                                                                 |     if (r3 < r3) {
    0x00002392 strpl r0, [r4, 0x18]                              |         *((r4 + 0x18)) = r0;
                                                                 |     }
    0x00002394 b 0x20fa                                          |     goto label_2;
                                                                 | label_34:
    0x00002396 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00002398 blx 0xea0                                         |     fcn_00000ea0 ();
    0x0000239c mov r0, r6                                        |     r0 = r6;
    0x0000239e bl 0x1f5c                                         |     fcn_00001f5c (r0);
    0x000023a2 b 0x232c                                          |     goto label_9;
                                                                 | label_24:
    0x000023a4 strd r3, r3, [sp, 0x30]                           |     __asm ("strd r3, r3, [sp, 0x30]");
    0x000023a8 str r3, [sp, 0x28]                                |     var_28h_2 = r3;
    0x000023aa str r3, [sp, 0x18]                                |     var_18h_2 = r3;
    0x000023ac b 0x20cc                                          |     goto label_10;
                                                                 | label_23:
    0x000023ae mov.w r0, -1                                      |     r0 = -1;
    0x000023b2 blx 0xf04                                         |     getopt (r0, r1, r2);
    0x000023b6 ldr r1, [pc, 0x58]                                |     
    0x000023b8 mov r2, r0                                        |     r2 = r0;
    0x000023ba movs r0, 1                                        |     r0 = 1;
    0x000023bc add r1, pc                                        |     r1 = 0x47d2;
    0x000023be blx 0xe54                                         |     fcn_00000e54 ();
    0x000023c2 b 0x2262                                          |     goto label_11;
                                                                 | label_37:
    0x000023c4 mov.w r3, -1                                      |     r3 = -1;
    0x000023c8 str r3, [sp, 0x2c]                                |     ptr = r3;
    0x000023ca blx 0xea0                                         |     fcn_00000ea0 ();
    0x000023ce mov r0, r6                                        |     r0 = r6;
    0x000023d0 bl 0x1f5c                                         |     fcn_00001f5c (r0);
    0x000023d4 b 0x232c                                          |     goto label_9;
                                                                 | label_36:
    0x000023d6 blx 0xfac                                         |     fprintf_chk ()
    0x000023da nop                                               |     
    0x000023dc cmp r6, 0xf8                                      |     
    0x000023de movs r0, r0                                       |     
    0x000023e0 lsls r4, r3, 4                                    |     r4 = r3 << 4;
    0x000023e2 movs r0, r0                                       |     
    0x000023e4 lsrs r4, r6, 0xf                                  |     r4 = r6 >> 0xf;
    0x000023e6 movs r0, r0                                       |     
    0x000023e8 lsrs r0, r1, 0x14                                 |     r0 = r1 >> 0x14;
    0x000023ea movs r0, r0                                       |     
    0x000023ec lsrs r2, r0, 0x14                                 |     r2 = r0 >> 0x14;
    0x000023ee movs r0, r0                                       |     
    0x000023f0 lsrs r2, r2, 0x13                                 |     r2 >>= 0x13;
    0x000023f2 movs r0, r0                                       |     
    0x000023f4 lsrs r0, r6, 0x11                                 |     r0 = r6 >> 0x11;
    0x000023f6 movs r0, r0                                       |     
    0x000023f8 lsrs r0, r1, 0x11                                 |     r0 = r1 >> 0x11;
    0x000023fa movs r0, r0                                       |     
    0x000023fc lsrs r6, r1, 0x11                                 |     r6 = r1 >> 0x11;
    0x000023fe movs r0, r0                                       |     
    0x00002400 lsrs r4, r2, 0x11                                 |     r4 = r2 >> 0x11;
    0x00002402 movs r0, r0                                       |     
    0x00002404 lsrs r0, r2, 0xe                                  |     r0 = r2 >> 0xe;
    0x00002406 movs r0, r0                                       |     
    0x00002408 cmp r4, 0x4c                                      |     
    0x0000240a movs r0, r0                                       |     
    0x0000240c lsrs r6, r2, 8                                    |     r6 = r2 >> 8;
    0x0000240e movs r0, r0                                       |     
    0x00002410 lsrs r4, r7, 5                                    |     r4 = r7 >> 5;
    0x00002412 movs r0, r0                                       |     
    0x00002414 ldr r2, [pc, 0x174]                               |     
    0x00002416 movs r1, 0                                        |     r1 = 0;
    0x00002418 ldr r3, [pc, 0x174]                               |     r3 = *(0x2590);
    0x0000241a push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0000241e mov sl, r0                                        |     sl = r0;
    0x00002420 add r2, pc                                        |     r2 = 0x49b0;
    0x00002422 sub sp, 0xb4                                      |     
    0x00002424 ldr r3, [r2, r3]                                  |     
    0x00002426 ldr r0, [r0, 0x20]                                |     r0 = *((r0 + 0x20));
    0x00002428 ldr r3, [r3]                                      |     r3 = *(0x49b0);
    0x0000242a str r3, [sp, 0xac]                                |     var_ach = r3;
    0x0000242c mov.w r3, 0                                       |     r3 = 0;
    0x00002430 blx 0xd90                                         |     r0 = open (r0, r1, r2);
    0x00002434 subs r5, r0, 0                                    |     r5 = r0 - 0;
                                                                 |     if (r5 < r0) {
    0x00002436 blt.w 0x254a                                      |         goto label_38;
                                                                 |     }
    0x0000243a movs r1, 1                                        |     r1 = 1;
    0x0000243c movs r2, 0                                        |     r2 = 0;
    0x0000243e blx 0x1030                                        |     realloc (r0, r1);
    0x00002442 add r1, sp, 0x68                                  |     r1 += var_68h;
    0x00002444 mov r6, r0                                        |     r6 = r0;
    0x00002446 blx 0xff4                                         |     r0 = elf_nextscn ();
    0x0000244a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0000244c beq.w 0x256c                                      |         goto label_39;
                                                                 |     }
    0x00002450 ldr r3, [pc, 0x140]                               |     
    0x00002452 movs r4, 0                                        |     r4 = 0;
    0x00002454 add.w sb, sp, 0x28                                |     sb += var_28h;
    0x00002458 add r3, pc                                        |     r3 = 0x49f0;
    0x0000245a str r3, [sp, 4]                                   |     s1 = r3;
                                                                 |     do {
                                                                 | label_12:
    0x0000245c mov r1, r4                                        |         r1 = r4;
    0x0000245e mov r0, r6                                        |         r0 = r6;
    0x00002460 blx 0x1000                                        |         r0 = gelf_getphdr ();
    0x00002464 mov r4, r0                                        |         r4 = r0;
    0x00002466 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00002468 beq 0x250c                                        |             goto label_40;
                                                                 |         }
                                                                 | label_13:
    0x0000246a mov r1, sb                                        |         r1 = sb;
    0x0000246c blx 0xf4c                                         |         close (r0);
    0x00002470 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00002472 cmp r3, 2                                         |         
    0x00002474 it ne                                             |         
                                                                 |         if (r3 != 2) {
    0x00002476 cmpne r3, 0xb                                     |             __asm ("cmpne r3, 0xb");
                                                                 |         }
    0x00002478 bne 0x245c                                        |         
                                                                 |     } while (r3 != 2);
    0x0000247a movs r1, 0                                        |     r1 = 0;
    0x0000247c mov r0, r4                                        |     r0 = r4;
    0x0000247e blx 0xdf4                                         |     fcn_00000df4 ();
    0x00002482 ldrd r2, r3, [sp, 0x60]                           |     __asm ("ldrd r2, r3, [var_60h]");
    0x00002486 mov r8, r0                                        |     r8 = r0;
    0x00002488 ldrd r0, r1, [sp, 0x48]                           |     __asm ("ldrd r0, r1, [var_48h]");
    0x0000248c bl 0x2984                                         |     r0 = fcn_00002984 (r0, r1, r2, r3);
    0x00002490 subs.w fp, r0, 0                                  |     
                                                                 |     if (fp <= r0) {
    0x00002494 ble 0x245c                                        |         goto label_12;
                                                                 |     }
    0x00002496 movs r7, 0                                        |     r7 = 0;
    0x00002498 add r3, sp, 0x10                                  |     r3 += var_10h;
    0x0000249a str r4, [sp, 8]                                   |     var_8h = r4;
    0x0000249c mov r4, r7                                        |     r4 = r7;
    0x0000249e mov r7, r3                                        |     r7 = r3;
    0x000024a0 str r5, [sp, 0xc]                                 |     var_ch = r5;
                                                                 |     do {
    0x000024a2 mov r2, r7                                        |         r2 = r7;
    0x000024a4 mov r1, r4                                        |         r1 = r4;
    0x000024a6 mov r0, r8                                        |         r0 = r8;
    0x000024a8 blx 0xd84                                         |         gelf_getsym ();
    0x000024ac ldrh.w r2, [sp, 0x16]                             |         r2 = var_16h;
                                                                 |         if (r2 != 0) {
    0x000024b0 cbz r2, 0x24f4                                    |             
    0x000024b2 ldrd r2, r1, [sp, 0x20]                           |             __asm ("ldrd r2, r1, [var_20h]");
    0x000024b6 orrs r2, r1                                       |             r2 |= r1;
                                                                 |             if (r2 == r1) {
    0x000024b8 beq 0x24f4                                        |                 goto label_14;
                                                                 |             }
    0x000024ba ldr r2, [sp, 0x10]                                |             r2 = var_10h;
    0x000024bc mov r0, r6                                        |             r0 = r6;
    0x000024be ldr r1, [sp, 0x50]                                |             r1 = var_50h;
    0x000024c0 blx 0xdb4                                         |             r0 = elf_strptr ();
    0x000024c4 mov r5, r0                                        |             r5 = r0;
                                                                 |             if (r0 == 0) {
    0x000024c6 cbz r0, 0x24f4                                    |                 goto label_14;
                                                                 |             }
    0x000024c8 mov r1, r0                                        |             r1 = r0;
    0x000024ca movs r2, 9                                        |             r2 = 9;
    0x000024cc ldr r0, [sp, 4]                                   |             r0 = s1;
    0x000024ce blx 0xdcc                                         |             r0 = memcmp (r0, r1, r2);
                                                                 |             if (r0 != 0) {
    0x000024d2 cbnz r0, 0x24f4                                   |                 goto label_14;
                                                                 |             }
    0x000024d4 ldr r1, [sp, 0x18]                                |             r1 = var_18h;
    0x000024d6 mov r0, r5                                        |             r0 = r5;
    0x000024d8 ldr r2, [sp, 0x20]                                |             r2 = var_20h;
    0x000024da add r2, r1                                        |             r2 += r1;
    0x000024dc bl 0x1e5c                                         |             fcn_00001e5c (r0, r1, r2);
    0x000024e0 ldr.w r2, [sl, 0x24]                              |             r2 = *((sl + 0x24));
                                                                 |             if (r2 != 0) {
    0x000024e4 cbz r2, 0x24ee                                    |                 
    0x000024e6 ldr r3, [r0]                                      |                 r3 = *(r0);
    0x000024e8 ldr r1, [r2]                                      |                 r1 = *(r2);
    0x000024ea cmp r1, r3                                        |                 
                                                                 |                 if (r1 < r3) {
    0x000024ec bls 0x253a                                        |                     goto label_41;
                                                                 |                 }
                                                                 |             }
    0x000024ee str r2, [r0, 0x10]                                |             *((r0 + 0x10)) = r2;
    0x000024f0 str.w r0, [sl, 0x24]                              |             __asm ("str.w r0, [sl, 0x24]");
                                                                 |         }
                                                                 | label_14:
    0x000024f4 adds r4, 1                                        |         r4++;
    0x000024f6 cmp fp, r4                                        |         
    0x000024f8 bne 0x24a2                                        |         
                                                                 |     } while (fp != r4);
    0x000024fa ldrd r4, r5, [sp, 8]                              |     __asm ("ldrd r4, r5, [var_8h]");
    0x000024fe mov r0, r6                                        |     r0 = r6;
    0x00002500 mov r1, r4                                        |     r1 = r4;
    0x00002502 blx 0x1000                                        |     r0 = gelf_getphdr ();
    0x00002506 mov r4, r0                                        |     r4 = r0;
    0x00002508 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0000250a bne 0x246a                                        |         goto label_13;
                                                                 |     }
                                                                 |     if (r6 != 0) {
                                                                 | label_40:
    0x0000250c cbz r6, 0x2514                                    |         
                                                                 | label_16:
    0x0000250e mov r0, r6                                        |         r0 = r6;
    0x00002510 blx 0xfdc                                         |         puts (r0);
                                                                 |     }
                                                                 | label_17:
    0x00002514 mov r0, r5                                        |     r0 = r5;
    0x00002516 blx 0xf58                                         |     fwrite (r0, r1, r2, r3);
    0x0000251a ldr r2, [pc, 0x7c]                                |     
    0x0000251c ldr r3, [pc, 0x70]                                |     r3 = *(0x2590);
    0x0000251e add r2, pc                                        |     r2 = 0x4abc;
    0x00002520 ldr r3, [r2, r3]                                  |     r3 = *(0x4abc);
    0x00002522 ldr r2, [r3]                                      |     r2 = *(0x4abc);
    0x00002524 ldr r3, [sp, 0xac]                                |     r3 = var_ach;
    0x00002526 eors r2, r3                                       |     r2 ^= r3;
    0x00002528 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0000252c bne 0x2586                                        |         goto label_42;
                                                                 |     }
    0x0000252e add sp, 0xb4                                      |     
    0x00002530 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 |     do {
    0x00002534 ldr r1, [r2]                                      |         r1 = *(r2);
    0x00002536 cmp r3, r1                                        |         
                                                                 |         if (r3 < r1) {
    0x00002538 bls 0x2542                                        |             goto label_43;
                                                                 |         }
                                                                 | label_41:
    0x0000253a mov lr, r2                                        |         lr = r2;
    0x0000253c ldr r2, [r2, 0x10]                                |         r2 = *((r2 + 0x10));
    0x0000253e cmp r2, 0                                         |         
    0x00002540 bne 0x2534                                        |         
                                                                 |     } while (r2 != 0);
                                                                 | label_43:
    0x00002542 str r2, [r0, 0x10]                                |     *((r0 + 0x10)) = r2;
    0x00002544 str.w r0, [lr, 0x10]                              |     __asm ("str.w r0, [lr, 0x10]");
    0x00002548 b 0x24f4                                          |     goto label_14;
                                                                 | label_38:
    0x0000254a ldr r2, [pc, 0x50]                                |     
    0x0000254c ldr r3, [pc, 0x40]                                |     r3 = *(0x2590);
    0x0000254e add r2, pc                                        |     r2 = 0x4af0;
    0x00002550 ldr r3, [r2, r3]                                  |     r3 = *(0x4af0);
    0x00002552 ldr r2, [r3]                                      |     r2 = *(0x4af0);
    0x00002554 ldr r3, [sp, 0xac]                                |     r3 = var_ach;
    0x00002556 eors r2, r3                                       |     r2 ^= r3;
    0x00002558 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0000255c bne 0x2586                                        |         goto label_42;
                                                                 |     }
    0x0000255e ldr.w r0, [sl, 0x20]                              |     r0 = *((sl + 0x20));
    0x00002562 add sp, 0xb4                                      |     
    0x00002564 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00002568 b.w 0xe9c                                         |     goto label_15;
                                                                 | label_39:
    0x0000256c mov.w r0, -1                                      |     r0 = -1;
    0x00002570 blx 0xf04                                         |     getopt (r0, r1, r2);
    0x00002574 ldr r1, [pc, 0x28]                                |     
    0x00002576 mov r2, r0                                        |     r2 = r0;
    0x00002578 movs r0, 1                                        |     r0 = 1;
    0x0000257a add r1, pc                                        |     r1 = 0x4b1e;
    0x0000257c blx 0xe54                                         |     fcn_00000e54 ();
    0x00002580 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00002582 bne 0x250e                                        |         goto label_16;
                                                                 |     }
    0x00002584 b 0x2514                                          |     goto label_17;
                                                                 | label_42:
    0x00002586 blx 0xfac                                         |     fprintf_chk ()
    0x0000258a nop                                               |     
    0x0000258c cmp r2, 0xac                                      |     
    0x0000258e movs r0, r0                                       |     
    0x00002590 lsls r4, r3, 4                                    |     r4 = r3 << 4;
    0x00002592 movs r0, r0                                       |     
    0x00002594 lsrs r4, r2, 6                                    |     r4 = r2 >> 6;
    0x00002596 movs r0, r0                                       |     
    0x00002598 cmp r1, 0xae                                      |     
    0x0000259a movs r0, r0                                       |     
    0x0000259c cmp r1, 0x7e                                      |     
    0x0000259e movs r0, r0                                       |     
    0x000025a0 lsls r6, r7, 0x1e                                 |     r6 = r7 << 0x1e;
    0x000025a2 movs r0, r0                                       |     
    0x000025a4 push.w {r4, r5, r6, r7, r8, lr}                   |     
    0x000025a8 sub sp, 8                                         |     
    0x000025aa ldr r5, [pc, 0xe4]                                |     
    0x000025ac mov r7, r0                                        |     r7 = r0;
    0x000025ae movs r1, 1                                        |     r1 = 1;
    0x000025b0 ldr r4, [pc, 0xe0]                                |     r4 = *(0x2694);
    0x000025b2 add r5, pc                                        |     r5 = 0x4c48;
    0x000025b4 ldr r2, [pc, 0xe0]                                |     
    0x000025b6 ldr r3, [r0]                                      |     r3 = *(r0);
    0x000025b8 mov r0, sp                                        |     r0 = sp;
    0x000025ba ldr r4, [r5, r4]                                  |     
    0x000025bc add r2, pc                                        |     r2 = 0x4c58;
    0x000025be ldr r5, [pc, 0xdc]                                |     
    0x000025c0 ldr r4, [r4]                                      |     r4 = *(0x4c48);
    0x000025c2 str r4, [sp, 4]                                   |     var_4h = r4;
    0x000025c4 mov.w r4, 0                                       |     r4 = 0;
    0x000025c8 blx 0xef8                                         |     elf_errmsg ();
    0x000025cc ldr r0, [sp]                                      |     r0 = *(sp);
    0x000025ce add r5, pc                                        |     r5 = 0x4c70;
    0x000025d0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000025d2 beq 0x268c                                        |         goto label_44;
                                                                 |     }
    0x000025d4 blx 0xdc0                                         |     r0 = opendir ();
    0x000025d8 mov r8, r0                                        |     r8 = r0;
    0x000025da ldr r0, [sp]                                      |     r0 = *(sp);
    0x000025dc blx 0xed4                                         |     read (r0, r1, r2);
    0x000025e0 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x000025e4 beq 0x268c                                        |         goto label_44;
                                                                 |     }
    0x000025e6 movs r6, 0                                        |     r6 = 0;
                                                                 |     do {
    0x000025e8 mov r0, r8                                        |         r0 = r8;
    0x000025ea blx 0x1054                                        |         r0 = strcmp (r0, r1);
    0x000025ee mov r4, r0                                        |         r4 = r0;
                                                                 |         if (r0 == 0) {
    0x000025f0 cbz r0, 0x2612                                    |             goto label_45;
                                                                 |         }
                                                                 | label_18:
    0x000025f2 movs r2, 0xa                                      |         r2 = 0xa;
    0x000025f4 movs r1, 0                                        |         r1 = 0;
    0x000025f6 adds r0, 0xb                                      |         r0 += 0xb;
    0x000025f8 blx 0xf1c                                         |         r0 = memcpy (r0, r1, r2);
                                                                 |         if (r0 != 0) {
    0x000025fc cbnz r0, 0x2604                                   |             goto label_46;
                                                                 |         }
    0x000025fe ldrb r3, [r4, 0xb]                                |         r3 = *((r4 + 0xb));
    0x00002600 cmp r3, 0x30                                      |         
    0x00002602 bne 0x25e8                                        |         
                                                                 |     } while (r3 != 0x30);
                                                                 | label_46:
    0x00002604 mov r0, r8                                        |     r0 = r8;
    0x00002606 adds r6, 1                                        |     r6++;
    0x00002608 blx 0x1054                                        |     r0 = strcmp (r0, r1);
    0x0000260c mov r4, r0                                        |     r4 = r0;
    0x0000260e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00002610 bne 0x25f2                                        |         goto label_18;
                                                                 |     }
                                                                 | label_45:
    0x00002612 lsls r0, r6, 2                                    |     r0 = r6 << 2;
    0x00002614 blx 0xfa0                                         |     stack_chk_fail ();
    0x00002616 stcl p0, c6, [r4], {0xf8}                         |     __asm ("stcl p0, c6, [r4], {0xf8}");
                                                                 |     if (r0 == 0) {
    0x0000261a cbz r0, 0x2674                                    |         goto label_47;
                                                                 |     }
    0x0000261c mov r0, r8                                        |     r0 = r8;
    0x0000261e mov r5, r4                                        |     r5 = r4;
    0x00002620 blx 0xfd0                                         |     elf_end ();
                                                                 |     do {
    0x00002624 mov r0, r8                                        |         r0 = r8;
    0x00002626 blx 0x1054                                        |         r0 = strcmp (r0, r1);
    0x0000262a mov r4, r0                                        |         r4 = r0;
                                                                 |         if (r0 == 0) {
    0x0000262c cbz r0, 0x2654                                    |             goto label_48;
                                                                 |         }
                                                                 | label_19:
    0x0000262e movs r2, 0xa                                      |         r2 = 0xa;
    0x00002630 movs r1, 0                                        |         r1 = 0;
    0x00002632 adds r0, 0xb                                      |         r0 += 0xb;
    0x00002634 blx 0xf1c                                         |         r0 = memcpy (r0, r1, r2);
                                                                 |         if (r0 != 0) {
    0x00002638 cbnz r0, 0x2640                                   |             goto label_49;
                                                                 |         }
    0x0000263a ldrb r3, [r4, 0xb]                                |         r3 = *((r4 + 0xb));
    0x0000263c cmp r3, 0x30                                      |         
    0x0000263e bne 0x2624                                        |         
                                                                 |     } while (r3 != 0x30);
                                                                 | label_49:
    0x00002640 ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
    0x00002642 str.w r0, [r3, r5, lsl 2]                         |     __asm ("str.w r0, [r3, r5, lsl 2]");
    0x00002646 mov r0, r8                                        |     r0 = r8;
    0x00002648 blx 0x1054                                        |     strcmp (r0, r1);
    0x0000264c adds r5, 1                                        |     r5++;
    0x0000264e mov r4, r0                                        |     r4 = r0;
    0x00002650 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00002652 bne 0x262e                                        |         goto label_19;
                                                                 |     }
                                                                 | label_48:
    0x00002654 str r6, [r7, 0x10]                                |     *((r7 + 0x10)) = r6;
                                                                 |     do {
    0x00002656 ldr r2, [pc, 0x48]                                |         
    0x00002658 ldr r3, [pc, 0x38]                                |         r3 = *(0x2694);
    0x0000265a add r2, pc                                        |         r2 = 0x4d00;
    0x0000265c ldr r3, [r2, r3]                                  |         r3 = *(0x4d00);
    0x0000265e ldr r2, [r3]                                      |         r2 = *(0x4d00);
    0x00002660 ldr r3, [sp, 4]                                   |         r3 = var_4h;
    0x00002662 eors r2, r3                                       |         r2 ^= r3;
    0x00002664 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 == r3) {
    0x00002668 bne 0x2670                                        |             
    0x0000266a add sp, 8                                         |             
    0x0000266c pop.w {r4, r5, r6, r7, r8, pc}                    |             
                                                                 |         }
    0x00002670 blx 0xfac                                         |         fprintf_chk ()
                                                                 | label_47:
    0x00002674 mov r0, r8                                        |         r0 = r8;
    0x00002676 blx 0xf70                                         |         elf_version ();
    0x0000267a ldr r3, [pc, 0x28]                                |         
    0x0000267c movs r2, 0x1f                                     |         r2 = 0x1f;
    0x0000267e ldr r0, [pc, 0x28]                                |         
    0x00002680 movs r1, 1                                        |         r1 = 1;
    0x00002682 ldr r3, [r5, r3]                                  |         r3 = *((r5 + r3));
    0x00002684 add r0, pc                                        |         r0 = 0x4d32;
    0x00002686 ldr r3, [r3]                                      |         r3 = *(0x26a6);
    0x00002688 blx 0xf64                                         |         closedir ();
                                                                 | label_44:
    0x0000268c movs r0, 1                                        |         r0 = 1;
    0x0000268e b 0x2656                                          |         
                                                                 |     } while (1);
                                                                 | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/dcore @ 0x26ac */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.000026ac ()                  | void fcn_000026ac (int16_t arg1, int16_t arg2, int16_t arg3) {
                                             |     int16_t var_34h;
                                             |     int16_t var_0h;
                                             |     int16_t var_4h;
                                             |     int16_t var_8h;
                                             |     int16_t var_ch;
                                             |     r0 = arg1;
                                             |     r1 = arg2;
                                             |     r2 = arg3;
    0x000026ac push {r4, r5, r6, r7, lr}     |     
    0x000026ae mov r5, r2                    |     r5 = r2;
    0x000026b0 ldr r2, [pc, 0x7c]            |     
    0x000026b2 sub sp, 0x14                  |     
    0x000026b4 mov r7, r0                    |     r7 = r0;
    0x000026b6 mov r6, r1                    |     r6 = r1;
    0x000026b8 ldr r3, [pc, 0x78]            |     r3 = *(0x2734);
    0x000026ba add r2, pc                    |     r2 = 0x4dee;
    0x000026bc ldr r3, [r2, r3]              |     
    0x000026be add r2, sp, 8                 |     r2 += var_8h;
    0x000026c0 ldr r3, [r3]                  |     r3 = *(0x4dee);
    0x000026c2 str r3, [sp, 0xc]             |     var_ch = r3;
    0x000026c4 mov.w r3, 0                   |     r3 = 0;
    0x000026c8 bl 0x1ec0                     |     fcn_00001ec0 (r0, r1, r2);
    0x000026cc ldr.w ip, [pc, 0x68]          |     
    0x000026d0 mov r4, r0                    |     r4 = r0;
    0x000026d2 add ip, pc                    |     ip = 0x4e0e;
                                             |     if (r0 == 0) {
    0x000026d4 cbz r0, 0x2714                |         goto label_0;
                                             |     }
    0x000026d6 ldr r2, [sp, 8]               |     r2 = var_8h;
    0x000026d8 mov r1, r5                    |     r1 = r5;
    0x000026da ldr r4, [r0]                  |     r4 = *(r0);
    0x000026dc mov r0, r7                    |     r0 = r7;
    0x000026de ldr r3, [r2]                  |     r3 = *(r2);
    0x000026e0 ldr r2, [r2, 8]               |     r2 = *((r2 + 8));
    0x000026e2 subs r3, r3, r2               |     r3 -= r2;
    0x000026e4 movs r2, 0                    |     r2 = 0;
    0x000026e6 add r3, r4                    |     r3 += r4;
    0x000026e8 str r2, [sp, 4]               |     var_4h = r2;
    0x000026ea str r3, [sp]                  |     *(sp) = r3;
    0x000026ec movs r2, 4                    |     r2 = 4;
    0x000026ee bl 0x1f0c                     |     r0 = fcn_00001f0c (r0, r1, r2, r3);
    0x000026f2 sub.w r0, r0, 4               |     r0 -= 4;
    0x000026f6 clz r0, r0                    |     r0 &= r0;
    0x000026fa lsrs r0, r0, 5                |     r0 >>= 5;
                                             |     do {
    0x000026fc ldr r2, [pc, 0x3c]            |         
    0x000026fe ldr r3, [pc, 0x34]            |         r3 = *(0x2736);
    0x00002700 add r2, pc                    |         r2 = 0x4e40;
    0x00002702 ldr r3, [r2, r3]              |         r3 = *(0x4e40);
    0x00002704 ldr r2, [r3]                  |         r2 = *(0x4e40);
    0x00002706 ldr r3, [sp, 0xc]             |         r3 = var_ch;
    0x00002708 eors r2, r3                   |         r2 ^= r3;
    0x0000270a mov.w r3, 0                   |         r3 = 0;
                                             |         if (r2 != r3) {
    0x0000270e bne 0x272c                    |             goto label_1;
                                             |         }
    0x00002710 add sp, 0x14                  |         
    0x00002712 pop {r4, r5, r6, r7, pc}      |         
                                             | label_0:
    0x00002714 ldr r1, [pc, 0x28]            |         r1 = *(0x2740);
    0x00002716 mov r3, r6                    |         r3 = r6;
    0x00002718 ldr r2, [pc, 0x28]            |         
    0x0000271a ldr.w r1, [ip, r1]            |         r1 = *((ip + r1));
    0x0000271e add r2, pc                    |         r2 = 0x4e66;
    0x00002720 ldr r0, [r1]                  |         r0 = *(0x2740);
    0x00002722 movs r1, 1                    |         r1 = 1;
    0x00002724 blx 0xfb8                     |         fputc (r0, r1);
    0x00002728 mov r0, r4                    |         r0 = r4;
    0x0000272a b 0x26fc                      |         
                                             |     } while (1);
                                             | label_1:
    0x0000272c blx 0xfac                     |     r0 = fprintf_chk ()
    0x00002730 cmp r0, 0x12                  |     
    0x00002732 movs r0, r0                   |     
    0x00002734 lsls r4, r3, 4                |     r4 = r3 << 4;
    0x00002736 movs r0, r0                   |     
    0x00002738 movs r7, 0xfa                 |     r7 = 0xfa;
    0x0000273a movs r0, r0                   |     
    0x0000273c movs r7, 0xcc                 |     r7 = 0xcc;
    0x0000273e movs r0, r0                   |     
    0x00002740 lsls r0, r4, 4                |     r0 = r4 << 4;
    0x00002742 movs r0, r0                   |     
    0x00002744 lsls r2, r1, 0x1c             |     r2 = r1 << 0x1c;
    0x00002746 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/dcore @ 0x2748 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.00002748 ()                                  | void fcn_00002748 (int16_t arg1) {
                                                             |     int16_t var_0h;
                                                             |     int16_t var_4h;
                                                             |     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;
                                                             |     r0 = arg1;
    0x00002748 svcmi 0xf0e92d                                |     __asm ("svcmi aav.0x000000ff");
    0x0000274c movs r2, 0                                    |     r2 = 0;
    0x0000274e ldr r4, [pc, 0x1a4]                           |     
    0x00002750 sub sp, 0x3c                                  |     
    0x00002752 mov r5, r0                                    |     r5 = r0;
    0x00002754 mov.w sb, 1                                   |     sb = 1;
    0x00002758 ldr r3, [pc, 0x19c]                           |     r3 = *(0x28f8);
    0x0000275a add r4, pc                                    |     r4 = 0x5054;
    0x0000275c ldr r1, [pc, 0x19c]                           |     
    0x0000275e ldr.w sl, [pc, 0x1a0]                         |     
    0x00002762 ldr r3, [r4, r3]                              |     
    0x00002764 add r1, pc                                    |     r1 = 0x5064;
    0x00002766 add sl, pc                                    |     sl = 0x506c;
    0x00002768 ldr r3, [r3]                                  |     r3 = imp.__aeabi_unwind_cpp_pr0;
    0x0000276a str r3, [sp, 0x34]                            |     var_34h = r3;
    0x0000276c mov.w r3, 0                                   |     r3 = 0;
    0x00002770 bl 0x1ec0                                     |     fcn_00001ec0 (r0, r1, r2);
    0x00002772 umull r2, r8, r6, r0                          |     r2:r8 = r6 * r0;
                                                             |     if (r2 == 0) {
    0x00002776 beq.w 0x28b4                                  |         goto label_2;
                                                             |     }
    0x0000277a ldr r1, [pc, 0x188]                           |     
    0x0000277c add r2, sp, 0x18                              |     r2 += var_18h;
    0x0000277e mov r0, r5                                    |     r0 = r5;
    0x00002780 ldr r6, [pc, 0x184]                           |     
    0x00002782 add.w fp, sp, 0x30                            |     
    0x00002786 add r1, pc                                    |     r1 = 0x5090;
    0x00002788 bl 0x26ac                                     |     fcn_000026ac (r0, r1, r2);
    0x0000278c ldr r1, [pc, 0x17c]                           |     
    0x0000278e add r2, sp, 0x1c                              |     r2 += var_1ch;
    0x00002790 mov r7, r0                                    |     r7 = r0;
    0x00002792 mov r0, r5                                    |     r0 = r5;
    0x00002794 add r6, pc                                    |     r6 = 0x50a0;
    0x00002796 add r1, pc                                    |     r1 = 0x50a6;
    0x00002798 bl 0x26ac                                     |     fcn_000026ac (r0, r1, r2);
    0x0000279c ldr r1, [pc, 0x170]                           |     
    0x0000279e add r2, sp, 0x20                              |     r2 += var_20h;
    0x000027a0 mov r8, r0                                    |     r8 = r0;
    0x000027a2 mov r0, r5                                    |     r0 = r5;
    0x000027a4 add r1, pc                                    |     r1 = 0x50b8;
    0x000027a6 bl 0x26ac                                     |     fcn_000026ac (r0, r1, r2);
    0x000027aa ldr r1, [pc, 0x168]                           |     
    0x000027ac add r2, sp, 0x24                              |     r2 += var_24h;
    0x000027ae mov r4, r0                                    |     r4 = r0;
    0x000027b0 mov r0, r5                                    |     r0 = r5;
    0x000027b2 add r1, pc                                    |     r1 = 0x50cc;
    0x000027b4 bl 0x26ac                                     |     fcn_000026ac (r0, r1, r2);
    0x000027b8 mov r2, fp                                    |     r2 = fp;
    0x000027ba mov sb, r0                                    |     sb = r0;
    0x000027bc mov r1, r6                                    |     r1 = r6;
    0x000027be mov r0, r5                                    |     r0 = r5;
    0x000027c0 bl 0x1ec0                                     |     r0 = fcn_00001ec0 (r0, r1, r2);
    0x000027c4 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000027c6 beq 0x2884                                    |         goto label_4;
                                                             |     }
    0x000027c8 ldr r3, [r0]                                  |     r3 = *(r0);
    0x000027ca add r2, sp, 0x28                              |     r2 += var_28h;
    0x000027cc ldr r1, [pc, 0x148]                           |     
    0x000027ce mov r0, r5                                    |     r0 = r5;
    0x000027d0 str r3, [sp, 0xc]                             |     var_ch = r3;
    0x000027d2 ldr r3, [sp, 0x30]                            |     r3 = var_30h;
    0x000027d4 add r1, pc                                    |     r1 = 0x50f0;
    0x000027d6 ldr r6, [r3]                                  |     r6 = *(r3);
    0x000027d8 ldr r3, [r3, 8]                               |     r3 = *((r3 + 8));
    0x000027da str r3, [sp, 0x10]                            |     var_10h = r3;
    0x000027dc bl 0x26ac                                     |     fcn_000026ac (r0, r1, r2);
    0x000027e0 cmp.w sb, 0                                   |     
    0x000027e4 it ne                                         |     
                                                             |     if (sb != 0) {
    0x000027e6 cmpne r4, 0                                   |         __asm ("cmpne r4, 0");
                                                             |     }
    0x000027e8 ite eq                                        |     
                                                             |     if (sb != 0) {
    0x000027ea moveq sb, 1                                   |         sb = 1;
                                                             |     }
                                                             |     if (sb != 0) {
    0x000027ee mov.w sb, 0                                   |         sb = 0;
                                                             |     }
    0x000027f2 cmp.w r8, 0                                   |     
    0x000027f6 it eq                                         |     
                                                             |     if (r8 != 0) {
    0x000027f8 orreq sb, sb, 1                               |         sb |= 1;
                                                             |     }
    0x000027fa lsrs r1, r0, 4                                |     r1 = r0 >> 4;
    0x000027fc cmp r7, 0                                     |     
    0x000027fe it eq                                         |     
                                                             |     if (r7 != 0) {
    0x00002800 orreq sb, sb, 1                               |         sb |= 1;
                                                             |     }
    0x00002804 cmp r0, 0                                     |     
    0x00002806 it eq                                         |     
                                                             |     if (r0 != 0) {
    0x00002808 orreq sb, sb, 1                               |         sb |= 1;
                                                             |     }
    0x0000280c cmp.w sb, 0                                   |     
                                                             |     if (sb != 0) {
    0x00002810 bne 0x28e6                                    |         goto label_5;
                                                             |     }
    0x00002812 ldr r3, [sp, 0x28]                            |     r3 = var_28h;
    0x00002814 str r3, [sp, 0x14]                            |     var_14h = r3;
    0x00002816 lsls r0, r3, 2                                |     r0 = r3 << 2;
    0x00002818 blx 0xfa0                                     |     stack_chk_fail ();
    0x0000281c str r0, [r5, 0xc]                             |     *((r5 + 0xc)) = r0;
    0x0000281e cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00002820 beq 0x28e6                                    |         goto label_5;
                                                             |     }
    0x00002822 ldr r3, [sp, 0x14]                            |     r3 = var_14h;
    0x00002824 cmp r3, 0                                     |     
                                                             |     if (r3 <= 0) {
    0x00002826 ble 0x28de                                    |         goto label_6;
                                                             |     }
    0x00002828 ldr r3, [sp, 0x10]                            |     r3 = var_10h;
    0x0000282a mov r4, sb                                    |     r4 = sb;
    0x0000282c add.w r8, sp, 0x2c                            |     r8 += var_2ch;
    0x00002830 mov r7, sb                                    |     r7 = sb;
    0x00002832 subs r6, r6, r3                               |     r6 -= r3;
    0x00002834 ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x00002836 add r6, r3                                    |     r6 += r3;
    0x00002838 b 0x2844                                      |     
                                                             |     while (r3 == 0) {
                                                             | label_0:
    0x0000283a ldr r3, [sp, 0x28]                            |         r3 = var_28h;
    0x0000283c add.w sb, sb, 1                               |         sb++;
    0x00002840 cmp r4, r3                                    |         
                                                             |         if (r4 >= r3) {
    0x00002842 bge 0x28de                                    |             goto label_6;
                                                             |         }
                                                             | label_1:
    0x00002844 ldrd r0, r3, [sp, 0x18]                       |         __asm ("ldrd r0, r3, [var_18h]");
    0x00002848 movs r2, 4                                    |         r2 = 4;
    0x0000284a mov r1, r8                                    |         r1 = r8;
    0x0000284c str r7, [sp, 4]                               |         var_4h = r7;
    0x0000284e add r3, r6                                    |         r3 += r6;
    0x00002850 mla r3, r0, sb, r3                            |         __asm ("mla r3, r0, sb, r3");
    0x00002854 mov r0, r5                                    |         r0 = r5;
    0x00002856 str r3, [sp]                                  |         *(sp) = r3;
    0x00002858 bl 0x1f0c                                     |         fcn_00001f0c (r0, r1, r2, r3);
    0x0000285c ldr r3, [sp, 0x2c]                            |         r3 = var_2ch;
    0x0000285e cmp r3, 0                                     |         
    0x00002860 beq 0x283a                                    |         
                                                             |     }
    0x00002862 ldr r2, [sp, 0x20]                            |     r2 = var_20h;
    0x00002864 mov r1, fp                                    |     r1 = fp;
    0x00002866 mov r0, r5                                    |     r0 = r5;
    0x00002868 str r7, [sp, 4]                               |     var_4h = r7;
    0x0000286a add r3, r2                                    |     r3 += r2;
    0x0000286c movs r2, 4                                    |     r2 = 4;
    0x0000286e str r3, [sp]                                  |     *(sp) = r3;
    0x00002870 str r3, [sp, 0x2c]                            |     var_2ch = r3;
    0x00002872 bl 0x1f0c                                     |     fcn_00001f0c (r0, r1, r2, r3);
    0x00002876 ldr r3, [sp, 0x30]                            |     r3 = var_30h;
                                                             |     if (r3 != 0) {
    0x00002878 cbz r3, 0x28d0                                |         
    0x0000287a ldr r2, [r5, 0xc]                             |         r2 = *((r5 + 0xc));
    0x0000287c str.w r3, [r2, r4, lsl 2]                     |         __asm ("str.w r3, [r2, r4, lsl 2]");
    0x00002880 adds r4, 1                                    |         r4++;
    0x00002882 b 0x283a                                      |         goto label_0;
                                                             | label_4:
    0x00002884 ldr r1, [pc, 0x94]                            |         r1 = *(0x291c);
    0x00002886 mov r3, r6                                    |         r3 = r6;
    0x00002888 ldr r2, [pc, 0x94]                            |         
    0x0000288a ldr.w r4, [sl, r1]                            |         r4 = *((sl + r1));
    0x0000288e movs r1, 1                                    |         r1 = 1;
    0x00002890 add r2, pc                                    |         r2 = 0x51b4;
    0x00002892 mov sb, r1                                    |         sb = r1;
    0x00002894 ldr r0, [r4]                                  |         r0 = *(r4);
    0x00002896 blx 0xfb8                                     |         fputc (r0, r1);
    0x0000289a ldr r1, [pc, 0x88]                            |         
    0x0000289c add r2, sp, 0x28                              |         r2 += var_28h;
    0x0000289e mov r0, r5                                    |         r0 = r5;
    0x000028a0 add r1, pc                                    |         r1 = 0x51ca;
    0x000028a2 bl 0x26ac                                     |         fcn_000026ac (r0, r1, r2);
                                                             | label_3:
    0x000028a6 ldr r0, [pc, 0x80]                            |         
    0x000028a8 movs r2, 0x1f                                 |         r2 = 0x1f;
    0x000028aa ldr r3, [r4]                                  |         r3 = *(r4);
    0x000028ac movs r1, 1                                    |         r1 = 1;
    0x000028ae add r0, pc                                    |         r0 = 0x51dc;
    0x000028b0 blx 0xf64                                     |         closedir ();
                                                             | label_2:
    0x000028b4 ldr r2, [pc, 0x74]                            |         
    0x000028b6 ldr r3, [pc, 0x40]                            |         r3 = *(0x28fa);
    0x000028b8 add r2, pc                                    |         r2 = 0x51e8;
    0x000028ba ldr r3, [r2, r3]                              |         r3 = imp.__aeabi_unwind_cpp_pr0;
    0x000028bc ldr r2, [r3]                                  |         r2 = imp.__aeabi_unwind_cpp_pr0;
    0x000028be ldr r3, [sp, 0x34]                            |         r3 = var_34h;
    0x000028c0 eors r2, r3                                   |         r2 ^= r3;
    0x000028c2 mov.w r3, 0                                   |         r3 = 0;
                                                             |         if (r2 != r3) {
    0x000028c6 bne 0x28ee                                    |             goto label_7;
                                                             |         }
    0x000028c8 mov r0, sb                                    |         r0 = sb;
    0x000028ca add sp, 0x3c                                  |         
    0x000028cc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}    |         
                                                             |     }
    0x000028d0 ldr r3, [sp, 0x28]                            |     r3 = var_28h;
    0x000028d2 add.w sb, sb, 1                               |     sb++;
    0x000028d6 subs r3, 1                                    |     r3--;
    0x000028d8 cmp r4, r3                                    |     
    0x000028da str r3, [sp, 0x28]                            |     var_28h = r3;
                                                             |     if (r4 < r3) {
    0x000028dc blt 0x2844                                    |         goto label_1;
                                                             |     }
                                                             | label_6:
    0x000028de mov.w sb, 0                                   |     sb = 0;
    0x000028e2 str r3, [r5, 0x10]                            |     *((r5 + 0x10)) = r3;
    0x000028e4 b 0x28b4                                      |     goto label_2;
                                                             | label_5:
    0x000028e6 ldr r3, [pc, 0x34]                            |     r3 = *(0x291e);
    0x000028e8 ldr.w r4, [sl, r3]                            |     r4 = *((sl + r3));
    0x000028ec b 0x28a6                                      |     goto label_3;
                                                             | label_7:
    0x000028ee blx 0xfac                                     |     fprintf_chk ()
    0x000028f2 nop                                           |     
    0x000028f4 movs r7, 0x72                                 |     r7 = 0x72;
    0x000028f6 movs r0, r0                                   |     
    0x000028f8 lsls r4, r3, 4                                |     r4 = r3 << 4;
    0x000028fa movs r0, r0                                   |     
    0x000028fc lsls r4, r2, 0x1b                             |     r4 = r2 << 0x1b;
    0x000028fe movs r0, r0                                   |     
    0x00002900 movs r7, 0x66                                 |     r7 = 0x66;
    0x00002902 movs r0, r0                                   |     
    0x00002904 lsls r2, r1, 0x1b                             |     r2 = r1 << 0x1b;
    0x00002906 movs r0, r0                                   |     
    0x00002908 lsls r0, r4, 0x1c                             |     r0 = r4 << 0x1c;
    0x0000290a movs r0, r0                                   |     
    0x0000290c lsls r2, r2, 0x1b                             |     r2 <<= 0x1b;
    0x0000290e movs r0, r0                                   |     
    0x00002910 lsls r0, r4, 0x1b                             |     r0 = r4 << 0x1b;
    0x00002912 movs r0, r0                                   |     
    0x00002914 lsls r2, r5, 0x1b                             |     r2 = r5 << 0x1b;
    0x00002916 movs r0, r0                                   |     
    0x00002918 lsls r4, r6, 0x1b                             |     r4 = r6 << 0x1b;
    0x0000291a movs r0, r0                                   |     
    0x0000291c lsls r0, r4, 4                                |     r0 = r4 << 4;
    0x0000291e movs r0, r0                                   |     
    0x00002920 lsls r0, r3, 0x16                             |     r0 = r3 << 0x16;
    0x00002922 movs r0, r0                                   |     
    0x00002924 lsls r0, r5, 0x18                             |     r0 = r5 << 0x18;
    0x00002926 movs r0, r0                                   |     
    0x00002928 lsls r2, r3, 0x15                             |     r2 = r3 << 0x15;
    0x0000292a movs r0, r0                                   |     
    0x0000292c movs r6, 0x14                                 |     r6 = 0x14;
    0x0000292e movs r0, r0                                   |     
                                                             | }

[*] Function fprintf used 11 times dcore