[*] Binary protection state of vftpd

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


[*] Function printf tear down of vftpd

    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/bin/vftpd @ 0x37e8 */
                                             | #include <stdint.h>
                                             |  
                                             | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                             |                                ((n & 0x0000ff00) <<  8) | \
                                             |                                ((n & 0x00ff0000) >>  8) | \
                                             |                                ((n & 0xff000000) >> 24)))
                                             |  
    ; (fcn) fcn.000037e8 ()                  | void fcn_000037e8 (int16_t arg_8h, int16_t arg_ch, int16_t arg_10h, int16_t arg_14h, int16_t arg_18h, char * str, int16_t arg_20h, char * s1, int16_t arg_28h, FILE * fildes, int16_t arg_30h, char * dest, int16_t arg_38h, int16_t arg_3ch, int16_t arg_40h, int16_t arg_44h, int16_t arg_48h, int16_t arg_4ch, int16_t arg_5ch, int16_t arg_60h, int16_t arg_64h, int16_t arg_68h, int16_t arg_6ch, int16_t arg_90h, int16_t arg_101h, char * arg_354h, int16_t arg_396h, int16_t arg_397h, int16_t arg_398h, int16_t arg_39ch, char * path, char * s) {
                                             |     int16_t var_0h;
                                             |     int16_t var_4h;
                                             | label_2:
    0x00002142 ldr r3, [sp, 0x3c]            |     r3 = *(arg_3ch);
    0x00002144 ldr r3, [r3]                  |     r3 = *(r3);
    0x00002146 cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x00002148 bne.w 0x24c8                  |         goto label_36;
                                             |     }
    0x0000214c mov sb, r3                    |     sb = r3;
    0x0000214e add.w sl, r4, 1               |     sl = r4 + 1;
    0x00002152 add r7, sp, 0x90              |     r7 += arg_90h;
                                             |     do {
                                             | label_0:
    0x00002154 movs r2, 0x80                 |         r2 = 0x80;
    0x00002156 movs r1, 0                    |         r1 = 0;
    0x00002158 mov r0, r6                    |         r0 = r6;
    0x0000215a mov.w r5, 0x384               |         r5 = 0x384;
    0x0000215e blx 0x1934                    |         memset (r0, r1, r2);
    0x00002162 mov r0, r4                    |         r0 = r4;
    0x00002164 blx 0x1724                    |         fdelt_chk ();
    0x00002168 movs r3, 0                    |         r3 = 0;
    0x0000216a str r7, [sp]                  |         *(sp) = r7;
    0x0000216c ldr r2, [sp, 0x28]            |         r2 = *(arg_28h);
    0x0000216e mov r1, r6                    |         r1 = r6;
    0x00002170 strd r5, r3, [r7]             |         __asm ("strd r5, r3, [r7]");
    0x00002174 ldr.w r3, [r6, r0, lsl 2]     |         offset_0 = r0 << 2;
                                             |         r3 = *((r6 + offset_0));
    0x00002178 orrs r3, r2                   |         r3 |= r2;
    0x0000217a str.w r3, [r6, r0, lsl 2]     |         __asm ("str.w r3, [r6, r0, lsl 2]");
    0x0000217e movs r3, 0                    |         r3 = 0;
    0x00002180 mov r2, r3                    |         r2 = r3;
    0x00002182 mov r0, sl                    |         r0 = sl;
    0x00002184 blx 0x16b8                    |         r0 = select ();
    0x00002188 cmp r0, 0                     |         
                                             |         if (r0 <= 0) {
    0x0000218a ble.w 0x2490                  |             goto label_37;
                                             |         }
    0x0000218e add r5, sp, 0x398             |         r5 += arg_398h;
    0x00002190 rsb.w r2, sb, 0x100           |         r2 = 0x100 - sb;
    0x00002194 add.w r1, r5, sb              |         r1 = r5 + sb;
    0x00002198 mov r0, r4                    |         r0 = r4;
    0x0000219a blx 0x1640                    |         r0 = read (r0, r1, r2);
    0x0000219e cmp r0, 0                     |         
                                             |         if (r0 < 0) {
    0x000021a0 blt.w 0x239e                  |             goto label_38;
                                             |         }
                                             |         if (r0 == 0) {
    0x000021a4 beq.w 0x24c8                  |             goto label_36;
                                             |         }
    0x000021a8 add sb, r0                    |         sb += r0;
    0x000021aa cmp.w sb, 0xff                |         
                                             |         if (sb > 0xff) {
    0x000021ae bgt.w 0x23b8                  |             goto label_39;
                                             |         }
    0x000021b0 strh r3, [r0, 8]              |         *((r0 + 8)) = r3;
                                             | label_1:
    0x000021b2 addw r3, sp, 0x397            |         __asm ("addw r3, arg_397h");
    0x000021b6 ldrb.w r2, [r3, sb]           |         r2 = *((r3 + sb));
    0x000021b8 movs r0, 9                    |         r0 = 9;
    0x000021ba cmp r2, 0xa                   |         
    0x000021bc bne 0x2154                    |         
                                             |     } while (r2 != 0xa);
    0x000021be b 0x23bc                      |     goto label_40;
                                             | label_38:
    0x0000239e blx 0x18d4                    |     r0 = errno_location ();
    0x000023a2 ldr r3, [r0]                  |     r3 = *(r0);
    0x000023a4 cmp r3, 0xb                   |     
                                             |     if (r3 != 0xb) {
    0x000023a6 beq 0x23ae                    |         
    0x000023a8 cmp r3, 4                     |         
                                             |         if (r3 != 4) {
    0x000023aa bne.w 0x24c8                  |             goto label_36;
                                             |         }
                                             |     }
    0x000023ae cmp.w sb, 0                   |     
                                             |     if (sb == 0) {
    0x000023b2 beq.w 0x2154                  |         goto label_0;
                                             |     }
    0x000023b6 b 0x21b2                      |     goto label_1;
                                             | label_39:
    0x000023b8 addw r3, sp, 0x397            |     __asm ("addw r3, arg_397h");
                                             | label_40:
    0x000023bc addw r2, sp, 0x396            |     __asm ("addw r2, arg_396h");
    0x000023c0 ldr.w sl, [pc, 0x414]         |     sl = *(0x000027d8);
    0x000023c4 ldrb.w r2, [r2, sb]           |     r2 = *((r2 + sb));
    0x000023c8 add sl, pc                    |     sl += pc;
    0x000023ca cmp r2, 0xd                   |     
    0x000023cc mov.w r2, 0                   |     r2 = 0;
    0x000023d0 it eq                         |     
                                             |     if (r2 != 0xd) {
    0x000023d2 addeq sb, sb, -1              |         sb += -1;
                                             |     }
    0x000023d6 strb.w r2, [r3, sb]           |     *((r3 + sb)) = r2;
    0x000023da ldr.w sb, [sl, 0x38]          |     sb = *((sl + 0x38));
    0x000023de mov r0, sb                    |     r0 = sb;
    0x000023e0 blx 0x1898                    |     strlen (r0);
    0x000023e4 mov r1, sb                    |     r1 = sb;
    0x000023e6 mov r2, r0                    |     r2 = r0;
    0x000023e8 mov r0, r5                    |     r0 = r5;
    0x000023ea blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x000023ee cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x000023f0 beq 0x24c8                    |         goto label_36;
                                             |     }
    0x000023f2 ldr.w sb, [sl, 0x3c]          |     sb = *((sl + 0x3c));
    0x000023f6 mov r0, sb                    |     r0 = sb;
    0x000023f8 blx 0x1898                    |     strlen (r0);
    0x000023fc mov r1, sb                    |     r1 = sb;
    0x000023fe mov r2, r0                    |     r2 = r0;
    0x00002400 mov r0, r5                    |     r0 = r5;
    0x00002402 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x00002406 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00002408 beq.w 0x3206                  |         goto label_41;
                                             |     }
    0x0000240c ldr.w sb, [sl, 0x48]          |     sb = *((sl + 0x48));
    0x00002410 mov r0, sb                    |     r0 = sb;
    0x00002412 blx 0x1898                    |     strlen (r0);
    0x00002416 mov r1, sb                    |     r1 = sb;
    0x00002418 mov r2, r0                    |     r2 = r0;
    0x0000241a mov r0, r5                    |     r0 = r5;
    0x0000241c blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x00002420 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00002422 beq.w 0x32aa                  |         goto label_42;
                                             |     }
    0x00002426 ldr.w sb, [sl, 0x50]          |     sb = *((sl + 0x50));
    0x0000242a mov r0, sb                    |     r0 = sb;
    0x0000242c blx 0x1898                    |     strlen (r0);
    0x00002430 mov r1, sb                    |     r1 = sb;
    0x00002432 mov r2, r0                    |     r2 = r0;
    0x00002434 mov r0, r5                    |     r0 = r5;
    0x00002436 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x0000243a cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x0000243c beq.w 0x32a2                  |         goto label_43;
                                             |     }
    0x00002440 ldr r3, [sp, 0x18]            |     r3 = *(arg_18h);
    0x00002442 cmp r3, 1                     |     
                                             |     if (r3 == 1) {
    0x00002444 beq.w 0x32b2                  |         goto label_44;
                                             |     }
    0x00002448 cmp r3, 2                     |     
                                             |     if (r3 == 2) {
    0x0000244a beq 0x24cc                    |         goto label_45;
                                             |     }
    0x0000244c cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x0000244e bne.w 0x2142                  |         goto label_2;
                                             |     }
    0x00002452 ldr.w sb, [sl, 0x58]          |     sb = *((sl + 0x58));
    0x00002456 mov r0, sb                    |     r0 = sb;
    0x00002458 blx 0x1898                    |     strlen (r0);
    0x0000245c mov r1, sb                    |     r1 = sb;
    0x0000245e mov r7, r0                    |     r7 = r0;
    0x00002460 mov r2, r0                    |     r2 = r0;
    0x00002462 mov r0, r5                    |     r0 = r5;
    0x00002464 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x00002468 cbnz r0, 0x2478               |         
    0x0000246a mov r0, r5                    |         r0 = r5;
    0x0000246c blx 0x1898                    |         strlen (r0);
    0x00002470 adds r3, r7, 1                |         r3 = r7 + 1;
    0x00002472 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x00002474 bhi.w 0x3230                  |             goto label_46;
                                             |         }
                                             |     }
    0x00002478 ldr r3, [pc, 0x360]           |     
    0x0000247a add r3, pc                    |     r3 = 0x4c5a;
    0x0000247c ldr r5, [r3, 0x60]            |     r5 = *(0x4cba);
                                             | label_3:
    0x0000247e mov r0, r5                    |     r0 = r5;
    0x00002480 blx 0x1898                    |     strlen (r0);
    0x00002484 mov r1, r5                    |     r1 = r5;
    0x00002486 mov r2, r0                    |     r2 = r0;
    0x00002488 mov r0, r4                    |     r0 = r4;
    0x0000248a blx 0x195c                    |     fcn_0000195c ();
    0x0000248e b 0x2142                      |     goto label_2;
                                             | label_37:
    0x00002490 mov fp, r4                    |     
                                             |     if (r0 == r3) {
    0x00002492 beq.w 0x3292                  |         goto label_47;
                                             |     }
                                             |     do {
                                             | label_24:
    0x00002496 ldr r3, [pc, 0x348]           |         
    0x00002498 add r3, pc                    |         r3 = 0x4c7e;
    0x0000249a ldr.w r4, [r3, 0xe8]          |         r4 = *(0x4d66);
    0x0000249e mov r0, r4                    |         r0 = r4;
    0x000024a0 blx 0x1898                    |         strlen (r0);
    0x000024a4 mov r1, r4                    |         r1 = r4;
    0x000024a6 mov r2, r0                    |         r2 = r0;
    0x000024a8 mov r0, fp                    |         r0 = fp;
    0x000024aa blx 0x195c                    |         fcn_0000195c ();
    0x000024ae mov r0, fp                    |         r0 = fp;
    0x000024b0 blx 0x1ab4                    |         fdipc_client_socket ();
    0x000024b4 ldr r2, [pc, 0x32c]           |         
    0x000024b6 movs r1, 1                    |         r1 = 1;
    0x000024b8 ldr r3, [sp, 0x20]            |         r3 = *(arg_20h);
    0x000024ba movs r0, 0x26                 |         r0 = 0x26;
    0x000024bc add r2, pc                    |         r2 = 0x4ca4;
    0x000024be blx 0x19cc                    |         fcn_000019cc ();
                                             | label_32:
    0x000024c2 mov r0, fp                    |         r0 = fp;
    0x000024c4 blx 0x1874                    |         exit (r0);
                                             | label_36:
    0x000024c8 mov fp, r4                    |         
    0x000024ca b 0x2496                      |         
                                             |     } while (1);
                                             | label_45:
    0x000024cc ldr.w r1, [sl, 0x70]          |     r1 = *((sl + 0x70));
    0x000024d0 mov r0, r1                    |     r0 = r1;
    0x000024d2 str r1, [sp, 0x1c]            |     *(str) = r1;
    0x000024d4 blx 0x1898                    |     strlen (r0);
    0x000024d8 ldr r1, [sp, 0x1c]            |     r1 = *(str);
    0x000024da mov sb, r0                    |     sb = r0;
    0x000024dc mov r2, r0                    |     r2 = r0;
    0x000024de mov r0, r5                    |     r0 = r5;
    0x000024e0 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x000024e4 cbnz r0, 0x24f6               |         
    0x000024e6 mov r0, r5                    |         r0 = r5;
    0x000024e8 blx 0x1898                    |         strlen (r0);
    0x000024ec add.w r3, sb, 1               |         r3 = sb + 1;
    0x000024f0 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x000024f2 bhi.w 0x33c2                  |             goto label_48;
                                             |         }
                                             |     }
    0x000024f6 ldr r3, [pc, 0x2f0]           |     
    0x000024f8 add r3, pc                    |     r3 = 0x4ce6;
    0x000024fa ldr.w sb, [r3, 0x78]          |     sb = *(0x4d5e);
    0x000024fe str r3, [sp, 0x1c]            |     *(str) = r3;
    0x00002500 mov r0, sb                    |     r0 = sb;
    0x00002502 blx 0x1898                    |     strlen (r0);
    0x00002506 mov r1, sb                    |     r1 = sb;
    0x00002508 mov r2, r0                    |     r2 = r0;
    0x0000250a mov r0, r5                    |     r0 = r5;
    0x0000250c blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x00002510 cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00002512 beq 0x25e4                    |         
    0x00002514 ldr r3, [sp, 0x1c]            |         r3 = *(str);
    0x00002516 ldr.w sb, [r3, 0x7c]          |         sb = *((r3 + 0x7c));
    0x0000251a mov r0, sb                    |         r0 = sb;
    0x0000251c blx 0x1898                    |         strlen (r0);
    0x00002520 mov r1, sb                    |         r1 = sb;
    0x00002522 mov r2, r0                    |         r2 = r0;
    0x00002524 mov r0, r5                    |         r0 = r5;
    0x00002526 blx 0x18ec                    |         strncasecmp (r0, r1, r2);
    0x0000252a ldr r3, [sp, 0x1c]            |         r3 = *(str);
    0x0000252c mov sb, r0                    |         sb = r0;
    0x0000252e ldr.w sl, [r3, 0x80]          |         sl = *((r3 + 0x80));
    0x00002532 mov r0, sl                    |         r0 = sl;
    0x00002534 blx 0x1898                    |         strlen (r0);
    0x00002538 mov r1, sl                    |         r1 = sl;
    0x0000253a mov r2, r0                    |         r2 = r0;
    0x0000253c mov r0, r5                    |         r0 = r5;
    0x0000253e blx 0x18ec                    |         r0 = strncasecmp (r0, r1, r2);
    0x00002542 mov sl, r0                    |         sl = r0;
    0x00002544 cmp.w sb, 0                   |         
                                             |         if (sb == 0) {
    0x00002548 beq.w 0x26d2                  |             goto label_49;
                                             |         }
    0x0000254c cmp r0, 0                     |         
                                             |         if (r0 == 0) {
    0x0000254e beq.w 0x26d2                  |             goto label_49;
                                             |         }
    0x00002552 ldr r3, [sp, 0x1c]            |         r3 = *(str);
    0x00002554 ldr.w sl, [r3, 0x84]          |         sl = *((r3 + 0x84));
    0x00002558 mov r0, sl                    |         r0 = sl;
    0x0000255a blx 0x1898                    |         strlen (r0);
    0x0000255e mov r1, sl                    |         r1 = sl;
    0x00002560 mov r2, r0                    |         r2 = r0;
    0x00002562 mov sb, r0                    |         sb = r0;
    0x00002564 mov r0, r5                    |         r0 = r5;
    0x00002566 blx 0x18ec                    |         r0 = strncasecmp (r0, r1, r2);
    0x0000256a mov sl, r0                    |         sl = r0;
                                             |         if (r0 == 0) {
    0x0000256c cbnz r0, 0x257c               |             
    0x0000256e mov r0, r5                    |             r0 = r5;
    0x00002570 blx 0x1898                    |             strlen (r0);
    0x00002574 add.w r3, sb, 1               |             r3 = sb + 1;
    0x00002578 cmp r0, r3                    |             
                                             |             if (r0 > r3) {
    0x0000257a bhi 0x261a                    |                 goto label_50;
                                             |             }
                                             |         }
    0x0000257c ldr r3, [pc, 0x26c]           |         
    0x0000257e add r3, pc                    |         r3 = 0x4d6e;
    0x00002580 ldr.w sl, [r3, 0x8c]          |         sl = *(0x4dfa);
    0x00002584 str r3, [sp, 0x30]            |         *(arg_30h) = r3;
    0x00002586 mov r0, sl                    |         r0 = sl;
    0x00002588 blx 0x1898                    |         strlen (r0);
    0x0000258c mov r1, sl                    |         r1 = sl;
    0x0000258e mov sb, r0                    |         sb = r0;
    0x00002590 mov r2, r0                    |         r2 = r0;
    0x00002592 mov r0, r5                    |         r0 = r5;
    0x00002594 blx 0x18ec                    |         strncasecmp (r0, r1, r2);
    0x00002596 invalid                       |         
    0x0000259a mov r0, r5                    |         r0 = r5;
    0x0000259c blx 0x1898                    |         strlen (r0);
    0x000025a0 add.w r3, sb, 1               |         r3 = sb + 1;
    0x000025a4 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x000025a6 bhi.w 0x2e96                  |             goto label_51;
                                             |         }
    0x000025aa ldr.w sb, [pc, 0x244]         |         sb = *(0x000027f0);
    0x000025ae add sb, pc                    |         sb += pc;
    0x000025b0 ldr.w sl, [sb, 0x9c]          |         sl = *((sb + 0x9c));
    0x000025b4 mov r0, sl                    |         r0 = sl;
    0x000025b6 blx 0x1898                    |         strlen (r0);
    0x000025ba mov r1, sl                    |         r1 = sl;
    0x000025bc mov r2, r0                    |         r2 = r0;
    0x000025be mov r0, r5                    |         r0 = r5;
    0x000025c0 blx 0x18ec                    |         r0 = strncasecmp (r0, r1, r2);
    0x000025c4 cmp r0, 0                     |         
                                             |         if (r0 != 0) {
    0x000025c6 bne.w 0x280c                  |             goto label_52;
                                             |         }
    0x000025ca ldrb r3, [r5, 5]              |         r3 = *((r5 + 5));
    0x000025cc and r2, r3, 0xf7              |         r2 = r3 & 0xf7;
    0x000025d0 cmp r2, 0x41                  |         
                                             |         if (r2 != 0x41) {
    0x000025d2 bne.w 0x26f8                  |             goto label_53;
                                             |         }
    0x000025d6 ldr r2, [pc, 0x21c]           |         
    0x000025d8 ldr.w r5, [sb, 0x54]          |         r5 = *((sb + 0x54));
    0x000025dc add r2, pc                    |         r2 = 0x4dd6;
    0x000025de strb.w r3, [r2, 0x74]         |         *((r2 + 0x74)) = r3;
    0x000025e2 b 0x247e                      |         goto label_3;
                                             |     }
    0x000025e4 ldrb.w sl, [r8, 0xc]          |     sl = *((r8 + 0xc));
    0x000025e8 cmp.w sl, 0                   |     
                                             |     if (sl != 0) {
    0x000025ec bne.w 0x2e6c                  |         goto label_54;
                                             |     }
    0x000025f0 movs r0, 2                    |     r0 = 2;
    0x000025f2 bl 0x3a0c                     |     r0 = fcn_00003a0c (r0);
    0x000025f6 subs r5, r0, 0                |     r5 = r0 - 0;
                                             |     if (r5 < r0) {
    0x000025f8 blt 0x26c2                    |         goto label_55;
                                             |     }
    0x000025fa movs r3, 0x80                 |     r3 = 0x80;
    0x000025fc mov r2, r7                    |     r2 = r7;
    0x000025fe mov r1, r6                    |     r1 = r6;
    0x00002600 mov r0, r4                    |     r0 = r4;
    0x00002602 str r3, [r7]                  |     *(r7) = r3;
    0x00002604 blx 0x1a2c                    |     r0 = fcn_00001a2c ();
    0x00002608 cmp r0, 0                     |     
                                             |     if (r0 < 0) {
    0x0000260a blt 0x2616                    |         goto label_56;
                                             |     }
    0x0000260c ldrh r3, [r6]                 |     r3 = *(r6);
    0x0000260e cmp r3, 2                     |     
                                             |     if (r3 == 2) {
    0x00002610 beq 0x26ca                    |         goto label_57;
                                             |     }
    0x00002612 cmp r3, 0xa                   |     
    0x00002614 beq 0x2688                    |     
                                             |     while (sb != r2) {
                                             | label_56:
    0x00002616 mov sb, sl                    |         sb = sl;
    0x00002618 b 0x26a0                      |         goto label_58;
                                             | label_50:
    0x0000261a addw r0, sp, 0x39d            |         __asm ("addw r0, path");
    0x0000261e bl 0x3b2c                     |         fcn_00003b2c (r0);
    0x00002622 add r3, sp, 0x6c              |         r3 += arg_6ch;
    0x00002624 add r2, sp, 0x68              |         r2 += arg_68h;
    0x00002626 mov r1, sl                    |         r1 = sl;
    0x00002628 strd sl, r4, [sp]             |         __asm ("strd sl, r4, [sp]");
    0x0000262c mov sb, r0                    |         sb = r0;
    0x0000262e bl 0x45cc                     |         r0 = fcn_000045cc (r0, r1, r2, r3, r4, r5, r6);
    0x00002632 mov r5, r0                    |         r5 = r0;
    0x00002634 cmp r0, 0                     |         
                                             |         if (r0 == 0) {
    0x00002636 beq.w 0x2a7c                  |             goto label_59;
                                             |         }
                                             | label_5:
    0x0000263a cmp r5, 0                     |         
                                             |         if (r5 < 0) {
    0x0000263c blt.w 0x299e                  |             goto label_4;
                                             |         }
    0x00002640 ldr.w sb, [pc, 0x1b4]         |         sb = *(0x000027f8);
    0x00002644 add sb, pc                    |         sb += pc;
    0x00002646 ldr.w r7, [sb, 0x1c]          |         r7 = *((sb + 0x1c));
    0x0000264a mov r0, r7                    |         r0 = r7;
    0x0000264c blx 0x1898                    |         strlen (r0);
    0x00002650 mov r1, r7                    |         r1 = r7;
    0x00002652 mov r2, r0                    |         r2 = r0;
    0x00002654 mov r0, r4                    |         r0 = r4;
    0x00002656 blx 0x195c                    |         fcn_0000195c ();
    0x0000265a mov r0, r8                    |         r0 = r8;
    0x0000265c bl 0x3c44                     |         r0 = fcn_00003c44 (r0);
    0x00002660 subs r7, r0, 0                |         r7 = r0 - 0;
                                             |         if (r7 < r0) {
    0x00002662 blt.w 0x2ca4                  |             goto label_60;
                                             |         }
    0x00002666 ldr r3, [pc, 0x194]           |         
    0x00002668 add r3, pc                    |         r3 = 0x4e6a;
    0x0000266a ldrb.w r3, [r3, 0x74]         |         r3 = *((r3 + 0x74));
    0x0000266e cmp r3, 0x49                  |         
                                             |         if (r3 == 0x49) {
    0x00002670 beq.w 0x2c50                  |             goto label_61;
                                             |         }
    0x00002674 cmp r3, 0x41                  |         
                                             |         if (r3 == 0x41) {
    0x00002676 beq.w 0x2da2                  |             goto label_62;
                                             |         }
    0x0000267a ldr r2, [pc, 0x184]           |         
    0x0000267c movs r1, 1                    |         r1 = 1;
    0x0000267e movs r0, 3                    |         r0 = 3;
    0x00002680 add r2, pc                    |         r2 = 0x4e86;
    0x00002682 blx 0x19cc                    |         fcn_000019cc ();
    0x00002686 b 0x2142                      |         goto label_2;
    0x00002688 ldrd r2, r3, [r6, 8]          |         __asm ("ldrd r2, r3, [r6, 8]");
    0x0000268c orrs.w sb, r2, r3             |         sb = r2 | r3;
    0x00002690 bne 0x2616                    |         
                                             |     }
    0x00002692 ldr r3, [r6, 0x10]            |     r3 = *((r6 + 0x10));
    0x00002694 cmn.w r3, 0x10000             |     
                                             |     if (r3 != 0x10000) {
    0x00002698 bne 0x26a0                    |         goto label_58;
                                             |     }
    0x0000269a ldr r3, [r6, 0x14]            |     r3 = *((r6 + 0x14));
    0x0000269c rev.w sb, r3                  |     r3 = SWAP32 (sb);
                                             |     do {
                                             | label_58:
    0x000026a0 mov r2, r7                    |         r2 = r7;
    0x000026a2 mov r1, r6                    |         r1 = r6;
    0x000026a4 mov r0, r5                    |         r0 = r5;
    0x000026a6 blx 0x1a2c                    |         r0 = fcn_00001a2c ();
    0x000026aa cmp r0, 0                     |         
                                             |         if (r0 >= 0) {
    0x000026ac blt 0x26bc                    |             
    0x000026ae ldrh r3, [r6]                 |             r3 = *(r6);
    0x000026b0 cmp r3, 2                     |             
                                             |             if (r3 == 2) {
    0x000026b2 beq.w 0x2d4c                  |                 goto label_63;
                                             |             }
    0x000026b4 strh r3, [r1, 0x1a]           |             *((r1 + 0x1a)) = r3;
    0x000026b6 cmp r3, 0xa                   |             
                                             |             if (r3 == 0xa) {
    0x000026b8 beq.w 0x2d38                  |                 goto label_64;
                                             |             }
                                             |         }
                                             | label_11:
    0x000026bc mov r0, r5                    |         r0 = r5;
    0x000026be blx 0x1ab4                    |         fdipc_client_socket ();
                                             | label_55:
    0x000026c2 ldr r3, [pc, 0x140]           |         
    0x000026c4 add r3, pc                    |         r3 = 0x4ece;
    0x000026c6 ldr r5, [r3, 0x14]            |         r5 = *(0x4ee2);
    0x000026c8 b 0x247e                      |         goto label_3;
                                             | label_57:
    0x000026ca ldr r3, [r6, 4]               |         r3 = *((r6 + 4));
    0x000026cc rev.w sb, r3                  |         r3 = SWAP32 (sb);
    0x000026d0 b 0x26a0                      |         
                                             |     } while (1);
                                             | label_49:
    0x000026d2 mov r0, r5                    |     r0 = r5;
    0x000026d4 blx 0x1898                    |     r0 = strlen (r0);
    0x000026d8 cmp r0, 5                     |     
                                             |     if (r0 >= 5) {
    0x000026da bls 0x26e4                    |         
    0x000026dc ldrb r3, [r5, 5]              |         r3 = *((r5 + 5));
    0x000026de cmp r3, 0x2d                  |         
                                             |         if (r3 != 0x2d) {
    0x000026e0 bne.w 0x31cc                  |             goto label_65;
                                             |         }
                                             |     }
    0x000026e4 ldr r0, [pc, 0x120]           |     
    0x000026e6 clz r3, sl                    |     r3 &= sl;
    0x000026ea lsrs r3, r3, 5                |     r3 >>= 5;
    0x000026ec mov r2, r8                    |     r2 = r8;
    0x000026ee mov r1, r4                    |     r1 = r4;
    0x000026f0 add r0, pc                    |     r0 = 0x4efc;
    0x000026f2 bl 0x3ec0                     |     fcn_00003ec0 (r0, r1, r2, r3);
    0x000026f4 invalid                       |     
                                             | label_53:
    0x000026f8 ldr.w r5, [sb, 0xa0]          |     r5 = *((sb + 0xa0));
    0x000026fc b 0x247e                      |     goto label_3;
                                             | label_52:
    0x0000280c ldr.w r1, [sb, 0xa4]          |     r1 = *((sb + 0xa4));
    0x00002810 mov r0, r1                    |     r0 = r1;
    0x00002812 str r1, [sp, 0x1c]            |     *(str) = r1;
    0x00002814 blx 0x1898                    |     strlen (r0);
    0x00002816 strex sb, sb, [r0, 0x1c]      |     __asm ("strex sb, sb, [r0, 0x1c]");
    0x0000281a mov sl, r0                    |     sl = r0;
    0x0000281c mov r2, r0                    |     r2 = r0;
    0x0000281e mov r0, r5                    |     r0 = r5;
    0x00002820 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x00002824 cbnz r0, 0x2836               |         
    0x00002826 mov r0, r5                    |         r0 = r5;
    0x00002828 blx 0x1898                    |         strlen (r0);
    0x0000282c add.w r3, sl, 1               |         r3 = sl + 1;
    0x00002830 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x00002832 bhi.w 0x29a8                  |             goto label_66;
                                             |         }
                                             |     }
    0x00002836 ldr.w sb, [pc, 0xc40]         |     sb = *(0x00003478);
    0x0000283a add sb, pc                    |     sb += pc;
    0x0000283c ldr.w r1, [sb, 0xa8]          |     r1 = *((sb + 0xa8));
    0x00002840 mov r0, r1                    |     r0 = r1;
    0x00002842 str r1, [sp, 0x1c]            |     *(str) = r1;
    0x00002844 blx 0x1898                    |     strlen (r0);
    0x00002848 ldr r1, [sp, 0x1c]            |     r1 = *(str);
    0x0000284a mov sl, r0                    |     sl = r0;
    0x0000284c mov r2, r0                    |     r2 = r0;
    0x0000284e mov r0, r5                    |     r0 = r5;
    0x00002850 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x00002854 cbnz r0, 0x2866               |         
    0x00002856 mov r0, r5                    |         r0 = r5;
    0x00002858 blx 0x1898                    |         strlen (r0);
    0x0000285c add.w r3, sl, 1               |         r3 = sl + 1;
    0x00002860 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x00002862 bhi.w 0x3742                  |             goto label_67;
                                             |         }
                                             |     }
    0x00002866 ldr.w sb, [pc, 0xc14]         |     sb = *(0x0000347c);
    0x0000286a add sb, pc                    |     sb += pc;
    0x0000286c ldr.w r1, [sb, 0xac]          |     r1 = *((sb + 0xac));
    0x00002870 mov r0, r1                    |     r0 = r1;
    0x00002872 str r1, [sp, 0x1c]            |     *(str) = r1;
    0x00002874 blx 0x1898                    |     strlen (r0);
    0x00002878 ldr r1, [sp, 0x1c]            |     r1 = *(str);
    0x0000287a mov sl, r0                    |     sl = r0;
    0x0000287c mov r2, r0                    |     r2 = r0;
    0x0000287e mov r0, r5                    |     r0 = r5;
    0x00002880 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x00002884 cbnz r0, 0x2896               |         
    0x00002886 mov r0, r5                    |         r0 = r5;
    0x00002888 blx 0x1898                    |         strlen (r0);
    0x0000288c add.w r3, sl, 1               |         r3 = sl + 1;
    0x00002890 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x00002892 bhi.w 0x35a2                  |             goto label_68;
                                             |         }
                                             |     }
    0x00002896 ldr.w sb, [pc, 0xbe8]         |     sb = *(0x00003480);
    0x0000289a add sb, pc                    |     sb += pc;
    0x0000289c ldr.w sl, [sb, 0xb0]          |     sl = *((sb + 0xb0));
    0x000028a0 mov r0, sl                    |     r0 = sl;
    0x000028a2 blx 0x1898                    |     strlen (r0);
    0x000028a6 mov r1, sl                    |     r1 = sl;
    0x000028a8 mov r2, r0                    |     r2 = r0;
    0x000028aa mov r0, r5                    |     r0 = r5;
    0x000028ac blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x000028b0 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x000028b2 beq.w 0x35ca                  |         goto label_69;
                                             |     }
    0x000028b6 ldr.w sl, [sb, 0xb8]          |     sl = *((sb + 0xb8));
    0x000028ba mov r0, sl                    |     r0 = sl;
    0x000028bc blx 0x1898                    |     strlen (r0);
    0x000028c0 mov r1, sl                    |     r1 = sl;
    0x000028c2 mov sb, r0                    |     sb = r0;
    0x000028c4 mov r2, r0                    |     r2 = r0;
    0x000028c6 mov r0, r5                    |     r0 = r5;
    0x000028c8 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x000028cc cbnz r0, 0x28de               |         
    0x000028ce mov r0, r5                    |         r0 = r5;
    0x000028d0 blx 0x1898                    |         strlen (r0);
    0x000028d4 add.w r3, sb, 1               |         r3 = sb + 1;
    0x000028d8 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x000028da bhi.w 0x35b8                  |             goto label_70;
                                             |         }
                                             |     }
    0x000028de ldr.w sb, [pc, 0xba4]         |     sb = *(0x00003484);
    0x000028e2 add sb, pc                    |     sb += pc;
    0x000028e4 ldr.w r1, [sb, 0xbc]          |     r1 = *((sb + 0xbc));
    0x000028e8 mov r0, r1                    |     r0 = r1;
    0x000028ea str r1, [sp, 0x1c]            |     *(str) = r1;
    0x000028ec blx 0x1898                    |     strlen (r0);
    0x000028f0 ldr r1, [sp, 0x1c]            |     r1 = *(str);
    0x000028f2 mov sl, r0                    |     sl = r0;
    0x000028f4 mov r2, r0                    |     r2 = r0;
    0x000028f6 mov r0, r5                    |     r0 = r5;
    0x000028f8 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x000028fc cbnz r0, 0x290e               |         
    0x000028fe mov r0, r5                    |         r0 = r5;
    0x00002900 blx 0x1898                    |         strlen (r0);
    0x00002904 add.w r3, sl, 1               |         r3 = sl + 1;
    0x00002908 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x0000290a bhi.w 0x3612                  |             goto label_71;
                                             |         }
                                             |     }
    0x0000290e ldr.w sb, [pc, 0xb78]         |     sb = *(0x00003488);
    0x00002912 add sb, pc                    |     sb += pc;
    0x00002914 ldr.w sl, [sb, 0xcc]          |     sl = *((sb + 0xcc));
    0x00002916 adr r0, 0x330                 |     r0 = 0x330;
    0x00002918 mov r0, sl                    |     r0 = sl;
    0x0000291a blx 0x1898                    |     strlen (r0);
    0x0000291e mov r1, sl                    |     r1 = sl;
    0x00002920 mov r2, r0                    |     r2 = r0;
    0x00002922 mov r0, r5                    |     r0 = r5;
    0x00002924 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x00002928 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x0000292a beq.w 0x2a6c                  |         goto label_72;
                                             |     }
    0x0000292e ldr.w sl, [sb, 0xd0]          |     sl = *((sb + 0xd0));
    0x00002932 mov r0, sl                    |     r0 = sl;
    0x00002934 blx 0x1898                    |     strlen (r0);
    0x00002938 mov r1, sl                    |     r1 = sl;
    0x0000293a mov r2, r0                    |     r2 = r0;
    0x0000293c str r0, [sp, 0x1c]            |     *(str) = r0;
    0x0000293e mov r0, r5                    |     r0 = r5;
    0x00002940 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x00002944 mov sl, r0                    |     sl = r0;
                                             |     if (r0 == 0) {
    0x00002946 cbnz r0, 0x2958               |         
    0x00002948 mov r0, r5                    |         r0 = r5;
    0x0000294a blx 0x1898                    |         strlen (r0);
    0x0000294e ldr r2, [sp, 0x1c]            |         r2 = *(str);
    0x00002950 adds r3, r2, 1                |         r3 = r2 + 1;
    0x00002952 cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x00002954 bhi.w 0x2b8c                  |             goto label_73;
                                             |         }
                                             |     }
    0x00002958 ldr.w sb, [pc, 0xb30]         |     sb = *(0x0000348c);
    0x0000295c add sb, pc                    |     sb += pc;
    0x0000295e ldr.w r1, [sb, 0xd8]          |     r1 = *((sb + 0xd8));
    0x00002962 mov r0, r1                    |     r0 = r1;
    0x00002964 str r1, [sp, 0x1c]            |     *(str) = r1;
    0x00002966 blx 0x1898                    |     strlen (r0);
    0x0000296a ldr r1, [sp, 0x1c]            |     r1 = *(str);
    0x0000296c mov sl, r0                    |     sl = r0;
    0x0000296e mov r2, r0                    |     r2 = r0;
    0x00002970 mov r0, r5                    |     r0 = r5;
    0x00002972 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 != 0) {
    0x00002976 cbnz r0, 0x29c0               |         goto label_74;
                                             |     }
    0x00002978 mov r0, r5                    |     r0 = r5;
    0x0000297a blx 0x1898                    |     strlen (r0);
    0x0000297e add.w r3, sl, 1               |     r3 = sl + 1;
    0x00002982 cmp r0, r3                    |     
                                             |     if (r0 < r3) {
    0x00002984 bls 0x29c0                    |         goto label_74;
                                             |     }
    0x00002986 ldr r5, [sp, 0x34]            |     r5 = *(dest);
    0x00002988 ldrb r3, [r5]                 |     r3 = *(r5);
                                             |     if (r3 == 0) {
    0x0000298a cbz r3, 0x299e                |         goto label_4;
                                             |     }
    0x0000298c addw r0, sp, 0x39d            |     __asm ("addw r0, path");
    0x00002990 bl 0x3b2c                     |     r0 = fcn_00003b2c (r0);
    0x00002994 mov r1, r0                    |     r1 = r0;
    0x00002996 mov r0, r5                    |     r0 = r5;
    0x00002998 blx 0x1850                    |     r0 = rename (r0, r1);
                                             |     if (r0 == 0) {
    0x0000299c cbz r0, 0x29ba                |         goto label_30;
                                             |     }
                                             |     do {
                                             | label_4:
    0x0000299e mov r0, r4                    |         r0 = r4;
    0x000029a0 bl 0x38b0                     |         fcn_000038b0 (r0);
    0x000029a4 b.w 0x2142                    |         goto label_2;
                                             | label_66:
    0x000029a8 add r0, sp, 0x39c             |         r0 += arg_39ch;
    0x000029aa bl 0x3b2c                     |         fcn_00003b2c (r0);
    0x000029ae movw r1, 0x1ed                |         r1 = 0x1ed;
    0x000029b2 blx 0x191c                    |         r0 = mkdir ();
    0x000029b6 cmp r0, 0                     |         
    0x000029b8 bne 0x299e                    |         
                                             |     } while (r0 != 0);
                                             | label_30:
    0x000029ba ldr.w r5, [sb, 0x18]          |     r5 = *((sb + 0x18));
    0x000029be b 0x247e                      |     goto label_3;
                                             | label_74:
    0x000029c0 ldr.w sl, [pc, 0xacc]         |     sl = *(0x00003490);
    0x000029c4 add sl, pc                    |     sl += pc;
    0x000029c6 ldr.w r1, [sl, 0xdc]          |     r1 = *((sl + 0xdc));
    0x000029ca mov r0, r1                    |     r0 = r1;
    0x000029cc str r1, [sp, 0x1c]            |     *(str) = r1;
    0x000029ce blx 0x1898                    |     strlen (r0);
    0x000029d2 ldr r1, [sp, 0x1c]            |     r1 = *(str);
    0x000029d4 mov sb, r0                    |     sb = r0;
    0x000029d6 mov r2, r0                    |     r2 = r0;
    0x000029d8 mov r0, r5                    |     r0 = r5;
    0x000029da blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x000029de cbnz r0, 0x29ee               |         
    0x000029e0 mov r0, r5                    |         r0 = r5;
    0x000029e2 blx 0x1898                    |         strlen (r0);
    0x000029e6 add.w r3, sb, 1               |         r3 = sb + 1;
    0x000029ea cmp r0, r3                    |         
                                             |         if (r0 > r3) {
    0x000029ec bhi 0x2aae                    |             goto label_75;
                                             |         }
                                             |     }
    0x000029ee ldr.w sb, [pc, 0xaa4]         |     sb = *(0x00003494);
    0x000029f2 add sb, pc                    |     sb += pc;
    0x000029f4 ldr.w sl, [sb, 0xe4]          |     sl = *((sb + 0xe4));
    0x000029f8 mov r0, sl                    |     r0 = sl;
    0x000029fa blx 0x1898                    |     strlen (r0);
    0x000029fe mov r1, sl                    |     r1 = sl;
    0x00002a00 mov r2, r0                    |     r2 = r0;
    0x00002a02 str r0, [sp, 0x1c]            |     *(str) = r0;
    0x00002a04 mov r0, r5                    |     r0 = r5;
    0x00002a06 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
    0x00002a0a mov sl, r0                    |     sl = r0;
    0x00002a0c cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00002a0e bne.w 0x2bfa                  |         goto label_31;
                                             |     }
    0x00002a12 mov r0, r5                    |     r0 = r5;
    0x00002a14 blx 0x1898                    |     strlen (r0);
    0x00002a16 vpmax.s8 d25, d0, d7          |     __asm ("vpmax.s8 d25, d0, d7");
    0x00002a1a adds r3, r2, 1                |     r3 = r2 + 1;
    0x00002a1c cmp r0, r3                    |     
                                             |     if (r0 < r3) {
    0x00002a1e bls.w 0x2bf2                  |         goto label_76;
                                             |     }
    0x00002a22 ldrb r3, [r5, r2]             |     r3 = *((r5 + r2));
    0x00002a24 add r5, r2                    |     r5 += r2;
    0x00002a26 cmp r3, 0x20                  |     
                                             |     if (r3 != 0x20) {
    0x00002a28 bne.w 0x2bfa                  |         goto label_31;
                                             |     }
    0x00002a2c ldr.w r1, [pc, 0xa68]         |     
    0x00002a30 adds r5, 1                    |     r5++;
    0x00002a32 mov r0, r5                    |     r0 = r5;
    0x00002a34 add r1, pc                    |     r1 = 0x5ed0;
    0x00002a36 blx 0x15f8                    |     r0 = strcmp (r0, r1);
    0x00002a3a cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00002a3c beq.w 0x2c00                  |         goto label_77;
                                             |     }
    0x00002a40 mov r1, sl                    |     r1 = sl;
    0x00002a42 mov r0, r5                    |     r0 = r5;
    0x00002a44 movs r2, 0xa                  |     r2 = 0xa;
    0x00002a46 blx 0x1610                    |     r0 = strtol (r0, r1, r2);
    0x00002a4a cmp r0, 1                     |     
    0x00002a4c mov r3, r0                    |     r3 = r0;
                                             |     if (r0 == 1) {
    0x00002a4e beq.w 0x2b58                  |         goto label_78;
                                             |     }
    0x00002a52 cmp r0, 2                     |     
                                             |     if (r0 == 2) {
    0x00002a54 beq.w 0x2bba                  |         goto label_79;
                                             |     }
    0x00002a58 ldr.w r2, [pc, 0xa40]         |     
    0x00002a5c movs r1, 1                    |     r1 = 1;
    0x00002a5e movs r0, 6                    |     r0 = 6;
    0x00002a60 add r2, pc                    |     r2 = 0x5f00;
    0x00002a62 blx 0x19cc                    |     fcn_000019cc ();
    0x00002a66 ldr.w r5, [sb, 0xe0]          |     r5 = *((sb + 0xe0));
    0x00002a6a b 0x247e                      |     goto label_3;
                                             | label_72:
    0x00002a6c ldr.w r1, [pc, 0xa30]         |     
    0x00002a70 mov r0, r4                    |     r0 = r4;
    0x00002a72 add r1, pc                    |     r1 = 0x5f16;
    0x00002a74 bl 0x3c10                     |     fcn_00003c10 (r0, r1);
    0x00002a78 b.w 0x2142                    |     goto label_2;
                                             | label_59:
    0x00002a7c mov r1, r7                    |     r1 = r7;
    0x00002a7e mov r0, sb                    |     r0 = sb;
    0x00002a80 blx 0x1838                    |     r0 = stat ();
    0x00002a84 cmp r0, 0                     |     
                                             |     if (r0 < 0) {
    0x00002a86 blt 0x299e                    |         goto label_4;
                                             |     }
    0x00002a88 ldr r3, [r7, 0x10]            |     r3 = *((r7 + 0x10));
    0x00002a8a and r3, r3, 0xf000            |     r3 &= 0xf000;
    0x00002a8e cmp.w r3, 0x4000              |     
                                             |     if (r3 == 0x4000) {
    0x00002a92 beq 0x2b50                    |         goto label_80;
                                             |     }
    0x00002a94 movs r1, 4                    |     r1 = 4;
    0x00002a96 mov r0, sb                    |     r0 = sb;
    0x00002a98 blx 0x1968                    |     r0 = fcn_00001968 ();
    0x00002a9c cmp r0, 0                     |     
                                             |     if (r0 < 0) {
    0x00002a9e blt.w 0x299e                  |         goto label_4;
                                             |     }
    0x00002aa2 mov r1, r5                    |     r1 = r5;
    0x00002aa4 mov r0, sb                    |     r0 = sb;
    0x00002aa6 blx 0x1844                    |     r0 = open (r0, r1, r2);
    0x00002aaa mov r5, r0                    |     r5 = r0;
    0x00002aac b 0x263a                      |     goto label_5;
                                             | label_75:
    0x00002aae ldrb.w r3, [r8, 0xc]          |     r3 = *((r8 + 0xc));
    0x00002ab2 cmp r3, 0                     |     
                                             |     if (r3 == 0) {
    0x00002ab4 bne 0x2b4a                    |         
    0x00002ab6 ldr.w r1, [pc, 0x9ec]         |         
    0x00002aba movs r2, 5                    |         r2 = 5;
    0x00002abc mov r0, r5                    |         r0 = r5;
    0x00002abe add r1, pc                    |         r1 = 0x5f68;
    0x00002ac0 blx 0x1a98                    |         r0 = fcn_00001a98 ();
    0x00002ac4 mov r7, r0                    |         r7 = r0;
    0x00002ac6 cmp r0, 0                     |         
                                             |         if (r0 == 0) {
    0x00002ac8 bne 0x2b40                    |             
    0x00002aca ldrb r5, [r5, 5]              |             r5 = *((r5 + 5));
    0x00002acc sub.w r3, r5, 0x21            |             r3 = r5 - 0x21;
    0x00002ad0 cmp r3, 0x5d                  |             
                                             |             if (r3 > 0x5d) {
    0x00002ad2 bhi 0x2b40                    |                 goto label_81;
                                             |             }
    0x00002ad4 addw r3, sp, 0x39e            |             __asm ("addw r3, s");
    0x00002ad8 mov r1, r5                    |             r1 = r5;
    0x00002ada mov r0, r3                    |             r0 = r3;
    0x00002adc str r3, [sp, 0x1c]            |             *(str) = r3;
    0x00002ade blx 0x18a4                    |             r0 = strchr (r0, r1);
    0x00002ae2 mov sb, r0                    |             sb = r0;
                                             |             if (r0 == 0) {
    0x00002ae4 cbz r0, 0x2b40                |                 goto label_81;
                                             |             }
    0x00002ae6 ldr r3, [sp, 0x1c]            |             r3 = *(str);
    0x00002ae8 mov r1, r7                    |             r1 = r7;
    0x00002aea strb r7, [sb], 1              |             *(sb) = r7;
                                             |             sb++;
    0x00002aee movs r2, 0xa                  |             r2 = 0xa;
    0x00002af0 mov r0, r3                    |             r0 = r3;
    0x00002af2 blx 0x1610                    |             strtol (r0, r1, r2);
    0x00002af6 mov r1, r5                    |             r1 = r5;
    0x00002af8 str r0, [sp, 0x1c]            |             *(str) = r0;
    0x00002afa mov r0, sb                    |             r0 = sb;
    0x00002afc blx 0x18a4                    |             r0 = strchr (r0, r1);
                                             |             if (r0 == 0) {
    0x00002b00 cbz r0, 0x2b40                |                 goto label_81;
                                             |             }
    0x00002b02 ldr r3, [sp, 0x1c]            |             r3 = *(str);
    0x00002b04 strb r7, [r0]                 |             *(r0) = r7;
    0x00002b06 subs r1, r3, 1                |             r1 = r3 - 1;
    0x00002b08 cmp r1, 1                     |             
                                             |             if (r1 > 1) {
    0x00002b0a bhi 0x2bd0                    |                 goto label_82;
                                             |             }
    0x00002b0c mov r1, sb                    |             r1 = sb;
    0x00002b0e movs r2, 0x3e                 |             r2 = 0x3e;
    0x00002b10 add.w sb, r0, 1               |             sb = r0 + 1;
    0x00002b14 addw r0, sp, 0x101            |             __asm ("addw r0, arg_101h");
    0x00002b16 asrs r1, r0, 0x20             |             r1 = r0 >> 0x20;
    0x00002b18 blx 0x17c0                    |             strcpy_chk ();
    0x00002b1c mov r1, r5                    |             r1 = r5;
    0x00002b1e mov r0, sb                    |             r0 = sb;
    0x00002b20 blx 0x18a4                    |             r0 = strchr (r0, r1);
                                             |             if (r0 == 0) {
    0x00002b24 cbz r0, 0x2b40                |                 goto label_81;
                                             |             }
    0x00002b26 strb r7, [r0]                 |             *(r0) = r7;
    0x00002b28 mov r1, r7                    |             r1 = r7;
    0x00002b2a mov r0, sb                    |             r0 = sb;
    0x00002b2c movs r2, 0xa                  |             r2 = 0xa;
    0x00002b2e blx 0x1610                    |             strtol (r0, r1, r2);
    0x00002b32 str.w r0, [r8, 4]             |             __asm ("str.w r0, [r8, 4]");
    0x00002b36 mov r0, r8                    |             r0 = r8;
    0x00002b38 bl 0x3b50                     |             r0 = fcn_00003b50 (r0);
    0x00002b3c cmp r0, 0                     |             
                                             |             if (r0 == 0) {
    0x00002b3e beq 0x2bbe                    |                 goto label_83;
                                             |             }
                                             |         }
                                             | label_81:
    0x00002b40 ldr.w r3, [pc, 0x964]         |         r3 = *(0x000034a8);
    0x00002b44 add r3, pc                    |         r3 += pc;
    0x00002b46 ldr r5, [r3, 0x14]            |         r5 = *((r3 + 0x14));
    0x00002b48 b 0x247e                      |         goto label_3;
                                             |     }
                                             | label_27:
    0x00002b4a ldr.w r5, [sl, 0x74]          |     r5 = *((sl + 0x74));
    0x00002b4e b 0x247e                      |     goto label_3;
                                             | label_80:
    0x00002b50 ldr r3, [sp, 0x1c]            |     r3 = *(str);
    0x00002b52 ldr.w r5, [r3, 0x88]          |     r5 = *((r3 + 0x88));
    0x00002b56 b 0x247e                      |     goto label_3;
                                             | label_78:
    0x00002b58 movs r0, 2                    |     r0 = 2;
                                             | label_6:
    0x00002b5a bl 0x3a0c                     |     r0 = fcn_00003a0c (r0);
    0x00002b5e subs r5, r0, 0                |     r5 = r0 - 0;
                                             |     if (r5 >= r0) {
    0x00002b60 blt 0x2b82                    |         
    0x00002b62 movs r3, 0x80                 |         r3 = 0x80;
    0x00002b64 mov r2, r7                    |         r2 = r7;
    0x00002b66 mov r1, r6                    |         r1 = r6;
    0x00002b68 str r3, [r7]                  |         *(r7) = r3;
    0x00002b6a blx 0x1a2c                    |         r0 = fcn_00001a2c ();
    0x00002b6e cmp r0, 0                     |         
                                             |         if (r0 >= 0) {
    0x00002b70 blt 0x2b7c                    |             
    0x00002b72 ldrh r3, [r6]                 |             r3 = *(r6);
    0x00002b74 cmp r3, 2                     |             
                                             |             if (r3 == 2) {
    0x00002b76 beq 0x2c0c                    |                 goto label_84;
                                             |             }
    0x00002b78 cmp r3, 0xa                   |             
                                             |             if (r3 == 0xa) {
    0x00002b7a beq 0x2c0c                    |                 goto label_84;
                                             |             }
                                             |         }
                                             | label_7:
    0x00002b7c mov r0, r5                    |         r0 = r5;
    0x00002b7e blx 0x1ab4                    |         fdipc_client_socket ();
                                             |     }
    0x00002b82 ldr.w r3, [pc, 0x928]         |     r3 = *(0x000034ac);
    0x00002b86 add r3, pc                    |     r3 += pc;
    0x00002b88 ldr r5, [r3, 0x14]            |     r5 = *((r3 + 0x14));
    0x00002b8a b 0x247e                      |     goto label_3;
                                             | label_73:
    0x00002b8c addw r0, sp, 0x39d            |     __asm ("addw r0, path");
    0x00002b90 bl 0x3b2c                     |     fcn_00003b2c (r0);
    0x00002b94 ldr r5, [sp, 0x34]            |     r5 = *(dest);
    0x00002b96 mov r1, r0                    |     r1 = r0;
    0x00002b98 mov.w r2, 0x100               |     r2 = 0x100;
    0x00002b9c mov r0, r5                    |     r0 = r5;
    0x00002b9e blx 0x1940                    |     strncpy (r0, r1, r2);
    0x00002ba2 mov r1, sl                    |     r1 = sl;
    0x00002ba4 mov r0, r5                    |     r0 = r5;
    0x00002ba6 strb.w sl, [r5, 0x100]        |     *((r5 + 0x100)) = sl;
    0x00002baa blx 0x1968                    |     r0 = fcn_00001968 ();
    0x00002bae cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00002bb0 bne.w 0x299e                  |         goto label_4;
                                             |     }
    0x00002bb4 ldr.w r5, [sb, 0xd4]          |     r5 = *((sb + 0xd4));
    0x00002bb8 b 0x247e                      |     goto label_3;
                                             | label_79:
    0x00002bba movs r0, 0xa                  |     r0 = 0xa;
    0x00002bbc b 0x2b5a                      |     goto label_6;
                                             | label_83:
    0x00002bbe ldr.w r0, [r8, 8]             |     r0 = *((r8 + 8));
    0x00002bc2 cmp r0, 0                     |     
    0x00002bc4 bge 0x2be4                    |     
                                             |     while (1) {
    0x00002bc6 ldr.w r3, [pc, 0x8e8]         |         r3 = *(0x000034b0);
    0x00002bca add r3, pc                    |         r3 += pc;
    0x00002bcc ldr r5, [r3, 0x54]            |         r5 = *((r3 + 0x54));
    0x00002bce b 0x247e                      |         goto label_3;
                                             | label_82:
    0x00002bd0 ldr.w r2, [pc, 0x8e0]         |         
    0x00002bd4 movs r1, 1                    |         r1 = 1;
    0x00002bd6 movs r0, 6                    |         r0 = 6;
    0x00002bd8 add r2, pc                    |         r2 = 0x6090;
    0x00002bda blx 0x19cc                    |         fcn_000019cc ();
    0x00002bde ldr.w r5, [sl, 0xe0]          |         r5 = *((sl + 0xe0));
    0x00002be2 b 0x247e                      |         goto label_3;
    0x00002be4 blx 0x1ab4                    |         fdipc_client_socket ();
    0x00002be8 mov.w r3, -1                  |         r3 = -1;
    0x00002bec str.w r3, [r8, 8]             |         __asm ("str.w r3, [r8, 8]");
    0x00002bf0 b 0x2bc6                      |         
                                             |     }
                                             | label_76:
    0x00002bf2 ldr.w r3, [r8]                |     r3 = *(r8);
    0x00002bf6 ldrh r0, [r3]                 |     r0 = *(r3);
    0x00002bf8 b 0x2b5a                      |     goto label_6;
                                             | label_31:
    0x00002bfa ldr.w r5, [sb, 0xb4]          |     r5 = *((sb + 0xb4));
    0x00002bfe b 0x247e                      |     goto label_3;
                                             | label_77:
    0x00002c00 movs r3, 1                    |     r3 = 1;
    0x00002c02 ldr.w r5, [sb, 0x54]          |     r5 = *((sb + 0x54));
    0x00002c06 strb.w r3, [r8, 0xc]          |     *((r8 + 0xc)) = r3;
    0x00002c0a b 0x247e                      |     goto label_3;
                                             | label_84:
    0x00002c0c ldrh r7, [r6, 2]              |     r7 = *((r6 + 2));
    0x00002c0e rev16 r7, r7                  |     __asm ("rev16 r7, r7");
    0x00002c10 uxth r7, r7                   |     r7 = (int16_t) r7;
    0x00002c12 cmp r7, 0                     |     
                                             |     if (r7 == 0) {
    0x00002c14 beq 0x2b7c                    |         goto label_7;
                                             |     }
    0x00002c16 ldr.w r0, [r8, 8]             |     r0 = *((r8 + 8));
    0x00002c1a cmp r0, 0                     |     
                                             |     if (r0 >= 0) {
    0x00002c1c blt 0x2c22                    |         
    0x00002c1e blx 0x1ab4                    |         fdipc_client_socket ();
                                             |     }
    0x00002c22 ldr.w r3, [pc, 0x894]         |     
    0x00002c26 movs r2, 1                    |     r2 = 1;
    0x00002c28 str r7, [sp, 4]               |     var_4h = r7;
    0x00002c2a mov r0, fp                    |     r0 = fp;
    0x00002c2c str.w r5, [r8, 8]             |     __asm ("str.w r5, [r8, 8]");
    0x00002c30 add r3, pc                    |     r3 = 0x60ee;
    0x00002c32 str r3, [sp]                  |     *(sp) = r3;
    0x00002c34 movs r3, 0x50                 |     r3 = 0x50;
    0x00002c36 mov r1, r3                    |     r1 = r3;
    0x00002c38 blx 0x1afc                    |     fcn_00001afc ();
                                             | label_12:
    0x00002c3c mov r0, fp                    |     r0 = fp;
    0x00002c3e blx 0x1898                    |     strlen (r0);
    0x00002c42 mov r1, fp                    |     r1 = fp;
    0x00002c44 mov r2, r0                    |     r2 = r0;
    0x00002c46 mov r0, r4                    |     r0 = r4;
    0x00002c48 blx 0x195c                    |     fcn_0000195c ();
    0x00002c4c b.w 0x2142                    |     goto label_2;
                                             | label_61:
    0x00002c50 movw r0, 0x1ff4               |     r0 = 0x1ff4;
    0x00002c54 blx 0x17f0                    |     r0 = malloc (r0);
    0x00002c58 mov sb, r0                    |     sb = r0;
    0x00002c5a cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00002c5c beq 0x2d28                    |         goto label_85;
                                             |     }
    0x00002c5e blx 0x18d4                    |     errno_location ();
    0x00002c62 str.w r8, [sp, 0x2c]          |     __asm ("str.w r8, [fildes]");
    0x00002c66 mov r8, r6                    |     r8 = r6;
    0x00002c68 mov r6, sl                    |     r6 = sl;
    0x00002c6a movs r3, 0                    |     r3 = 0;
    0x00002c6c str r0, [sp, 0x30]            |     *(arg_30h) = r0;
    0x00002c6e str r3, [r0]                  |     *(r0) = r3;
    0x00002c70 str r4, [sp, 0x1c]            |     *(str) = r4;
                                             | label_8:
    0x00002c72 movw r2, 0x1ff4               |     r2 = 0x1ff4;
    0x00002c76 mov r1, sb                    |     r1 = sb;
    0x00002c78 mov r0, r5                    |     r0 = r5;
    0x00002c7a blx 0x1640                    |     r0 = read (r0, r1, r2);
    0x00002c7e subs r4, r0, 0                |     r4 = r0 - 0;
                                             |     if (r4 <= r0) {
    0x00002c80 ble 0x2d10                    |         goto label_86;
                                             |     }
    0x00002c82 mov sl, r8                    |     sl = r8;
    0x00002c84 add r6, r4                    |     r6 += r4;
    0x00002c86 mov r1, sb                    |     r1 = sb;
    0x00002c88 mov r8, r4                    |     r8 = r4;
                                             |     do {
                                             | label_9:
    0x00002c8a mov r2, r4                    |         r2 = r4;
    0x00002c8c mov r0, r7                    |         r0 = r7;
    0x00002c8e str r1, [sp, 0x38]            |         *(arg_38h) = r1;
    0x00002c90 blx 0x195c                    |         r0 = fcn_0000195c ();
    0x00002c94 cmp r0, 0                     |         
    0x00002c96 ldr r1, [sp, 0x38]            |         r1 = *(arg_38h);
                                             |         if (r0 < 0) {
    0x00002c98 blt 0x2cc2                    |             goto label_87;
                                             |         }
    0x00002c9a subs r4, r4, r0               |         r4 -= r0;
    0x00002c9c add r1, r0                    |         r1 += r0;
    0x00002c9e bne 0x2c8a                    |         
                                             |     } while (r4 != r4);
    0x00002ca0 mov r8, sl                    |     r8 = sl;
    0x00002ca2 b 0x2c72                      |     goto label_8;
                                             | label_60:
    0x00002ca4 ldr.w r7, [sb, 0x20]          |     r7 = *((sb + 0x20));
    0x00002ca8 mov r0, r7                    |     r0 = r7;
    0x00002caa blx 0x1898                    |     strlen (r0);
    0x00002cae mov r1, r7                    |     r1 = r7;
    0x00002cb0 mov r2, r0                    |     r2 = r0;
    0x00002cb2 mov r0, r4                    |     r0 = r4;
    0x00002cb4 blx 0x195c                    |     fcn_0000195c ();
    0x00002cb8 mov r0, r5                    |     r0 = r5;
    0x00002cba blx 0x1ab4                    |     fdipc_client_socket ();
    0x00002cbe b.w 0x2142                    |     goto label_2;
                                             | label_87:
    0x00002cc2 ldr r3, [sp, 0x30]            |     r3 = *(arg_30h);
    0x00002cc4 ldr r3, [r3]                  |     r3 = *(r3);
    0x00002cc6 cmp r3, 4                     |     
                                             |     if (r3 == 4) {
    0x00002cc8 beq 0x2c8a                    |         goto label_9;
                                             |     }
    0x00002cca cmp r3, 0xb                   |     
                                             |     if (r3 == 0xb) {
    0x00002ccc beq 0x2c8a                    |         goto label_9;
                                             |     }
    0x00002cce mov r2, sl                    |     r2 = sl;
    0x00002cd0 mov sl, r6                    |     sl = r6;
    0x00002cd2 mov r6, r2                    |     r6 = r2;
    0x00002cd4 ldr.w r2, [pc, 0x7e4]         |     
    0x00002cd8 mov ip, r3                    |     
    0x00002cda str r0, [sp]                  |     *(sp) = r0;
    0x00002cdc mov r3, r8                    |     r3 = r8;
    0x00002cde movs r1, 1                    |     r1 = 1;
    0x00002ce0 add r2, pc                    |     r2 = 0x61a0;
    0x00002ce2 movs r0, 7                    |     r0 = 7;
    0x00002ce4 strd sl, ip, [sp, 4]          |     __asm ("strd sl, ip, [sp, 4]");
    0x00002ce8 ldr r4, [sp, 0x1c]            |     r4 = *(str);
    0x00002cea ldr.w r8, [sp, 0x2c]          |     r8 = *(fildes);
    0x00002cee blx 0x19cc                    |     fcn_000019cc ();
                                             | label_10:
    0x00002cf2 mov r0, r5                    |     r0 = r5;
    0x00002cf4 blx 0x1ab4                    |     fdipc_client_socket ();
    0x00002cf8 mov r0, r7                    |     r0 = r7;
    0x00002cfa blx 0x1ab4                    |     fdipc_client_socket ();
    0x00002cfe mov r0, sb                    |     r0 = sb;
    0x00002d00 blx 0x1664                    |     free (r0);
    0x00002d04 ldr.w r3, [pc, 0x7b8]         |     r3 = *(0x000034c0);
    0x00002d08 add r3, pc                    |     r3 += pc;
    0x00002d0a ldr r5, [r3, 0x24]            |     r5 = *((r3 + 0x24));
    0x00002d0c b.w 0x247e                    |     goto label_3;
                                             |     if (r0 == 7) {
                                             | label_86:
    0x00002d10 beq 0x2d1e                    |         goto label_88;
                                             |     }
    0x00002d12 ldr r3, [sp, 0x30]            |     r3 = *(arg_30h);
    0x00002d14 ldr r2, [r3]                  |     r2 = *(r3);
    0x00002d16 cmp r2, 4                     |     
                                             |     if (r2 == 4) {
    0x00002d18 beq 0x2c72                    |         goto label_8;
                                             |     }
    0x00002d1a cmp r2, 0xb                   |     
                                             |     if (r2 == 0xb) {
    0x00002d1c beq 0x2c72                    |         goto label_8;
                                             |     }
                                             | label_88:
    0x00002d1e mov r6, r8                    |     r6 = r8;
    0x00002d20 ldr r4, [sp, 0x1c]            |     r4 = *(str);
    0x00002d22 ldr.w r8, [sp, 0x2c]          |     r8 = *(fildes);
    0x00002d26 b 0x2cf2                      |     goto label_10;
                                             | label_85:
    0x00002d28 ldr.w r2, [pc, 0x798]         |     
    0x00002d2c add r2, pc                    |     r2 = 0x61f4;
                                             | label_14:
    0x00002d2e movs r1, 1                    |     r1 = 1;
    0x00002d30 movs r0, 3                    |     r0 = 3;
    0x00002d32 blx 0x19cc                    |     fcn_000019cc ();
    0x00002d36 b 0x299e                      |     goto label_4;
                                             | label_64:
    0x00002d38 ldrd r3, r2, [r6]             |     __asm ("ldrd r3, r2, [r6]");
    0x00002d3c orrs r3, r2                   |     r3 |= r2;
                                             |     if (r3 != r2) {
    0x00002d3e bne.w 0x26bc                  |         goto label_11;
                                             |     }
    0x00002d42 ldr r3, [r6, 8]               |     r3 = *((r6 + 8));
    0x00002d44 cmn.w r3, 0x10000             |     
                                             |     if (r3 != 0x10000) {
    0x00002d48 bne.w 0x26bc                  |         goto label_11;
                                             |     }
                                             | label_63:
    0x00002d4c ldrh r7, [r6, 2]              |     r7 = *((r6 + 2));
    0x00002d4e rev16 r7, r7                  |     __asm ("rev16 r7, r7");
    0x00002d50 uxth r7, r7                   |     r7 = (int16_t) r7;
    0x00002d52 cmp.w sb, 0                   |     
                                             |     if (sb == 0) {
    0x00002d56 beq.w 0x26bc                  |         goto label_11;
                                             |     }
    0x00002d5a cmp r7, 0                     |     
                                             |     if (r7 == 0) {
    0x00002d5c beq.w 0x26bc                  |         goto label_11;
                                             |     }
    0x00002d60 ldr.w r0, [r8, 8]             |     r0 = *((r8 + 8));
    0x00002d64 cmp r0, 0                     |     
                                             |     if (r0 >= 0) {
    0x00002d66 blt 0x2d6c                    |         
    0x00002d68 blx 0x1ab4                    |         fdipc_client_socket ();
                                             |     }
    0x00002d6c uxtb r3, r7                   |     r3 = (int8_t) r7;
    0x00002d6e str.w r5, [r8, 8]             |     __asm ("str.w r5, [r8, 8]");
    0x00002d72 asrs r7, r7, 8                |     r7 >>= 8;
    0x00002d74 movs r2, 0x50                 |     r2 = 0x50;
    0x00002d76 str r3, [sp, 0x14]            |     *(arg_14h) = r3;
    0x00002d78 uxtb.w r3, sb                 |     r3 = (int8_t) sb;
    0x00002d7c movs r1, 1                    |     r1 = 1;
    0x00002d7e str r7, [sp, 0x10]            |     *(arg_10h) = r7;
    0x00002d80 str r3, [sp, 0xc]             |     *(arg_ch) = r3;
    0x00002d82 lsr.w r3, sb, 0x18            |     r3 = sb >> 0x18;
    0x00002d86 mov r0, fp                    |     r0 = fp;
    0x00002d88 str r3, [sp]                  |     *(sp) = r3;
    0x00002d8a ubfx r3, sb, 8, 8             |     r3 = (sb >> 8) & ((1 << 8) - 1);
    0x00002d8e str r3, [sp, 8]               |     *(arg_8h) = r3;
    0x00002d90 ubfx r3, sb, 0x10, 8          |     r3 = (sb >> 0x10) & ((1 << 8) - 1);
    0x00002d94 str r3, [sp, 4]               |     var_4h = r3;
    0x00002d96 ldr.w r3, [pc, 0x730]         |     
    0x00002d9a add r3, pc                    |     r3 = 0x6268;
    0x00002d9c blx 0x18f8                    |     sprintf_chk ()
    0x00002da0 b 0x2c3c                      |     goto label_12;
                                             | label_62:
    0x00002da2 ldr.w r1, [pc, 0x728]         |     
    0x00002da6 mov r0, r5                    |     r0 = r5;
    0x00002da8 add r1, pc                    |     r1 = 0x627a;
    0x00002daa blx 0x15c8                    |     r0 = fdopen ();
    0x00002dae mov sb, r0                    |     sb = r0;
    0x00002db0 movw r0, 0x1ff4               |     r0 = 0x1ff4;
    0x00002db4 blx 0x17f0                    |     r0 = malloc (r0);
    0x00002db8 mov r5, r0                    |     r5 = r0;
    0x00002dba cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00002dbc beq 0x2e64                    |         goto label_89;
                                             |     }
    0x00002dbe mov r0, sb                    |     r0 = sb;
    0x00002dc0 blx 0x1a14                    |     fcn_00001a14 ();
    0x00002dc4 b 0x2e00                      |     
                                             |     while (r0 != 0) {
                                             | label_13:
    0x00002dc6 mov r0, sb                    |         r0 = sb;
    0x00002dc8 blx 0x1688                    |         r0 = ferror (r0);
                                             |         if (r0 != 0) {
    0x00002dcc cbnz r0, 0x2e38               |             goto label_90;
                                             |         }
    0x00002dce mov r0, sb                    |         r0 = sb;
    0x00002dd0 blx 0x1880                    |         r0 = feof (r0);
    0x00002dd4 mov sl, r0                    |         sl = r0;
                                             |         if (r0 == 0) {
    0x00002dd6 cbnz r0, 0x2dfc               |             
    0x00002dd8 mov r0, r5                    |             r0 = r5;
    0x00002dda blx 0x1898                    |             r0 = strlen (r0);
    0x00002dde mov r3, r0                    |             r3 = r0;
                                             |             if (r0 != 0) {
    0x00002de0 cbz r0, 0x2df2                |                 
    0x00002de2 subs r1, r0, 1                |                 r1 = r0 - 1;
    0x00002de4 mov sl, r0                    |                 sl = r0;
    0x00002de6 ldrb.w ip, [r5, r1]           |                 ip = *((r5 + r1));
    0x00002dea adds r0, r5, r1               |                 r0 = r5 + r1;
    0x00002dec cmp.w ip, 0xa                 |                 
                                             |                 if (ip == 0xa) {
    0x00002df0 beq 0x2e74                    |                     goto label_91;
                                             |                 }
                                             |             }
                                             | label_15:
    0x00002df2 mov r2, sl                    |             r2 = sl;
    0x00002df4 mov r1, r5                    |             r1 = r5;
    0x00002df6 mov r0, r7                    |             r0 = r7;
    0x00002df8 bl 0x4034                     |             fcn_00004034 (r0, r1, r2);
                                             |         }
    0x00002dfc movs r3, 0                    |         r3 = 0;
    0x00002dfe strb r3, [r5]                 |         *(r5) = r3;
    0x00002e00 mov r2, sb                    |         r2 = sb;
    0x00002e02 movw r1, 0x1ff3               |         r1 = 0x1ff3;
    0x00002e06 mov r0, r5                    |         r0 = r5;
    0x00002e08 blx 0x167c                    |         r0 = fgets (r0, r1, r2);
    0x00002e0c cmp r0, 0                     |         
    0x00002e0e bne 0x2dc6                    |         
                                             |     }
    0x00002e10 mov r0, sb                    |     r0 = sb;
    0x00002e12 blx 0x1880                    |     r0 = feof (r0);
    0x00002e16 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00002e18 beq 0x2dc6                    |         goto label_13;
                                             |     }
    0x00002e1a mov r0, sb                    |     r0 = sb;
    0x00002e1c blx 0x198c                    |     fcn_0000198c ();
    0x00002e20 mov r0, r7                    |     r0 = r7;
    0x00002e22 blx 0x1ab4                    |     fdipc_client_socket ();
    0x00002e26 mov r0, r5                    |     r0 = r5;
    0x00002e28 blx 0x1664                    |     free (r0);
    0x00002e2c ldr.w r3, [pc, 0x6a0]         |     r3 = *(0x000034d0);
    0x00002e2e adds r6, 0xa0                 |     r6 += 0xa0;
    0x00002e30 add r3, pc                    |     r3 += pc;
    0x00002e32 ldr r5, [r3, 0x24]            |     r5 = *((r3 + 0x24));
    0x00002e34 b.w 0x247e                    |     goto label_3;
                                             | label_90:
    0x00002e38 mov r0, sb                    |     r0 = sb;
    0x00002e3a blx 0x1880                    |     r0 = feof (r0);
    0x00002e3e mov sl, r0                    |     sl = r0;
    0x00002e40 mov r0, sb                    |     r0 = sb;
    0x00002e42 blx 0x1688                    |     ferror (r0);
    0x00002e46 str r0, [sp, 0x1c]            |     *(str) = r0;
    0x00002e48 blx 0x18d4                    |     errno_location ();
    0x00002e4c ldr r2, [sp, 0x1c]            |     r2 = *(str);
    0x00002e4e mov r3, sl                    |     r3 = sl;
    0x00002e50 str r5, [sp, 8]               |     *(arg_8h) = r5;
    0x00002e52 ldr r1, [r0]                  |     r1 = *(r0);
    0x00002e54 movs r0, 6                    |     r0 = 6;
    0x00002e56 strd r2, r1, [sp]             |     __asm ("strd r2, r1, [sp]");
    0x00002e5a movs r1, 1                    |     r1 = 1;
    0x00002e5c ldr r2, [sp, 0x48]            |     r2 = *(arg_48h);
    0x00002e5e blx 0x19cc                    |     fcn_000019cc ();
    0x00002e60 ldc p7, c14, [r6, 0x2d0]!     |     __asm ("ldc p7, c14, [r6, 0x2d0]!");
                                             | label_89:
    0x00002e64 ldr.w r2, [pc, 0x66c]         |     
    0x00002e68 add r2, pc                    |     r2 = 0x6340;
    0x00002e6a b 0x2d2e                      |     goto label_14;
                                             | label_54:
    0x00002e6c ldr r3, [sp, 0x1c]            |     r3 = *(str);
    0x00002e6e ldr r5, [r3, 0x74]            |     r5 = *((r3 + 0x74));
    0x00002e70 b.w 0x247e                    |     goto label_3;
                                             | label_91:
    0x00002e74 cmp r3, 1                     |     
                                             |     if (r3 == 1) {
    0x00002e76 beq 0x2e86                    |         goto label_92;
                                             |     }
    0x00002e78 add.w ip, r5, r3              |     
    0x00002e7c ldrb ip, [ip, -0x2]           |     ip = *((ip - 0x2));
    0x00002e80 cmp.w ip, 0xd                 |     
                                             |     if (ip == 0xd) {
    0x00002e84 beq 0x2df2                    |         goto label_15;
                                             |     }
                                             | label_92:
    0x00002e86 ldr r2, [sp, 0x4c]            |     r2 = *(arg_4ch);
    0x00002e88 add.w sl, r3, 1               |     sl = r3 + 1;
    0x00002e8c ldrh r3, [r2]                 |     r3 = *(r2);
    0x00002e8e strh r3, [r5, r1]             |     *((r5 + r1)) = r3;
    0x00002e90 ldrb r3, [r2, 2]              |     r3 = *((r2 + 2));
    0x00002e92 strb r3, [r0, 2]              |     *((r0 + 2)) = r3;
    0x00002e94 b 0x2df2                      |     goto label_15;
                                             | label_51:
    0x00002e96 addw r0, sp, 0x39d            |     __asm ("addw r0, path");
    0x00002e9a add.w sl, sp, 0x6c            |     sl += arg_6ch;
    0x00002e9e bl 0x3b2c                     |     fcn_00003b2c (r0);
    0x00002ea2 add r3, sp, 0x68              |     r3 += arg_68h;
    0x00002ea4 add r2, sp, 0x64              |     r2 += arg_64h;
    0x00002ea6 str r3, [sp, 0x2c]            |     *(fildes) = r3;
    0x00002ea8 movs r1, 1                    |     r1 = 1;
    0x00002eaa str r3, [sp]                  |     *(sp) = r3;
    0x00002eac mov r3, sl                    |     r3 = sl;
    0x00002eae str r4, [sp, 4]               |     var_4h = r4;
    0x00002eb0 mov sb, r0                    |     sb = r0;
    0x00002eb2 str r2, [sp, 0x1c]            |     *(str) = r2;
    0x00002eb4 bl 0x45cc                     |     r0 = fcn_000045cc (r0, r1, r2, r3, r4, r5, r6);
    0x00002eb8 mov r5, r0                    |     r5 = r0;
    0x00002eba cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00002ebc beq.w 0x3196                  |         goto label_93;
                                             |     }
                                             | label_22:
    0x00002ec0 cmp r5, 0                     |     
                                             |     if (r5 <= 0) {
    0x00002ec2 ble.w 0x299e                  |         goto label_4;
                                             |     }
    0x00002ec6 ldr r3, [sp, 0x1c]            |     r3 = *(str);
    0x00002ec8 ldr r3, [r3]                  |     r3 = *(r3);
    0x00002eca cmp r3, 2                     |     
                                             |     if (r3 == 2) {
    0x00002ecc beq.w 0x3150                  |         goto label_94;
                                             |     }
                                             | label_34:
    0x00002ed0 movw r0, 0x1ff4               |     r0 = 0x1ff4;
    0x00002ed4 blx 0x17f0                    |     r0 = malloc (r0);
    0x00002ed8 mov r7, r0                    |     r7 = r0;
    0x00002eda cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00002edc beq.w 0x3134                  |         goto label_95;
                                             |     }
    0x00002ee0 ldr.w r3, [pc, 0x5f4]         |     r3 = *(0x000034d8);
    0x00002ee4 add r3, pc                    |     r3 += pc;
    0x00002ee6 ldr r1, [r3, 0x1c]            |     r1 = *((r3 + 0x1c));
    0x00002ee8 str r3, [sp, 0x30]            |     *(arg_30h) = r3;
    0x00002eea mov r0, r1                    |     r0 = r1;
    0x00002eec str r1, [sp, 0x2c]            |     *(fildes) = r1;
    0x00002eee blx 0x1898                    |     strlen (r0);
    0x00002ef2 ldr r1, [sp, 0x2c]            |     r1 = *(fildes);
    0x00002ef4 mov r2, r0                    |     r2 = r0;
    0x00002ef6 mov r0, r4                    |     r0 = r4;
    0x00002ef8 blx 0x195c                    |     fcn_0000195c ();
    0x00002efc mov r0, r8                    |     r0 = r8;
    0x00002efe bl 0x3c44                     |     r0 = fcn_00003c44 (r0);
    0x00002f02 subs r3, r0, 0                |     r3 = r0 - 0;
    0x00002f04 str r3, [sp, 0x2c]            |     *(fildes) = r3;
    0x00002f06 ldr r3, [sp, 0x30]            |     r3 = *(arg_30h);
                                             |     if (r3 < r0) {
    0x00002f08 blt.w 0x3118                  |         goto label_96;
                                             |     }
    0x00002f0c ldr r2, [sp, 0x1c]            |     r2 = *(str);
    0x00002f0e ldr r2, [r2]                  |     r2 = *(r2);
    0x00002f10 cmp r2, 2                     |     
                                             |     if (r2 == 2) {
    0x00002f12 beq.w 0x3100                  |         goto label_97;
                                             |     }
                                             | label_20:
    0x00002f16 ldr.w r3, [pc, 0x5c4]         |     r3 = *(0x000034dc);
    0x00002f1a add r3, pc                    |     r3 += pc;
    0x00002f1c ldrb.w r3, [r3, 0x74]         |     r3 = *((r3 + 0x74));
    0x00002f20 cmp r3, 0x49                  |     
                                             |     if (r3 == 0x49) {
    0x00002f22 beq.w 0x302a                  |         goto label_98;
                                             |     }
    0x00002f26 cmp r3, 0x41                  |     
                                             |     if (r3 != 0x41) {
    0x00002f28 bne 0x3018                    |         goto label_99;
                                             |     }
    0x00002f2a ldr.w r2, [pc, 0x5b4]         |     
    0x00002f2e mov r3, sb                    |     r3 = sb;
    0x00002f30 movs r1, 1                    |     r1 = 1;
    0x00002f32 movs r0, 7                    |     r0 = 7;
    0x00002f34 add r2, pc                    |     r2 = 0x641a;
    0x00002f36 blx 0x19cc                    |     fcn_000019cc ();
    0x00002f3a ldr.w r1, [pc, 0x5a8]         |     
    0x00002f3e ldr r0, [sp, 0x2c]            |     r0 = *(fildes);
    0x00002f40 add r1, pc                    |     r1 = 0x642a;
    0x00002f42 blx 0x15c8                    |     fdopen ();
    0x00002f46 ldr.w r1, [pc, 0x5a0]         |     
    0x00002f4a str r0, [sp, 0x2c]            |     *(fildes) = r0;
    0x00002f4c mov r0, r5                    |     r0 = r5;
    0x00002f4e add r1, pc                    |     r1 = 0x643c;
    0x00002f50 blx 0x15c8                    |     fdopen ();
    0x00002f54 str r0, [sp, 0x30]            |     *(arg_30h) = r0;
                                             |     do {
    0x00002f56 ldr r2, [sp, 0x2c]            |         r2 = *(fildes);
    0x00002f58 movw r1, 0x1ff3               |         r1 = 0x1ff3;
    0x00002f5c mov r0, r7                    |         r0 = r7;
    0x00002f5e blx 0x167c                    |         r0 = fgets (r0, r1, r2);
    0x00002f62 cmp r0, 0                     |         
                                             |         if (r0 == 0) {
    0x00002f64 beq 0x2fd0                    |             goto label_100;
                                             |         }
    0x00002f66 mov r0, r7                    |         r0 = r7;
    0x00002f68 blx 0x1898                    |         r0 = strlen (r0);
    0x00002f6c cmp r0, 1                     |         
                                             |         if (r0 >= 1) {
    0x00002f6e bls 0x2f86                    |             
    0x00002f70 subs r2, r0, 2                |             r2 = r0 - 2;
    0x00002f72 ldrb r1, [r7, r2]             |             r1 = *((r7 + r2));
    0x00002f74 cmp r1, 0xd                   |             
                                             |             if (r1 != 0xd) {
    0x00002f76 bne 0x2f86                    |                 goto label_101;
                                             |             }
    0x00002f78 subs r3, r0, 1                |             r3 = r0 - 1;
    0x00002f7a ldrb r1, [r7, r3]             |             r1 = *((r7 + r3));
    0x00002f7c cmp r1, 0xa                   |             
    0x00002f7e ittt eq                       |             
                                             |             if (r1 != 0xa) {
    0x00002f80 strbeq r1, [r7, r2]           |                 *((r7 + r2)) = r1;
                                             |             }
                                             |             if (r1 != 0xa) {
    0x00002f82 moveq r2, 0                   |                 r2 = 0;
                                             |             }
                                             |             if (r1 == 0xa) {
    0x00002f84 strbeq r2, [r7, r3]           |                 *((r7 + r3)) = r2;
                                             |                 goto label_101;
                                             |             }
                                             |         }
                                             | label_101:
    0x00002f86 ldr r1, [sp, 0x30]            |         r1 = *(arg_30h);
    0x00002f88 mov r0, r7                    |         r0 = r7;
    0x00002f8a blx 0x1a8c                    |         fcn_00001a8c ();
    0x00002f8e adds r0, 1                    |         r0++;
    0x00002f90 bne 0x2f56                    |         
                                             |     } while (r0 != 1);
    0x00002f92 ldr.w r3, [pc, 0x558]         |     r3 = *(0x000034ec);
    0x00002f96 add r3, pc                    |     r3 += pc;
    0x00002f98 ldr r1, [r3, 0x10]            |     r1 = *((r3 + 0x10));
    0x00002f9a mov r0, r1                    |     r0 = r1;
    0x00002f9c str r1, [sp, 0x38]            |     *(arg_38h) = r1;
    0x00002f9e blx 0x1898                    |     strlen (r0);
    0x00002fa2 ldr r1, [sp, 0x38]            |     r1 = *(arg_38h);
    0x00002fa4 mov r2, r0                    |     r2 = r0;
    0x00002fa6 mov r0, r4                    |     r0 = r4;
    0x00002fa8 blx 0x195c                    |     fcn_0000195c ();
    0x00002fac mov r0, r5                    |     r0 = r5;
    0x00002fae movs r1, 0                    |     r1 = 0;
    0x00002fb0 blx 0x1980                    |     r0 = fcn_00001980 ();
    0x00002fb4 cmp r0, 0                     |     
                                             |     if (r0 < 0) {
    0x00002fb6 bge 0x2fd0                    |         
    0x00002fb8 blx 0x18d4                    |         errno_location ();
    0x00002fbc ldr.w r2, [pc, 0x530]         |         
    0x00002fc0 movs r1, 1                    |         r1 = 1;
    0x00002fc2 ldr r3, [r0]                  |         r3 = *(r0);
    0x00002fc4 movs r0, 3                    |         r0 = 3;
    0x00002fc6 add r2, pc                    |         r2 = 0x64ba;
    0x00002fc8 str r3, [sp]                  |         *(sp) = r3;
    0x00002fca mov r3, sb                    |         r3 = sb;
    0x00002fcc blx 0x19cc                    |         fcn_000019cc ();
                                             |     }
                                             | label_100:
    0x00002fd0 ldr r0, [sp, 0x2c]            |     r0 = *(fildes);
    0x00002fd2 blx 0x198c                    |     fcn_0000198c ();
    0x00002fd6 ldr r0, [sp, 0x30]            |     r0 = *(arg_30h);
    0x00002fd8 blx 0x198c                    |     fcn_0000198c ();
    0x00002fdc mov r0, r7                    |     r0 = r7;
    0x00002fde blx 0x1664                    |     free (r0);
                                             | label_18:
    0x00002fe2 ldr r3, [sp, 0x1c]            |     r3 = *(str);
    0x00002fe4 ldr r3, [r3]                  |     r3 = *(r3);
    0x00002fe6 cmp r3, 2                     |     
                                             |     if (r3 == 2) {
    0x00002fe8 beq 0x2ff6                    |         goto label_102;
                                             |     }
    0x00002fea ldr.w r3, [pc, 0x508]         |     r3 = *(0x000034f4);
    0x00002fee add r3, pc                    |     r3 += pc;
    0x00002ff0 ldr r5, [r3, 0x24]            |     r5 = *((r3 + 0x24));
    0x00002ff2 b.w 0x247e                    |     goto label_3;
                                             |     do {
                                             | label_102:
    0x00002ff6 movs r2, 0                    |         r2 = 0;
    0x00002ff8 ldr.w r0, [sl]                |         r0 = *(sl);
    0x00002ffc mov r1, r2                    |         r1 = r2;
    0x00002ffe blx 0x17b4                    |         waitpid ();
    0x00003002 ldr.w r3, [sl]                |         r3 = *(sl);
    0x00003006 cmp r0, r3                    |         
    0x00003008 beq 0x2ff6                    |         
                                             |     } while (r0 == r3);
    0x0000300a ldr.w r3, [pc, 0x4ec]         |     r3 = *(0x000034f8);
    0x0000300e add r3, pc                    |     r3 += pc;
    0x00003010 ldr.w r5, [r3, 0x98]          |     r5 = *((r3 + 0x98));
    0x00003014 b.w 0x247e                    |     goto label_3;
    0x00003016 rev r3, r6                    |     r6 = SWAP32 (r3);
                                             | label_99:
    0x00003018 ldr.w r2, [pc, 0x4e0]         |     
    0x0000301c movs r1, 1                    |     r1 = 1;
    0x0000301e movs r0, 3                    |     r0 = 3;
    0x00003020 add r2, pc                    |     r2 = 0x6520;
    0x00003022 blx 0x19cc                    |     fcn_000019cc ();
    0x00003026 b.w 0x2142                    |     goto label_2;
                                             | label_98:
    0x0000302a ldr.w r2, [pc, 0x4d4]         |     
    0x0000302e mov r3, sb                    |     r3 = sb;
    0x00003030 movs r1, 1                    |     r1 = 1;
    0x00003032 movs r0, 7                    |     r0 = 7;
    0x00003034 add r2, pc                    |     r2 = 0x653a;
    0x00003036 blx 0x19cc                    |     fcn_000019cc ();
    0x0000303a blx 0x18d4                    |     errno_location ();
    0x0000303e str r4, [sp, 0x30]            |     *(arg_30h) = r4;
    0x00003040 mov r4, r0                    |     r4 = r0;
    0x00003042 movs r2, 0                    |     r2 = 0;
    0x00003044 str r2, [r0]                  |     *(r0) = r2;
                                             | label_16:
    0x00003046 movw r2, 0x1ff4               |     r2 = 0x1ff4;
    0x0000304a ldr r0, [sp, 0x2c]            |     r0 = *(fildes);
    0x0000304c mov r1, r7                    |     r1 = r7;
    0x0000304e blx 0x1640                    |     r0 = read (r0, r1, r2);
    0x00003052 subs r2, r0, 0                |     r2 = r0 - 0;
                                             |     if (r2 <= r0) {
    0x00003054 ble 0x30b0                    |         goto label_103;
                                             |     }
    0x00003056 str.w r8, [sp, 0x38]          |     __asm ("str.w r8, [arg_38h]");
    0x0000305a mov r1, r7                    |     r1 = r7;
    0x0000305c mov r8, r6                    |     r8 = r6;
    0x0000305e mov r6, r4                    |     r6 = r4;
    0x00003060 mov r4, r2                    |     r4 = r2;
                                             |     do {
                                             | label_17:
    0x00003062 mov r2, r4                    |         r2 = r4;
    0x00003064 mov r0, r5                    |         r0 = r5;
    0x00003066 str r1, [sp, 0x40]            |         *(arg_40h) = r1;
    0x00003068 blx 0x195c                    |         r0 = fcn_0000195c ();
    0x0000306c subs r2, r0, 0                |         r2 = r0 - 0;
    0x0000306e ldr r1, [sp, 0x40]            |         r1 = *(arg_40h);
                                             |         if (r2 < r0) {
    0x00003070 blt 0x3084                    |             goto label_104;
                                             |         }
    0x00003072 subs r4, r4, r2               |         r4 -= r2;
    0x00003074 add r1, r2                    |         r1 += r2;
    0x00003076 cmp r4, 0                     |         
    0x00003078 bgt 0x3062                    |         
                                             |     } while (r4 > 0);
    0x0000307a mov r4, r6                    |     r4 = r6;
    0x0000307c mov r6, r8                    |     r6 = r8;
    0x0000307e ldr.w r8, [sp, 0x38]          |     r8 = *(arg_38h);
    0x00003082 b 0x3046                      |     goto label_16;
                                             | label_104:
    0x00003084 ldr r0, [r6]                  |     r0 = *(r6);
    0x00003086 cmp r0, 4                     |     
                                             |     if (r0 == 4) {
    0x00003088 beq 0x3062                    |         goto label_17;
                                             |     }
    0x0000308a cmp r0, 0xb                   |     
                                             |     if (r0 == 0xb) {
    0x0000308c beq 0x3062                    |         goto label_17;
                                             |     }
    0x0000308e cmp r0, 0x1c                  |     
    0x00003090 mov r3, r6                    |     r3 = r6;
    0x00003092 ldr r4, [sp, 0x30]            |     r4 = *(arg_30h);
    0x00003094 mov r6, r8                    |     r6 = r8;
    0x00003096 ldr.w r8, [sp, 0x38]          |     r8 = *(arg_38h);
                                             |     if (r0 == 0x1c) {
    0x0000309a beq 0x30c0                    |         goto label_105;
                                             |     }
                                             | label_19:
    0x0000309c ldr r0, [sp, 0x2c]            |     r0 = *(fildes);
    0x0000309e blx 0x1ab4                    |     fdipc_client_socket ();
    0x000030a2 mov r0, r5                    |     r0 = r5;
    0x000030a4 blx 0x1ab4                    |     fdipc_client_socket ();
    0x000030a8 mov r0, r7                    |     r0 = r7;
    0x000030aa blx 0x1664                    |     free (r0);
    0x000030ae b 0x2fe2                      |     goto label_18;
                                             |     if (r0 == 0x1c) {
                                             | label_103:
    0x000030b0 beq 0x30bc                    |         goto label_106;
                                             |     }
    0x000030b2 ldr r2, [r4]                  |     r2 = *(r4);
    0x000030b4 cmp r2, 4                     |     
                                             |     if (r2 == 4) {
    0x000030b6 beq 0x3046                    |         goto label_16;
                                             |     }
    0x000030b8 cmp r2, 0xb                   |     
                                             |     if (r2 == 0xb) {
    0x000030ba beq 0x3046                    |         goto label_16;
                                             |     }
                                             | label_106:
    0x000030bc ldr r4, [sp, 0x30]            |     r4 = *(arg_30h);
    0x000030be b 0x309c                      |     goto label_19;
                                             | label_105:
    0x000030c0 ldr.w r2, [pc, 0x440]         |     r2 = *(0x00003504);
    0x000030c4 str r3, [sp, 0x38]            |     *(arg_38h) = r3;
    0x000030c6 add r2, pc                    |     r2 += pc;
    0x000030c8 ldr r1, [r2, 0x10]            |     r1 = *((r2 + 0x10));
    0x000030ca mov r0, r1                    |     r0 = r1;
    0x000030cc str r1, [sp, 0x30]            |     *(arg_30h) = r1;
    0x000030ce blx 0x1898                    |     strlen (r0);
    0x000030d2 ldr r1, [sp, 0x30]            |     r1 = *(arg_30h);
    0x000030d4 mov r2, r0                    |     r2 = r0;
    0x000030d6 mov r0, r4                    |     r0 = r4;
    0x000030d8 blx 0x195c                    |     fcn_0000195c ();
    0x000030dc movs r1, 0                    |     r1 = 0;
    0x000030de mov r0, r5                    |     r0 = r5;
    0x000030e0 blx 0x1980                    |     r0 = fcn_00001980 ();
    0x000030e4 cmp r0, 0                     |     
    0x000030e6 ldr r3, [sp, 0x38]            |     r3 = *(arg_38h);
                                             |     if (r0 >= 0) {
    0x000030e8 bge 0x309c                    |         goto label_19;
                                             |     }
    0x000030ea ldr r3, [r3]                  |     r3 = *(r3);
    0x000030ec movs r1, 1                    |     r1 = 1;
    0x000030ee ldr.w r2, [pc, 0x418]         |     
    0x000030f2 movs r0, 3                    |     r0 = 3;
    0x000030f4 str r3, [sp]                  |     *(sp) = r3;
    0x000030f6 mov r3, sb                    |     r3 = sb;
    0x000030f8 add r2, pc                    |     r2 = 0x6606;
    0x000030fa blx 0x19cc                    |     fcn_000019cc ();
    0x000030fe b 0x309c                      |     goto label_19;
                                             | label_97:
    0x00003100 ldr.w r1, [r3, 0x94]          |     r1 = *((r3 + 0x94));
    0x00003104 mov r0, r1                    |     r0 = r1;
    0x00003106 str r1, [sp, 0x30]            |     *(arg_30h) = r1;
    0x00003108 blx 0x1898                    |     strlen (r0);
    0x0000310c ldr r1, [sp, 0x30]            |     r1 = *(arg_30h);
    0x0000310e mov r2, r0                    |     r2 = r0;
    0x00003110 mov r0, r4                    |     r0 = r4;
    0x00003112 blx 0x195c                    |     fcn_0000195c ();
    0x00003116 b 0x2f16                      |     goto label_20;
                                             | label_96:
    0x00003118 ldr r5, [r3, 0x20]            |     r5 = *((r3 + 0x20));
    0x0000311a mov r0, r5                    |     r0 = r5;
    0x0000311c blx 0x1898                    |     strlen (r0);
    0x00003120 mov r1, r5                    |     r1 = r5;
    0x00003122 mov r2, r0                    |     r2 = r0;
    0x00003124 mov r0, r4                    |     r0 = r4;
    0x00003126 blx 0x195c                    |     fcn_0000195c ();
    0x0000312a mov r0, r7                    |     r0 = r7;
    0x0000312c blx 0x1664                    |     free (r0);
    0x00003130 b.w 0x2142                    |     goto label_2;
                                             | label_95:
    0x00003134 ldr r2, [pc, 0x3d4]           |     
    0x00003136 movs r1, 1                    |     r1 = 1;
    0x00003138 movs r0, 3                    |     r0 = 3;
    0x0000313a add r2, pc                    |     r2 = 0x664a;
    0x0000313c blx 0x19cc                    |     fcn_000019cc ();
    0x00003140 mov r0, r4                    |     r0 = r4;
    0x00003142 bl 0x38b0                     |     fcn_000038b0 (r0);
    0x00003146 mov r0, r5                    |     r0 = r5;
    0x00003148 blx 0x1ab4                    |     fdipc_client_socket ();
    0x0000314c b.w 0x2142                    |     goto label_2;
                                             | label_94:
    0x00003150 ldr r3, [pc, 0x3bc]           |     
    0x00003152 add r3, pc                    |     r3 = 0x6666;
    0x00003154 ldr.w r7, [r3, 0x90]          |     r7 = *(0x66f6);
    0x00003158 mov r0, r7                    |     r0 = r7;
    0x0000315a blx 0x1898                    |     strlen (r0);
    0x0000315e mov r1, r7                    |     r1 = r7;
    0x00003160 mov r2, r0                    |     r2 = r0;
    0x00003162 mov r0, r4                    |     r0 = r4;
    0x00003164 blx 0x195c                    |     fcn_0000195c ();
    0x00003168 str r5, [sp, 0x30]            |     *(arg_30h) = r5;
                                             | label_21:
    0x0000316a ldr r3, [sp, 0x2c]            |     r3 = *(fildes);
    0x0000316c movs r2, 0x51                 |     r2 = 0x51;
    0x0000316e mov r1, fp                    |     r1 = fp;
    0x00003170 ldr r0, [r3]                  |     r0 = *(r3);
    0x00003172 blx 0x1640                    |     r0 = read (r0, r1, r2);
    0x00003176 subs r7, r0, 0                |     r7 = r0 - 0;
                                             |     if (r7 <= r0) {
    0x00003178 ble.w 0x373c                  |         goto label_107;
                                             |     }
    0x0000317c mov r5, fp                    |     r5 = fp;
                                             |     do {
                                             | label_33:
    0x0000317e mov r2, r7                    |         r2 = r7;
    0x00003180 mov r1, r5                    |         r1 = r5;
    0x00003182 mov r0, r4                    |         r0 = r4;
    0x00003184 blx 0x195c                    |         r0 = fcn_0000195c ();
    0x00003188 subs r3, r0, 0                |         r3 = r0 - 0;
                                             |         if (r3 < r0) {
    0x0000318a blt.w 0x3718                  |             goto label_108;
                                             |         }
    0x0000318e subs r7, r7, r3               |         r7 -= r3;
    0x00003190 add r5, r3                    |         r5 += r3;
    0x00003192 bne 0x317e                    |         
                                             |     } while (r7 != r7);
    0x00003194 b 0x316a                      |     goto label_21;
                                             | label_93:
    0x00003196 mov r1, r7                    |     r1 = r7;
    0x00003198 mov r0, sb                    |     r0 = sb;
    0x0000319a blx 0x1838                    |     r0 = stat ();
                                             |     if (r0 != 0) {
    0x0000319e cbnz r0, 0x3200               |         goto label_109;
                                             |     }
    0x000031a0 ldr r5, [r7, 0x10]            |     r5 = *((r7 + 0x10));
    0x000031a2 and r3, r5, 0xf000            |     r3 = r5 & 0xf000;
    0x000031a6 cmp.w r3, 0x4000              |     
                                             |     if (r3 == 0x4000) {
    0x000031aa beq 0x31f6                    |         goto label_110;
                                             |     }
    0x000031ac movs r1, 2                    |     r1 = 2;
    0x000031ae mov r0, sb                    |     r0 = sb;
    0x000031b0 blx 0x1968                    |     r0 = fcn_00001968 ();
    0x000031b4 cmp r0, 0                     |     
                                             |     if (r0 < 0) {
    0x000031b6 blt.w 0x299e                  |         goto label_4;
                                             |     }
    0x000031ba ubfx r2, r5, 0, 9             |     r2 = (r5 >> 0) & ((1 << 9) - 1);
                                             | label_23:
    0x000031be movw r1, 0x241                |     r1 = 0x241;
    0x000031c2 mov r0, sb                    |     r0 = sb;
    0x000031c4 blx 0x1844                    |     r0 = open (r0, r1, r2);
    0x000031c8 mov r5, r0                    |     r5 = r0;
    0x000031ca b 0x2ec0                      |     goto label_22;
                                             | label_65:
    0x000031cc blx 0x185c                    |     r0 = ctype_b_loc ();
    0x000031d0 ldr r3, [r0]                  |     r3 = *(r0);
    0x000031d2 addw r2, sp, 0x39d            |     __asm ("addw r2, path");
                                             |     do {
    0x000031d6 mov r0, r2                    |         r0 = r2;
    0x000031d8 adds r2, 1                    |         r2++;
    0x000031da ldrb r1, [r0]                 |         r1 = *(r0);
    0x000031dc ldrh.w r1, [r3, r1, lsl 1]    |         offset_1 = r1 << 1;
                                             |         r1 = *((r3 + offset_1));
    0x000031e0 lsls r1, r1, 0x12             |         r1 <<= 0x12;
    0x000031e2 bmi 0x31d6                    |         
                                             |     } while (r1 < r1);
    0x000031e4 clz r3, sl                    |     r3 &= sl;
    0x000031e8 mov r2, r8                    |     r2 = r8;
    0x000031ea lsrs r3, r3, 5                |     r3 >>= 5;
    0x000031ec mov r1, r4                    |     r1 = r4;
    0x000031ee bl 0x3ec0                     |     fcn_00003ec0 (r0, r1, r2, r3);
    0x000031f2 b.w 0x2142                    |     goto label_2;
                                             | label_110:
    0x000031f6 ldr r3, [sp, 0x30]            |     r3 = *(arg_30h);
    0x000031f8 ldr.w r5, [r3, 0x88]          |     r5 = *((r3 + 0x88));
    0x000031fc b.w 0x247e                    |     goto label_3;
                                             | label_109:
    0x00003200 mov.w r2, 0x1a4               |     r2 = 0x1a4;
    0x00003204 b 0x31be                      |     goto label_23;
                                             | label_41:
    0x00003206 add r7, sp, 0x39c             |     r7 += arg_39ch;
    0x00003208 b 0x3218                      |     
                                             |     while (sb != 0) {
    0x0000320a blx 0x185c                    |         r0 = ctype_b_loc ();
    0x0000320e ldr r3, [r0]                  |         r3 = *(r0);
    0x00003210 ldrh.w r3, [r3, sb, lsl 1]    |         offset_2 = sb << 1;
                                             |         r3 = *((r3 + offset_2));
    0x00003214 lsls r0, r3, 0x12             |         r0 = r3 << 0x12;
                                             |         if (r0 >= r3) {
    0x00003216 bpl 0x3250                    |             goto label_111;
                                             |         }
    0x00003218 mov r5, r7                    |         r5 = r7;
    0x0000321a ldrb sb, [r7], 1              |         sb = *(r7);
                                             |         r7++;
    0x0000321e cmp.w sb, 0                   |         
    0x00003222 bne 0x320a                    |         
                                             |     }
    0x00003224 ldr r3, [pc, 0x2ec]           |     
    0x00003226 add r3, pc                    |     r3 = 0x673e;
    0x00003228 ldr.w r5, [r3, 0xec]          |     r5 = *(0x682a);
    0x0000322c b.w 0x247e                    |     goto label_3;
                                             | label_46:
    0x00003230 ldr r5, [sp, 0x24]            |     r5 = *(s1);
    0x00003232 movs r2, 0x40                 |     r2 = 0x40;
    0x00003234 addw r1, sp, 0x39d            |     __asm ("addw r1, path");
    0x00003238 mov r0, r5                    |     r0 = r5;
    0x0000323a blx 0x1940                    |     strncpy (r0, r1, r2);
    0x0000323e ldr r2, [sp, 0x18]            |     r2 = *(arg_18h);
    0x00003240 movs r3, 1                    |     r3 = 1;
    0x00003242 str r3, [sp, 0x18]            |     *(arg_18h) = r3;
    0x00003244 strb.w r2, [r5, 0x40]         |     *((r5 + 0x40)) = r2;
    0x00003248 ldr.w r5, [sl, 0x5c]          |     r5 = *((sl + 0x5c));
    0x0000324a str r4, [r3, r1]              |     *((r3 + r1)) = r4;
    0x0000324c b.w 0x247e                    |     goto label_3;
                                             | label_111:
    0x00003250 ldr r7, [pc, 0x2c4]           |     
    0x00003252 add r7, pc                    |     r7 = 0x676e;
    0x00003254 ldr.w sb, [r7, 0xbc]          |     sb = *(0x682a);
    0x00003258 mov r0, sb                    |     r0 = sb;
    0x0000325a blx 0x1898                    |     strlen (r0);
    0x0000325e mov r1, sb                    |     r1 = sb;
    0x00003260 mov r2, r0                    |     r2 = r0;
    0x00003262 mov r0, r5                    |     r0 = r5;
    0x00003264 blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x00003268 cbnz r0, 0x3270               |         
    0x0000326a ldr r5, [r7, 0x40]            |         r5 = *((r7 + 0x40));
    0x0000326c b.w 0x247e                    |         goto label_3;
                                             |     }
    0x00003270 ldr r5, [r7, 0x44]            |     r5 = *((r7 + 0x44));
    0x00003272 b.w 0x247e                    |     goto label_3;
                                             | label_47:
    0x00003292 ldr r2, [pc, 0x28c]           |     
    0x00003294 movs r1, 1                    |     r1 = 1;
    0x00003296 movs r0, 6                    |     r0 = 6;
    0x00003298 add r2, pc                    |     r2 = 0x67be;
    0x0000329a blx 0x19cc                    |     fcn_000019cc ();
    0x0000329e b.w 0x2496                    |     goto label_24;
                                             | label_43:
    0x000032a2 ldr.w r5, [sl, 0x54]          |     r5 = *((sl + 0x54));
    0x000032a6 b.w 0x247e                    |     goto label_3;
                                             | label_42:
    0x000032aa ldr.w r5, [sl, 0x4c]          |     r5 = *((sl + 0x4c));
    0x000032ae b.w 0x247e                    |     goto label_3;
                                             | label_44:
    0x000032b2 ldr.w sb, [sl, 0x64]          |     sb = *((sl + 0x64));
    0x000032b6 mov r0, sb                    |     r0 = sb;
    0x000032b8 blx 0x1898                    |     strlen (r0);
    0x000032bc mov r1, sb                    |     r1 = sb;
    0x000032be mov r2, r0                    |     r2 = r0;
    0x000032c0 mov r0, r5                    |     r0 = r5;
    0x000032c2 blx 0x18ec                    |     strncasecmp (r0, r1, r2);
    0x000032c6 str r0, [sp, 0x18]            |     *(arg_18h) = r0;
    0x000032c8 cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x000032ca bne.w 0x342e                  |         goto label_112;
                                             |     }
    0x000032ce ldr r3, [pc, 0x254]           |     
    0x000032d0 add r3, pc                    |     
    0x000032d2 ldr r3, [r3, 0x64]            |     r3 = *(0x685e);
    0x000032d4 cmp r3, 0                     |     
                                             |     if (r3 > 0) {
    0x000032d6 ble 0x32e8                    |         
    0x000032d8 ldr r1, [pc, 0x24c]           |         
    0x000032da ldr r0, [sp, 0x24]            |         r0 = *(s1);
    0x000032dc add r1, pc                    |         r1 = 0x6808;
    0x000032de blx 0x15f8                    |         r0 = strcmp (r0, r1);
    0x000032e2 cmp r0, 0                     |         
                                             |         if (r0 != 0) {
    0x000032e4 bne.w 0x3452                  |             goto label_113;
                                             |         }
                                             |     }
    0x000032e8 add r5, sp, 0x354             |     r5 += arg_354h;
    0x000032ea movs r2, 0x40                 |     r2 = 0x40;
    0x000032ec addw r1, sp, 0x39d            |     __asm ("addw r1, path");
    0x000032f0 mov r0, r5                    |     r0 = r5;
    0x000032f2 blx 0x1940                    |     strncpy (r0, r1, r2);
    0x000032f6 movs r3, 0                    |     r3 = 0;
    0x000032f8 ldr r0, [sp, 0x24]            |     r0 = *(s1);
    0x000032fa strb.w r3, [r5, 0x40]         |     *((r5 + 0x40)) = r3;
    0x000032fe blx 0x15d4                    |     r0 = getpwnam ();
    0x00003302 mov sb, r0                    |     sb = r0;
    0x00003304 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00003306 beq 0x3394                    |         goto label_114;
                                             |     }
    0x00003308 blx 0x173c                    |     r0 = geteuid ();
    0x0000330c cmp r0, 0                     |     
    0x0000330e beq 0x337e                    |     
                                             |     while (r0 == 0) {
                                             | label_26:
    0x00003310 ldr.w sl, [sb, 4]             |         sl = *((sb + 4));
                                             | label_25:
    0x00003314 mov r0, r5                    |         r0 = r5;
    0x00003316 mov r1, sl                    |         r1 = sl;
    0x00003318 blx 0x1a80                    |         r0 = fcn_00001a80 ();
    0x0000331c cmp r0, 0                     |         
                                             |         if (r0 == 0) {
    0x0000331e beq 0x3394                    |             goto label_114;
                                             |         }
    0x00003320 mov r1, sl                    |         r1 = sl;
    0x00003322 blx 0x15f8                    |         r0 = strcmp (r0, r1);
    0x00003326 cmp r0, 0                     |         
                                             |         if (r0 != 0) {
    0x00003328 bne 0x3394                    |             goto label_114;
                                             |         }
    0x0000332a ldr r3, [pc, 0x200]           |         r3 = *(0x352e);
                                             | label_35:
    0x0000332c ldrd r5, sb, [sb, 8]          |         __asm ("ldrd r5, sb, [sb, 8]");
    0x00003330 add r3, pc                    |         r3 += pc;
    0x00003332 ldr.w sl, [r3, 0x6c]          |         sl = *((r3 + 0x6c));
    0x00003334 adr r0, 0x1b0                 |         r0 = 0x1b0;
    0x00003336 mov r0, sl                    |         r0 = sl;
    0x00003338 blx 0x1898                    |         strlen (r0);
    0x0000333c mov r1, sl                    |         r1 = sl;
    0x0000333e mov r2, r0                    |         r2 = r0;
    0x00003340 mov r0, r4                    |         r0 = r4;
    0x00003342 blx 0x195c                    |         fcn_0000195c ();
    0x00003346 ldr r2, [pc, 0x1e8]           |         
    0x00003348 movs r0, 0x26                 |         r0 = 0x26;
    0x0000334a ldr r3, [sp, 0x24]            |         r3 = *(s1);
    0x0000334c movs r1, 1                    |         r1 = 1;
    0x0000334e add r2, pc                    |         r2 = 0x6884;
    0x00003350 blx 0x19cc                    |         fcn_000019cc ();
    0x00003354 mov r0, r5                    |         r0 = r5;
    0x00003356 blx 0x161c                    |         r0 = getpwuid ();
                                             |         if (r0 != 0) {
    0x0000335a cbz r0, 0x336a                |             
    0x0000335c ldr r1, [pc, 0x1d4]           |             
    0x0000335e ldr r0, [r0]                  |             r0 = *(r0);
    0x00003360 add r1, pc                    |             r1 = 0x6898;
    0x00003362 blx 0x15f8                    |             r0 = strcmp (r0, r1);
    0x00003366 cmp r0, 0                     |             
                                             |             if (r0 == 0) {
    0x00003368 beq 0x343a                    |                 goto label_115;
                                             |             }
                                             |         }
                                             | label_28:
    0x0000336a mov r0, sb                    |         r0 = sb;
    0x0000336c blx 0x1974                    |         fcn_00001974 ();
    0x00003370 mov r0, r5                    |         r0 = r5;
    0x00003372 blx 0x1760                    |         seteuid ();
    0x00003376 movs r3, 2                    |         r3 = 2;
    0x00003378 str r3, [sp, 0x18]            |         *(arg_18h) = r3;
    0x0000337a b.w 0x2142                    |         goto label_2;
    0x0000337e ldr r0, [sp, 0x24]            |         r0 = *(s1);
    0x00003380 blx 0x1658                    |         r0 = getspnam ();
    0x00003384 cmp r0, 0                     |         
    0x00003386 beq 0x3310                    |         
                                             |     }
    0x00003388 ldr.w sl, [r0, 4]             |     sl = *((r0 + 4));
    0x0000338c cmp.w sl, 0                   |     
                                             |     if (sl != 0) {
    0x00003390 bne 0x3314                    |         goto label_25;
                                             |     }
    0x00003392 b 0x3310                      |     goto label_26;
                                             | label_114:
    0x00003394 ldr r0, [sp, 0x44]            |     r0 = *(arg_44h);
    0x00003396 blx 0x17a8                    |     usleep (r0);
    0x0000339a ldr r3, [pc, 0x19c]           |     
    0x0000339c add r3, pc                    |     r3 = 0x68da;
    0x0000339e ldr r5, [r3, 0x68]            |     r5 = *(0x6942);
    0x000033a0 mov r0, r5                    |     r0 = r5;
    0x000033a2 blx 0x1898                    |     strlen (r0);
    0x000033a6 mov r1, r5                    |     r1 = r5;
    0x000033a8 mov r2, r0                    |     r2 = r0;
    0x000033aa mov r0, r4                    |     r0 = r4;
    0x000033ac blx 0x195c                    |     fcn_0000195c ();
    0x000033b0 ldr r2, [pc, 0x188]           |     
    0x000033b2 movs r1, 1                    |     r1 = 1;
    0x000033b4 ldr r3, [sp, 0x20]            |     r3 = *(arg_20h);
    0x000033b6 movs r0, 0x26                 |     r0 = 0x26;
    0x000033b8 add r2, pc                    |     r2 = 0x68f8;
    0x000033ba blx 0x19cc                    |     fcn_000019cc ();
    0x000033be b.w 0x2142                    |     goto label_2;
                                             | label_48:
    0x000033c2 ldrb.w r3, [r8, 0xc]          |     r3 = *((r8 + 0xc));
    0x000033c6 cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x000033c8 bne.w 0x2b4a                  |         goto label_27;
                                             |     }
    0x000033cc ldr r1, [pc, 0x170]           |     
    0x000033ce add r3, sp, 0x68              |     r3 += arg_68h;
    0x000033d0 add r2, sp, 0x64              |     r2 += arg_64h;
    0x000033d2 mov r0, r5                    |     r0 = r5;
    0x000033d4 add.w sb, sp, 0x5c            |     sb += arg_5ch;
    0x000033d8 add r5, sp, 0x60              |     r5 += arg_60h;
    0x000033da add.w sl, sp, 0x6c            |     sl += arg_6ch;
    0x000033de str r3, [sp, 0x2c]            |     *(fildes) = r3;
    0x000033e0 str r3, [sp, 4]               |     var_4h = r3;
    0x000033e2 add r1, pc                    |     r1 = 0x6926;
    0x000033e4 str r2, [sp, 0x1c]            |     *(str) = r2;
    0x000033e6 mov r3, r5                    |     r3 = r5;
    0x000033e8 str r2, [sp]                  |     *(sp) = r2;
    0x000033ea mov r2, sb                    |     r2 = sb;
    0x000033ec str r7, [sp, 0xc]             |     *(arg_ch) = r7;
    0x000033ee str.w sl, [sp, 8]             |     __asm ("str.w sl, [arg_8h]");
    0x000033f2 blx 0x1910                    |     r0 = isoc99_sscanf ();
    0x000033f6 cmp r0, 6                     |     
                                             |     if (r0 == 6) {
    0x000033f8 bne 0x3424                    |         
    0x000033fa ldr r3, [sp, 0x5c]            |         r3 = *(arg_5ch);
    0x000033fc cmp r3, 0xff                  |         
                                             |         if (r3 > 0xff) {
    0x000033fe bgt 0x3424                    |             goto label_29;
                                             |         }
    0x00003400 ldr r2, [sp, 0x60]            |         r2 = *(arg_60h);
    0x00003402 cmp r2, 0xff                  |         
                                             |         if (r2 > 0xff) {
    0x00003404 bgt 0x3424                    |             goto label_29;
                                             |         }
    0x00003406 ldr r1, [sp, 0x1c]            |         r1 = *(str);
    0x00003408 ldr r1, [r1]                  |         r1 = *(r1);
    0x0000340a cmp r1, 0xff                  |         
                                             |         if (r1 > 0xff) {
    0x0000340c bgt 0x3424                    |             goto label_29;
                                             |         }
    0x0000340e ldr r0, [sp, 0x2c]            |         r0 = *(fildes);
    0x00003410 ldr r5, [r0]                  |         r5 = *(r0);
    0x00003412 cmp r5, 0xff                  |         
                                             |         if (r5 > 0xff) {
    0x00003414 bgt 0x3424                    |             goto label_29;
                                             |         }
    0x00003416 ldr r0, [sp, 0x6c]            |         r0 = *(arg_6ch);
    0x00003418 cmp r0, 0xff                  |         
                                             |         if (r0 > 0xff) {
    0x0000341a bgt 0x3424                    |             goto label_29;
                                             |         }
    0x0000341c ldr r0, [r7]                  |         r0 = *(r7);
    0x0000341e cmp r0, 0xff                  |         
                                             |         if (r0 <= 0xff) {
    0x00003420 ble.w 0x3554                  |             goto label_116;
                                             |         }
                                             |     }
                                             | label_29:
    0x00003424 ldr r3, [pc, 0x11c]           |     
    0x00003426 add r3, pc                    |     r3 = 0x696e;
    0x00003428 ldr r5, [r3, 0x14]            |     r5 = *(0x6982);
    0x0000342a b.w 0x247e                    |     goto label_3;
                                             | label_112:
    0x0000342e movs r3, 0                    |     r3 = 0;
    0x00003430 ldr.w r5, [sl, 0x60]          |     r5 = *((sl + 0x60));
    0x00003434 str r3, [sp, 0x18]            |     *(arg_18h) = r3;
    0x00003436 b.w 0x247e                    |     goto label_3;
                                             | label_115:
    0x0000343a ldr r0, [pc, 0x10c]           |     
    0x0000343c mov r1, r7                    |     r1 = r7;
    0x0000343e add r0, pc                    |     r0 = 0x698c;
    0x00003440 blx 0x1838                    |     r0 = stat ();
    0x00003444 cmp r0, 0                     |     
                                             |     if (r0 < 0) {
    0x00003446 blt 0x336a                    |         goto label_28;
                                             |     }
    0x00003448 ldr r0, [pc, 0x100]           |     
    0x0000344a add r0, pc                    |     r0 = 0x699a;
    0x0000344c blx 0x1814                    |     system (r0);
    0x00003450 b 0x336a                      |     goto label_28;
                                             | label_113:
    0x00003452 ldr.w r5, [sl, 0x68]          |     r5 = *((sl + 0x68));
    0x00003456 mov r0, r5                    |     r0 = r5;
    0x00003458 blx 0x1898                    |     strlen (r0);
    0x0000345c mov r1, r5                    |     r1 = r5;
    0x0000345e mov r2, r0                    |     r2 = r0;
    0x00003460 mov r0, r4                    |     r0 = r4;
    0x00003462 blx 0x195c                    |     fcn_0000195c ();
    0x00003466 ldr r2, [pc, 0xe8]            |     
    0x00003468 movs r1, 1                    |     r1 = 1;
    0x0000346a ldr r3, [sp, 0x20]            |     r3 = *(arg_20h);
    0x0000346c movs r0, 0x26                 |     r0 = 0x26;
    0x0000346e add r2, pc                    |     r2 = 0x69c4;
    0x00003470 blx 0x19cc                    |     fcn_000019cc ();
    0x00003474 b.w 0x2142                    |     goto label_2;
                                             | label_116:
    0x00003554 strd r3, r2, [sp]             |     __asm ("strd r3, r2, [sp]");
    0x00003558 addw r0, sp, 0x101            |     __asm ("addw r0, arg_101h");
    0x0000355c ldr r3, [pc, 0x228]           |     
    0x0000355e movs r2, 0x3e                 |     r2 = 0x3e;
    0x00003560 strd r1, r5, [sp, 8]          |     __asm ("strd r1, r5, [sp, 8]");
    0x00003564 movs r1, 1                    |     r1 = 1;
    0x00003566 add r3, pc                    |     r3 = 0x6cf2;
    0x00003568 blx 0x18f8                    |     sprintf_chk ()
    0x0000356c ldr r2, [sp, 0x6c]            |     r2 = *(arg_6ch);
    0x0000356e mov r0, r8                    |     r0 = r8;
    0x00003570 ldr r3, [r7]                  |     r3 = *(r7);
    0x00003572 add.w r3, r3, r2, lsl 8       |     r3 += (r2 << 8);
    0x00003576 str.w r3, [r8, 4]             |     __asm ("str.w r3, [r8, 4]");
    0x0000357a bl 0x3b50                     |     r0 = fcn_00003b50 (r0);
    0x0000357e cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00003580 bne.w 0x3424                  |         goto label_29;
                                             |     }
    0x00003584 ldr.w r0, [r8, 8]             |     r0 = *((r8 + 8));
    0x00003588 cmp r0, 0                     |     
                                             |     if (r0 >= 0) {
    0x0000358a blt 0x3598                    |         
    0x0000358c blx 0x1ab4                    |         fdipc_client_socket ();
    0x00003590 mov.w r3, -1                  |         r3 = -1;
    0x00003594 str.w r3, [r8, 8]             |         __asm ("str.w r3, [r8, 8]");
                                             |     }
    0x00003598 ldr r3, [pc, 0x1f0]           |     
    0x0000359a add r3, pc                    |     r3 = 0x6d2a;
    0x0000359c ldr r5, [r3, 0x54]            |     r5 = *(0x6d7e);
    0x0000359e b.w 0x247e                    |     goto label_3;
                                             | label_68:
    0x000035a2 addw r0, sp, 0x39d            |     __asm ("addw r0, path");
    0x000035a6 bl 0x3b2c                     |     r0 = fcn_00003b2c (r0);
    0x000035aa blx 0x1700                    |     r0 = unlink (r0);
    0x000035ae cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x000035b0 bne.w 0x299e                  |         goto label_4;
                                             |     }
    0x000035b4 b.w 0x29ba                    |     goto label_30;
                                             | label_70:
    0x000035b8 add r0, sp, 0x39c             |     r0 += arg_39ch;
    0x000035ba bl 0x3b2c                     |     r0 = fcn_00003b2c (r0);
    0x000035be mov r1, r0                    |     r1 = r0;
    0x000035c0 mov r0, r4                    |     r0 = r4;
    0x000035c2 bl 0x3c10                     |     fcn_00003c10 (r0, r1);
    0x000035c6 b.w 0x2142                    |     goto label_2;
                                             | label_69:
    0x000035ca movs r1, 0xc8                 |     r1 = 0xc8;
    0x000035cc mov r0, fp                    |     r0 = fp;
    0x000035ce blx 0x1868                    |     r0 = getcwd ();
    0x000035d2 mov r5, r0                    |     r5 = r0;
    0x000035d4 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x000035d6 beq.w 0x2bfa                  |         goto label_31;
                                             |     }
    0x000035da ldr r1, [pc, 0x1b4]           |     
    0x000035dc movs r2, 5                    |     r2 = 5;
    0x000035de mov r0, r4                    |     r0 = r4;
    0x000035e0 add r1, pc                    |     r1 = 0x6d76;
    0x000035e2 bl 0x4034                     |     r0 = fcn_00004034 (r0, r1, r2);
                                             |     if (r0 != 0) {
    0x000035e6 cbnz r0, 0x360c               |         goto label_117;
                                             |     }
    0x000035e8 mov r0, r5                    |     r0 = r5;
    0x000035ea blx 0x1898                    |     strlen (r0);
    0x000035ee mov r1, r5                    |     r1 = r5;
    0x000035f0 mov r2, r0                    |     r2 = r0;
    0x000035f2 mov r0, r4                    |     r0 = r4;
    0x000035f4 bl 0x4034                     |     r0 = fcn_00004034 (r0, r1, r2);
                                             |     if (r0 != 0) {
    0x000035f8 cbnz r0, 0x360c               |         goto label_117;
                                             |     }
    0x000035fa ldr r1, [pc, 0x198]           |     
    0x000035fc movs r2, 0x19                 |     r2 = 0x19;
    0x000035fe mov r0, r4                    |     r0 = r4;
    0x00003600 add r1, pc                    |     r1 = 0x6d9a;
    0x00003602 bl 0x4034                     |     r0 = fcn_00004034 (r0, r1, r2);
    0x00003606 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00003608 beq.w 0x2142                  |         goto label_2;
                                             |     }
                                             | label_117:
    0x0000360c mov fp, r4                    |     
    0x0000360e b.w 0x24c2                    |     goto label_32;
                                             | label_71:
    0x00003612 addw r0, sp, 0x39d            |     __asm ("addw r0, path");
    0x00003616 bl 0x3b2c                     |     fcn_00003b2c (r0);
    0x0000361a ldr.w sl, [sb, 0xc0]          |     sl = *((sb + 0xc0));
    0x0000361e mov r5, r0                    |     r5 = r0;
    0x00003620 str r0, [r7]                  |     *(r7) = r0;
    0x00003622 mov r0, sl                    |     r0 = sl;
    0x00003624 blx 0x1898                    |     strlen (r0);
    0x00003628 mov r1, sl                    |     r1 = sl;
    0x0000362a mov r2, r0                    |     r2 = r0;
    0x0000362c mov r0, r5                    |     r0 = r5;
    0x0000362e blx 0x18ec                    |     r0 = strncasecmp (r0, r1, r2);
                                             |     if (r0 != 0) {
    0x00003632 cbz r0, 0x367a                |         
    0x00003634 ldr.w r7, [sb, 0xc4]          |         r7 = *((sb + 0xc4));
    0x00003638 mov r0, r7                    |         r0 = r7;
    0x0000363a blx 0x1898                    |         strlen (r0);
    0x0000363e mov r1, r7                    |         r1 = r7;
    0x00003640 mov r2, r0                    |         r2 = r0;
    0x00003642 mov r0, r5                    |         r0 = r5;
    0x00003644 blx 0x18ec                    |         r0 = strncasecmp (r0, r1, r2);
                                             |         if (r0 == 0) {
    0x00003648 cbnz r0, 0x3672               |             
    0x0000364a ldr r0, [pc, 0x14c]           |             
    0x0000364c add r0, pc                    |             r0 = 0x6dea;
    0x0000364e blx 0x1814                    |             r0 = system (r0);
    0x00003652 cmp r0, 0                     |             
                                             |             if (r0 >= 0) {
    0x00003654 blt 0x366a                    |                 
    0x00003656 ldr r2, [pc, 0x144]           |                 
    0x00003658 movs r1, 1                    |                 r1 = 1;
    0x0000365a movs r0, 6                    |                 r0 = 6;
    0x0000365c add r2, pc                    |                 r2 = 0x6dfe;
    0x0000365e blx 0x19cc                    |                 fcn_000019cc ();
    0x00003662 ldr.w r5, [sb, 0x54]          |                 r5 = *((sb + 0x54));
    0x00003666 b.w 0x247e                    |                 goto label_3;
                                             |             }
    0x0000366a ldr r2, [pc, 0x134]           |             
    0x0000366c add r2, pc                    |             r2 = 0x6e12;
    0x0000366e b.w 0x2d2e                    |             goto label_14;
                                             |         }
    0x00003672 ldr.w r5, [sb, 0xc8]          |         r5 = *((sb + 0xc8));
    0x00003676 b.w 0x247e                    |         goto label_3;
                                             |     }
    0x0000367a adds r0, r5, 5                |     r0 = r5 + 5;
    0x0000367c mov r1, r7                    |     r1 = r7;
    0x0000367e str r0, [r7]                  |     *(r7) = r0;
    0x00003680 movs r2, 8                    |     r2 = 8;
    0x00003682 blx 0x1610                    |     strtol (r0, r1, r2);
    0x00003686 ldr.w sl, [r7]                |     sl = *(r7);
    0x0000368a mov sb, r0                    |     sb = r0;
    0x0000368c str.w r8, [sp, 0x1c]          |     __asm ("str.w r8, [str]");
    0x00003690 mov r8, r7                    |     r8 = r7;
    0x00003692 mov r7, r6                    |     r7 = r6;
    0x00003694 mov r6, r4                    |     r6 = r4;
    0x00003696 b 0x36a6                      |     
                                             |     while (r4 != 0) {
    0x00003698 blx 0x185c                    |         r0 = ctype_b_loc ();
    0x0000369c ldr r3, [r0]                  |         r3 = *(r0);
    0x0000369e ldrh.w r3, [r3, r4, lsl 1]    |         offset_3 = r4 << 1;
                                             |         r3 = *((r3 + offset_3));
    0x000036a2 lsls r3, r3, 0x12             |         r3 <<= 0x12;
                                             |         if (r3 >= r3) {
    0x000036a4 bpl 0x36b0                    |             goto label_118;
                                             |         }
    0x000036a6 mov r5, sl                    |         r5 = sl;
    0x000036a8 ldrb r4, [sl], 1              |         r4 = *(sl);
                                             |         sl++;
    0x000036ac cmp r4, 0                     |         
    0x000036ae bne 0x3698                    |         
                                             |     }
                                             | label_118:
    0x000036b0 mov r4, r6                    |     r4 = r6;
    0x000036b2 mov r6, r7                    |     r6 = r7;
    0x000036b4 mov r7, r8                    |     r7 = r8;
    0x000036b6 movs r1, 0xc0                 |     r1 = 0xc0;
    0x000036b8 mov r0, fp                    |     r0 = fp;
    0x000036ba str r5, [r7]                  |     *(r7) = r5;
    0x000036bc ldr.w r8, [sp, 0x1c]          |     r8 = *(str);
    0x000036c0 blx 0x1868                    |     r0 = getcwd ();
    0x000036c4 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x000036c6 beq 0x3756                    |         goto label_119;
                                             |     }
    0x000036c8 mov r0, fp                    |     r0 = fp;
    0x000036ca blx 0x1898                    |     r0 = strlen (r0);
    0x000036ce mov r7, r0                    |     r7 = r0;
    0x000036d0 mov r0, r5                    |     r0 = r5;
    0x000036d2 blx 0x1898                    |     r0 = strlen (r0);
    0x000036d6 adds r3, r7, r0               |     r3 = r7 + r0;
    0x000036d8 adds r3, 1                    |     r3++;
    0x000036da cmp.w r3, 0x100               |     
                                             |     if (r3 > 0x100) {
    0x000036de bhi 0x3756                    |         goto label_119;
                                             |     }
    0x000036e0 ldr r1, [pc, 0xc0]            |     
    0x000036e2 rsb.w r3, r7, 0x100           |     r3 = 0x100 - r7;
    0x000036e6 adds r3, 1                    |     r3++;
    0x000036e8 movs r2, 1                    |     r2 = 1;
    0x000036ea add.w r0, fp, r7              |     r0 = fp + r7;
    0x000036ee add r1, pc                    |     r1 = 0x6e96;
    0x000036f0 blx 0x1790                    |     memcpy_chk ();
    0x000036f4 adds r0, r7, 1                |     r0 = r7 + 1;
    0x000036f6 rsb.w r2, r7, 0x100           |     r2 = 0x100 - r7;
    0x000036fa mov r1, r5                    |     r1 = r5;
    0x000036fc add r0, fp                    |     r0 += fp;
    0x000036fe blx 0x17c0                    |     strcpy_chk ();
    0x00003702 mov r1, sb                    |     r1 = sb;
    0x00003704 mov r0, r5                    |     r0 = r5;
    0x00003706 blx 0x1a74                    |     r0 = fcn_00001a74 ();
    0x0000370a cmp r0, 0                     |     
                                             |     if (r0 < 0) {
    0x0000370c blt 0x3762                    |         goto label_120;
                                             |     }
    0x0000370e ldr r3, [pc, 0x98]            |     
    0x00003710 add r3, pc                    |     r3 = 0x6ebe;
    0x00003712 ldr r5, [r3, 0x54]            |     r5 = *(0x6f12);
    0x00003714 b.w 0x247e                    |     goto label_3;
    0x00003716 bkpt 0xb3                     |     __asm ("bkpt 0xb3");
                                             | label_108:
    0x00003718 blx 0x18d4                    |     r0 = errno_location ();
    0x0000371c ldr r3, [r0]                  |     r3 = *(r0);
    0x0000371e cmp r3, 4                     |     
                                             |     if (r3 == 4) {
    0x00003720 beq.w 0x317e                  |         goto label_33;
                                             |     }
    0x00003724 cmp r3, 0xb                   |     
                                             |     if (r3 == 0xb) {
    0x00003726 beq.w 0x317e                  |         goto label_33;
                                             |     }
    0x0000372a ldr r5, [sp, 0x30]            |     r5 = *(arg_30h);
    0x0000372c mov r0, r4                    |     r0 = r4;
    0x0000372e bl 0x38b0                     |     fcn_000038b0 (r0);
    0x00003732 mov r0, r5                    |     r0 = r5;
    0x00003734 blx 0x1ab4                    |     fdipc_client_socket ();
    0x00003738 b.w 0x2142                    |     goto label_2;
                                             | label_107:
    0x0000373c ldr r5, [sp, 0x30]            |     r5 = *(arg_30h);
    0x0000373e b.w 0x2ed0                    |     goto label_34;
                                             | label_67:
    0x00003742 add r0, sp, 0x39c             |     r0 += arg_39ch;
    0x00003744 bl 0x3b2c                     |     r0 = fcn_00003b2c (r0);
    0x00003748 blx 0x16ac                    |     r0 = rmdir ();
    0x0000374c cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x0000374e bne.w 0x299e                  |         goto label_4;
                                             |     }
    0x00003752 b.w 0x29ba                    |     goto label_30;
                                             | label_119:
    0x00003756 ldr r3, [pc, 0x54]            |     
    0x00003758 add r3, pc                    |     r3 = 0x6f0a;
    0x0000375a ldr.w r5, [r3, 0x88]          |     r5 = *(0x6f92);
    0x0000375e b.w 0x247e                    |     goto label_3;
                                             | label_120:
    0x00003762 blx 0x18d4                    |     r0 = errno_location ();
    0x00003766 ldr r0, [r0]                  |     r0 = *(r0);
    0x00003768 blx 0x1808                    |     strerror (r0);
    0x0000376c ldr r2, [pc, 0x40]            |     
    0x0000376e mov r3, r5                    |     r3 = r5;
    0x00003770 str r0, [sp]                  |     *(sp) = r0;
    0x00003772 movs r1, 1                    |     r1 = 1;
    0x00003774 movs r0, 3                    |     r0 = 3;
    0x00003776 add r2, pc                    |     r2 = 0x6f2a;
    0x00003778 blx 0x19cc                    |     fcn_000019cc ();
    0x0000377c mov r0, r4                    |     r0 = r4;
    0x0000377e bl 0x38b0                     |     fcn_000038b0 (r0);
    0x00003782 b.w 0x2142                    |     goto label_2;
    0x000037e8 adds r0, 0x14                 |     r0 += 0x14;
    0x000037ea b 0x332c                      |     goto label_35;
                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/bin/vftpd @ 0x3c44 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00003c44 ()                                      | void fcn_00003c44 (int16_t arg1) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     void * s;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     struct sockaddr* address;
                                                                 |     int16_t var_bch;
                                                                 |     int16_t var_dch;
                                                                 |     r0 = arg1;
    0x00003c44 ldr r2, [pc, 0x240]                               |     
    0x00003c46 ldr r3, [pc, 0x244]                               |     r3 = *(0x3e8e);
    0x00003c48 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00003c4c movs r4, 1                                        |     r4 = 1;
    0x00003c4e ldr.w r8, [r0, 8]                                 |     r8 = *((r0 + 8));
    0x00003c52 add r2, pc                                        |     r2 = 0x7ade;
    0x00003c54 sub sp, 0xe4                                      |     
    0x00003c56 mov r6, r0                                        |     r6 = r0;
    0x00003c58 ldr r3, [r2, r3]                                  |     
    0x00003c5a cmp.w r8, -1                                      |     
    0x00003c5e ldr r3, [r3]                                      |     r3 = *(0x7ade);
    0x00003c60 str r3, [sp, 0xdc]                                |     var_dch = r3;
    0x00003c62 mov.w r3, 0                                       |     r3 = 0;
    0x00003c66 str r4, [sp, 0x14]                                |     var_14h = r4;
                                                                 |     if (r8 != -1) {
    0x00003c68 beq 0x3ca6                                        |         
    0x00003c6a movs r2, 0                                        |         r2 = 0;
    0x00003c6c mov r0, r8                                        |         r0 = r8;
    0x00003c6e mov r1, r2                                        |         r1 = r2;
    0x00003c70 blx 0x1754                                        |         r0 = accept (r0, r1, r2);
    0x00003c74 subs.w r8, r0, 0                                  |         r8 = r0 - 0;
                                                                 |         if (r8 < r0) {
    0x00003c78 blt.w 0x3da0                                      |             goto label_4;
                                                                 |         }
                                                                 | label_1:
    0x00003c7c ldr r0, [r6, 8]                                   |         r0 = *((r6 + 8));
    0x00003c7e blx 0x1ab4                                        |         fdipc_client_socket ();
    0x00003c82 mov.w r3, -1                                      |         r3 = -1;
    0x00003c86 str r3, [r6, 8]                                   |         *((r6 + 8)) = r3;
                                                                 | label_0:
    0x00003c88 ldr r2, [pc, 0x204]                               |         
    0x00003c8a ldr r3, [pc, 0x200]                               |         r3 = *(0x3e8e);
    0x00003c8c add r2, pc                                        |         r2 = 0x7b20;
    0x00003c8e ldr r3, [r2, r3]                                  |         r3 = *(0x7b20);
    0x00003c90 ldr r2, [r3]                                      |         r2 = *(0x7b20);
    0x00003c92 ldr r3, [sp, 0xdc]                                |         r3 = var_dch;
    0x00003c94 eors r2, r3                                       |         r2 ^= r3;
    0x00003c96 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00003c9a bne.w 0x3e82                                      |             goto label_5;
                                                                 |         }
    0x00003c9e mov r0, r8                                        |         r0 = r8;
    0x00003ca0 add sp, 0xe4                                      |         
    0x00003ca2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |     }
    0x00003ca6 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00003ca8 movs r2, 0                                        |     r2 = 0;
    0x00003caa mov r1, r4                                        |     r1 = r4;
    0x00003cac ldrh r0, [r3]                                     |     r0 = *(r3);
    0x00003cae blx 0x1a68                                        |     r0 = fcn_00001a68 ();
    0x00003cb2 subs r7, r0, 0                                    |     r7 = r0 - 0;
                                                                 |     if (r7 < r0) {
    0x00003cb4 blt 0x3dae                                        |         goto label_6;
                                                                 |     }
    0x00003cb6 movs r3, 4                                        |     r3 = 4;
    0x00003cb8 movs r2, 2                                        |     r2 = 2;
    0x00003cba str r3, [sp]                                      |     *(sp) = r3;
    0x00003cbc mov r1, r4                                        |     r1 = r4;
    0x00003cbe add r3, sp, 0x14                                  |     r3 += var_14h;
    0x00003cc0 blx 0x1628                                        |     r0 = setsockopt ();
    0x00003cc4 cmp r0, 0                                         |     
                                                                 |     if (r0 < 0) {
    0x00003cc6 blt.w 0x3e62                                      |         goto label_7;
                                                                 |     }
    0x00003cca ldr r5, [pc, 0x1c8]                               |     
    0x00003ccc mov r1, r7                                        |     r1 = r7;
    0x00003cce ldr r3, [r6]                                      |     r3 = *(r6);
    0x00003cd0 add.w fp, sp, 0x1c                                |     
    0x00003cd4 add r5, pc                                        |     r5 = 0x7b6e;
    0x00003cd6 ldrh r0, [r3]                                     |     r0 = *(r3);
    0x00003cd8 ldrd r3, r2, [r5, 4]                              |     __asm ("ldrd r3, r2, [r5, 4]");
    0x00003cdc bl 0x3958                                         |     fcn_00003958 (r0, r1, r2, r3);
    0x00003ce0 ldr r3, [r5, 0x10]                                |     r3 = *(0x7b7e);
    0x00003ce2 add r2, sp, 0xbc                                  |     r2 += var_bch;
    0x00003ce4 mov r5, r2                                        |     r5 = r2;
    0x00003ce6 mov r1, r4                                        |     r1 = r4;
    0x00003ce8 str r2, [sp, 8]                                   |     var_8h = r2;
    0x00003cea mov r0, r5                                        |     r0 = r5;
    0x00003cec subs r3, 1                                        |     r3--;
    0x00003cee movs r2, 0x20                                     |     r2 = 0x20;
    0x00003cf0 str r3, [sp]                                      |     *(sp) = r3;
    0x00003cf2 ldr r3, [pc, 0x1a4]                               |     
    0x00003cf4 add r3, pc                                        |     r3 = 0x7b92;
    0x00003cf6 blx 0x18f8                                        |     sprintf_chk ()
    0x00003cfa movs r2, 0x20                                     |     r2 = 0x20;
    0x00003cfc movs r1, 0                                        |     r1 = 0;
    0x00003cfe mov r0, fp                                        |     r0 = fp;
    0x00003d00 blx 0x1934                                        |     memset (r0, r1, r2);
    0x00003d04 ldr r3, [r6]                                      |     r3 = *(r6);
    0x00003d06 mov r2, fp                                        |     r2 = fp;
    0x00003d08 mov r1, r5                                        |     r1 = r5;
    0x00003d0a movs r0, 0                                        |     r0 = 0;
    0x00003d0c ldrh r3, [r3]                                     |     r3 = *(r3);
    0x00003d0e str r4, [sp, 0x1c]                                |     s = r4;
    0x00003d10 strd r3, r4, [sp, 0x20]                           |     __asm ("strd r3, r4, [var_24h]");
    0x00003d14 add r3, sp, 0x18                                  |     r3 += var_18h;
    0x00003d16 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00003d18 blx 0x1a5c                                        |     r0 = fcn_00001a5c ();
    0x00003d1c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00003d1e bne.w 0x3e48                                      |         goto label_8;
                                                                 |     }
    0x00003d22 ldr r5, [sp, 0x18]                                |     r5 = var_18h;
    0x00003d24 ldr.w sb, [r5, 0x10]                              |     sb = *((r5 + 0x10));
    0x00003d28 cmp.w sb, 0x80                                    |     
                                                                 |     if (sb > 0x80) {
    0x00003d2c bhi.w 0x3e48                                      |         goto label_8;
                                                                 |     }
    0x00003d30 add.w sl, sp, 0x3c                                |     sl += address;
    0x00003d34 ldr r1, [r5, 0x14]                                |     r1 = *((r5 + 0x14));
    0x00003d36 movs r3, 0x80                                     |     r3 = 0x80;
    0x00003d38 mov r2, sb                                        |     r2 = sb;
    0x00003d3a mov r0, sl                                        |     r0 = sl;
    0x00003d3c blx 0x1790                                        |     memcpy_chk ();
    0x00003d40 mov r0, r5                                        |     r0 = r5;
    0x00003d42 blx 0x1a44                                        |     fcn_00001a44 ();
    0x00003d46 b 0x3d50                                          |     
                                                                 |     while (r3 == 0) {
    0x00003d48 mov r0, r4                                        |         r0 = r4;
    0x00003d4a adds r4, 1                                        |         r4++;
    0x00003d4c blx 0x16c4                                        |         sleep (r0);
    0x00003d50 mov r2, sb                                        |         r2 = sb;
    0x00003d52 mov r1, sl                                        |         r1 = sl;
    0x00003d54 mov r0, r7                                        |         r0 = r7;
    0x00003d56 blx 0x1928                                        |         r0 = bind (r0, r1, r2);
    0x00003d5a cmp r0, 0                                         |         
                                                                 |         if (r0 >= 0) {
    0x00003d5c bge 0x3dca                                        |             goto label_9;
                                                                 |         }
    0x00003d5e blx 0x18d4                                        |         errno_location ();
    0x00003d62 sub.w r3, r4, 0xb                                 |         r3 = r4 - 0xb;
    0x00003d66 ldr r2, [r0]                                      |         r2 = *(r0);
    0x00003d68 clz r3, r3                                        |         r3 &= r3;
    0x00003d6c lsrs r3, r3, 5                                    |         r3 >>= 5;
    0x00003d6e cmp r2, 0x62                                      |         
    0x00003d70 it ne                                             |         
                                                                 |         if (r2 == 0x62) {
    0x00003d72 orrne r3, r3, 1                                   |             r3 |= 1;
                                                                 |         }
    0x00003d76 cmp r3, 0                                         |         
    0x00003d78 beq 0x3d48                                        |         
                                                                 |     }
    0x00003d7a ldr r3, [pc, 0x120]                               |     
    0x00003d7c mov r5, r0                                        |     r5 = r0;
    0x00003d7e ldr r2, [pc, 0x120]                               |     
    0x00003d80 movs r1, 1                                        |     r1 = 1;
    0x00003d82 movs r0, 3                                        |     r0 = 3;
    0x00003d84 add r3, pc                                        |     
    0x00003d86 ldr r3, [r3, 0x10]                                |     r3 = *(0x7c36);
    0x00003d88 add r2, pc                                        |     r2 = 0x7c2e;
    0x00003d8a subs r3, 1                                        |     r3--;
    0x00003d8c blx 0x19cc                                        |     fcn_000019cc ();
                                                                 | label_3:
    0x00003d90 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00003d92 str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 | label_2:
    0x00003d94 mov r0, r7                                        |     r0 = r7;
    0x00003d96 blx 0x1ab4                                        |     fdipc_client_socket ();
    0x00003d9a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
                                                                 |     do {
    0x00003d9c str r3, [r5]                                      |         *(r5) = r3;
    0x00003d9e b 0x3c88                                          |         goto label_0;
                                                                 | label_4:
    0x00003da0 ldr r2, [pc, 0x100]                               |         
    0x00003da2 mov r1, r4                                        |         r1 = r4;
    0x00003da4 movs r0, 3                                        |         r0 = 3;
    0x00003da6 add r2, pc                                        |         r2 = 0x7c4e;
    0x00003da8 blx 0x19cc                                        |         fcn_000019cc ();
    0x00003dac b 0x3c7c                                          |         goto label_1;
                                                                 | label_6:
    0x00003dae ldr r2, [pc, 0xf8]                                |         
    0x00003db0 mov r1, r4                                        |         r1 = r4;
    0x00003db2 movs r0, 3                                        |         r0 = 3;
    0x00003db4 add r2, pc                                        |         r2 = 0x7c62;
    0x00003db6 blx 0x19cc                                        |         fcn_000019cc ();
    0x00003dba blx 0x18d4                                        |         r0 = errno_location ();
    0x00003dbe ldr r3, [r0]                                      |         r3 = *(r0);
    0x00003dc0 adds r2, r7, 1                                    |         r2 = r7 + 1;
    0x00003dc2 mov r5, r0                                        |         r5 = r0;
    0x00003dc4 str r3, [sp, 0x14]                                |         var_14h = r3;
    0x00003dc6 beq 0x3d9c                                        |         
                                                                 |     } while (r2 == r7);
    0x00003dc8 b 0x3d94                                          |     goto label_2;
                                                                 | label_9:
    0x00003dca ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x00003dcc movs r2, 0x20                                     |     r2 = 0x20;
    0x00003dce ldr r4, [sp, 8]                                   |     r4 = var_8h;
    0x00003dd0 movs r1, 1                                        |     r1 = 1;
    0x00003dd2 str r3, [sp]                                      |     *(sp) = r3;
    0x00003dd4 ldr r3, [pc, 0xd4]                                |     
    0x00003dd6 mov r0, r4                                        |     r0 = r4;
    0x00003dd8 add r3, pc                                        |     r3 = 0x7c88;
    0x00003dda blx 0x18f8                                        |     sprintf_chk ()
    0x00003dde movs r2, 0x20                                     |     r2 = 0x20;
    0x00003de0 movs r1, 0                                        |     r1 = 0;
    0x00003de2 mov r0, fp                                        |     r0 = fp;
    0x00003de4 blx 0x1934                                        |     memset (r0, r1, r2);
    0x00003de8 mov r0, r6                                        |     r0 = r6;
    0x00003dea mov r1, r4                                        |     r1 = r4;
    0x00003dec ldr r4, [r0], 0xd                                 |     r4 = *(r0);
                                                                 |     r0 += 0xd;
    0x00003df0 movs r6, 1                                        |     r6 = 1;
    0x00003df2 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00003df4 mov r2, fp                                        |     r2 = fp;
    0x00003df6 ldrh r4, [r4]                                     |     r4 = *(r4);
    0x00003df8 str r6, [sp, 0x24]                                |     var_24h = r6;
    0x00003dfa str r4, [sp, 0x20]                                |     var_20h = r4;
    0x00003dfc movs r4, 4                                        |     r4 = 4;
    0x00003dfe str r4, [sp, 0x1c]                                |     s = r4;
    0x00003e00 blx 0x1a5c                                        |     r0 = fcn_00001a5c ();
                                                                 |     if (r0 != 0) {
    0x00003e04 cbnz r0, 0x3e76                                   |         goto label_10;
                                                                 |     }
    0x00003e06 ldr r5, [sp, 0x18]                                |     r5 = var_18h;
    0x00003e08 ldr r4, [r5, 0x10]                                |     r4 = *((r5 + 0x10));
    0x00003e0a cmp r4, 0x80                                      |     
                                                                 |     if (r4 > 0x80) {
    0x00003e0c bhi 0x3e76                                        |         goto label_10;
                                                                 |     }
    0x00003e0e ldr r1, [r5, 0x14]                                |     r1 = *((r5 + 0x14));
    0x00003e10 movs r3, 0x80                                     |     r3 = 0x80;
    0x00003e12 mov r2, r4                                        |     r2 = r4;
    0x00003e14 mov r0, sl                                        |     r0 = sl;
    0x00003e16 blx 0x1790                                        |     memcpy_chk ();
    0x00003e1a mov r0, r5                                        |     r0 = r5;
    0x00003e1c blx 0x1a44                                        |     fcn_00001a44 ();
    0x00003e20 mov r2, r4                                        |     r2 = r4;
    0x00003e22 mov r1, sl                                        |     r1 = sl;
    0x00003e24 mov r0, r7                                        |     r0 = r7;
    0x00003e26 blx 0x1ad8                                        |     r0 = closedir ();
    0x00003e2a cmp r0, 0                                         |     
    0x00003e2c it ge                                             |     
                                                                 |     if (r0 >= 0) {
    0x00003e2e movge r8, r7                                      |         r8 = r7;
                                                                 |         goto label_11;
                                                                 |     }
                                                                 |     if (r0 >= 0) {
                                                                 | label_11:
    0x00003e30 bge.w 0x3c88                                      |         goto label_0;
                                                                 |     }
    0x00003e34 ldr r2, [pc, 0x78]                                |     
    0x00003e36 mov r1, r6                                        |     r1 = r6;
    0x00003e38 movs r0, 3                                        |     r0 = 3;
    0x00003e3a add r2, pc                                        |     r2 = 0x7cee;
    0x00003e3c blx 0x19cc                                        |     fcn_000019cc ();
    0x00003e40 blx 0x18d4                                        |     r0 = errno_location ();
    0x00003e44 mov r5, r0                                        |     r5 = r0;
    0x00003e46 b 0x3d90                                          |     goto label_3;
                                                                 | label_8:
    0x00003e48 blx 0x1670                                        |     gai_strerror ();
    0x00003e4c ldr r2, [pc, 0x64]                                |     
    0x00003e4e mov r3, r0                                        |     r3 = r0;
    0x00003e50 add r2, pc                                        |     r2 = 0x7d08;
                                                                 |     do {
    0x00003e52 movs r1, 1                                        |         r1 = 1;
    0x00003e54 movs r0, 3                                        |         r0 = 3;
    0x00003e56 blx 0x19cc                                        |         fcn_000019cc ();
    0x00003e5a blx 0x18d4                                        |         r0 = errno_location ();
    0x00003e5e mov r5, r0                                        |         r5 = r0;
    0x00003e60 b 0x3d90                                          |         goto label_3;
                                                                 | label_7:
    0x00003e62 ldr r2, [pc, 0x54]                                |         
    0x00003e64 mov r1, r4                                        |         r1 = r4;
    0x00003e66 movs r0, 3                                        |         r0 = 3;
    0x00003e68 add r2, pc                                        |         r2 = 0x7d26;
    0x00003e6a blx 0x19cc                                        |         fcn_000019cc ();
    0x00003e6e blx 0x18d4                                        |         r0 = errno_location ();
    0x00003e72 mov r5, r0                                        |         r5 = r0;
    0x00003e74 b 0x3d90                                          |         goto label_3;
                                                                 | label_10:
    0x00003e76 blx 0x1670                                        |         gai_strerror ();
    0x00003e7a ldr r2, [pc, 0x40]                                |         
    0x00003e7c mov r3, r0                                        |         r3 = r0;
    0x00003e7e add r2, pc                                        |         r2 = 0x7d40;
    0x00003e80 b 0x3e52                                          |         
                                                                 |     } while (1);
                                                                 | label_5:
    0x00003e82 blx 0x16f4                                        |     stack_chk_fail ();
    0x00003e86 nop                                               |     
    0x00003e88 adds r1, 0xb6                                     |     r1 += 0xb6;
    0x00003e8a movs r1, r0                                       |     r1 = r0;
    0x00003e8c lsls r0, r3, 7                                    |     r0 = r3 << 7;
    0x00003e8e movs r0, r0                                       |     
    0x00003e90 adds r1, 0x7c                                     |     r1 += 0x7c;
    0x00003e92 movs r1, r0                                       |     r1 = r0;
    0x00003e94 adds r4, 0x30                                     |     r4 += 0x30;
    0x00003e96 movs r1, r0                                       |     r1 = r0;
    0x00003e98 subs r4, r4, 7                                    |     r4 -= 7;
    0x00003e9a movs r0, r0                                       |     
    0x00003e9c adds r3, 0x80                                     |     r3 += 0x80;
    0x00003e9e movs r1, r0                                       |     r1 = r0;
    0x00003ea0 asrs r0, r7, 5                                    |     r0 = r7 >> 5;
    0x00003ea2 movs r0, r0                                       |     
    0x00003ea4 asrs r6, r1, 3                                    |     r6 = r1 >> 3;
    0x00003ea6 movs r0, r0                                       |     
    0x00003ea8 asrs r0, r4, 3                                    |     r0 = r4 >> 3;
    0x00003eaa movs r0, r0                                       |     
    0x00003eac subs r0, r0, 4                                    |     r0 -= 4;
    0x00003eae movs r0, r0                                       |     
    0x00003eb0 asrs r2, r6, 3                                    |     r2 = r6 >> 3;
    0x00003eb2 movs r0, r0                                       |     
    0x00003eb4 asrs r4, r2, 2                                    |     r4 = r2 >> 2;
    0x00003eb6 movs r0, r0                                       |     
    0x00003eb8 asrs r4, r1, 1                                    |     r4 = r1 >> 1;
    0x00003eba movs r0, r0                                       |     
    0x00003ebc asrs r6, r4, 1                                    |     r6 = r4 >> 1;
    0x00003ebe movs r0, r0                                       |     
                                                                 | }

[*] Function printf used 5 times vftpd