[*] Binary protection state of lighttpd

  
  	Partial RELRO  No Canary found   NX disabled  No PIE       No RPATH     No RUNPATH   No Symbols


[*] Function fprintf tear down of lighttpd

    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/lighttpd @ 0x33db8 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) sym.array_print_indent ()                | void array_print_indent (int32_t arg1) {
                                                     |     r0 = arg1;
    0x00033db8 push {r4, r5, r6, r7, r8, lr}         |     
    0x00033dbc ldr r6, [pc, 0x24]                    |     r6 = *(0x33de4);
    0x00033dc0 ldr r7, [pc, 0x24]                    |     r7 = *(0x33de8);
    0x00033dc4 mov r5, r0                            |     r5 = r0;
    0x00033dc8 mov r4, 0                             |     r4 = 0;
                                                     |     do {
    0x00033dcc cmp r4, r5                            |         
                                                     |         if (r4 < r5) {
    0x00033dd0 popge {r4, r5, r6, r7, r8, pc}        |             
                                                     |         }
    0x00033dd4 ldr r1, [r6]                          |         r1 = *(r6);
    0x00033dd8 mov r0, r7                            |         r0 = r7;
    0x00033ddc bl 0x17840                            |         fputs (r0, r1);
    0x00033de0 add r4, r4, 1                         |         r4++;
    0x00033de4 b 0x33dcc                             |         
                                                     |     } while (1);
                                                     | }
    ; assembly                                                           | /* r2dec pseudo code output */
                                                                         | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/lighttpd @ 0x33e34 */
                                                                         | #include <stdint.h>
                                                                         |  
    ; (fcn) sym.array_print ()                                           | void array_print (int32_t arg1, int32_t arg2) {
                                                                         |     int32_t var_4h;
                                                                         |     int32_t var_ch;
                                                                         |     r0 = arg1;
                                                                         |     r1 = arg2;
    0x00033e34 push {r0, r1, r2, r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00033e38 mov r7, r1                                                |     r7 = r1;
    0x00033e3c ldr r1, [r0, 8]                                           |     r1 = *((r0 + 8));
    0x00033e40 mov r6, r0                                                |     r6 = r0;
    0x00033e44 cmp r1, 5                                                 |     
                                                                         |     if (r1 <= 5) {
    0x00033e48 movhi r3, 0                                               |         r3 = 0;
                                                                         |     }
                                                                         |     if (r1 > 5) {
    0x00033e4c movls r3, 1                                               |         r3 = 1;
                                                                         |     }
    0x00033e50 mov r2, 0                                                 |     r2 = 0;
                                                                         | label_0:
    0x00033e54 cmp r1, r2                                                |     
                                                                         |     if (r1 == r2) {
    0x00033e58 beq 0x33ef0                                               |         goto label_3;
                                                                         |     }
    0x00033e5c cmp r3, 0                                                 |     
    0x00033e60 bne 0x33ec0                                               |     
                                                                         |     while (ip == 0) {
                                                                         | label_1:
    0x00033e64 mov r0, r6                                                |         r0 = r6;
    0x00033e68 bl 0x33df0                                                |         array_get_max_key_length ();
    0x00033e6c ldr r4, [pc, 0x1c4]                                       |         r4 = *(0x34034);
    0x00033e70 ldr fp, [pc, 0x1c4]                                       |         fp = "# %zu\n";
    0x00033e74 ldr r1, [r4]                                              |         r1 = *(0x34034);
    0x00033e78 mov r5, 0                                                 |         r5 = 0;
    0x00033e7c mov sl, r0                                                |         sl = r0;
    0x00033e80 ldr r0, [pc, 0x1b8]                                       |         r0 = "# %zu\n";
    0x00033e84 bl 0x17840                                                |         fputs ("# %zu\n", r1);
                                                                         | label_2:
    0x00033e88 ldr r3, [r6, 8]                                           |         r3 = *((r6 + 8));
    0x00033e8c cmp r3, r5                                                |         
                                                                         |         if (r3 > r5) {
    0x00033e90 bhi 0x33f70                                               |             goto label_4;
                                                                         |         }
    0x00033e94 cmp r5, 1                                                 |         
                                                                         |         if (r5 != 1) {
    0x00033e98 beq 0x33eb4                                               |             
    0x00033e9c add r0, r7, 1                                             |             r0 = r7 + 1;
    0x00033ea0 bl 0x33db8                                                |             array_print_indent ();
    0x00033ea4 mov r2, r5                                                |             r2 = r5;
    0x00033ea8 ldr r1, [pc, 0x18c]                                       |             r1 = *(0x34038);
    0x00033eac ldr r0, [r4]                                              |             r0 = *(r4);
    0x00033eb0 bl 0x178e8                                                |             fprintf (r0, r1, r2)
                                                                         |         }
    0x00033eb4 mov r0, r7                                                |         r0 = r7;
    0x00033eb8 bl 0x33db8                                                |         array_print_indent ();
    0x00033ebc b 0x33f20                                                 |         goto label_5;
    0x00033ec0 ldr r0, [r6]                                              |         r0 = *(r6);
    0x00033ec4 ldr r0, [r0, r2, lsl 2]                                   |         offset_0 = r2 << 2;
                                                                         |         r0 = *((r0 + offset_0));
    0x00033ec8 ldr ip, [r0, 8]                                           |         ip = *((r0 + 8));
    0x00033ecc cmp ip, 0                                                 |         
    0x00033ed0 beq 0x33e64                                               |         
                                                                         |     }
    0x00033ed4 ldr r0, [r0, 4]                                           |     r0 = *((r0 + 4));
    0x00033ed8 cmp r0, 1                                                 |     
                                                                         |     if (r0 != 1) {
    0x00033edc beq 0x33ee8                                               |         
    0x00033ee0 cmp r0, 4                                                 |         
                                                                         |         if (r0 != 4) {
    0x00033ee4 movne r3, 0                                               |             r3 = 0;
                                                                         |             goto label_6;
                                                                         |         }
                                                                         |     }
                                                                         | label_6:
    0x00033ee8 add r2, r2, 1                                             |     r2++;
    0x00033eec b 0x33e54                                                 |     goto label_0;
                                                                         | label_3:
    0x00033ef0 ldr r4, [pc, 0x140]                                       |     r4 = *(0x34034);
    0x00033ef4 cmp r3, 0                                                 |     
    0x00033ef8 ldr r1, [r4]                                              |     r1 = *(0x34034);
                                                                         |     if (r3 == 0) {
    0x00033efc beq 0x33e64                                               |         goto label_1;
                                                                         |     }
    0x00033f00 mov r0, 0x28                                              |     r0 = 0x28;
    0x00033f04 bl 0x177c8                                                |     fputc (r0, r1);
    0x00033f08 ldr sb, [pc, 0x134]                                       |     sb = "_";
    0x00033f0c mov r5, 0                                                 |     r5 = 0;
    0x00033f10 add r7, r7, 1                                             |     r7++;
                                                                         |     do {
    0x00033f14 ldr r3, [r6, 8]                                           |         r3 = *((r6 + 8));
    0x00033f18 cmp r3, r5                                                |         
                                                                         |         if (r3 <= r5) {
    0x00033f1c bhi 0x33f38                                               |             
                                                                         | label_5:
    0x00033f20 ldr r1, [r4]                                              |             r1 = *(r4);
    0x00033f24 mov r0, 0x29                                              |             r0 = 0x29;
    0x00033f28 bl 0x177c8                                                |             fputc (r0, r1);
    0x00033f2c mov r0, 0                                                 |             r0 = 0;
    0x00033f30 add sp, sp, 0xc                                           |             
    0x00033f34 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}                  |             
                                                                         |         }
    0x00033f38 ldr r3, [r6]                                              |         r3 = *(r6);
    0x00033f3c cmp r5, 0                                                 |         
    0x00033f40 ldr r8, [r3, r5, lsl 2]                                   |         offset_1 = r5 << 2;
                                                                         |         r8 = *((r3 + offset_1));
                                                                         |         if (r5 != 0) {
    0x00033f44 beq 0x33f54                                               |             
    0x00033f48 ldr r1, [r4]                                              |             r1 = *(r4);
    0x00033f4c mov r0, sb                                                |             r0 = sb;
    0x00033f50 bl 0x17840                                                |             fputs (r0, r1);
                                                                         |         }
    0x00033f54 ldr r3, [r8, 0xc]                                         |         r3 = *((r8 + 0xc));
    0x00033f58 mov r1, r7                                                |         r1 = r7;
    0x00033f5c ldr r3, [r3, 0x10]                                        |         r3 = *((r3 + 0x10));
    0x00033f60 mov r0, r8                                                |         r0 = r8;
    0x00033f64 blx r3                                                    |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00033f68 add r5, r5, 1                                             |         r5++;
    0x00033f6c b 0x33f14                                                 |         
                                                                         |     } while (1);
                                                                         | label_4:
    0x00033f70 ldr r3, [r6]                                              |     r3 = *(r6);
    0x00033f74 add sb, r7, 1                                             |     sb = r7 + 1;
    0x00033f78 ldr r8, [r3, r5, lsl 2]                                   |     offset_2 = r5 << 2;
                                                                         |     r8 = *((r3 + offset_2));
    0x00033f7c mov r0, sb                                                |     r0 = sb;
    0x00033f80 bl 0x33db8                                                |     array_print_indent ();
    0x00033f84 ldr r3, [r8, 8]                                           |     r3 = *((r8 + 8));
    0x00033f88 cmp r3, 0                                                 |     
                                                                         |     if (r3 != 0) {
    0x00033f8c bne 0x33ff8                                               |         goto label_7;
                                                                         |     }
    0x00033f90 cmp r5, 0                                                 |     
                                                                         |     if (r5 != 0) {
    0x00033f94 beq 0x33fc4                                               |         
    0x00033f98 mov r1, 5                                                 |         r1 = 5;
    0x00033f9c mov r0, r5                                                |         r0 = r5;
    0x00033fa0 bl 0x3dffc                                                |         fcn_0003dffc (r0, r1);
    0x00033fa4 cmp r1, 0                                                 |         
                                                                         |         if (r1 != 0) {
    0x00033fa8 bne 0x33fc4                                               |             goto label_8;
                                                                         |         }
    0x00033fac mov r2, r5                                                |         r2 = r5;
    0x00033fb0 mov r1, fp                                                |         r1 = fp;
    0x00033fb4 ldr r0, [r4]                                              |         r0 = *(r4);
    0x00033fb8 bl 0x178e8                                                |         fprintf (r0, r1, r2)
    0x00033fbc mov r0, sb                                                |         r0 = sb;
    0x00033fc0 bl 0x33db8                                                |         array_print_indent ();
                                                                         |     }
                                                                         | label_8:
    0x00033fc4 ldr r3, [r8]                                              |     r3 = *(r8);
    0x00033fc8 ldr r1, [pc, 0x78]                                        |     r1 = *(0x34044);
    0x00033fcc ldr r2, [r3]                                              |     r2 = *(r3);
    0x00033fd0 ldr r0, [r4]                                              |     r0 = *(r4);
    0x00033fd4 bl 0x178e8                                                |     fprintf (r0, r1, r2, r3)
    0x00033fd8 ldr r0, [r8]                                              |     r0 = *(r8);
    0x00033fdc bl 0x32ee8                                                |     r0 = fcn_00032ee8 (r0);
    0x00033fe0 sub r3, sl, r0                                            |     r3 = sl - r0;
                                                                         |     do {
    0x00033fe4 cmp r3, 0                                                 |         
    0x00033fe8 ldr r1, [r4]                                              |         r1 = *(r4);
                                                                         |         if (r3 <= 0) {
    0x00033fec bgt 0x34020                                               |             
    0x00033ff0 ldr r0, [pc, 0x54]                                        |             r0 = "__s_";
    0x00033ff4 bl 0x17840                                                |             fputs ("__s_", r1);
                                                                         | label_7:
    0x00033ff8 ldr r3, [r8, 0xc]                                         |             r3 = *((r8 + 0xc));
    0x00033ffc mov r1, sb                                                |             r1 = sb;
    0x00034000 ldr r3, [r3, 0x10]                                        |             r3 = *((r3 + 0x10));
    0x00034004 mov r0, r8                                                |             r0 = r8;
    0x00034008 blx r3                                                    |             uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0003400c ldr r1, [r4]                                              |             r1 = *(r4);
    0x00034010 ldr r0, [pc, 0x38]                                        |             r0 = "___";
    0x00034014 bl 0x17840                                                |             fputs ("___", r1);
    0x00034018 add r5, r5, 1                                             |             r5++;
    0x0003401c b 0x33e88                                                 |             goto label_2;
                                                                         |         }
    0x00034020 mov r0, 0x20                                              |         r0 = 0x20;
    0x00034024 str r3, [sp, 4]                                           |         var_4h = r3;
    0x00034028 bl 0x177c8                                                |         fputc (r0, r1);
    0x0003402c ldr r3, [sp, 4]                                           |         r3 = var_4h;
    0x00034030 sub r3, r3, 1                                             |         r3--;
    0x00034034 b 0x33fe4                                                 |         
                                                                         |     } while (1);
                                                                         | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/lighttpd @ 0x22d84 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) sym.configparser_merge_data ()               | void configparser_merge_data (int32_t arg1, int32_t arg2) {
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
    0x00022d84 ldr r3, [r0, 4]                           |     r3 = *((r0 + 4));
    0x00022d88 ldr r2, [r1, 4]                           |     r2 = *((r1 + 4));
    0x00022d8c push {r4, r5, r6, r7, r8, sb, sl, lr}     |     
    0x00022d90 cmp r3, r2                                |     
    0x00022d94 mov r4, r0                                |     r4 = r0;
    0x00022d98 mov r5, r1                                |     r5 = r1;
                                                         |     if (r3 == r2) {
    0x00022d9c beq 0x22e38                               |         goto label_4;
                                                         |     }
    0x00022da0 cmp r3, 1                                 |     
                                                         |     if (r3 != 1) {
    0x00022da4 bne 0x22dc8                               |         goto label_5;
                                                         |     }
    0x00022da8 cmp r2, 4                                 |     
                                                         |     if (r2 != 4) {
    0x00022dac bne 0x22e10                               |         goto label_6;
                                                         |     }
    0x00022db0 ldr r2, [r1, 0x10]                        |     r2 = *((r1 + 0x10));
    0x00022db4 ldr r0, [r0, 0x10]                        |     r0 = *((r0 + 0x10));
    0x00022db8 asr r3, r2, 0x1f                          |     r3 = r2 >> 0x1f;
    0x00022dbc bl 0x2558c                                |     buffer_append_int ();
                                                         |     do {
                                                         | label_0:
    0x00022dc0 mov r0, r4                                |         r0 = r4;
    0x00022dc4 pop {r4, r5, r6, r7, r8, sb, sl, pc}      |         
                                                         | label_5:
    0x00022dc8 cmp r3, 4                                 |         
    0x00022dcc cmpeq r2, 1                               |         __asm ("cmpeq r2, 1");
                                                         |         if (r3 != 4) {
    0x00022dd0 bne 0x22e10                               |             goto label_6;
                                                         |         }
    0x00022dd4 bl 0x34290                                |         data_string_init ();
    0x00022dd8 ldr r2, [r4, 0x10]                        |         r2 = *((r4 + 0x10));
    0x00022ddc asr r3, r2, 0x1f                          |         r3 = r2 >> 0x1f;
    0x00022de0 mov r6, r0                                |         r6 = r0;
    0x00022de4 ldr r0, [r0, 0x10]                        |         r0 = *((r0 + 0x10));
    0x00022de8 bl 0x2558c                                |         buffer_append_int ();
    0x00022dec ldr r1, [r5, 0x10]                        |         r1 = *((r5 + 0x10));
    0x00022df0 ldr r0, [r6, 0x10]                        |         r0 = *((r6 + 0x10));
    0x00022df4 bl 0x22a50                                |         fcn_00022a50 (r0, r1);
    0x00022df8 ldr r3, [r4, 0xc]                         |         r3 = *((r4 + 0xc));
    0x00022dfc mov r0, r4                                |         r0 = r4;
    0x00022e00 ldr r3, [r3, 8]                           |         r3 = *((r3 + 8));
    0x00022e04 blx r3                                    |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00022e08 mov r4, r6                                |         r4 = r6;
    0x00022e0c b 0x22dc0                                 |         
                                                         |     } while (1);
                                                         | label_6:
    0x00022e10 ldr r3, [pc, 0x118]                       |     r3 = *(0x22f2c);
    0x00022e14 ldr r0, [pc, 0x118]                       |     r0 = stderr;
    0x00022e18 ldr r1, [r3]                              |     r1 = *(0x22f2c);
    0x00022e1c bl 0x17840                                |     fputs (r0, r1);
                                                         | label_3:
    0x00022e20 ldr r3, [r4, 0xc]                         |     r3 = *((r4 + 0xc));
    0x00022e24 mov r0, r4                                |     r0 = r4;
    0x00022e28 ldr r3, [r3, 8]                           |     r3 = *((r3 + 8));
    0x00022e2c blx r3                                    |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00022e30 mov r4, 0                                 |     r4 = 0;
    0x00022e34 b 0x22dc0                                 |     goto label_0;
                                                         | label_4:
    0x00022e38 cmp r3, 3                                 |     
                                                         |     if (r3 != 3) {
    0x00022e3c beq 0x22e74                               |         
    0x00022e40 cmp r3, 4                                 |         
                                                         |         if (r3 != 4) {
    0x00022e44 beq 0x22e60                               |             
    0x00022e48 cmp r3, 1                                 |             
                                                         |             if (r3 != 1) {
    0x00022e4c bne 0x22f20                               |                 goto label_7;
                                                         |             }
    0x00022e50 ldr r1, [r1, 0x10]                        |             r1 = *((r1 + 0x10));
    0x00022e54 ldr r0, [r0, 0x10]                        |             r0 = *((r0 + 0x10));
    0x00022e58 bl 0x22a50                                |             fcn_00022a50 (r0, r1);
    0x00022e5c b 0x22dc0                                 |             goto label_0;
                                                         |         }
    0x00022e60 ldr r3, [r0, 0x10]                        |         r3 = *((r0 + 0x10));
    0x00022e64 ldr r2, [r1, 0x10]                        |         r2 = *((r1 + 0x10));
    0x00022e68 add r3, r3, r2                            |         r3 += r2;
    0x00022e6c str r3, [r0, 0x10]                        |         *((r0 + 0x10)) = r3;
    0x00022e70 b 0x22dc0                                 |         goto label_0;
                                                         |     }
    0x00022e74 ldr r8, [r0, 0x10]                        |     r8 = *((r0 + 0x10));
    0x00022e78 ldr r7, [r1, 0x10]                        |     r7 = *((r1 + 0x10));
    0x00022e7c mov r6, 0                                 |     r6 = 0;
                                                         | label_1:
    0x00022e80 ldr r3, [r7, 8]                           |     r3 = *((r7 + 8));
    0x00022e84 cmp r3, r6                                |     
                                                         |     if (r3 < r6) {
    0x00022e88 bls 0x22dc0                               |         goto label_0;
                                                         |     }
    0x00022e8c ldr r3, [r7]                              |     r3 = *(r7);
    0x00022e90 ldr r5, [r3, r6, lsl 2]                   |     offset_0 = r6 << 2;
                                                         |     r5 = *((r3 + offset_0));
    0x00022e94 cmp r5, 0                                 |     
                                                         |     if (r5 == 0) {
    0x00022e98 beq 0x22ec4                               |         goto label_8;
                                                         |     }
    0x00022e9c ldr sb, [r5, 8]                           |     sb = *((r5 + 8));
    0x00022ea0 cmp sb, 0                                 |     
    0x00022ea4 beq 0x22ecc                               |     
                                                         |     while (r3 == 0) {
                                                         | label_2:
    0x00022ea8 ldr r3, [r5, 0xc]                         |         r3 = *((r5 + 0xc));
    0x00022eac mov r0, r5                                |         r0 = r5;
    0x00022eb0 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x00022eb4 blx r3                                    |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00022eb8 mov r1, r0                                |         r1 = r0;
    0x00022ebc mov r0, r8                                |         r0 = r8;
    0x00022ec0 bl 0x33688                                |         array_insert_unique ();
                                                         | label_8:
    0x00022ec4 add r6, r6, 1                             |         r6++;
    0x00022ec8 b 0x22e80                                 |         goto label_1;
    0x00022ecc ldr r3, [r5]                              |         r3 = *(r5);
    0x00022ed0 cmp r3, 0                                 |         
    0x00022ed4 beq 0x22ea8                               |         
                                                         |     }
    0x00022ed8 ldr r2, [r3, 4]                           |     r2 = *((r3 + 4));
    0x00022edc cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00022ee0 beq 0x22ea8                               |         goto label_2;
                                                         |     }
    0x00022ee4 mov r0, r3                                |     r0 = r3;
    0x00022ee8 bl 0x22980                                |     r0 = fcn_00022980 (r0);
    0x00022eec mov r2, r0                                |     r2 = r0;
    0x00022ef0 ldr r1, [r3]                              |     r1 = *(r3);
    0x00022ef4 mov r0, r8                                |     r0 = r8;
    0x00022ef8 bl 0x334d0                                |     r0 = array_get_element_klen ();
    0x00022efc cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00022f00 beq 0x22ea8                               |         goto label_2;
                                                         |     }
    0x00022f04 ldr r3, [r5]                              |     r3 = *(r5);
    0x00022f08 ldr r1, [pc, 0x28]                        |     r1 = "data_type_mismatch__cannot_merge";
    0x00022f0c ldr r2, [r3]                              |     r2 = *(r3);
    0x00022f10 ldr r3, [pc, 0x18]                        |     r3 = *(0x22f2c);
    0x00022f14 ldr r0, [r3]                              |     r0 = *(0x22f2c);
    0x00022f18 bl 0x178e8                                |     fprintf (r0, "data_type_mismatch__cannot_merge", r2, r3)
    0x00022f1c b 0x22e20                                 |     goto label_3;
                                                         | label_7:
    0x00022f20 ldr r2, [pc, 0x14]                        |     r2 = "Duplicate_array_key__s";
    0x00022f24 mov r1, 0x71                              |     r1 = 0x71;
    0x00022f28 ldr r0, [pc, 0x10]                        |     r0 = "assertion_failed:_0";
    0x00022f2c bl 0x17c50                                |     log_failed_assert ();
                                                         |     if (r0 != 0) {
    0x00022f30 andeq r8, r5, r8, asr 5                   |         r8 = r5 & (r8 >> 5);
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00022f34 andeq r1, r4, r0, lsr 17                  |         r1 = r4 & (r0 >> 17);
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00022f38 andeq r1, r4, r2, asr 17                  |         r1 = r4 & (r2 >> 17);
                                                         |     }
    0x00022f3c ldrdeq r1, r2, [r4], -ip                  |     __asm ("ldrdeq r1, r2, [r4], -ip");
                                                         |     /* Beware that this jump is a conditional jump.
                                                         |      * r2dec transformed it as a return, due being the
                                                         |      * last instruction. Please, check 'pdda' output
                                                         |      * for more hints. */
    0x00022f40 andeq r1, r4, r8, asr r8                  |     return r1 = r4 & (r8 >> r8);
                                                         | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/lighttpd @ 0x22f44 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) sym.configparserAlloc ()         | void configparserAlloc (int32_t arg1) {
                                             |     r0 = arg1;
    0x00022f44 mov r3, r0                    |     r3 = r0;
    0x00022f48 push {r4, lr}                 |     
    0x00022f4c ldr r0, [pc, 0x10]            |     r0 = *(0x22f60);
    0x00022f50 blx r3                        |     r0 = uint32_t (*r3)(uint32_t) (r3);
    0x00022f54 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00022f58 mvnne r3, 0                   |         r3 = ~0;
                                             |     }
                                             |     if (r0 == 0) {
    0x00022f5c strne r3, [r0]                |         *(r0) = r3;
                                             |     }
    0x00022f60 pop {r4, pc}                  |     
                                             | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/lighttpd @ 0x22f68 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) sym.configparserFree ()          | void configparserFree (int32_t arg1, int32_t arg2) {
                                             |     r0 = arg1;
                                             |     r1 = arg2;
    0x00022f68 push {r4, r5, r6, lr}         |     
    0x00022f6c subs r4, r0, 0                |     r4 = r0 - 0;
    0x00022f70 popeq {r4, r5, r6, pc}        |     
    0x00022f74 mov r5, r1                    |     r5 = r1;
    0x00022f78 b 0x22f80                     |     
                                             |     while (r3 >= 0) {
    0x00022f7c bl 0x22ae0                    |         fcn_00022ae0 (r0, r1);
    0x00022f80 ldr r3, [r4]                  |         r3 = *(r4);
    0x00022f84 mov r0, r4                    |         r0 = r4;
    0x00022f88 cmp r3, 0                     |         
    0x00022f8c bge 0x22f7c                   |         
                                             |     }
    0x00022f90 mov r3, r5                    |     r3 = r5;
    0x00022f94 pop {r4, r5, r6, lr}          |     
    0x00022f98 bx r3                         |     return uint32_t (*r3)() ();
                                             | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/lighttpd @ 0x22f9c */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) sym.configparser ()                              | void configparser (FILE * stream, int32_t arg1, int32_t arg2) {
                                                             |     int32_t var_0h;
                                                             |     int32_t var_8h;
                                                             |     int32_t var_ch;
                                                             |     int32_t var_10h;
                                                             |     char * s;
                                                             |     int32_t var_18h;
                                                             |     int32_t var_1ch;
                                                             |     int32_t var_20h;
                                                             |     int32_t var_24h;
                                                             |     int32_t var_2ch;
                                                             |     int32_t var_30h;
                                                             |     char * * endptr;
                                                             |     int32_t var_38h;
                                                             |     int32_t var_3ch;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00022f9c ldr ip, [r0]                                  |     ip = *(r0);
    0x00022fa0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00022fa4 cmp ip, 0                                     |     
    0x00022fa8 sub sp, sp, 0x3c                              |     
                                                             |     if (ip < 0) {
    0x00022fac bge 0x22fcc                                   |         
    0x00022fb0 cmp r1, 0                                     |         
                                                             |         if (r1 == 0) {
    0x00022fb4 beq 0x23038                                   |             goto label_24;
                                                             |         }
    0x00022fb8 mov ip, 0                                     |         
    0x00022fbc mvn lr, 0                                     |         lr = ~0;
    0x00022fc0 stm r0, {ip, lr}                              |         *(r0) = ip;
                                                             |         *((r0 + 4)) = lr;
    0x00022fc4 str ip, [r0, 0xc]                             |         *((r0 + 0xc)) = ip;
    0x00022fc8 str ip, [r0, 0x10]                            |         *((r0 + 0x10)) = ip;
                                                             |     }
    0x00022fcc ldr fp, [pc, 0xfdc]                           |     fp = obj.stderr;
    0x00022fd0 str r3, [r0, 8]                               |     *((r0 + 8)) = r3;
    0x00022fd4 mov r4, r0                                    |     r4 = r0;
    0x00022fd8 mov r3, 0                                     |     r3 = 0;
    0x00022fdc str r1, [sp, 0x1c]                            |     var_1ch = r1;
    0x00022fe0 str r2, [sp, 0x2c]                            |     var_2ch = r2;
    0x00022fe4 str r1, [sp, 0xc]                             |     var_ch = r1;
    0x00022fe8 str r3, [sp, 0x20]                            |     var_20h = r3;
                                                             | label_25:
    0x00022fec ldr r1, [sp, 0xc]                             |     r1 = var_ch;
    0x00022ff0 mov r0, r4                                    |     r0 = r4;
    0x00022ff4 bl 0x22998                                    |     r0 = fcn_00022998 (r0, r1);
    0x00022ff8 cmp r0, 0x45                                  |     
    0x00022ffc mov r1, r0                                    |     r1 = r0;
                                                             |     if (r0 <= 0x45) {
    0x00023000 bgt 0x23040                                   |         
    0x00023004 add r3, sp, 0x2c                              |         r3 += var_2ch;
    0x00023008 ldr r2, [sp, 0xc]                             |         r2 = var_ch;
    0x0002300c mov r0, r4                                    |         r0 = r4;
    0x00023010 bl 0x22b84                                    |         fcn_00022b84 (r0, r1);
    0x00023014 ldr r3, [r4, 4]                               |         r3 = *((r4 + 4));
    0x00023018 sub r3, r3, 1                                 |         r3--;
    0x0002301c str r3, [r4, 4]                               |         *((r4 + 4)) = r3;
    0x00023020 ldr r3, [sp, 0x1c]                            |         r3 = var_1ch;
    0x00023024 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x00023028 bne 0x23038                                   |             
    0x0002302c ldr r3, [r4]                                  |             r3 = *(r4);
    0x00023030 cmp r3, 0                                     |             
                                                             |             if (r3 >= 0) {
    0x00023034 bge 0x24500                                   |                 goto label_38;
                                                             |             }
                                                             |         }
                                                             | label_24:
    0x00023038 add sp, sp, 0x3c                              |         
    0x0002303c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |         
                                                             |     }
    0x00023040 cmp r0, 0x71                                  |     
                                                             |     if (r0 > 0x71) {
    0x00023044 bgt 0x24410                                   |         goto label_39;
                                                             |     }
    0x00023048 sub r3, r0, 0x46                              |     r3 = r0 - 0x46;
    0x0002304c str r3, [sp, 0x24]                            |     var_24h = r3;
    0x00023050 ldr r3, [r4]                                  |     r3 = *(r4);
    0x00023054 mov r8, 0xc                                   |     r8 = 0xc;
    0x00023058 mov r6, r3                                    |     r6 = r3;
    0x0002305c mla r6, r8, r6, r8                            |     __asm ("mla r6, r8, r6, r8");
    0x00023060 sub r1, r0, 0x4b                              |     r1 = r0 - 0x4b;
    0x00023064 ldr r5, [r4, 8]                               |     r5 = *((r4 + 8));
    0x00023068 str r3, [sp, 8]                               |     var_8h = r3;
    0x0002306c add r6, r4, r6                                |     r6 = r4 + r6;
    0x00023070 mov r2, r8                                    |     r2 = r8;
    0x00023074 cmp r1, 0x26                                  |     
                                                             |     if (r1 > 0x26) {
                                                             |         /* switch table (39 cases) at 0x23080 */
    0x00023078 ldrls pc, [pc, r1, lsl 2]                     |         offset_0 = r1 << 2;
                                                             |         pc = *((pc + offset_0));
                                                             |     }
    0x0002307c b 0x24240                                     |     goto label_40;
    0x0002311c mov r3, 0                                     |     r3 = 0;
    0x00023120 str r3, [r6, -4]                              |     *((r6 - 4)) = r3;
                                                             | label_26:
    0x00023124 ldr r7, [sp, 8]                               |     r7 = var_8h;
    0x00023128 mla r7, r2, r7, r4                            |     __asm ("mla r7, r2, r7, r4");
    0x0002312c b 0x2366c                                     |     goto label_41;
    0x00023130 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x00023134 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00023138 beq 0x231ec                                   |         goto label_0;
                                                             |     }
    0x0002313c ldr r8, [sp, 8]                               |     r8 = var_8h;
    0x00023140 ldr r1, [r6, -0x10]                           |     r1 = *((r6 - 0x10));
    0x00023144 mla r8, r2, r8, r4                            |     __asm ("mla r8, r2, r8, r4");
    0x00023148 ldr r3, [r8, 0x14]                            |     r3 = *((r8 + 0x14));
    0x0002314c ldr r0, [r3]                                  |     r0 = *(r3);
    0x00023150 bl 0x22b5c                                    |     fcn_00022b5c (r0, r1);
    0x00023154 ldr r3, [r6, -0x10]                           |     r3 = *((r6 - 0x10));
    0x00023158 mov r2, 4                                     |     r2 = 4;
    0x0002315c ldr sl, [r3]                                  |     sl = *(r3);
    0x00023160 ldr r1, [pc, 0xe4c]                           |     r1 = stderr;
    0x00023164 mov r0, sl                                    |     r0 = sl;
    0x00023168 bl 0x17600                                    |     strncmp (r0, r1, r2);
    0x0002316c ldr r2, [r5, 0x18]                            |     r2 = *((r5 + 0x18));
    0x00023170 subs sb, r0, 0                                |     sb = r0 - 0;
                                                             |     if (sb == r0) {
    0x00023174 bne 0x2319c                                   |         
                                                             | label_1:
    0x00023178 ldr r3, [r2]                                  |         r3 = *(r2);
    0x0002317c str sl, [sp]                                  |         *(sp) = sl;
    0x00023180 ldr r1, [pc, 0xe30]                           |         r1 = "env.";
    0x00023184 ldr r3, [r3]                                  |         r3 = *(r3);
    0x00023188 ldr r2, [r2, 0x28]                            |         r2 = *((r2 + 0x28));
    0x0002318c ldr r0, [fp]                                  |         r0 = *(fp);
    0x00023190 bl 0x178e8                                    |         fprintf (r0, "env.", r2, r3)
    0x00023194 str sb, [r5, 4]                               |         *((r5 + 4)) = sb;
    0x00023198 b 0x231ec                                     |         
                                                             |     } else {
    0x0002319c ldr r3, [r2, 0x10]                            |         r3 = *((r2 + 0x10));
    0x000231a0 ldr r2, [r8, 0x14]                            |         r2 = *((r8 + 0x14));
    0x000231a4 ldr r0, [r2]                                  |         r0 = *(r2);
    0x000231a8 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x000231ac ldrne r1, [r0]                                |             r1 = *(r0);
                                                             |         }
                                                             |         if (r0 != 0) {
    0x000231b0 moveq r1, r0                                  |             r1 = r0;
                                                             |         }
    0x000231b4 bl 0x22980                                    |         r0 = fcn_00022980 (r0);
    0x000231b8 mov r2, r0                                    |         r2 = r0;
    0x000231bc mov r0, r3                                    |         r0 = r3;
    0x000231c0 bl 0x334d0                                    |         array_get_element_klen ();
    0x000231c4 ldr r2, [r5, 0x18]                            |         r2 = *((r5 + 0x18));
    0x000231c8 subs r8, r0, 0                                |         r8 = r0 - 0;
    0x000231cc mov r0, 0xc                                   |         r0 = 0xc;
                                                             |         if (r8 != r0) {
    0x000231d0 bne 0x23238                                   |             goto label_42;
                                                             |         }
    0x000231d4 ldr r5, [sp, 8]                               |         r5 = var_8h;
    0x000231d8 mla r5, r0, r5, r4                            |         __asm ("mla r5, r0, r5, r4");
    0x000231dc ldr r0, [r2, 0x10]                            |         r0 = *((r2 + 0x10));
    0x000231e0 ldr r1, [r5, 0x14]                            |         r1 = *((r5 + 0x14));
    0x000231e4 bl 0x33688                                    |         array_insert_unique ();
    0x000231e8 str r8, [r5, 0x14]                            |         *((r5 + 0x14)) = r8;
                                                             |     }
                                                             |     do {
                                                             | label_0:
    0x000231ec ldr r0, [r6, -0x10]                           |         r0 = *((r6 - 0x10));
    0x000231f0 bl 0x24ae0                                    |         buffer_free ();
                                                             | label_2:
    0x000231f4 mov r3, 0                                     |         r3 = 0;
    0x000231f8 str r3, [r6, -0x10]                           |         *((r6 - 0x10)) = r3;
    0x000231fc ldr r3, [sp, 8]                               |         r3 = var_8h;
    0x00023200 mov r2, 0xc                                   |         r2 = 0xc;
    0x00023204 mla r3, r2, r3, r4                            |         __asm ("mla r3, r2, r3, r4");
    0x00023208 ldr r0, [r3, 0x14]                            |         r0 = *((r3 + 0x14));
    0x0002320c cmp r0, 0                                     |         
                                                             |         if (r0 != 0) {
    0x00023210 beq 0x23220                                   |             
    0x00023214 ldr r3, [r0, 0xc]                             |             r3 = *((r0 + 0xc));
    0x00023218 ldr r3, [r3, 8]                               |             r3 = *((r3 + 8));
    0x0002321c blx r3                                        |             uint32_t (*r3)(uint32_t) (r3);
                                                             |         }
    0x00023220 ldr r7, [sp, 8]                               |         r7 = var_8h;
    0x00023224 mov r3, 0xc                                   |         r3 = 0xc;
    0x00023228 mla r7, r3, r7, r4                            |         __asm ("mla r7, r3, r7, r4");
                                                             | label_29:
    0x0002322c mov r3, 0                                     |         r3 = 0;
    0x00023230 str r3, [r7, 0x14]                            |         *((r7 + 0x14)) = r3;
    0x00023234 b 0x23840                                     |         goto label_14;
                                                             | label_42:
    0x00023238 ldr r3, [sp, 8]                               |         r3 = var_8h;
    0x0002323c ldr r1, [r2]                                  |         r1 = *(r2);
    0x00023240 mla r3, r0, r3, r4                            |         __asm ("mla r3, r0, r3, r4");
    0x00023244 ldr r3, [r3, 0x14]                            |         r3 = *((r3 + 0x14));
    0x00023248 ldr r3, [r3]                                  |         r3 = *(r3);
    0x0002324c ldr r3, [r3]                                  |         r3 = *(r3);
    0x00023250 str r3, [sp]                                  |         *(sp) = r3;
    0x00023254 ldr r0, [fp]                                  |         r0 = *(fp);
    0x00023258 ldr r3, [r1]                                  |         r3 = *(r1);
    0x0002325c ldr r2, [r2, 0x28]                            |         r2 = *((r2 + 0x28));
    0x00023260 ldr r1, [pc, 0xd54]                           |         r1 = "Setting env variable is not supported in conditional %d %s: %s\n";
    0x00023264 bl 0x178e8                                    |         fprintf (r0, r1, r2, r3)
    0x00023268 mov r3, 0                                     |         r3 = 0;
    0x0002326c str r3, [r5, 4]                               |         *((r5 + 4)) = r3;
    0x00023270 b 0x231ec                                     |         
                                                             |     } while (1);
    0x00023274 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x00023278 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x0002327c beq 0x231ec                                   |         goto label_0;
                                                             |     }
    0x00023280 ldr r8, [r6, -0x10]                           |     r8 = *((r6 - 0x10));
    0x00023284 mov r2, 4                                     |     r2 = 4;
    0x00023288 ldr sl, [r8]                                  |     sl = *(r8);
    0x0002328c ldr r1, [pc, 0xd20]                           |     r1 = stderr;
    0x00023290 mov r0, sl                                    |     r0 = sl;
    0x00023294 bl 0x17600                                    |     r0 = strncmp (r0, r1, r2);
    0x00023298 subs sb, r0, 0                                |     sb = r0 - 0;
                                                             |     if (sb == r0) {
    0x0002329c ldreq r2, [r5, 0x18]                          |         r2 = *((r5 + 0x18));
                                                             |         goto label_43;
                                                             |     }
                                                             |     if (sb == r0) {
                                                             | label_43:
    0x000232a0 beq 0x23178                                   |         goto label_1;
                                                             |     }
    0x000232a4 ldr r7, [sp, 8]                               |     r7 = var_8h;
    0x000232a8 mov sb, 0xc                                   |     sb = 0xc;
    0x000232ac mla r7, sb, r7, r4                            |     __asm ("mla r7, sb, r7, r4");
    0x000232b0 mov r1, r8                                    |     r1 = r8;
    0x000232b4 ldr r3, [r7, 0x14]                            |     r3 = *((r7 + 0x14));
    0x000232b8 ldr r0, [r3]                                  |     r0 = *(r3);
    0x000232bc bl 0x22b5c                                    |     fcn_00022b5c (r0, r1);
    0x000232c0 ldr r3, [r5, 0x18]                            |     r3 = *((r5 + 0x18));
    0x000232c4 ldr r1, [r7, 0x14]                            |     r1 = *((r7 + 0x14));
    0x000232c8 ldr r0, [r3, 0x10]                            |     r0 = *((r3 + 0x10));
    0x000232cc bl 0x33628                                    |     array_replace ();
    0x000232d0 mov r3, 0                                     |     r3 = 0;
    0x000232d4 str r3, [r7, 0x14]                            |     *((r7 + 0x14)) = r3;
    0x000232d8 b 0x231ec                                     |     goto label_0;
    0x000232dc ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x000232e0 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x000232e4 beq 0x231ec                                   |         goto label_0;
                                                             |     }
    0x000232e8 ldr r3, [r6, -0x10]                           |     r3 = *((r6 - 0x10));
    0x000232ec mov r2, 4                                     |     r2 = 4;
    0x000232f0 ldr sb, [r3]                                  |     sb = *(r3);
    0x000232f4 ldr r1, [pc, 0xcb8]                           |     r1 = stderr;
    0x000232f8 mov r0, sb                                    |     r0 = sb;
    0x000232fc str r3, [sp, 0x10]                            |     var_10h = r3;
    0x00023300 bl 0x17600                                    |     strncmp (r0, r1, r2);
    0x00023304 ldr r8, [r5, 0x18]                            |     r8 = *((r5 + 0x18));
    0x00023308 ldr r3, [sp, 0x10]                            |     r3 = var_10h;
    0x0002330c subs sl, r0, 0                                |     sl = r0 - 0;
                                                             |     if (sl == r0) {
    0x00023310 bne 0x23338                                   |         
    0x00023314 ldr r3, [r8]                                  |         r3 = *(r8);
    0x00023318 str sb, [sp]                                  |         *(sp) = sb;
    0x0002331c ldr r1, [pc, 0xc9c]                           |         r1 = "Duplicate config variable in conditional %d %s: %s\n";
    0x00023320 ldr r3, [r3]                                  |         r3 = *(r3);
    0x00023324 ldr r2, [r8, 0x28]                            |         r2 = *((r8 + 0x28));
    0x00023328 ldr r0, [fp]                                  |         r0 = *(fp);
    0x0002332c bl 0x178e8                                    |         fprintf (r0, "Duplicate config variable in conditional %d %s: %s\n", r2, r3)
    0x00023330 str sl, [r5, 4]                               |         *((r5 + 4)) = sl;
    0x00023334 b 0x231ec                                     |         goto label_0;
                                                             |     }
    0x00023338 mov r0, r3                                    |     r0 = r3;
    0x0002333c bl 0x22980                                    |     fcn_00022980 (r0);
    0x00023340 mov r1, sb                                    |     r1 = sb;
    0x00023344 mov r2, r0                                    |     r2 = r0;
    0x00023348 ldr r0, [r8, 0x10]                            |     r0 = *((r8 + 0x10));
    0x0002334c bl 0x33514                                    |     r0 = array_extract_element_klen ();
    0x00023350 subs sb, r0, 0                                |     sb = r0 - 0;
                                                             |     if (sb == r0) {
    0x00023354 bne 0x2336c                                   |         
    0x00023358 ldr r1, [r6, -0x10]                           |         r1 = *((r6 - 0x10));
    0x0002335c ldr r0, [r5, 0x18]                            |         r0 = *((r5 + 0x18));
    0x00023360 bl 0x22be4                                    |         r0 = fcn_00022be4 (r0, r1);
    0x00023364 subs sb, r0, 0                                |         sb = r0 - 0;
                                                             |         if (sb == r0) {
    0x00023368 beq 0x233b0                                   |             goto label_44;
                                                             |         }
                                                             |     }
    0x0002336c ldr r3, [sp, 8]                               |     r3 = var_8h;
    0x00023370 mov r2, 0xc                                   |     r2 = 0xc;
    0x00023374 mla r3, r2, r3, r4                            |     __asm ("mla r3, r2, r3, r4");
    0x00023378 mov r0, sb                                    |     r0 = sb;
    0x0002337c ldr r1, [r3, 0x14]                            |     r1 = *((r3 + 0x14));
    0x00023380 bl 0x22d84                                    |     r0 = configparser_merge_data ();
    0x00023384 subs r8, r0, 0                                |     r8 = r0 - 0;
                                                             |     if (r8 == r0) {
    0x00023388 streq r8, [r5, 4]                             |         *((r5 + 4)) = r8;
                                                             |         goto label_45;
                                                             |     }
                                                             |     if (r8 == r0) {
                                                             | label_45:
    0x0002338c beq 0x231ec                                   |         goto label_0;
                                                             |     }
    0x00023390 ldr r1, [r6, -0x10]                           |     r1 = *((r6 - 0x10));
    0x00023394 ldr r0, [r8]                                  |     r0 = *(r8);
    0x00023398 bl 0x22b5c                                    |     fcn_00022b5c (r0, r1);
    0x0002339c ldr r3, [r5, 0x18]                            |     r3 = *((r5 + 0x18));
    0x000233a0 mov r1, r8                                    |     r1 = r8;
    0x000233a4 ldr r0, [r3, 0x10]                            |     r0 = *((r3 + 0x10));
    0x000233a8 bl 0x33688                                    |     array_insert_unique ();
    0x000233ac b 0x231ec                                     |     goto label_0;
                                                             | label_44:
    0x000233b0 ldr r7, [sp, 8]                               |     r7 = var_8h;
    0x000233b4 mov r8, 0xc                                   |     r8 = 0xc;
    0x000233b8 mla r7, r8, r7, r4                            |     __asm ("mla r7, r8, r7, r4");
    0x000233bc ldr r1, [r6, -0x10]                           |     r1 = *((r6 - 0x10));
    0x000233c0 ldr r3, [r7, 0x14]                            |     r3 = *((r7 + 0x14));
    0x000233c4 ldr r0, [r3]                                  |     r0 = *(r3);
    0x000233c8 bl 0x22b5c                                    |     fcn_00022b5c (r0, r1);
    0x000233cc ldr r3, [r5, 0x18]                            |     r3 = *((r5 + 0x18));
    0x000233d0 ldr r1, [r7, 0x14]                            |     r1 = *((r7 + 0x14));
    0x000233d4 ldr r0, [r3, 0x10]                            |     r0 = *((r3 + 0x10));
    0x000233d8 bl 0x33688                                    |     array_insert_unique ();
    0x000233dc str sb, [r7, 0x14]                            |     *((r7 + 0x14)) = sb;
    0x000233e0 b 0x231ec                                     |     goto label_0;
    0x000233e4 ldr r8, [sp, 8]                               |     r8 = var_8h;
    0x000233e8 mov r1, 0x2e                                  |     r1 = 0x2e;
    0x000233ec mla r8, r2, r8, r4                            |     __asm ("mla r8, r2, r8, r4");
    0x000233f0 ldr r5, [r8, 0x14]                            |     r5 = *((r8 + 0x14));
    0x000233f4 ldr r0, [r5]                                  |     r0 = *(r5);
    0x000233f8 bl 0x17a2c                                    |     r0 = strchr (r0, r1);
    0x000233fc cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00023400 movne r3, 0                                   |         r3 = 0;
                                                             |     }
                                                             |     if (r0 == 0) {
    0x00023404 strne r5, [sp, 0x30]                          |         var_30h = r5;
                                                             |     }
                                                             |     if (r0 == 0) {
    0x00023408 strne r3, [r8, 0x14]                          |         *((r8 + 0x14)) = r3;
                                                             |     }
                                                             |     if (r0 == 0) {
    0x0002340c bne 0x23424                                   |         
    0x00023410 ldr r0, [pc, 0xbac]                           |         r0 = "Appending env variable is not supported in conditional %d %s: %s\n";
    0x00023414 bl 0x254a0                                    |         buffer_init_string ();
    0x00023418 ldr r1, [r8, 0x14]                            |         r1 = *((r8 + 0x14));
    0x0002341c str r0, [sp, 0x30]                            |         var_30h = r0;
    0x00023420 bl 0x22a50                                    |         fcn_00022a50 (r0, r1);
                                                             |     }
                                                             | label_3:
    0x00023424 ldr r7, [sp, 8]                               |     r7 = var_8h;
    0x00023428 mov r3, 0xc                                   |     r3 = 0xc;
    0x0002342c mla r7, r3, r7, r4                            |     __asm ("mla r7, r3, r7, r4");
    0x00023430 ldr r0, [r7, 0x14]                            |     r0 = *((r7 + 0x14));
    0x00023434 bl 0x24ae0                                    |     buffer_free ();
                                                             | label_5:
    0x00023438 mov r3, 0                                     |     r3 = 0;
    0x0002343c str r3, [r7, 0x14]                            |     *((r7 + 0x14)) = r3;
    0x00023440 b 0x24240                                     |     goto label_40;
    0x00023444 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x00023448 mov r8, 0                                     |     r8 = 0;
    0x0002344c cmp r3, r8                                    |     
    0x00023450 str r8, [sp, 0x30]                            |     var_30h = r8;
                                                             |     if (r3 == r8) {
    0x00023454 beq 0x23484                                   |         goto label_46;
                                                             |     }
    0x00023458 ldr r3, [sp, 8]                               |     r3 = var_8h;
    0x0002345c mov r2, 0xc                                   |     r2 = 0xc;
    0x00023460 mla r3, r2, r3, r4                            |     __asm ("mla r3, r2, r3, r4");
    0x00023464 ldr r0, [r6, -0x10]                           |     r0 = *((r6 - 0x10));
    0x00023468 ldr r1, [r3, 0x14]                            |     r1 = *((r3 + 0x14));
    0x0002346c bl 0x22d84                                    |     configparser_merge_data ();
    0x00023470 str r8, [r6, -0x10]                           |     *((r6 - 0x10)) = r8;
    0x00023474 cmp r0, r8                                    |     
    0x00023478 str r0, [sp, 0x30]                            |     var_30h = r0;
                                                             |     if (r0 != r8) {
    0x0002347c bne 0x231f4                                   |         goto label_2;
                                                             |     }
    0x00023480 str r0, [r5, 4]                               |     *((r5 + 4)) = r0;
                                                             | label_46:
    0x00023484 ldr r0, [r6, -0x10]                           |     r0 = *((r6 - 0x10));
    0x00023488 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0002348c beq 0x231f4                                   |         goto label_2;
                                                             |     }
    0x00023490 ldr r3, [r0, 0xc]                             |     r3 = *((r0 + 0xc));
    0x00023494 ldr r3, [r3, 8]                               |     r3 = *((r3 + 8));
    0x00023498 blx r3                                        |     uint32_t (*r3)(uint32_t) (r3);
    0x0002349c b 0x231f4                                     |     goto label_2;
    0x000234a0 mov r3, 0                                     |     r3 = 0;
    0x000234a4 str r3, [sp, 0x30]                            |     var_30h = r3;
    0x000234a8 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x000234ac cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x000234b0 beq 0x23424                                   |         goto label_3;
                                                             |     }
    0x000234b4 ldr r7, [sp, 8]                               |     r7 = var_8h;
    0x000234b8 mov r6, 0xc                                   |     r6 = 0xc;
    0x000234bc mla r7, r6, r7, r4                            |     __asm ("mla r7, r6, r7, r4");
    0x000234c0 mov r2, 4                                     |     r2 = 4;
    0x000234c4 ldr r8, [r7, 0x14]                            |     r8 = *((r7 + 0x14));
    0x000234c8 ldr r1, [pc, 0xae4]                           |     r1 = stderr;
    0x000234cc ldr sb, [r8]                                  |     sb = *(r8);
    0x000234d0 mov r0, sb                                    |     r0 = sb;
    0x000234d4 bl 0x17600                                    |     r0 = strncmp (r0, r1, r2);
    0x000234d8 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000234dc bne 0x2352c                                   |         
    0x000234e0 add r0, sb, 4                                 |         r0 = sb + 4;
    0x000234e4 bl 0x17510                                    |         r0 = getenv (r0);
    0x000234e8 subs r8, r0, 0                                |         r8 = r0 - 0;
                                                             |         if (r8 != r0) {
    0x000234ec beq 0x2350c                                   |             
    0x000234f0 bl 0x34290                                    |             data_string_init ();
    0x000234f4 mov r1, r8                                    |             r1 = r8;
    0x000234f8 mov r5, r0                                    |             r5 = r0;
    0x000234fc ldr r0, [r0, 0x10]                            |             r0 = *((r0 + 0x10));
    0x00023500 bl 0x2555c                                    |             buffer_append_string ();
    0x00023504 str r5, [sp, 0x30]                            |             var_30h = r5;
    0x00023508 b 0x23424                                     |             goto label_3;
                                                             |         }
    0x0002350c ldr r3, [r7, 0x14]                            |         r3 = *((r7 + 0x14));
    0x00023510 ldr r1, [pc, 0xab0]                           |         r1 = "var.";
    0x00023514 ldr r2, [r3]                                  |         r2 = *(r3);
    0x00023518 add r2, r2, 4                                 |         r2 += 4;
                                                             | label_4:
    0x0002351c ldr r0, [fp]                                  |         r0 = *(fp);
    0x00023520 bl 0x178e8                                    |         fprintf (r0, "var.", r2, r3)
    0x00023524 str r8, [r5, 4]                               |         *((r5 + 4)) = r8;
    0x00023528 b 0x23424                                     |         goto label_3;
                                                             |     }
    0x0002352c mov r1, r8                                    |     r1 = r8;
    0x00023530 ldr r0, [r5, 0x18]                            |     r0 = *((r5 + 0x18));
    0x00023534 bl 0x22be4                                    |     r0 = fcn_00022be4 (r0, r1);
    0x00023538 cmp r0, 0                                     |     
    0x0002353c mov r8, r0                                    |     r8 = r0;
    0x00023540 str r0, [sp, 0x30]                            |     var_30h = r0;
                                                             |     if (r0 != 0) {
    0x00023544 bne 0x23424                                   |         goto label_3;
                                                             |     }
    0x00023548 ldr r3, [r7, 0x14]                            |     r3 = *((r7 + 0x14));
    0x0002354c ldr r1, [pc, 0xa78]                           |     r1 = "Undefined env variable: %s\n";
    0x00023550 ldr r2, [r3]                                  |     r2 = *(r3);
    0x00023554 b 0x2351c                                     |     goto label_4;
    0x00023558 bl 0x34290                                    |     data_string_init ();
    0x0002355c str r0, [sp, 0x30]                            |     var_30h = r0;
    0x00023560 ldr r0, [r0, 0x10]                            |     r0 = *((r0 + 0x10));
    0x00023564 bl 0x24ae0                                    |     buffer_free ();
                                                             | label_8:
    0x00023568 ldr r7, [sp, 8]                               |     r7 = var_8h;
    0x0002356c mov r3, 0xc                                   |     r3 = 0xc;
    0x00023570 mla r7, r3, r7, r4                            |     __asm ("mla r7, r3, r7, r4");
    0x00023574 ldr r3, [sp, 0x30]                            |     r3 = var_30h;
    0x00023578 ldr r2, [r7, 0x14]                            |     r2 = *((r7 + 0x14));
    0x0002357c str r2, [r3, 0x10]                            |     *((r3 + 0x10)) = r2;
    0x00023580 b 0x23438                                     |     goto label_5;
    0x00023584 bl 0x344a8                                    |     data_integer_init ();
    0x00023588 mov r6, 0xc                                   |     r6 = 0xc;
    0x0002358c mov sb, r0                                    |     sb = r0;
    0x00023590 str r0, [sp, 0x30]                            |     var_30h = r0;
    0x00023594 bl 0x174ec                                    |     errno_location ();
    0x00023598 ldr r7, [sp, 8]                               |     r7 = var_8h;
    0x0002359c mov r3, 0                                     |     r3 = 0;
    0x000235a0 mla r7, r6, r7, r4                            |     __asm ("mla r7, r6, r7, r4");
    0x000235a4 mov r2, 0xa                                   |     r2 = 0xa;
    0x000235a8 add r1, sp, 0x34                              |     r1 += endptr;
    0x000235ac str r3, [r0]                                  |     *(r0) = r3;
    0x000235b0 ldr r3, [r7, 0x14]                            |     r3 = *((r7 + 0x14));
    0x000235b4 mov r8, r0                                    |     r8 = r0;
    0x000235b8 ldr r0, [r3]                                  |     r0 = *(r3);
    0x000235bc bl 0x17654                                    |     strtol (r0, r1, r2);
    0x000235c0 ldr r3, [r7, 0x14]                            |     r3 = *((r7 + 0x14));
    0x000235c4 ldr r2, [r3]                                  |     r2 = *(r3);
    0x000235c8 ldr r3, [sp, 0x34]                            |     r3 = endptr;
    0x000235cc cmp r2, r3                                    |     
                                                             |     if (r2 == r3) {
    0x000235d0 ldrne r3, [pc, 0x9f8]                         |         r3 = obj.__ctype_b;
                                                             |     }
    0x000235d4 str r0, [sb, 0x10]                            |     *((sb + 0x10)) = r0;
                                                             |     if (r2 == r3) {
    0x000235d8 ldrne r0, [r3]                                |         r0 = *(r3);
                                                             |     }
                                                             |     if (r2 != r3) {
    0x000235dc bne 0x2360c                                   |         goto label_47;
                                                             |     }
                                                             | label_6:
    0x000235e0 ldr r3, [r8]                                  |     r3 = *(r8);
    0x000235e4 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x000235e8 beq 0x23628                                   |         goto label_48;
                                                             |     }
                                                             | label_7:
    0x000235ec ldr r1, [pc, 0x9e0]                           |     r1 = *(0x23fd0);
    0x000235f0 ldr r0, [fp]                                  |     r0 = *(fp);
    0x000235f4 bl 0x178e8                                    |     fprintf (r0, r1)
    0x000235f8 mov r3, 0                                     |     r3 = 0;
    0x000235fc str r3, [r5, 4]                               |     *((r5 + 4)) = r3;
    0x00023600 b 0x23424                                     |     goto label_3;
                                                             |     do {
    0x00023604 add r3, r3, 1                                 |         r3++;
    0x00023608 str r3, [sp, 0x34]                            |         endptr = r3;
                                                             | label_47:
    0x0002360c ldr r3, [sp, 0x34]                            |         r3 = endptr;
    0x00023610 ldrb r1, [r3]                                 |         r1 = *(r3);
    0x00023614 lsl r1, r1, 1                                 |         r1 <<= 1;
    0x00023618 ldrh r1, [r0, r1]                             |         r1 = *((r0 + r1));
    0x0002361c tst r1, 0x20                                  |         
    0x00023620 bne 0x23604                                   |         
                                                             |     } while ((r1 & 0x20) != 0);
    0x00023624 b 0x235e0                                     |     goto label_6;
                                                             | label_48:
    0x00023628 ldr r3, [sp, 0x34]                            |     r3 = endptr;
    0x0002362c ldrb r3, [r3]                                 |     r3 = *(r3);
    0x00023630 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00023634 beq 0x23424                                   |         goto label_3;
                                                             |     }
    0x00023638 b 0x235ec                                     |     goto label_7;
    0x0002363c bl 0x34388                                    |     data_array_init ();
    0x00023640 str r0, [sp, 0x30]                            |     var_30h = r0;
    0x00023644 ldr r0, [r0, 0x10]                            |     r0 = *((r0 + 0x10));
    0x00023648 bl 0x33370                                    |     array_free ();
    0x0002364c b 0x23568                                     |     goto label_8;
    0x00023650 bl 0x3326c                                    |     array_init ();
    0x00023654 str r0, [sp, 0x30]                            |     var_30h = r0;
    0x00023658 ldr r0, [r6, -4]                              |     r0 = *((r6 - 4));
                                                             |     do {
    0x0002365c bl 0x24ae0                                    |         buffer_free ();
                                                             | label_11:
    0x00023660 ldr r7, [sp, 8]                               |         r7 = var_8h;
    0x00023664 mov r3, 0xc                                   |         r3 = 0xc;
    0x00023668 mla r7, r3, r7, r4                            |         __asm ("mla r7, r3, r7, r4");
                                                             | label_41:
    0x0002366c ldr r0, [r7, 0x14]                            |         r0 = *((r7 + 0x14));
    0x00023670 b 0x24194                                     |         goto label_49;
    0x00023674 ldr r3, [r6, -4]                              |         r3 = *((r6 - 4));
    0x00023678 str r3, [sp, 0x30]                            |         var_30h = r3;
    0x0002367c mov r3, 0                                     |         r3 = 0;
    0x00023680 str r3, [r6, -4]                              |         *((r6 - 4)) = r3;
                                                             | label_12:
    0x00023684 ldr r0, [r6, -0x10]                           |         r0 = *((r6 - 0x10));
    0x00023688 b 0x2365c                                     |         
                                                             |     } while (1);
    0x0002368c ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x00023690 mov r8, 0                                     |     r8 = 0;
    0x00023694 cmp r3, r8                                    |     
    0x00023698 str r8, [sp, 0x30]                            |     var_30h = r8;
                                                             |     if (r3 == r8) {
    0x0002369c beq 0x236ec                                   |         goto label_50;
                                                             |     }
    0x000236a0 ldr r7, [sp, 8]                               |     r7 = var_8h;
    0x000236a4 mov sb, 0xc                                   |     sb = 0xc;
    0x000236a8 mla r7, sb, r7, r4                            |     __asm ("mla r7, sb, r7, r4");
    0x000236ac ldr r3, [r7, 0x14]                            |     r3 = *((r7 + 0x14));
    0x000236b0 ldr r3, [r3]                                  |     r3 = *(r3);
    0x000236b4 cmp r3, r8                                    |     
    0x000236b8 bne 0x236f8                                   |     
                                                             |     while (r2 == 0) {
                                                             | label_9:
    0x000236bc ldr r7, [sp, 8]                               |         r7 = var_8h;
    0x000236c0 mov r5, 0xc                                   |         r5 = 0xc;
    0x000236c4 mla r7, r5, r7, r4                            |         __asm ("mla r7, r5, r7, r4");
    0x000236c8 ldr r0, [r6, -0x10]                           |         r0 = *((r6 - 0x10));
    0x000236cc ldr r1, [r7, 0x14]                            |         r1 = *((r7 + 0x14));
    0x000236d0 bl 0x33688                                    |         array_insert_unique ();
    0x000236d4 mov r3, 0                                     |         r3 = 0;
    0x000236d8 str r3, [r7, 0x14]                            |         *((r7 + 0x14)) = r3;
                                                             | label_10:
    0x000236dc ldr r3, [r6, -0x10]                           |         r3 = *((r6 - 0x10));
    0x000236e0 str r3, [sp, 0x30]                            |         var_30h = r3;
    0x000236e4 mov r3, 0                                     |         r3 = 0;
    0x000236e8 str r3, [r6, -0x10]                           |         *((r6 - 0x10)) = r3;
                                                             | label_50:
    0x000236ec ldr r0, [r6, -0x10]                           |         r0 = *((r6 - 0x10));
    0x000236f0 bl 0x33370                                    |         array_free ();
    0x000236f4 b 0x231f4                                     |         goto label_2;
    0x000236f8 ldr r2, [r3, 4]                               |         r2 = *((r3 + 4));
    0x000236fc cmp r2, 0                                     |         
    0x00023700 beq 0x236bc                                   |         
                                                             |     }
    0x00023704 mov r0, r3                                    |     r0 = r3;
    0x00023708 bl 0x22980                                    |     r0 = fcn_00022980 (r0);
    0x0002370c mov r2, r0                                    |     r2 = r0;
    0x00023710 ldr r1, [r3]                                  |     r1 = *(r3);
    0x00023714 ldr r0, [r6, -0x10]                           |     r0 = *((r6 - 0x10));
    0x00023718 bl 0x334d0                                    |     r0 = array_get_element_klen ();
    0x0002371c cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00023720 beq 0x236bc                                   |         goto label_9;
                                                             |     }
    0x00023724 ldr r3, [r7, 0x14]                            |     r3 = *((r7 + 0x14));
    0x00023728 ldr r1, [pc, 0x8a8]                           |     r1 = "error parsing number: '%s'\n";
    0x0002372c ldr r3, [r3]                                  |     r3 = *(r3);
    0x00023730 ldr r0, [fp]                                  |     r0 = *(fp);
    0x00023734 ldr r2, [r3]                                  |     r2 = *(r3);
    0x00023738 bl 0x178e8                                    |     fprintf (r0, "error parsing number: '%s'\n", r2, r3)
    0x0002373c str r8, [r5, 4]                               |     *((r5 + 4)) = r8;
    0x00023740 b 0x236dc                                     |     goto label_10;
    0x00023744 ldr r3, [r6, -4]                              |     r3 = *((r6 - 4));
    0x00023748 str r3, [sp, 0x30]                            |     var_30h = r3;
    0x0002374c mov r3, 0                                     |     r3 = 0;
    0x00023750 str r3, [r6, -4]                              |     *((r6 - 4)) = r3;
    0x00023754 b 0x23660                                     |     goto label_11;
    0x00023758 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x0002375c mov r6, 0                                     |     r6 = 0;
    0x00023760 cmp r3, r6                                    |     
    0x00023764 str r6, [sp, 0x30]                            |     var_30h = r6;
                                                             |     if (r3 != r6) {
    0x00023768 beq 0x2378c                                   |         
    0x0002376c bl 0x3326c                                    |         array_init ();
    0x00023770 ldr r7, [sp, 8]                               |         r7 = var_8h;
    0x00023774 mov r5, 0xc                                   |         r5 = 0xc;
    0x00023778 mla r7, r5, r7, r4                            |         __asm ("mla r7, r5, r7, r4");
    0x0002377c ldr r1, [r7, 0x14]                            |         r1 = *((r7 + 0x14));
    0x00023780 str r0, [sp, 0x30]                            |         var_30h = r0;
    0x00023784 bl 0x33688                                    |         array_insert_unique ();
    0x00023788 str r6, [r7, 0x14]                            |         *((r7 + 0x14)) = r6;
                                                             |     }
                                                             | label_28:
    0x0002378c ldr r3, [sp, 8]                               |     r3 = var_8h;
    0x00023790 mov r2, 0xc                                   |     r2 = 0xc;
    0x00023794 mla r3, r2, r3, r4                            |     __asm ("mla r3, r2, r3, r4");
    0x00023798 ldr r0, [r3, 0x14]                            |     r0 = *((r3 + 0x14));
    0x0002379c cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000237a0 beq 0x237b0                                   |         
    0x000237a4 ldr r3, [r0, 0xc]                             |         r3 = *((r0 + 0xc));
    0x000237a8 ldr r3, [r3, 8]                               |         r3 = *((r3 + 8));
    0x000237ac blx r3                                        |         uint32_t (*r3)(uint32_t) (r3);
                                                             |     }
    0x000237b0 ldr r7, [sp, 8]                               |     r7 = var_8h;
    0x000237b4 mov r3, 0xc                                   |     r3 = 0xc;
    0x000237b8 mla r7, r3, r7, r4                            |     __asm ("mla r7, r3, r7, r4");
    0x000237bc b 0x23438                                     |     goto label_5;
    0x000237c0 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x000237c4 mov r8, 0                                     |     r8 = 0;
    0x000237c8 cmp r3, r8                                    |     
    0x000237cc str r8, [sp, 0x30]                            |     var_30h = r8;
                                                             |     if (r3 != r8) {
    0x000237d0 beq 0x237fc                                   |         
    0x000237d4 ldr r7, [sp, 8]                               |         r7 = var_8h;
    0x000237d8 mov r5, 0xc                                   |         r5 = 0xc;
    0x000237dc mla r7, r5, r7, r4                            |         __asm ("mla r7, r5, r7, r4");
    0x000237e0 ldr r1, [r6, -0x10]                           |         r1 = *((r6 - 0x10));
    0x000237e4 ldr r3, [r7, 0x14]                            |         r3 = *((r7 + 0x14));
    0x000237e8 ldr r0, [r3]                                  |         r0 = *(r3);
    0x000237ec bl 0x22b5c                                    |         fcn_00022b5c (r0, r1);
    0x000237f0 ldr r3, [r7, 0x14]                            |         r3 = *((r7 + 0x14));
    0x000237f4 str r8, [r7, 0x14]                            |         *((r7 + 0x14)) = r8;
    0x000237f8 str r3, [sp, 0x30]                            |         var_30h = r3;
                                                             |     }
    0x000237fc ldr r3, [sp, 8]                               |     r3 = var_8h;
    0x00023800 mov r2, 0xc                                   |     r2 = 0xc;
    0x00023804 mla r3, r2, r3, r4                            |     __asm ("mla r3, r2, r3, r4");
    0x00023808 ldr r0, [r3, 0x14]                            |     r0 = *((r3 + 0x14));
    0x0002380c cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00023810 beq 0x23820                                   |         
    0x00023814 ldr r3, [r0, 0xc]                             |         r3 = *((r0 + 0xc));
    0x00023818 ldr r3, [r3, 8]                               |         r3 = *((r3 + 8));
    0x0002381c blx r3                                        |         uint32_t (*r3)(uint32_t) (r3);
                                                             |     }
    0x00023820 ldr r7, [sp, 8]                               |     r7 = var_8h;
    0x00023824 mov r3, 0xc                                   |     r3 = 0xc;
    0x00023828 mla r7, r3, r7, r4                            |     __asm ("mla r7, r3, r7, r4");
    0x0002382c mov r5, 0                                     |     r5 = 0;
    0x00023830 str r5, [r7, 0x14]                            |     *((r7 + 0x14)) = r5;
    0x00023834 ldr r0, [r6, -0x10]                           |     r0 = *((r6 - 0x10));
    0x00023838 bl 0x24ae0                                    |     buffer_free ();
    0x0002383c str r5, [r6, -0x10]                           |     *((r6 - 0x10)) = r5;
                                                             | label_14:
    0x00023840 ldr r0, [r6, -4]                              |     r0 = *((r6 - 4));
    0x00023844 b 0x24194                                     |     goto label_49;
    0x00023848 ldr r3, [r5]                                  |     r3 = *(r5);
    0x0002384c ldr r1, [pc, 0x788]                           |     r1 = "Error: duplicate array-key: %s. Please get rid of the duplicate entry.\n";
    0x00023850 mov r2, 6                                     |     r2 = 6;
    0x00023854 ldr r0, [r3, 0x10c]                           |     r0 = *((r3 + 0x10c));
    0x00023858 bl 0x334d0                                    |     r0 = array_get_element_klen ();
    0x0002385c subs r1, r0, 0                                |     r1 = r0 - 0;
                                                             |     if (r1 != r0) {
    0x00023860 bne 0x23874                                   |         goto label_51;
                                                             |     }
    0x00023864 ldr r2, [pc, 0x774]                           |     r2 = "global";
    0x00023868 ldr r1, [pc, 0x774]                           |     r1 = "assertion failed: dc";
                                                             |     do {
                                                             | label_13:
    0x0002386c ldr r0, [pc, 0x774]                           |         r0 = *(0x23fe4);
    0x00023870 bl 0x17c50                                    |         log_failed_assert ();
                                                             | label_51:
    0x00023874 mov r2, 0                                     |         r2 = 0;
    0x00023878 mov r0, r5                                    |         r0 = r5;
    0x0002387c bl 0x22cb4                                    |         fcn_00022cb4 (r0, r1);
    0x00023880 b 0x23660                                     |         goto label_11;
    0x00023884 ldr r3, [r5, 0x18]                            |         r3 = *((r5 + 0x18));
    0x00023888 cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x0002388c ldreq r2, [pc, 0x758]                         |             r2 = "assertion failed: ctx->current";
                                                             |         }
                                                             |         if (r3 != 0) {
    0x00023890 ldreq r1, [pc, 0x758]                         |             r1 = *(0x00023ff0);
                                                             |         }
    0x00023894 beq 0x2386c                                   |         
                                                             |     } while (r3 == 0);
    0x00023898 mov r0, r5                                    |     r0 = r5;
    0x0002389c bl 0x22a08                                    |     fcn_00022a08 (r0);
    0x000238a0 ldr r3, [r5, 0x18]                            |     r3 = *((r5 + 0x18));
    0x000238a4 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x000238a8 bne 0x23684                                   |         goto label_12;
                                                             |     }
    0x000238ac ldr r2, [pc, 0x738]                           |     r2 = "__configparser.y";
    0x000238b0 ldr r1, [pc, 0x73c]                           |     r1 = *(0x23ff0);
    0x000238b4 b 0x2386c                                     |     goto label_13;
    0x000238b8 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x000238bc mov r8, 0                                     |     r8 = 0;
    0x000238c0 cmp r3, r8                                    |     
    0x000238c4 str r8, [sp, 0x30]                            |     var_30h = r8;
                                                             |     if (r3 == r8) {
    0x000238c8 beq 0x23944                                   |         goto label_15;
                                                             |     }
    0x000238cc ldr r3, [sp, 8]                               |     r3 = var_8h;
    0x000238d0 mov r1, 0xc                                   |     r1 = 0xc;
    0x000238d4 mla r3, r1, r3, r4                            |     __asm ("mla r3, r1, r3, r4");
    0x000238d8 ldr r2, [r6, -0x1c]                           |     r2 = *((r6 - 0x1c));
    0x000238dc ldr r3, [r3, 0x14]                            |     r3 = *((r3 + 0x14));
    0x000238e0 ldr r2, [r2, 0x28]                            |     r2 = *((r2 + 0x28));
    0x000238e4 ldr r3, [r3, 0x28]                            |     r3 = *((r3 + 0x28));
    0x000238e8 cmp r2, r3                                    |     
                                                             |     if (r2 >= r3) {
    0x000238ec blt 0x23900                                   |         
    0x000238f0 ldr r1, [fp]                                  |         r1 = *(fp);
    0x000238f4 ldr r0, [pc, 0x6fc]                           |         r0 = *(0x23ff4);
    0x000238f8 bl 0x17840                                    |         fputs (r0, r1);
    0x000238fc str r8, [r5, 4]                               |         *((r5 + 4)) = r8;
                                                             |     }
    0x00023900 ldr r3, [r6, -0x1c]                           |     r3 = *((r6 - 0x1c));
    0x00023904 ldr r3, [r3, 0x20]                            |     r3 = *((r3 + 0x20));
    0x00023908 cmp r3, 5                                     |     
                                                             |     if (r3 == 5) {
    0x0002390c bne 0x23924                                   |         
    0x00023910 ldr r1, [fp]                                  |         r1 = *(fp);
    0x00023914 ldr r0, [pc, 0x6e0]                           |         r0 = "unreachable else condition\n";
    0x00023918 bl 0x17840                                    |         fputs ("unreachable else condition\n", r1);
    0x0002391c mov r3, 0                                     |         r3 = 0;
    0x00023920 str r3, [r5, 4]                               |         *((r5 + 4)) = r3;
                                                             |     }
    0x00023924 ldr r3, [sp, 8]                               |     r3 = var_8h;
    0x00023928 mov r2, 0xc                                   |     r2 = 0xc;
    0x0002392c mla r3, r2, r3, r4                            |     __asm ("mla r3, r2, r3, r4");
    0x00023930 ldr r2, [r6, -0x1c]                           |     r2 = *((r6 - 0x1c));
    0x00023934 ldr r3, [r3, 0x14]                            |     r3 = *((r3 + 0x14));
    0x00023938 str r2, [r3, 0x3c]                            |     *((r3 + 0x3c)) = r2;
    0x0002393c str r3, [r2, 0x40]                            |     *((r2 + 0x40)) = r3;
                                                             | label_16:
    0x00023940 str r3, [sp, 0x30]                            |     var_30h = r3;
                                                             |     do {
                                                             | label_15:
    0x00023944 ldr r7, [sp, 8]                               |         r7 = var_8h;
    0x00023948 mov r3, 0xc                                   |         r3 = 0xc;
    0x0002394c mla r7, r3, r7, r4                            |         __asm ("mla r7, r3, r7, r4");
    0x00023950 mov r2, 0                                     |         r2 = 0;
    0x00023954 str r2, [r6, -0x1c]                           |         *((r6 - 0x1c)) = r2;
    0x00023958 str r2, [r7, 0x14]                            |         *((r7 + 0x14)) = r2;
    0x0002395c b 0x23840                                     |         goto label_14;
    0x00023960 ldr r3, [r5, 4]                               |         r3 = *((r5 + 4));
    0x00023964 mov r8, 0                                     |         r8 = 0;
    0x00023968 cmp r3, r8                                    |         
    0x0002396c str r8, [sp, 0x30]                            |         var_30h = r8;
    0x00023970 beq 0x23944                                   |         
                                                             |     } while (r3 == r8);
    0x00023974 ldr r3, [sp, 8]                               |     r3 = var_8h;
    0x00023978 mov r1, 0xc                                   |     r1 = 0xc;
    0x0002397c mla r3, r1, r3, r4                            |     __asm ("mla r3, r1, r3, r4");
    0x00023980 ldr r2, [r6, -0x1c]                           |     r2 = *((r6 - 0x1c));
    0x00023984 ldr r3, [r3, 0x14]                            |     r3 = *((r3 + 0x14));
    0x00023988 ldr r2, [r2, 0x28]                            |     r2 = *((r2 + 0x28));
    0x0002398c ldr r3, [r3, 0x28]                            |     r3 = *((r3 + 0x28));
    0x00023990 cmp r2, r3                                    |     
                                                             |     if (r2 >= r3) {
    0x00023994 blt 0x239a8                                   |         
    0x00023998 ldr r1, [fp]                                  |         r1 = *(fp);
    0x0002399c ldr r0, [pc, 0x654]                           |         r0 = *(0x23ff4);
    0x000239a0 bl 0x17840                                    |         fputs (r0, r1);
    0x000239a4 str r8, [r5, 4]                               |         *((r5 + 4)) = r8;
                                                             |     }
    0x000239a8 ldr r3, [r6, -0x1c]                           |     r3 = *((r6 - 0x1c));
    0x000239ac ldr r3, [r3, 0x20]                            |     r3 = *((r3 + 0x20));
    0x000239b0 cmp r3, 5                                     |     
                                                             |     if (r3 == 5) {
    0x000239b4 bne 0x239cc                                   |         
    0x000239b8 ldr r1, [fp]                                  |         r1 = *(fp);
    0x000239bc ldr r0, [pc, 0x638]                           |         r0 = "unreachable else condition\n";
    0x000239c0 bl 0x17840                                    |         fputs ("unreachable else condition\n", r1);
    0x000239c4 mov r3, 0                                     |         r3 = 0;
    0x000239c8 str r3, [r5, 4]                               |         *((r5 + 4)) = r3;
                                                             |     }
    0x000239cc ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x000239d0 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x000239d4 beq 0x23944                                   |         goto label_15;
                                                             |     }
    0x000239d8 ldr r2, [sp, 8]                               |     r2 = var_8h;
    0x000239dc mov r1, 0xc                                   |     r1 = 0xc;
    0x000239e0 mla r2, r1, r2, r4                            |     __asm ("mla r2, r1, r2, r4");
    0x000239e4 ldr r3, [r5, 8]                               |     r3 = *((r5 + 8));
    0x000239e8 ldr r2, [r2, 0x14]                            |     r2 = *((r2 + 0x14));
    0x000239ec mov r8, 0xc                                   |     r8 = 0xc;
    0x000239f0 ldr r0, [r2]                                  |     r0 = *(r2);
    0x000239f4 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000239f8 ldrne r1, [r0]                                |         r1 = *(r0);
                                                             |     }
                                                             |     if (r0 != 0) {
    0x000239fc moveq r1, r0                                  |         r1 = r0;
                                                             |     }
    0x00023a00 bl 0x22980                                    |     r0 = fcn_00022980 (r0);
    0x00023a04 mov r2, r0                                    |     r2 = r0;
    0x00023a08 mov r0, r3                                    |     r0 = r3;
    0x00023a0c bl 0x33514                                    |     array_extract_element_klen ();
    0x00023a10 ldr r7, [sp, 8]                               |     r7 = var_8h;
    0x00023a14 mla r7, r8, r7, r4                            |     __asm ("mla r7, r8, r7, r4");
    0x00023a18 ldr r3, [r7, 0x14]                            |     r3 = *((r7 + 0x14));
    0x00023a1c cmp r0, r3                                    |     
                                                             |     if (r0 == r3) {
    0x00023a20 ldrne r2, [pc, 0x5d8]                         |         r2 = "assertion failed: yymsp[0].minor.yy18 == dc";
                                                             |     }
                                                             |     if (r0 != r3) {
    0x00023a24 ldrne r1, [pc, 0x5d8]                         |         r1 = *(0x00024004);
                                                             |         goto label_52;
                                                             |     }
                                                             |     if (r0 != r3) {
                                                             | label_52:
    0x00023a28 bne 0x2386c                                   |         goto label_13;
                                                             |     }
    0x00023a2c ldr r3, [r6, -0x1c]                           |     r3 = *((r6 - 0x1c));
    0x00023a30 ldr r0, [r0]                                  |     r0 = *(r0);
    0x00023a34 ldr r1, [r3]                                  |     r1 = *(r3);
    0x00023a38 bl 0x22b5c                                    |     fcn_00022b5c (r0, r1);
    0x00023a3c ldr r2, [r6, -0x1c]                           |     r2 = *((r6 - 0x1c));
    0x00023a40 ldr r3, [r7, 0x14]                            |     r3 = *((r7 + 0x14));
    0x00023a44 ldr r1, [r2, 0x1c]                            |     r1 = *((r2 + 0x1c));
    0x00023a48 str r1, [r3, 0x1c]                            |     *((r3 + 0x1c)) = r1;
    0x00023a4c ldr r3, [r3]                                  |     r3 = *(r3);
    0x00023a50 mov r0, r3                                    |     r0 = r3;
    0x00023a54 bl 0x22980                                    |     r0 = fcn_00022980 (r0);
    0x00023a58 mov r1, r0                                    |     r1 = r0;
    0x00023a5c ldr r0, [r2, 0x44]                            |     r0 = *((r2 + 0x44));
    0x00023a60 bl 0x22980                                    |     fcn_00022980 (r0);
    0x00023a64 ldr r2, [r2, 0x20]                            |     r2 = *((r2 + 0x20));
    0x00023a68 sub r1, r1, 2                                 |     r1 -= 2;
    0x00023a6c sub r2, r2, 1                                 |     r2--;
    0x00023a70 sub r0, r1, r0                                |     r0 = r1 - r0;
    0x00023a74 cmp r2, 3                                     |     
                                                             |     if (r2 > 3) {
                                                             |         /* switch table (4 cases) at 0x23a80 */
    0x00023a78 ldrls pc, [pc, r2, lsl 2]                     |         offset_1 = r2 << 2;
                                                             |         pc = *((pc + offset_1));
                                                             |     }
    0x00023a7c b 0x23b20                                     |     goto label_53;
    0x00023a90 ldr r3, [r3]                                  |     r3 = *(r3);
    0x00023a94 mov r2, 0x3d                                  |     r2 = 0x3d;
                                                             |     do {
    0x00023a98 strb r2, [r3, r0]                             |         *((r3 + r0)) = r2;
    0x00023a9c ldr r2, [sp, 8]                               |         r2 = var_8h;
    0x00023aa0 mov r1, 0xc                                   |         r1 = 0xc;
    0x00023aa4 mla r2, r1, r2, r4                            |         __asm ("mla r2, r1, r2, r4");
    0x00023aa8 ldr r3, [r5, 8]                               |         r3 = *((r5 + 8));
    0x00023aac ldr r2, [r2, 0x14]                            |         r2 = *((r2 + 0x14));
    0x00023ab0 ldr r0, [r2]                                  |         r0 = *(r2);
    0x00023ab4 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00023ab8 ldrne r1, [r0]                                |             r1 = *(r0);
                                                             |         }
                                                             |         if (r0 != 0) {
    0x00023abc moveq r1, r0                                  |             r1 = r0;
                                                             |         }
    0x00023ac0 bl 0x22980                                    |         r0 = fcn_00022980 (r0);
    0x00023ac4 mov r2, r0                                    |         r2 = r0;
    0x00023ac8 mov r0, r3                                    |         r0 = r3;
    0x00023acc bl 0x334d0                                    |         r0 = array_get_element_klen ();
    0x00023ad0 subs r8, r0, 0                                |         r8 = r0 - 0;
                                                             |         if (r8 != r0) {
    0x00023ad4 bne 0x23b2c                                   |             goto label_54;
                                                             |         }
    0x00023ad8 ldr r7, [sp, 8]                               |         r7 = var_8h;
    0x00023adc mov r8, 0xc                                   |         r8 = 0xc;
    0x00023ae0 mla r7, r8, r7, r4                            |         __asm ("mla r7, r8, r7, r4");
    0x00023ae4 ldr r0, [r5, 8]                               |         r0 = *((r5 + 8));
    0x00023ae8 ldr r1, [r7, 0x14]                            |         r1 = *((r7 + 0x14));
    0x00023aec bl 0x33688                                    |         array_insert_unique ();
    0x00023af0 ldr r2, [r7, 0x14]                            |         r2 = *((r7 + 0x14));
    0x00023af4 ldr r3, [r6, -0x1c]                           |         r3 = *((r6 - 0x1c));
    0x00023af8 str r3, [r2, 0x3c]                            |         *((r2 + 0x3c)) = r3;
    0x00023afc str r2, [r3, 0x40]                            |         *((r3 + 0x40)) = r2;
                                                             | label_17:
    0x00023b00 ldr r3, [sp, 8]                               |         r3 = var_8h;
    0x00023b04 mov r2, 0xc                                   |         r2 = 0xc;
    0x00023b08 mla r3, r2, r3, r4                            |         __asm ("mla r3, r2, r3, r4");
    0x00023b0c ldr r3, [r3, 0x14]                            |         r3 = *((r3 + 0x14));
    0x00023b10 b 0x23940                                     |         goto label_16;
    0x00023b14 ldr r3, [r3]                                  |         r3 = *(r3);
    0x00023b18 mov r2, 0x21                                  |         r2 = 0x21;
    0x00023b1c b 0x23a98                                     |         
                                                             |     } while (1);
                                                             | label_53:
    0x00023b20 ldr r2, [pc, 0x4e0]                           |     r2 = *(0x24004);
    0x00023b24 ldr r1, [pc, 0x4e0]                           |     r1 = "assertion_failed:_0";
    0x00023b28 b 0x2386c                                     |     goto label_13;
                                                             | label_54:
    0x00023b2c ldr r1, [fp]                                  |     r1 = *(fp);
    0x00023b30 ldr r0, [pc, 0x4c0]                           |     r0 = *(0x23ff4);
    0x00023b34 bl 0x17840                                    |     fputs (r0, r1);
    0x00023b38 ldr r7, [sp, 8]                               |     r7 = var_8h;
    0x00023b3c mov r3, 0                                     |     r3 = 0;
    0x00023b40 str r3, [r5, 4]                               |     *((r5 + 4)) = r3;
    0x00023b44 mov r5, 0xc                                   |     r5 = 0xc;
    0x00023b48 mla r7, r5, r7, r4                            |     __asm ("mla r7, r5, r7, r4");
    0x00023b4c ldr r0, [r7, 0x14]                            |     r0 = *((r7 + 0x14));
    0x00023b50 ldr r3, [r0, 0xc]                             |     
    0x00023b54 ldr r3, [r3, 8]                               |     r3 = "assertion_failed:_0";
    0x00023b58 blx r3                                        |     uint32_t (*r3)(uint32_t, char*) (r0, "assertion_failed:_0");
    0x00023b5c str r8, [r7, 0x14]                            |     *((r7 + 0x14)) = r8;
    0x00023b60 b 0x23b00                                     |     goto label_17;
    0x00023b64 ldr r7, [sp, 8]                               |     r7 = var_8h;
    0x00023b68 mla r7, r8, r7, r4                            |     __asm ("mla r7, r8, r7, r4");
    0x00023b6c ldr r3, [r7, 0x14]                            |     r3 = *((r7 + 0x14));
    0x00023b70 str r3, [sp, 0x30]                            |     var_30h = r3;
    0x00023b74 b 0x23438                                     |     goto label_5;
    0x00023b78 mov r3, 0                                     |     r3 = 0;
    0x00023b7c str r3, [sp, 0x30]                            |     var_30h = r3;
    0x00023b80 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x00023b84 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00023b88 beq 0x23684                                   |         goto label_12;
                                                             |     }
    0x00023b8c ldr r8, [r5, 0x18]                            |     r8 = *((r5 + 0x18));
    0x00023b90 mov r0, r5                                    |     r0 = r5;
    0x00023b94 bl 0x22a08                                    |     fcn_00022a08 (r0);
    0x00023b98 cmp r8, 0                                     |     
                                                             |     if (r8 != 0) {
    0x00023b9c beq 0x23bac                                   |         
    0x00023ba0 ldr r3, [r5, 0x18]                            |         r3 = *((r5 + 0x18));
    0x00023ba4 cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x00023ba8 bne 0x23bf8                                   |             goto label_55;
                                                             |         }
                                                             |     }
    0x00023bac ldr r2, [pc, 0x45c]                           |     r2 = *(0x2400c);
    0x00023bb0 ldr r1, [pc, 0x45c]                           |     r1 = "assertion failed: cur && ctx->current";
    0x00023bb4 b 0x2386c                                     |     goto label_13;
    0x00023bb8 mov r3, 0                                     |     r3 = 0;
    0x00023bbc str r3, [sp, 0x30]                            |     var_30h = r3;
    0x00023bc0 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x00023bc4 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00023bc8 beq 0x23684                                   |         goto label_12;
                                                             |     }
    0x00023bcc ldr r8, [r5, 0x18]                            |     r8 = *((r5 + 0x18));
    0x00023bd0 mov r0, r5                                    |     r0 = r5;
    0x00023bd4 bl 0x22a08                                    |     fcn_00022a08 (r0);
    0x00023bd8 cmp r8, 0                                     |     
                                                             |     if (r8 != 0) {
    0x00023bdc beq 0x23bec                                   |         
    0x00023be0 ldr r3, [r5, 0x18]                            |         r3 = *((r5 + 0x18));
    0x00023be4 cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x00023be8 bne 0x23bf8                                   |             goto label_55;
                                                             |         }
                                                             |     }
    0x00023bec ldr r2, [pc, 0x41c]                           |     r2 = *(0x2400c);
    0x00023bf0 ldr r1, [pc, 0x420]                           |     r1 = *(0x24014);
    0x00023bf4 b 0x2386c                                     |     goto label_13;
                                                             | label_55:
    0x00023bf8 str r8, [sp, 0x30]                            |     var_30h = r8;
    0x00023bfc b 0x23684                                     |     goto label_12;
    0x00023c00 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x00023c04 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00023c08 beq 0x23c38                                   |         
    0x00023c0c ldr r8, [sp, 8]                               |         r8 = var_8h;
    0x00023c10 mla r8, r2, r8, r4                            |         __asm ("mla r8, r2, r8, r4");
    0x00023c14 ldr r3, [r8, 0x14]                            |         r3 = *((r8 + 0x14));
    0x00023c18 ldr r3, [r3, 4]                               |         r3 = *((r3 + 4));
    0x00023c1c cmp r3, 1                                     |         
                                                             |         if (r3 == 1) {
    0x00023c20 beq 0x23c38                                   |             goto label_56;
                                                             |         }
    0x00023c24 ldr r1, [fp]                                  |         r1 = *(fp);
    0x00023c28 ldr r0, [pc, 0x3ec]                           |         r0 = *(0x24018);
    0x00023c2c bl 0x17840                                    |         fputs (r0, r1);
    0x00023c30 mov r3, 0                                     |         r3 = 0;
    0x00023c34 str r3, [r5, 4]                               |         *((r5 + 4)) = r3;
                                                             |     }
                                                             | label_56:
    0x00023c38 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x00023c3c cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00023c40 beq 0x241d8                                   |         goto label_57;
                                                             |     }
    0x00023c44 ldr r3, [r6, -4]                              |     r3 = *((r6 - 4));
    0x00023c48 sub r3, r3, 1                                 |     r3--;
    0x00023c4c cmp r3, 3                                     |     
                                                             |     if (r3 > 3) {
                                                             |         /* switch table (4 cases) at 0x23c58 */
    0x00023c50 ldrls pc, [pc, r3, lsl 2]                     |         offset_2 = r3 << 2;
                                                             |         pc = *((pc + offset_2));
                                                             |     }
    0x00023c54 b 0x23e58                                     |     goto label_58;
    0x00023c68 ldr r0, [pc, 0x3b0]                           |     r0 = "rvalue must be string";
                                                             |     do {
                                                             | label_18:
    0x00023c6c bl 0x254a0                                    |         buffer_init_string ();
    0x00023c70 str r0, [sp, 0x10]                            |         var_10h = r0;
    0x00023c74 bl 0x24e20                                    |         buffer_init ();
    0x00023c78 ldr r3, [r5, 0x18]                            |         r3 = *((r5 + 0x18));
    0x00023c7c ldr r1, [r3]                                  |         r1 = *(r3);
    0x00023c80 mov r7, r0                                    |         r7 = r0;
    0x00023c84 bl 0x22b5c                                    |         fcn_00022b5c (r0, r1);
    0x00023c88 mov r2, 1                                     |         r2 = 1;
    0x00023c8c ldr r1, [pc, 0x3c8]                           |         r1 = "unknown condition for $%s[%s]\n";
    0x00023c90 mov r0, r7                                    |         r0 = r7;
    0x00023c94 bl 0x254c0                                    |         buffer_append_string_len ();
    0x00023c98 ldr r1, [r6, -0x34]                           |         r1 = *((r6 - 0x34));
    0x00023c9c mov r0, r7                                    |         r0 = r7;
    0x00023ca0 bl 0x22a50                                    |         fcn_00022a50 (r0, r1);
    0x00023ca4 ldr r1, [r6, -0x1c]                           |         r1 = *((r6 - 0x1c));
    0x00023ca8 mov r0, r7                                    |         r0 = r7;
    0x00023cac bl 0x22a50                                    |         fcn_00022a50 (r0, r1);
    0x00023cb0 ldr r1, [sp, 0x10]                            |         r1 = var_10h;
    0x00023cb4 mov r0, r7                                    |         r0 = r7;
    0x00023cb8 bl 0x22a50                                    |         fcn_00022a50 (r0, r1);
    0x00023cbc ldr r3, [sp, 8]                               |         r3 = var_8h;
    0x00023cc0 mov r2, 0xc                                   |         r2 = 0xc;
    0x00023cc4 mla r3, r2, r3, r4                            |         __asm ("mla r3, r2, r3, r4");
    0x00023cc8 mov r0, r7                                    |         r0 = r7;
    0x00023ccc ldr r3, [r3, 0x14]                            |         r3 = *((r3 + 0x14));
    0x00023cd0 ldr sb, [r3, 0x10]                            |         sb = *((r3 + 0x10));
    0x00023cd4 mov r1, sb                                    |         r1 = sb;
    0x00023cd8 bl 0x22a50                                    |         fcn_00022a50 (r0, r1);
    0x00023cdc cmp r7, 0                                     |         
    0x00023ce0 mov r0, r7                                    |         r0 = r7;
                                                             |         if (r7 == 0) {
    0x00023ce4 ldrne r1, [r7]                                |             r1 = *(r7);
                                                             |         }
    0x00023ce8 ldr r3, [r5, 8]                               |         r3 = *((r5 + 8));
                                                             |         if (r7 != 0) {
    0x00023cec moveq r1, r7                                  |             r1 = r7;
                                                             |         }
    0x00023cf0 bl 0x22980                                    |         r0 = fcn_00022980 (r0);
    0x00023cf4 mov r2, r0                                    |         r2 = r0;
    0x00023cf8 mov r0, r3                                    |         r0 = r3;
    0x00023cfc bl 0x334d0                                    |         r0 = array_get_element_klen ();
    0x00023d00 subs sl, r0, 0                                |         sl = r0 - 0;
                                                             |         if (sl == r0) {
    0x00023d04 movne r2, 0                                   |             r2 = 0;
                                                             |         }
                                                             |         if (sl == r0) {
    0x00023d08 movne r1, sl                                  |             r1 = sl;
                                                             |         }
                                                             |         if (sl != r0) {
    0x00023d0c bne 0x24114                                   |             goto label_59;
                                                             |         }
    0x00023d10 bl 0x35ff8                                    |         data_config_init ();
    0x00023d14 mov r1, r7                                    |         r1 = r7;
    0x00023d18 mov r8, r0                                    |         r8 = r0;
    0x00023d1c ldr r0, [r0]                                  |         r0 = *(r0);
    0x00023d20 bl 0x22b5c                                    |         fcn_00022b5c (r0, r1);
    0x00023d24 ldr r1, [sp, 0x10]                            |         r1 = var_10h;
    0x00023d28 ldr r0, [r8, 0x24]                            |         r0 = *((r8 + 0x24));
    0x00023d2c bl 0x22b5c                                    |         fcn_00022b5c (r0, r1);
    0x00023d30 ldr r1, [r6, -0x1c]                           |         r1 = *((r6 - 0x1c));
    0x00023d34 ldr r0, [r8, 0x14]                            |         r0 = *((r8 + 0x14));
    0x00023d38 bl 0x22b5c                                    |         fcn_00022b5c (r0, r1);
    0x00023d3c ldr r1, [r6, -0x34]                           |         r1 = *((r6 - 0x34));
    0x00023d40 ldr r0, [r8, 0x18]                            |         r0 = *((r8 + 0x18));
    0x00023d44 bl 0x22b5c                                    |         fcn_00022b5c (r0, r1);
    0x00023d48 mov r2, 2                                     |         r2 = 2;
    0x00023d4c ldr r1, [pc, 0x2d0]                           |         r1 = *(0x24020);
    0x00023d50 ldr r0, [r8, 0x18]                            |         r0 = *((r8 + 0x18));
    0x00023d54 bl 0x254c0                                    |         buffer_append_string_len ();
    0x00023d58 ldr r1, [r6, -0x1c]                           |         r1 = *((r6 - 0x1c));
    0x00023d5c ldr r0, [r8, 0x18]                            |         r0 = *((r8 + 0x18));
    0x00023d60 bl 0x22a50                                    |         fcn_00022a50 (r0, r1);
    0x00023d64 mov r2, 2                                     |         r2 = 2;
    0x00023d68 ldr r1, [pc, 0x2b8]                           |         r1 = *(0x24024);
    0x00023d6c ldr r0, [r8, 0x18]                            |         r0 = *((r8 + 0x18));
    0x00023d70 bl 0x254c0                                    |         buffer_append_string_len ();
    0x00023d74 ldr r3, [r6, -4]                              |         r3 = *((r6 - 4));
    0x00023d78 str r3, [r8, 0x20]                            |         *((r8 + 0x20)) = r3;
    0x00023d7c ldr r3, [pc, 0x2a8]                           |         r3 = *(0x24028);
                                                             | label_19:
    0x00023d80 ldr r1, [r3, 4]                               |         r1 = *((r3 + 4));
    0x00023d84 cmp r1, 0                                     |         
                                                             |         if (r1 != 0) {
    0x00023d88 beq 0x23dc0                                   |             
    0x00023d8c ldr r2, [r3, 8]                               |             r2 = *((r3 + 8));
    0x00023d90 ldr r0, [r8, 0x18]                            |             r0 = *((r8 + 0x18));
    0x00023d94 str r3, [sp, 0x14]                            |             s = r3;
    0x00023d98 bl 0x258f4                                    |             buffer_is_equal_string ();
    0x00023d9c ldr r3, [sp, 0x14]                            |             r3 = s;
    0x00023da0 add r3, r3, 0xc                               |             r3 += 0xc;
    0x00023da4 cmp r0, 0                                     |             
                                                             |             if (r0 == 0) {
    0x00023da8 beq 0x23e64                                   |                 goto label_60;
                                                             |             }
    0x00023dac ldr r2, [pc, 0x2b0]                           |             r2 = "else_tmp_token";
    0x00023db0 mov r3, 0xc                                   |             r3 = 0xc;
    0x00023db4 mla r2, r3, sl, r2                            |             __asm ("mla r2, r3, sl, r2");
    0x00023db8 ldr r3, [r2, 0x1a0]                           |             r3 = *(0x24200);
    0x00023dbc str r3, [r8, 0x1c]                            |             *((r8 + 0x1c)) = r3;
                                                             |         }
    0x00023dc0 ldr r3, [r8, 0x1c]                            |         r3 = *((r8 + 0x1c));
    0x00023dc4 cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x00023dc8 bne 0x23e6c                                   |             goto label_61;
                                                             |         }
    0x00023dcc mov r2, 0xe                                   |         r2 = 0xe;
    0x00023dd0 ldr r1, [pc, 0x258]                           |         r1 = *(0x2402c);
    0x00023dd4 ldr r0, [r6, -0x34]                           |         r0 = *((r6 - 0x34));
    0x00023dd8 bl 0x258f4                                    |         r0 = buffer_is_equal_string ();
    0x00023ddc subs sl, r0, 0                                |         sl = r0 - 0;
                                                             |         if (sl == r0) {
    0x00023de0 movne r3, 0xc                                 |             r3 = 0xc;
                                                             |         }
                                                             |         if (sl == r0) {
    0x00023de4 strne r3, [r8, 0x1c]                          |             *((r8 + 0x1c)) = r3;
                                                             |         }
                                                             |         if (sl == r0) {
    0x00023de8 bne 0x23e04                                   |             
    0x00023dec ldr r3, [r8, 0x18]                            |             r3 = *((r8 + 0x18));
    0x00023df0 ldr r1, [pc, 0x23c]                           |             r1 = "REQUEST_HEADER";
    0x00023df4 ldr r2, [r3]                                  |             r2 = *(r3);
    0x00023df8 ldr r0, [fp]                                  |             r0 = *(fp);
    0x00023dfc bl 0x178e8                                    |             fprintf (r0, "REQUEST_HEADER", r2, r3)
    0x00023e00 str sl, [r5, 4]                               |             *((r5 + 4)) = sl;
                                                             |         }
                                                             | label_20:
    0x00023e04 mov r0, sb                                    |         r0 = sb;
    0x00023e08 bl 0x25438                                    |         buffer_init_buffer ();
    0x00023e0c ldr r3, [r5, 4]                               |         r3 = *((r5 + 4));
    0x00023e10 cmp r3, 0                                     |         
    0x00023e14 str r0, [r8, 0x44]                            |         *((r8 + 0x44)) = r0;
                                                             |         if (r3 == 0) {
    0x00023e18 beq 0x241c4                                   |             goto label_62;
                                                             |         }
    0x00023e1c ldr r3, [r6, -4]                              |         r3 = *((r6 - 4));
    0x00023e20 sub r3, r3, 1                                 |         r3--;
    0x00023e24 cmp r3, 3                                     |         
                                                             |         if (r3 > 3) {
                                                             |             /* switch table (4 cases) at 0x23e30 */
    0x00023e28 ldrls pc, [pc, r3, lsl 2]                     |             offset_3 = r3 << 2;
                                                             |             pc = *((pc + offset_3));
                                                             |         }
    0x00023e2c b 0x2419c                                     |         goto label_63;
    0x00023e40 ldr r0, [pc, 0x1f0]                           |         r0 = "error comp_key %s";
    0x00023e44 b 0x23c6c                                     |         
                                                             |     } while (1);
    0x00023e48 ldr r0, [pc, 0x1ec]                           |     r0 = *(0x24038);
    0x00023e4c b 0x23c6c                                     |     goto label_18;
    0x00023e50 ldr r0, [pc, 0x1e8]                           |     r0 = "_";
    0x00023e54 b 0x23c6c                                     |     goto label_18;
                                                             | label_58:
    0x00023e58 ldr r2, [pc, 0x1a8]                           |     r2 = *(0x24004);
    0x00023e5c ldr r1, [pc, 0x1e0]                           |     r1 = *(0x24040);
    0x00023e60 b 0x2386c                                     |     goto label_13;
                                                             | label_60:
    0x00023e64 add sl, sl, 1                                 |     sl++;
    0x00023e68 b 0x23d80                                     |     goto label_19;
                                                             | label_61:
    0x00023e6c cmp r3, 6                                     |     
    0x00023e70 mov r2, 0xc                                   |     r2 = 0xc;
                                                             |     if (r3 != 6) {
    0x00023e74 bne 0x23e90                                   |         goto label_64;
                                                             |     }
    0x00023e78 ldr r1, [pc, 0x1c8]                           |     r1 = *(0x24044);
    0x00023e7c str r2, [r8, 0x1c]                            |     *((r8 + 0x1c)) = r2;
    0x00023e80 mov r2, 0xf                                   |     r2 = 0xf;
                                                             |     do {
    0x00023e84 ldr r0, [r8, 0x14]                            |         r0 = *((r8 + 0x14));
    0x00023e88 bl 0x253a4                                    |         buffer_copy_string_len ();
    0x00023e8c b 0x23e04                                     |         goto label_20;
                                                             | label_64:
    0x00023e90 cmp r3, 5                                     |         
                                                             |         if (r3 != 5) {
    0x00023e94 streq r2, [r8, 0x1c]                          |             *((r8 + 0x1c)) = r2;
                                                             |         }
                                                             |         if (r3 != 5) {
    0x00023e98 ldreq r1, [pc, 0x1ac]                         |             r1 = "User-Agent";
                                                             |         }
                                                             |         if (r3 != 5) {
    0x00023e9c moveq r2, 0xa                                 |             r2 = 0xa;
                                                             |         }
    0x00023ea0 beq 0x23e84                                   |         
                                                             |     } while (r3 == 5);
    0x00023ea4 cmp r3, 8                                     |     
                                                             |     if (r3 != 8) {
    0x00023ea8 bne 0x240a4                                   |         goto label_65;
                                                             |     }
    0x00023eac ldr r3, [r8, 0x20]                            |     r3 = *((r8 + 0x20));
    0x00023eb0 bic r3, r3, 2                                 |     r3 = BIT_MASK (r3, 2);
    0x00023eb4 cmp r3, 1                                     |     
                                                             |     if (r3 != 1) {
    0x00023eb8 bne 0x23e04                                   |         goto label_20;
                                                             |     }
    0x00023ebc ldr r3, [sb]                                  |     r3 = *(sb);
    0x00023ec0 mov r1, 0x2f                                  |     r1 = 0x2f;
    0x00023ec4 mov r0, r3                                    |     r0 = r3;
    0x00023ec8 str r3, [sp, 0x14]                            |     s = r3;
    0x00023ecc bl 0x17a2c                                    |     strchr (r0, r1);
    0x00023ed0 ldr r3, [sp, 0x14]                            |     r3 = s;
    0x00023ed4 mov r1, 0x3a                                  |     r1 = 0x3a;
    0x00023ed8 str r3, [sp, 0x18]                            |     var_18h = r3;
    0x00023edc mov sl, r0                                    |     sl = r0;
    0x00023ee0 mov r0, r3                                    |     r0 = r3;
    0x00023ee4 bl 0x17a2c                                    |     strchr (r0, r1);
    0x00023ee8 cmp sl, 0                                     |     
    0x00023eec str r0, [sp, 0x14]                            |     s = r0;
                                                             |     if (sl == 0) {
    0x00023ef0 beq 0x2406c                                   |         goto label_66;
                                                             |     }
    0x00023ef4 ldr r3, [sp, 0x18]                            |     r3 = var_18h;
    0x00023ef8 cmp r3, sl                                    |     
                                                             |     if (r3 == sl) {
    0x00023efc beq 0x23e04                                   |         goto label_20;
                                                             |     }
    0x00023f00 mov r2, 0xa                                   |     r2 = 0xa;
    0x00023f04 add r1, sp, 0x34                              |     r1 += endptr;
    0x00023f08 add r0, sl, 1                                 |     r0 = sl + 1;
    0x00023f0c bl 0x175dc                                    |     strtoul (r0, r1, r2);
    0x00023f10 ldr r3, [sp, 0x34]                            |     r3 = endptr;
    0x00023f14 ldrb r3, [r3]                                 |     r3 = *(r3);
    0x00023f18 cmp r3, 0                                     |     
    0x00023f1c str r0, [sp, 0x18]                            |     var_18h = r0;
    0x00023f20 clz r0, r0                                    |     r0 &= r0;
    0x00023f24 lsr r0, r0, 5                                 |     r0 >>= 5;
                                                             |     if (r3 == 0) {
    0x00023f28 movne r0, 1                                   |         r0 = 1;
                                                             |     }
    0x00023f2c cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00023f30 bne 0x23f94                                   |         
    0x00023f34 ldr r3, [sp, 0x14]                            |         r3 = s;
    0x00023f38 ldr r1, [sb]                                  |         r1 = *(sb);
    0x00023f3c cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x00023f40 bne 0x2450c                                   |             goto label_67;
                                                             |         }
    0x00023f44 ldr r3, [sp, 0x18]                            |         r3 = var_18h;
    0x00023f48 cmp r3, 0x20                                  |         
                                                             |         if (r3 <= 0x20) {
    0x00023f4c bhi 0x23f94                                   |             
    0x00023f50 sub r1, sl, r1                                |             r1 = sl - r1;
    0x00023f54 mov r0, sb                                    |             r0 = sb;
    0x00023f58 bl 0x25088                                    |             buffer_string_set_length ();
    0x00023f5c mov r1, 0                                     |             r1 = 0;
    0x00023f60 mov r0, sb                                    |             r0 = sb;
    0x00023f64 bl 0x3b150                                    |             r0 = http_request_host_normalize ();
                                                             | label_37:
    0x00023f68 mov sl, r0                                    |             sl = r0;
    0x00023f6c mov r2, 1                                     |             r2 = 1;
    0x00023f70 ldr r1, [pc, 0xe4]                            |             r1 = "unknown condition for $%s[%s]\n";
    0x00023f74 mov r0, sb                                    |             r0 = sb;
    0x00023f78 bl 0x254c0                                    |             buffer_append_string_len ();
    0x00023f7c ldr r2, [sp, 0x18]                            |             r2 = var_18h;
    0x00023f80 mov r3, 0                                     |             r3 = 0;
    0x00023f84 mov r0, sb                                    |             r0 = sb;
    0x00023f88 bl 0x2558c                                    |             buffer_append_int ();
    0x00023f8c cmp sl, 0                                     |             
    0x00023f90 b 0x24094                                     |             
                                                             |         }
                                                             |     } else {
                                                             | label_36:
    0x00023f94 ldr r2, [sb]                                  |         r2 = *(sb);
    0x00023f98 ldr r1, [pc, 0xb0]                            |         r1 = "User-Agent";
                                                             | label_21:
    0x00023f9c ldr r0, [fp]                                  |         r0 = *(fp);
    0x00023fa0 bl 0x178e8                                    |         fprintf (r0, "User-Agent", r2)
    0x00023fa4 mov r3, 0                                     |         r3 = 0;
    0x00023fa8 str r3, [r5, 4]                               |         *((r5 + 4)) = r3;
    0x00023fac b 0x23e04                                     |         goto label_20;
                                                             | label_66:
    0x0002406c ldr r3, [sp, 0x14]                            |         r3 = s;
    0x00024070 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x00024074 bne 0x24088                                   |             
                                                             | label_22:
    0x00024078 mov r1, 0                                     |             r1 = 0;
    0x0002407c mov r0, sb                                    |             r0 = sb;
    0x00024080 bl 0x3b150                                    |             http_request_host_normalize ();
    0x00024084 b 0x24090                                     |             
                                                             |         } else {
    0x00024088 mov r0, sb                                    |             r0 = sb;
    0x0002408c bl 0x17bac                                    |             r0 = fcn_00017bac (r0);
                                                             |         }
    0x00024090 cmp r0, 0                                     |         
                                                             |     }
                                                             |     if (r0 == 0) {
    0x00024094 beq 0x23e04                                   |         goto label_20;
                                                             |     }
    0x00024098 ldr r2, [sb]                                  |     r2 = *(sb);
    0x0002409c ldr r1, [pc, -0x50]                           |     r1 = "invalid IP addr: %s\n";
    0x000240a0 b 0x23f9c                                     |     goto label_21;
                                                             | label_65:
    0x000240a4 cmp r3, 1                                     |     
                                                             |     if (r3 != 1) {
    0x000240a8 bne 0x240d4                                   |         goto label_68;
                                                             |     }
    0x000240ac ldr r3, [sb]                                  |     r3 = *(sb);
    0x000240b0 ldrb r2, [r3]                                 |     r2 = *(r3);
    0x000240b4 cmp r2, 0x3a                                  |     
                                                             |     if (r2 == 0x3a) {
    0x000240b8 beq 0x23e04                                   |         goto label_20;
                                                             |     }
    0x000240bc cmp r2, 0x5b                                  |     
                                                             |     if (r2 != 0x5b) {
    0x000240c0 bne 0x24078                                   |         goto label_22;
                                                             |     }
    0x000240c4 ldrb r3, [r3, 1]                              |     r3 = *((r3 + 1));
    0x000240c8 cmp r3, 0x5d                                  |     
                                                             |     if (r3 != 0x5d) {
    0x000240cc bne 0x24078                                   |         goto label_22;
                                                             |     }
    0x000240d0 b 0x23e04                                     |     goto label_20;
                                                             | label_68:
    0x000240d4 cmp r3, 3                                     |     
                                                             |     if (r3 != 3) {
    0x000240d8 bne 0x23e04                                   |         goto label_20;
                                                             |     }
    0x000240dc ldr r3, [r8, 0x20]                            |     r3 = *((r8 + 0x20));
    0x000240e0 bic r3, r3, 2                                 |     r3 = BIT_MASK (r3, 2);
    0x000240e4 cmp r3, 1                                     |     
                                                             |     if (r3 != 1) {
    0x000240e8 bne 0x23e04                                   |         goto label_20;
                                                             |     }
    0x000240ec b 0x24078                                     |     goto label_22;
    0x000240f0 mov r0, r8                                    |     r0 = r8;
    0x000240f4 bl 0x360b8                                    |     r0 = data_config_pcre_compile ();
    0x000240f8 cmp r0, 0                                     |     
    0x000240fc streq r0, [r5, 4]                             |     *((r5 + 4)) = r0;
                                                             |     while (1) {
    0x00024100 ldr r3, [r5, 4]                               |         r3 = *((r5 + 4));
    0x00024104 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x00024108 beq 0x241c4                                   |             goto label_62;
                                                             |         }
    0x0002410c mov r2, 1                                     |         r2 = 1;
    0x00024110 mov r1, r8                                    |         r1 = r8;
                                                             | label_59:
    0x00024114 mov r0, r5                                    |         r0 = r5;
    0x00024118 bl 0x22cb4                                    |         fcn_00022cb4 (r0, r1);
                                                             | label_23:
    0x0002411c mov r0, r7                                    |         r0 = r7;
    0x00024120 bl 0x24ae0                                    |         buffer_free ();
    0x00024124 ldr r0, [sp, 0x10]                            |         r0 = var_10h;
    0x00024128 bl 0x24ae0                                    |         buffer_free ();
    0x0002412c mov r5, 0                                     |         r5 = 0;
    0x00024130 ldr r0, [r6, -0x34]                           |         r0 = *((r6 - 0x34));
    0x00024134 bl 0x24ae0                                    |         buffer_free ();
    0x00024138 ldr r0, [r6, -0x1c]                           |         r0 = *((r6 - 0x1c));
    0x0002413c str r5, [r6, -0x34]                           |         *((r6 - 0x34)) = r5;
    0x00024140 bl 0x24ae0                                    |         buffer_free ();
    0x00024144 ldr r3, [sp, 8]                               |         r3 = var_8h;
    0x00024148 mov r2, 0xc                                   |         r2 = 0xc;
    0x0002414c mla r3, r2, r3, r4                            |         __asm ("mla r3, r2, r3, r4");
    0x00024150 str r5, [r6, -0x1c]                           |         *((r6 - 0x1c)) = r5;
    0x00024154 ldr r0, [r3, 0x14]                            |         r0 = *((r3 + 0x14));
    0x00024158 cmp r0, r5                                    |         
                                                             |         if (r0 != r5) {
    0x0002415c beq 0x2416c                                   |             
    0x00024160 ldr r3, [r0, 0xc]                             |             r3 = *((r0 + 0xc));
    0x00024164 ldr r3, [r3, 8]                               |             r3 = *((r3 + 8));
    0x00024168 blx r3                                        |             uint32_t (*r3)(uint32_t) (r3);
                                                             |         }
    0x0002416c ldr r7, [sp, 8]                               |         r7 = var_8h;
    0x00024170 mov r3, 0xc                                   |         r3 = 0xc;
    0x00024174 mla r7, r3, r7, r4                            |         __asm ("mla r7, r3, r7, r4");
    0x00024178 mov r3, 0                                     |         r3 = 0;
    0x0002417c str r3, [r7, 0x14]                            |         *((r7 + 0x14)) = r3;
    0x00024180 ldr r0, [r6, -0x40]                           |         r0 = *((r6 - 0x40));
    0x00024184 bl 0x24ae0                                    |         buffer_free ();
    0x00024188 ldr r0, [r6, -0x28]                           |         r0 = *((r6 - 0x28));
    0x0002418c bl 0x24ae0                                    |         buffer_free ();
    0x00024190 ldr r0, [r6, -0x10]                           |         r0 = *((r6 - 0x10));
                                                             | label_49:
    0x00024194 bl 0x24ae0                                    |         buffer_free ();
    0x00024198 b 0x24240                                     |         goto label_40;
                                                             | label_63:
    0x0002419c ldr r3, [r6, -0x1c]                           |         r3 = *((r6 - 0x1c));
    0x000241a0 ldr r2, [r6, -0x34]                           |         r2 = *((r6 - 0x34));
    0x000241a4 ldr r3, [r3]                                  |         r3 = *(r3);
    0x000241a8 ldr r2, [r2]                                  |         r2 = *(r2);
    0x000241ac ldr r1, [pc, -0x15c]                          |         r1 = "unknown condition for $%s[%s]\n";
    0x000241b0 ldr r0, [fp]                                  |         r0 = *(fp);
    0x000241b4 bl 0x178e8                                    |         fprintf (r0, "unknown condition for $%s[%s]\n", r2, r3)
    0x000241b8 mov r3, 0                                     |         r3 = 0;
    0x000241bc str r3, [r5, 4]                               |         *((r5 + 4)) = r3;
    0x000241c0 b 0x24100                                     |         
                                                             |     }
                                                             | label_62:
    0x000241c4 ldr r3, [r8, 0xc]                             |     r3 = *((r8 + 0xc));
    0x000241c8 mov r0, r8                                    |     r0 = r8;
    0x000241cc ldr r3, [r3, 8]                               |     r3 = *((r3 + 8));
    0x000241d0 blx r3                                        |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x000241d4 b 0x2411c                                     |     goto label_23;
                                                             | label_57:
    0x000241d8 str r3, [sp, 0x10]                            |     var_10h = r3;
    0x000241dc mov r7, r3                                    |     r7 = r3;
    0x000241e0 b 0x2411c                                     |     goto label_23;
    0x000241e4 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x000241e8 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x000241ec beq 0x24240                                   |         
    0x000241f0 bl 0x35ff8                                    |         data_config_init ();
    0x000241f4 ldr r3, [r5, 0x18]                            |         r3 = *((r5 + 0x18));
    0x000241f8 ldr r1, [r3]                                  |         r1 = *(r3);
    0x000241fc mov r6, r0                                    |         r6 = r0;
    0x00024200 ldr r0, [r0]                                  |         r0 = *(r0);
    0x00024204 bl 0x22b5c                                    |         fcn_00022b5c (r0, r1);
    0x00024208 mov r2, 1                                     |         r2 = 1;
    0x0002420c ldr r1, [pc, -0x1b8]                          |         r1 = "unknown condition for $%s[%s]\n";
    0x00024210 ldr r0, [r6]                                  |         r0 = *(r6);
    0x00024214 bl 0x254c0                                    |         buffer_append_string_len ();
    0x00024218 mov r2, 0xe                                   |         r2 = 0xe;
    0x0002421c ldr r1, [pc, -0x1c4]                          |         r1 = "else_tmp_token";
    0x00024220 ldr r0, [r6]                                  |         r0 = *(r6);
    0x00024224 bl 0x254c0                                    |         buffer_append_string_len ();
    0x00024228 mov r3, 5                                     |         r3 = 5;
    0x0002422c str r3, [r6, 0x20]                            |         *((r6 + 0x20)) = r3;
    0x00024230 mov r2, 1                                     |         r2 = 1;
    0x00024234 mov r1, r6                                    |         r1 = r6;
    0x00024238 mov r0, r5                                    |         r0 = r5;
    0x0002423c bl 0x22cb4                                    |         fcn_00022cb4 (r0, r1);
                                                             |     }
                                                             | label_40:
    0x00024240 ldr r0, [pc, -0x1e4]                          |     r0 = "else_tmp_token";
    0x00024244 ldr r3, [sp, 0x24]                            |     r3 = var_24h;
    0x00024248 add r3, r0, r3, lsl 1                         |     r3 = r0 + (r3 << 1);
    0x0002424c ldrb r1, [r3, 0x255]                          |     r1 = *((r3 + 0x255));
    0x00024250 ldrb r2, [r3, 0x254]                          |     r2 = *((r3 + 0x254));
    0x00024254 ldr r3, [r4]                                  |     r3 = *(r4);
    0x00024258 sub ip, r3, r1                                |     
    0x0002425c mov r1, 0xc                                   |     r1 = 0xc;
    0x00024260 mla r3, r1, ip, r4                            |     __asm ("mla r3, r1, ip, r4");
    0x00024264 str ip, [r4]                                  |     *(r4) = ip;
    0x00024268 ldr r1, [r3, 0xc]                             |     r1 = *((r3 + 0xc));
    0x0002426c add r0, r0, r1                                |     r0 += r1;
    0x00024270 add r3, r0, 0x2ac                             |     r3 = r0 + 0x2ac;
    0x00024274 ldrsb r3, [r3]                                |     r3 = *(r3);
    0x00024278 cmn r3, 0x27                                  |     
                                                             |     if (r3 != 0x27) {
    0x0002427c ldrbeq r1, [r0, 0x46]                         |         r1 = *((r0 + 0x46));
                                                             |     }
                                                             |     if (r3 != 0x27) {
    0x00024280 beq 0x242bc                                   |         
    0x00024284 cmp r2, 0x33                                  |         
                                                             |         if (r2 == 0x33) {
    0x00024288 beq 0x242d0                                   |             goto label_31;
                                                             |         }
    0x0002428c add r3, r2, r3                                |         r3 = r2 + r3;
    0x00024290 cmp r3, 0x89                                  |         
                                                             |         if (r3 <= 0x89) {
    0x00024294 bhi 0x242b0                                   |             
    0x00024298 ldr r0, [pc, -0x23c]                          |             r0 = "else_tmp_token";
    0x0002429c add r3, r0, r3                                |             r3 = r0 + r3;
    0x000242a0 ldrb r0, [r3, 0x8c]                           |             r0 = *((r3 + 0x8c));
    0x000242a4 cmp r2, r0                                    |             
                                                             |             if (r2 != r0) {
    0x000242a8 ldrbeq r1, [r3, 0x116]                        |                 r1 = *((r3 + 0x116));
                                                             |             }
                                                             |             if (r2 == r0) {
    0x000242ac beq 0x242bc                                   |                 goto label_69;
                                                             |             }
                                                             |         }
    0x000242b0 ldr r3, [pc, -0x254]                          |         r3 = "else_tmp_token";
    0x000242b4 add r1, r3, r1                                |         r1 = r3 + r1;
    0x000242b8 ldrb r1, [r1, 0x46]                           |         r1 = *((r1 + 0x46));
                                                             |     }
                                                             | label_69:
    0x000242bc cmp r1, 0x45                                  |     
                                                             |     if (r1 > 0x45) {
    0x000242c0 bgt 0x243fc                                   |         goto label_70;
                                                             |     }
    0x000242c4 add r3, sp, 0x30                              |     r3 += var_30h;
    0x000242c8 mov r0, r4                                    |     r0 = r4;
    0x000242cc bl 0x22b84                                    |     fcn_00022b84 (r0, r1);
                                                             | label_31:
    0x000242d0 ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x000242d4 cmp r3, 0x33                                  |     
                                                             |     if (r3 == 0x33) {
    0x000242d8 beq 0x23038                                   |         goto label_24;
                                                             |     }
                                                             | label_35:
    0x000242dc ldr r3, [r4]                                  |     r3 = *(r4);
    0x000242e0 cmp r3, 0                                     |     
                                                             |     if (r3 >= 0) {
    0x000242e4 bge 0x22fec                                   |         goto label_25;
                                                             |     }
    0x000242e8 b 0x23038                                     |     goto label_24;
    0x000242ec mov r3, 1                                     |     r3 = 1;
                                                             |     do {
                                                             | label_27:
    0x000242f0 str r3, [sp, 0x30]                            |         var_30h = r3;
    0x000242f4 b 0x23124                                     |         goto label_26;
    0x000242f8 mov r3, 2                                     |         r3 = 2;
    0x000242fc b 0x242f0                                     |         
                                                             |     } while (1);
    0x00024300 mov r3, 3                                     |     r3 = 3;
    0x00024304 b 0x242f0                                     |     goto label_27;
    0x00024308 mov r3, 4                                     |     r3 = 4;
    0x0002430c b 0x242f0                                     |     goto label_27;
    0x00024310 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x00024314 mov r6, 0                                     |     r6 = 0;
    0x00024318 cmp r3, r6                                    |     
    0x0002431c str r6, [sp, 0x30]                            |     var_30h = r6;
                                                             |     if (r3 == r6) {
    0x00024320 beq 0x2378c                                   |         goto label_28;
                                                             |     }
    0x00024324 ldr r7, [sp, 8]                               |     r7 = var_8h;
    0x00024328 mov r8, 0xc                                   |     r8 = 0xc;
    0x0002432c mla r7, r8, r7, r4                            |     __asm ("mla r7, r8, r7, r4");
    0x00024330 ldr r3, [r7, 0x14]                            |     r3 = *((r7 + 0x14));
    0x00024334 ldr r2, [r3, 4]                               |     r2 = *((r3 + 4));
    0x00024338 cmp r2, 1                                     |     
                                                             |     if (r2 != 1) {
    0x0002433c ldreq r2, [r3, 0x10]                          |         r2 = *((r3 + 0x10));
                                                             |     }
                                                             |     if (r2 != 1) {
    0x00024340 streq r6, [r3, 0x10]                          |         *((r3 + 0x10)) = r6;
                                                             |     }
                                                             |     if (r2 == 1) {
    0x00024344 streq r2, [sp, 0x30]                          |         var_30h = r2;
                                                             |         goto label_71;
                                                             |     }
                                                             |     if (r2 == 1) {
                                                             | label_71:
    0x00024348 beq 0x2378c                                   |         goto label_28;
                                                             |     }
    0x0002434c cmp r2, 4                                     |     
                                                             |     if (r2 == 4) {
    0x00024350 bne 0x24370                                   |         
    0x00024354 bl 0x24e20                                    |         buffer_init ();
    0x00024358 ldr r3, [r7, 0x14]                            |         r3 = *((r7 + 0x14));
    0x0002435c ldr r2, [r3, 0x10]                            |         r2 = *((r3 + 0x10));
    0x00024360 asr r3, r2, 0x1f                              |         r3 = r2 >> 0x1f;
    0x00024364 str r0, [sp, 0x30]                            |         var_30h = r0;
    0x00024368 bl 0x25608                                    |         buffer_copy_int ();
    0x0002436c b 0x2378c                                     |         goto label_28;
                                                             |     }
    0x00024370 ldr r1, [fp]                                  |     r1 = *(fp);
    0x00024374 ldr r0, [pc, -0x314]                          |     r0 = "operand must be string";
    0x00024378 bl 0x17840                                    |     fputs ("operand must be string", r1);
    0x0002437c str r6, [r5, 4]                               |     *((r5 + 4)) = r6;
    0x00024380 b 0x2378c                                     |     goto label_28;
    0x00024384 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x00024388 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x0002438c beq 0x243b8                                   |         goto label_72;
                                                             |     }
    0x00024390 ldr r8, [sp, 8]                               |     r8 = var_8h;
    0x00024394 mov r1, r5                                    |     r1 = r5;
    0x00024398 mla r8, r2, r8, r4                            |     __asm ("mla r8, r2, r8, r4");
    0x0002439c ldr r0, [r5]                                  |     r0 = *(r5);
    0x000243a0 ldr r3, [r8, 0x14]                            |     r3 = *((r8 + 0x14));
    0x000243a4 ldr r2, [r3]                                  |     r2 = *(r3);
    0x000243a8 bl 0x21dc8                                    |     r0 = config_parse_file ();
                                                             | label_30:
    0x000243ac cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000243b0 movne r3, 0                                   |         r3 = 0;
                                                             |     }
    0x000243b4 strne r3, [r5, 4]                             |     *((r5 + 4)) = r3;
                                                             |     while (r3 == 0) {
                                                             | label_72:
    0x000243b8 ldr r7, [sp, 8]                               |         r7 = var_8h;
    0x000243bc mov r3, 0xc                                   |         r3 = 0xc;
    0x000243c0 mla r7, r3, r7, r4                            |         __asm ("mla r7, r3, r7, r4");
    0x000243c4 ldr r0, [r7, 0x14]                            |         r0 = *((r7 + 0x14));
    0x000243c8 bl 0x24ae0                                    |         buffer_free ();
    0x000243cc b 0x2322c                                     |         goto label_29;
    0x000243d0 ldr r3, [r5, 4]                               |         r3 = *((r5 + 4));
    0x000243d4 cmp r3, 0                                     |         
    0x000243d8 beq 0x243b8                                   |         
                                                             |     }
    0x000243dc ldr r8, [sp, 8]                               |     r8 = var_8h;
    0x000243e0 mov r1, r5                                    |     r1 = r5;
    0x000243e4 mla r8, r2, r8, r4                            |     __asm ("mla r8, r2, r8, r4");
    0x000243e8 ldr r0, [r5]                                  |     r0 = *(r5);
    0x000243ec ldr r3, [r8, 0x14]                            |     r3 = *((r8 + 0x14));
    0x000243f0 ldr r2, [r3]                                  |     r2 = *(r3);
    0x000243f4 bl 0x21f78                                    |     config_parse_cmd ();
    0x000243f8 b 0x243ac                                     |     goto label_30;
                                                             | label_70:
    0x000243fc cmp r1, 0x73                                  |     
                                                             |     if (r1 != 0x73) {
    0x00024400 bne 0x242d0                                   |         goto label_31;
                                                             |     }
    0x00024404 mov r0, r4                                    |     r0 = r4;
    0x00024408 bl 0x22b30                                    |     fcn_00022b30 (r0, r1);
    0x0002440c b 0x242d0                                     |     goto label_31;
                                                             | label_39:
    0x00024410 cmp r0, 0x72                                  |     
                                                             |     if (r0 != 0x72) {
    0x00024414 bne 0x244f4                                   |         goto label_73;
                                                             |     }
    0x00024418 ldr r1, [r4]                                  |     r1 = *(r4);
    0x0002441c mov r2, 0xc                                   |     r2 = 0xc;
    0x00024420 mla r3, r2, r1, r4                            |     __asm ("mla r3, r2, r1, r4");
    0x00024424 ldr r2, [sp, 0x20]                            |     r2 = var_20h;
    0x00024428 ldr r3, [r3, 0x10]                            |     r3 = *((r3 + 0x10));
    0x0002442c cmp r3, 0x1b                                  |     
                                                             |     if (r3 != 0x1b) {
    0x00024430 orreq r2, r2, 1                               |         r2 |= 1;
                                                             |     }
    0x00024434 cmp r2, 0                                     |     
                                                             |     if (r2 == 0) {
    0x00024438 beq 0x24470                                   |         goto label_74;
                                                             |     }
    0x0002443c ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x00024440 add r1, sp, 0x2c                              |     r1 += var_2ch;
    0x00024444 and r0, r3, 0xff                              |     r0 = r3 & 0xff;
    0x00024448 bl 0x22a78                                    |     fcn_00022a78 (r0, r1);
                                                             | label_33:
    0x0002444c mov r3, 0x33                                  |     r3 = 0x33;
    0x00024450 str r3, [sp, 0xc]                             |     var_ch = r3;
                                                             | label_32:
    0x00024454 mov r3, 3                                     |     r3 = 3;
    0x00024458 str r3, [r4, 4]                               |     *((r4 + 4)) = r3;
    0x0002445c mov r3, 1                                     |     r3 = 1;
    0x00024460 str r3, [sp, 0x20]                            |     var_20h = r3;
    0x00024464 b 0x242d0                                     |     goto label_31;
                                                             |     do {
    0x00024468 mov r0, r4                                    |         r0 = r4;
    0x0002446c bl 0x22ae0                                    |         fcn_00022ae0 (r0, r1);
                                                             | label_74:
    0x00024470 ldr r3, [r4]                                  |         r3 = *(r4);
    0x00024474 cmp r3, 0                                     |         
                                                             |         if (r3 < 0) {
    0x00024478 blt 0x244bc                                   |             goto label_75;
                                                             |         }
    0x0002447c mov r1, 0x1b                                  |         r1 = 0x1b;
    0x00024480 mov r0, r4                                    |         r0 = r4;
    0x00024484 bl 0x22998                                    |         r0 = fcn_00022998 (r0, r1);
    0x00024488 cmp r0, 0x45                                  |         
    0x0002448c mov r1, r0                                    |         r1 = r0;
    0x00024490 bgt 0x24468                                   |         
                                                             |     } while (r0 > 0x45);
    0x00024494 ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x00024498 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x0002449c beq 0x244bc                                   |         
    0x000244a0 add r3, sp, 0x38                              |         r3 += var_38h;
    0x000244a4 mov r2, 0                                     |         r2 = 0;
    0x000244a8 str r2, [r3, -4]!                             |         *((r3 -= 4)) = r2;
    0x000244ac mov r0, r4                                    |         r0 = r4;
    0x000244b0 mov r2, 0x1b                                  |         r2 = 0x1b;
    0x000244b4 bl 0x22b84                                    |         fcn_00022b84 (r0, r1);
    0x000244b8 b 0x24454                                     |         goto label_32;
                                                             |     }
                                                             | label_75:
    0x000244bc ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x000244c0 add r1, sp, 0x2c                              |     r1 += var_2ch;
    0x000244c4 and r0, r3, 0xff                              |     r0 = r3 & 0xff;
    0x000244c8 bl 0x22a78                                    |     fcn_00022a78 (r0, r1);
    0x000244cc ldr r5, [r4, 8]                               |     r5 = *((r4 + 8));
                                                             | label_34:
    0x000244d0 ldr r3, [r4]                                  |     r3 = *(r4);
    0x000244d4 cmp r3, 0                                     |     
                                                             |     if (r3 >= 0) {
    0x000244d8 movlt r3, 0                                   |         r3 = 0;
                                                             |     }
                                                             |     if (r3 >= 0) {
    0x000244dc strlt r3, [r5, 4]                             |         *((r5 + 4)) = r3;
                                                             |     }
                                                             |     if (r3 < 0) {
    0x000244e0 strlt r5, [r4, 8]                             |         *((r4 + 8)) = r5;
                                                             |         goto label_76;
                                                             |     }
                                                             |     if (r3 < 0) {
                                                             | label_76:
    0x000244e4 blt 0x2444c                                   |         goto label_33;
                                                             |     }
    0x000244e8 mov r0, r4                                    |     r0 = r4;
    0x000244ec bl 0x22ae0                                    |     fcn_00022ae0 (r0, r1);
    0x000244f0 b 0x244d0                                     |     goto label_34;
                                                             | label_73:
    0x000244f4 mov r0, r4                                    |     r0 = r4;
    0x000244f8 bl 0x22b30                                    |     fcn_00022b30 (r0, r1);
    0x000244fc b 0x23038                                     |     goto label_24;
                                                             | label_38:
    0x00024500 ldr r3, [sp, 0x1c]                            |     r3 = var_1ch;
    0x00024504 str r3, [sp, 0xc]                             |     var_ch = r3;
    0x00024508 b 0x242dc                                     |     goto label_35;
                                                             | label_67:
    0x0002450c ldr r3, [sp, 0x18]                            |     r3 = var_18h;
    0x00024510 cmp r3, 0x80                                  |     
                                                             |     if (r3 > 0x80) {
    0x00024514 bhi 0x23f94                                   |         goto label_36;
                                                             |     }
    0x00024518 mov r0, sb                                    |     r0 = sb;
    0x0002451c sub r1, sl, r1                                |     r1 = sl - r1;
    0x00024520 bl 0x25088                                    |     buffer_string_set_length ();
    0x00024524 mov r0, sb                                    |     r0 = sb;
    0x00024528 bl 0x17bac                                    |     fcn_00017bac (r0);
    0x0002452c b 0x23f68                                     |     goto label_37;
                                                             | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/lighttpd @ 0x22d84 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) sym.configparser_merge_data ()               | void configparser_merge_data (int32_t arg1, int32_t arg2) {
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
    0x00022d84 ldr r3, [r0, 4]                           |     r3 = *((r0 + 4));
    0x00022d88 ldr r2, [r1, 4]                           |     r2 = *((r1 + 4));
    0x00022d8c push {r4, r5, r6, r7, r8, sb, sl, lr}     |     
    0x00022d90 cmp r3, r2                                |     
    0x00022d94 mov r4, r0                                |     r4 = r0;
    0x00022d98 mov r5, r1                                |     r5 = r1;
                                                         |     if (r3 == r2) {
    0x00022d9c beq 0x22e38                               |         goto label_4;
                                                         |     }
    0x00022da0 cmp r3, 1                                 |     
                                                         |     if (r3 != 1) {
    0x00022da4 bne 0x22dc8                               |         goto label_5;
                                                         |     }
    0x00022da8 cmp r2, 4                                 |     
                                                         |     if (r2 != 4) {
    0x00022dac bne 0x22e10                               |         goto label_6;
                                                         |     }
    0x00022db0 ldr r2, [r1, 0x10]                        |     r2 = *((r1 + 0x10));
    0x00022db4 ldr r0, [r0, 0x10]                        |     r0 = *((r0 + 0x10));
    0x00022db8 asr r3, r2, 0x1f                          |     r3 = r2 >> 0x1f;
    0x00022dbc bl 0x2558c                                |     buffer_append_int ();
                                                         |     do {
                                                         | label_0:
    0x00022dc0 mov r0, r4                                |         r0 = r4;
    0x00022dc4 pop {r4, r5, r6, r7, r8, sb, sl, pc}      |         
                                                         | label_5:
    0x00022dc8 cmp r3, 4                                 |         
    0x00022dcc cmpeq r2, 1                               |         __asm ("cmpeq r2, 1");
                                                         |         if (r3 != 4) {
    0x00022dd0 bne 0x22e10                               |             goto label_6;
                                                         |         }
    0x00022dd4 bl 0x34290                                |         data_string_init ();
    0x00022dd8 ldr r2, [r4, 0x10]                        |         r2 = *((r4 + 0x10));
    0x00022ddc asr r3, r2, 0x1f                          |         r3 = r2 >> 0x1f;
    0x00022de0 mov r6, r0                                |         r6 = r0;
    0x00022de4 ldr r0, [r0, 0x10]                        |         r0 = *((r0 + 0x10));
    0x00022de8 bl 0x2558c                                |         buffer_append_int ();
    0x00022dec ldr r1, [r5, 0x10]                        |         r1 = *((r5 + 0x10));
    0x00022df0 ldr r0, [r6, 0x10]                        |         r0 = *((r6 + 0x10));
    0x00022df4 bl 0x22a50                                |         fcn_00022a50 (r0, r1);
    0x00022df8 ldr r3, [r4, 0xc]                         |         r3 = *((r4 + 0xc));
    0x00022dfc mov r0, r4                                |         r0 = r4;
    0x00022e00 ldr r3, [r3, 8]                           |         r3 = *((r3 + 8));
    0x00022e04 blx r3                                    |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00022e08 mov r4, r6                                |         r4 = r6;
    0x00022e0c b 0x22dc0                                 |         
                                                         |     } while (1);
                                                         | label_6:
    0x00022e10 ldr r3, [pc, 0x118]                       |     r3 = *(0x22f2c);
    0x00022e14 ldr r0, [pc, 0x118]                       |     r0 = stderr;
    0x00022e18 ldr r1, [r3]                              |     r1 = *(0x22f2c);
    0x00022e1c bl 0x17840                                |     fputs (r0, r1);
                                                         | label_3:
    0x00022e20 ldr r3, [r4, 0xc]                         |     r3 = *((r4 + 0xc));
    0x00022e24 mov r0, r4                                |     r0 = r4;
    0x00022e28 ldr r3, [r3, 8]                           |     r3 = *((r3 + 8));
    0x00022e2c blx r3                                    |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00022e30 mov r4, 0                                 |     r4 = 0;
    0x00022e34 b 0x22dc0                                 |     goto label_0;
                                                         | label_4:
    0x00022e38 cmp r3, 3                                 |     
                                                         |     if (r3 != 3) {
    0x00022e3c beq 0x22e74                               |         
    0x00022e40 cmp r3, 4                                 |         
                                                         |         if (r3 != 4) {
    0x00022e44 beq 0x22e60                               |             
    0x00022e48 cmp r3, 1                                 |             
                                                         |             if (r3 != 1) {
    0x00022e4c bne 0x22f20                               |                 goto label_7;
                                                         |             }
    0x00022e50 ldr r1, [r1, 0x10]                        |             r1 = *((r1 + 0x10));
    0x00022e54 ldr r0, [r0, 0x10]                        |             r0 = *((r0 + 0x10));
    0x00022e58 bl 0x22a50                                |             fcn_00022a50 (r0, r1);
    0x00022e5c b 0x22dc0                                 |             goto label_0;
                                                         |         }
    0x00022e60 ldr r3, [r0, 0x10]                        |         r3 = *((r0 + 0x10));
    0x00022e64 ldr r2, [r1, 0x10]                        |         r2 = *((r1 + 0x10));
    0x00022e68 add r3, r3, r2                            |         r3 += r2;
    0x00022e6c str r3, [r0, 0x10]                        |         *((r0 + 0x10)) = r3;
    0x00022e70 b 0x22dc0                                 |         goto label_0;
                                                         |     }
    0x00022e74 ldr r8, [r0, 0x10]                        |     r8 = *((r0 + 0x10));
    0x00022e78 ldr r7, [r1, 0x10]                        |     r7 = *((r1 + 0x10));
    0x00022e7c mov r6, 0                                 |     r6 = 0;
                                                         | label_1:
    0x00022e80 ldr r3, [r7, 8]                           |     r3 = *((r7 + 8));
    0x00022e84 cmp r3, r6                                |     
                                                         |     if (r3 < r6) {
    0x00022e88 bls 0x22dc0                               |         goto label_0;
                                                         |     }
    0x00022e8c ldr r3, [r7]                              |     r3 = *(r7);
    0x00022e90 ldr r5, [r3, r6, lsl 2]                   |     offset_0 = r6 << 2;
                                                         |     r5 = *((r3 + offset_0));
    0x00022e94 cmp r5, 0                                 |     
                                                         |     if (r5 == 0) {
    0x00022e98 beq 0x22ec4                               |         goto label_8;
                                                         |     }
    0x00022e9c ldr sb, [r5, 8]                           |     sb = *((r5 + 8));
    0x00022ea0 cmp sb, 0                                 |     
    0x00022ea4 beq 0x22ecc                               |     
                                                         |     while (r3 == 0) {
                                                         | label_2:
    0x00022ea8 ldr r3, [r5, 0xc]                         |         r3 = *((r5 + 0xc));
    0x00022eac mov r0, r5                                |         r0 = r5;
    0x00022eb0 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x00022eb4 blx r3                                    |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00022eb8 mov r1, r0                                |         r1 = r0;
    0x00022ebc mov r0, r8                                |         r0 = r8;
    0x00022ec0 bl 0x33688                                |         array_insert_unique ();
                                                         | label_8:
    0x00022ec4 add r6, r6, 1                             |         r6++;
    0x00022ec8 b 0x22e80                                 |         goto label_1;
    0x00022ecc ldr r3, [r5]                              |         r3 = *(r5);
    0x00022ed0 cmp r3, 0                                 |         
    0x00022ed4 beq 0x22ea8                               |         
                                                         |     }
    0x00022ed8 ldr r2, [r3, 4]                           |     r2 = *((r3 + 4));
    0x00022edc cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00022ee0 beq 0x22ea8                               |         goto label_2;
                                                         |     }
    0x00022ee4 mov r0, r3                                |     r0 = r3;
    0x00022ee8 bl 0x22980                                |     r0 = fcn_00022980 (r0);
    0x00022eec mov r2, r0                                |     r2 = r0;
    0x00022ef0 ldr r1, [r3]                              |     r1 = *(r3);
    0x00022ef4 mov r0, r8                                |     r0 = r8;
    0x00022ef8 bl 0x334d0                                |     r0 = array_get_element_klen ();
    0x00022efc cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00022f00 beq 0x22ea8                               |         goto label_2;
                                                         |     }
    0x00022f04 ldr r3, [r5]                              |     r3 = *(r5);
    0x00022f08 ldr r1, [pc, 0x28]                        |     r1 = "data_type_mismatch__cannot_merge";
    0x00022f0c ldr r2, [r3]                              |     r2 = *(r3);
    0x00022f10 ldr r3, [pc, 0x18]                        |     r3 = *(0x22f2c);
    0x00022f14 ldr r0, [r3]                              |     r0 = *(0x22f2c);
    0x00022f18 bl 0x178e8                                |     fprintf (r0, "data_type_mismatch__cannot_merge", r2, r3)
    0x00022f1c b 0x22e20                                 |     goto label_3;
                                                         | label_7:
    0x00022f20 ldr r2, [pc, 0x14]                        |     r2 = "Duplicate_array_key__s";
    0x00022f24 mov r1, 0x71                              |     r1 = 0x71;
    0x00022f28 ldr r0, [pc, 0x10]                        |     r0 = "assertion_failed:_0";
    0x00022f2c bl 0x17c50                                |     log_failed_assert ();
                                                         |     if (r0 != 0) {
    0x00022f30 andeq r8, r5, r8, asr 5                   |         r8 = r5 & (r8 >> 5);
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00022f34 andeq r1, r4, r0, lsr 17                  |         r1 = r4 & (r0 >> 17);
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00022f38 andeq r1, r4, r2, asr 17                  |         r1 = r4 & (r2 >> 17);
                                                         |     }
    0x00022f3c ldrdeq r1, r2, [r4], -ip                  |     __asm ("ldrdeq r1, r2, [r4], -ip");
                                                         |     /* Beware that this jump is a conditional jump.
                                                         |      * r2dec transformed it as a return, due being the
                                                         |      * last instruction. Please, check 'pdda' output
                                                         |      * for more hints. */
    0x00022f40 andeq r1, r4, r8, asr r8                  |     return r1 = r4 & (r8 >> r8);
                                                         | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/lighttpd @ 0x360b8 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) sym.data_config_pcre_compile ()      | void data_config_pcre_compile (uint32_t arg1) {
                                                 |     int32_t var_0h;
                                                 |     int32_t var_ch;
                                                 |     int32_t var_10h;
                                                 |     int32_t var_14h;
                                                 |     int32_t var_18h;
                                                 |     r0 = arg1;
    0x000360b8 push {r4, r5, r6, lr}             |     
    0x000360bc mov r5, r0                        |     r5 = r0;
    0x000360c0 ldr r0, [r0, 0x48]                |     r0 = *((r0 + 0x48));
    0x000360c4 sub sp, sp, 0x18                  |     
    0x000360c8 cmp r0, 0                         |     
                                                 |     if (r0 != 0) {
    0x000360cc beq 0x360dc                       |         
    0x000360d0 ldr r3, [pc, 0x130]               |         
    0x000360d4 ldr r3, [r3]                      |         r3 = *(0x36204);
    0x000360d8 blx r3                            |         uint32_t (*r3)(uint32_t) (r3);
                                                 |     }
    0x000360dc ldr r0, [r5, 0x4c]                |     r0 = *((r5 + 0x4c));
    0x000360e0 cmp r0, 0                         |     
                                                 |     if (r0 != 0) {
    0x000360e4 beq 0x360f4                       |         
    0x000360e8 ldr r3, [pc, 0x118]               |         
    0x000360ec ldr r3, [r3]                      |         r3 = *(0x36204);
    0x000360f0 blx r3                            |         uint32_t (*r3)(uint32_t) (r3);
                                                 |     }
    0x000360f4 ldr r0, [r5, 0x44]                |     r0 = *((r5 + 0x44));
    0x000360f8 mov r6, 0                         |     r6 = 0;
    0x000360fc str r6, [sp]                      |     *(sp) = r6;
    0x00036100 add r3, sp, 0x10                  |     r3 += var_10h;
    0x00036104 add r2, sp, 0xc                   |     r2 += var_ch;
    0x00036108 mov r1, r6                        |     r1 = r6;
    0x0003610c ldr r0, [r0]                      |     r0 = *(r0);
    0x00036110 bl 0x17834                        |     r0 = pcre_compile ();
    0x00036114 cmp r0, r6                        |     
    0x00036118 mov r4, r0                        |     r4 = r0;
    0x0003611c str r0, [r5, 0x48]                |     *((r5 + 0x48)) = r0;
                                                 |     if (r0 != r6) {
    0x00036120 bne 0x36154                       |         goto label_1;
                                                 |     }
    0x00036124 ldr r3, [sp, 0x10]                |     r3 = var_10h;
    0x00036128 ldr r2, [r5, 0x44]                |     r2 = *((r5 + 0x44));
    0x0003612c ldr r0, [pc, 0xd8]                |     
    0x00036130 str r3, [sp]                      |     *(sp) = r3;
    0x00036134 ldr r1, [pc, 0xd4]                |     r1 = stderr;
    0x00036138 ldr r3, [sp, 0xc]                 |     r3 = var_ch;
    0x0003613c ldr r2, [r2]                      |     r2 = *(r2);
    0x00036140 ldr r0, [r0]                      |     r0 = _edata;
    0x00036144 bl 0x178e8                        |     fprintf (r0, r1, r2, r3)
                                                 |     do {
                                                 | label_0:
    0x00036148 mov r0, r4                        |         r0 = r4;
    0x0003614c add sp, sp, 0x18                  |         
    0x00036150 pop {r4, r5, r6, pc}              |         
                                                 | label_1:
    0x00036154 add r2, sp, 0xc                   |         r2 += var_ch;
    0x00036158 mov r1, r6                        |         r1 = r6;
    0x0003615c bl 0x17b40                        |         r0 = pcre_study ();
    0x00036160 cmp r0, 0                         |         
    0x00036164 mov r4, r0                        |         r4 = r0;
    0x00036168 str r0, [r5, 0x4c]                |         *((r5 + 0x4c)) = r0;
                                                 |         if (r0 != 0) {
    0x0003616c bne 0x36198                       |             goto label_2;
                                                 |         }
    0x00036170 ldr r3, [sp, 0xc]                 |         r3 = var_ch;
    0x00036174 cmp r3, 0                         |         
                                                 |         if (r3 == 0) {
    0x00036178 beq 0x36198                       |             goto label_2;
                                                 |         }
    0x0003617c ldr r2, [r5, 0x44]                |         r2 = *((r5 + 0x44));
    0x00036180 ldr r0, [pc, 0x84]                |         
    0x00036184 ldr r2, [r2]                      |         r2 = *(r2);
    0x00036188 ldr r1, [pc, 0x84]                |         r1 = "parsing_regex_failed:__s_____s_at_offset__d";
    0x0003618c ldr r0, [r0]                      |         r0 = _edata;
    0x00036190 bl 0x178e8                        |         fprintf (r0, "parsing_regex_failed:__s_____s_at_offset__d", r2)
    0x00036194 b 0x36148                         |         
                                                 |     } while (1);
                                                 | label_2:
    0x00036198 mov r1, r4                        |     r1 = r4;
    0x0003619c add r3, sp, 0x14                  |     r3 += var_14h;
    0x000361a0 mov r2, 2                         |     r2 = 2;
    0x000361a4 ldr r0, [r5, 0x48]                |     r0 = *((r5 + 0x48));
    0x000361a8 bl 0x177b0                        |     r0 = pcre_fullinfo ();
    0x000361ac cmp r0, 0                         |     
    0x000361b0 mov r4, r0                        |     r4 = r0;
    0x000361b4 str r0, [sp, 0x10]                |     var_10h = r0;
                                                 |     if (r0 != 0) {
    0x000361b8 beq 0x361dc                       |         
    0x000361bc ldr r3, [r5, 0x44]                |         r3 = *((r5 + 0x44));
    0x000361c0 ldr r1, [pc, 0x50]                |         r1 = "studying regex failed: %s -> %s\n";
    0x000361c4 ldr r2, [r3]                      |         r2 = *(r3);
    0x000361c8 ldr r3, [pc, 0x3c]                |         r3 = _edata;
    0x000361cc mov r4, 0                         |         r4 = 0;
    0x000361d0 ldr r0, [r3]                      |         r0 = _edata;
    0x000361d4 bl 0x178e8                        |         fprintf (r0, "studying regex failed: %s -> %s\n", r2, r3, r4)
    0x000361d8 b 0x36148                         |         goto label_0;
                                                 |     }
    0x000361dc ldr r3, [sp, 0x14]                |     r3 = var_14h;
    0x000361e0 cmp r3, 9                         |     
                                                 |     if (r3 <= 9) {
    0x000361e4 movle r4, 1                       |         r4 = 1;
                                                 |         goto label_3;
                                                 |     }
                                                 |     if (r3 <= 9) {
                                                 | label_3:
    0x000361e8 ble 0x36148                       |         goto label_0;
                                                 |     }
    0x000361ec ldr r3, [r5, 0x44]                |     r3 = *((r5 + 0x44));
    0x000361f0 ldr r1, [pc, 0x24]                |     r1 = "getting_capture_count_for_regex_failed:__s";
    0x000361f4 ldr r2, [r3]                      |     r2 = *(r3);
    0x000361f8 ldr r3, [pc, 0xc]                 |     r3 = _edata;
    0x000361fc ldr r0, [r3]                      |     r0 = _edata;
    0x00036200 bl 0x178e8                        |     fprintf (r0, "getting_capture_count_for_regex_failed:__s", r2, r3)
    0x00036204 b 0x36148                         |     goto label_0;
                                                 | }

[*] Function fprintf used 19 times lighttpd