/*
 * Copyright 2013 The Emscripten Authors.  All rights reserved.
 * Emscripten is available under two separate licenses, the MIT license and the
 * University of Illinois/NCSA Open Source License.  Both these licenses can be
 * found in the LICENSE file.
 */

/*
 * This is a RANDOMLY GENERATED PROGRAM.
 *
 * Generator: csmith 2.2.0
 * Git version: bf42ffd
 * Options:   --no-volatiles --no-math64 --no-packed-struct
 * Seed:      695215668
 */

#include "csmith.h"


static long __undefined;

/* --- Struct/Union Declarations --- */
/* --- GLOBAL VARIABLES --- */
static int8_t g_2 = 9L;
static uint8_t g_31[1] = {0x5BL};
static int32_t g_36 = 0L;
static int32_t *g_37 = &g_36;
static int32_t g_59[9] = {0x5D8284A8L,0xF1AC28C4L,0x5D8284A8L,0xF1AC28C4L,0x5D8284A8L,0xF1AC28C4L,0x5D8284A8L,0xF1AC28C4L,0x5D8284A8L};
static int32_t g_60[2][5][4] = {{{0x92628F0FL,0x92628F0FL,0x92628F0FL,0x92628F0FL},{0x92628F0FL,0x92628F0FL,0x92628F0FL,0x92628F0FL},{0x92628F0FL,0x92628F0FL,0x92628F0FL,0x92628F0FL},{0x92628F0FL,0x92628F0FL,0x92628F0FL,0x92628F0FL},{0x92628F0FL,0x92628F0FL,0x92628F0FL,0x92628F0FL}},{{0x92628F0FL,0x92628F0FL,0x92628F0FL,0x92628F0FL},{0x92628F0FL,0x92628F0FL,0x92628F0FL,0x92628F0FL},{0x92628F0FL,0x92628F0FL,0x92628F0FL,0x92628F0FL},{0x92628F0FL,0x92628F0FL,0x92628F0FL,0x92628F0FL},{0x92628F0FL,0x92628F0FL,0x92628F0FL,0x92628F0FL}}};
static int32_t g_61 = 0xCBABA27FL;
static uint16_t g_69[9] = {0x26B3L,0x26B3L,0x26B3L,0x26B3L,0x26B3L,0x26B3L,0x26B3L,0x26B3L,0x26B3L};
static int16_t g_124 = 1L;
static int8_t g_126 = 0x2EL;
static uint8_t g_131 = 246UL;
static uint32_t g_138[4] = {0x7CE49567L,0x7CE49567L,0x7CE49567L,0x7CE49567L};
static uint16_t g_145 = 0xDE95L;
static int32_t * const g_146 = &g_60[0][4][3];
static int32_t g_358 = (-1L);
static int32_t g_360 = (-1L);
static uint32_t g_408[6][10] = {{0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL},{0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL},{0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL},{0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL},{0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL},{0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL,0x1EE3AD7CL}};
static int8_t g_415 = 0x70L;
static uint32_t *g_434 = &g_138[3];
static int8_t **g_435 = (void*)0;
static uint32_t g_436 = 0x61B69271L;
static int32_t **g_455 = (void*)0;
static int32_t ***g_454 = &g_455;
static int8_t g_510 = 0xF4L;
static int32_t *g_514 = &g_59[1];
static uint8_t *g_659 = (void*)0;
static uint8_t **g_658[5] = {&g_659,&g_659,&g_659,&g_659,&g_659};
static uint16_t *g_713 = &g_69[6];
static uint16_t **g_712 = &g_713;
static int16_t g_775 = 0x1E63L;
static const uint16_t g_961 = 0UL;
static uint16_t ** const *g_993 = &g_712;
static uint16_t ** const * const *g_992 = &g_993;
static int32_t g_1096[1] = {0x8DF1AA83L};
static int32_t g_1202 = 0x400DAD15L;
static uint16_t g_1250 = 65535UL;
static uint32_t g_1312 = 0x3F36EED0L;
static uint16_t ***g_1324 = &g_712;
static uint32_t g_1484 = 18446744073709551612UL;
static uint32_t *g_1483 = &g_1484;
static uint16_t g_1509 = 0x40B6L;
static int32_t *g_1591[6][7] = {{&g_360,&g_360,&g_360,&g_360,&g_360,&g_360,&g_360},{&g_360,&g_360,&g_360,&g_360,&g_360,&g_360,&g_360},{&g_360,&g_360,&g_360,&g_360,&g_360,&g_360,&g_360},{&g_360,&g_360,&g_360,&g_360,&g_360,&g_360,&g_360},{&g_360,&g_360,&g_360,&g_360,&g_360,&g_360,&g_360},{&g_360,&g_360,&g_360,&g_360,&g_360,&g_360,&g_360}};
static int32_t **g_1590 = &g_1591[5][6];
static uint16_t g_1758[6][9][3] = {{{0UL,0xC542L,0xD8C5L},{0xC7C1L,0xC7C1L,7UL},{0xAF46L,9UL,0UL},{5UL,1UL,0x6937L},{3UL,0xCD4DL,1UL},{0x6937L,5UL,0x6937L},{0x0379L,0x9AA8L,0UL},{0UL,65535UL,7UL},{0UL,0x0FA7L,0xD8C5L}},{{0x294EL,0UL,0UL},{0UL,65526UL,3UL},{0UL,0x4878L,0xC7C1L},{0x0379L,0x8A66L,0UL},{0x6937L,7UL,65535UL},{3UL,0x8A66L,1UL},{5UL,0x4878L,65532UL},{0xAF46L,65526UL,0UL},{0xC7C1L,0UL,0x4878L}},{{0UL,0x0FA7L,0UL},{65530UL,65535UL,65532UL},{65532UL,0x9AA8L,1UL},{0UL,5UL,65535UL},{3UL,0x2348L,7UL},{0x294EL,65532UL,7UL},{0UL,0xCD4DL,1UL},{65535UL,7UL,0x294EL},{1UL,0x0FA7L,65532UL}},{{7UL,7UL,5UL},{0x0379L,0xCD4DL,0xD8C5L},{65530UL,65532UL,0x4878L},{1UL,0x2348L,0UL},{0x4878L,65530UL,0x4878L},{65535UL,65526UL,0xD8C5L},{0x6937L,1UL,5UL},{7UL,0x8290L,65532UL},{0xC7C1L,0x294EL,0x294EL}},{{7UL,0x7770L,1UL},{0x6937L,0UL,7UL},{65535UL,0xC542L,7UL},{0x4878L,5UL,0UL},{1UL,0xC542L,0xAF46L},{65530UL,0UL,65535UL},{0x0379L,0x7770L,1UL},{7UL,0x294EL,0UL},{1UL,0x8290L,1UL}},{{65535UL,1UL,65535UL},{0UL,65526UL,0xAF46L},{0x294EL,65530UL,0UL},{3UL,0x2348L,7UL},{0x294EL,65532UL,7UL},{0UL,0xCD4DL,1UL},{65535UL,7UL,0x294EL},{1UL,0x0FA7L,65532UL},{7UL,7UL,5UL}}};
static int16_t g_1847 = 0x0129L;
static int16_t *g_1846 = &g_1847;
static const int32_t g_1959 = (-6L);
static int16_t **g_2019 = (void*)0;
static uint16_t g_2057[7][8] = {{0x80D1L,65533UL,0xF5B1L,1UL,0xF5B1L,65533UL,0x80D1L,0x80D1L},{65533UL,1UL,0x152EL,0x152EL,1UL,65533UL,0x3260L,65533UL},{1UL,65533UL,0x3260L,65533UL,1UL,0x152EL,0x152EL,1UL},{65533UL,0x80D1L,0x80D1L,65533UL,0xF5B1L,1UL,0xF5B1L,65533UL},{0x80D1L,0xF5B1L,0x80D1L,0x152EL,0x3260L,0x3260L,0x152EL,0x80D1L},{0xF5B1L,0xF5B1L,0x3260L,1UL,0UL,1UL,0x3260L,0xF5B1L},{0xF5B1L,0x80D1L,0x152EL,0x3260L,0x3260L,0x152EL,0x80D1L,0xF5B1L}};
static int32_t **** const *g_2075 = (void*)0;
static int32_t ** const **g_2127 = (void*)0;
static int16_t g_2156 = 0xBBD0L;
static uint8_t ***g_2219 = (void*)0;
static int16_t g_2225[10] = {5L,5L,5L,5L,5L,5L,5L,5L,5L,5L};
static int32_t g_2234 = (-1L);
static int32_t g_2236 = 0xBA7E2085L;
static int8_t g_2239 = 0xEBL;
static int8_t *g_2246 = &g_510;
static uint8_t g_2387[3][3] = {{255UL,249UL,255UL},{255UL,255UL,255UL},{255UL,249UL,255UL}};
static const int16_t g_2451 = 0x2C58L;
static uint8_t ***** const g_2561 = (void*)0;
static const int32_t *g_2575 = &g_36;
static int8_t ** const ** const g_2675 = (void*)0;
static uint8_t * const ***g_2799 = (void*)0;
static uint32_t g_2907 = 0x8E6C6828L;
static const uint32_t g_3051 = 0UL;
static int8_t ***** const g_3152 = (void*)0;
static int8_t ***** const *g_3151 = &g_3152;
static int8_t g_3207[10] = {0xB9L,(-7L),0xB9L,0xB9L,(-7L),0xB9L,0xB9L,(-7L),0xB9L,0xB9L};
static uint32_t g_3271 = 0UL;
static uint32_t g_3299 = 0x6396F30FL;
static int32_t ****g_3325[2] = {&g_454,&g_454};
static uint8_t g_3397 = 0x67L;
static uint8_t g_3398 = 1UL;


/* --- FORWARD DECLARATIONS --- */
static uint32_t  func_1(void);
static const int32_t  func_3(const uint32_t  p_4, int32_t  p_5, const int16_t  p_6);
static uint32_t  func_7(int8_t  p_8, int16_t  p_9, int32_t  p_10, int16_t  p_11, int32_t  p_12);
static int32_t  func_13(int32_t  p_14, int32_t  p_15, int16_t  p_16, uint16_t  p_17);
static int32_t  func_19(int32_t  p_20, uint32_t  p_21, const int32_t  p_22, int32_t  p_23, int32_t  p_24);
static int32_t * const  func_32(int32_t * p_33);
static uint8_t  func_41(int32_t ** p_42, int32_t * p_43);
static int32_t ** func_44(const int16_t  p_45, uint16_t  p_46, uint16_t  p_47, int8_t  p_48);
static uint32_t  func_49(uint16_t  p_50, int32_t ** const  p_51, int32_t  p_52, int8_t  p_53, uint8_t  p_54);
static uint32_t  func_57(int16_t  p_58);


/* --- FUNCTIONS --- */
/* ------------------------------------------ */
/* 
 * reads : g_2 g_37 g_145 g_1250 g_69 g_713 g_434 g_2387 g_1846 g_1847 g_993 g_712 g_1590 g_1591 g_61 g_138 g_1324 g_992 g_1758 g_2246 g_510 g_2675 g_146 g_514 g_59 g_454 g_455 g_435 g_36 g_60 g_2236 g_1509 g_3051 g_408 g_131 g_436 g_2225 g_360 g_2575 g_3151 g_124 g_3207 g_1483 g_1484 g_2239 g_3271 g_126 g_3299 g_3325 g_3397 g_3398
 * writes: g_2234 g_36 g_145 g_1250 g_138 g_69 g_1591 g_61 g_131 g_1847 g_1758 g_2225 g_31 g_60 g_59 g_2236 g_1509 g_436 g_2387 g_713 g_408 g_37 g_124 g_510 g_1312 g_2239 g_455 g_126 g_3299 g_1484 g_658 g_3398
 */
static uint32_t  func_1(void)
{ /* block id: 0 */
    int32_t l_26 = 0xF4039EE4L;
    int32_t l_3026[7][3] = {{0x1A749151L,0x425EA4C2L,0x425EA4C2L},{(-1L),0x425EA4C2L,0x97D45EBDL},{0xE085E4B3L,0x425EA4C2L,(-1L)},{0x7AAD61BDL,0x7AAD61BDL,(-1L)},{0x425EA4C2L,0x97D45EBDL,(-3L)},{0xE085E4B3L,0x7AAD61BDL,0xE085E4B3L},{0xE085E4B3L,0x425EA4C2L,0x7AAD61BDL}};
    int8_t l_3266[10][5][2] = {{{0x10L,0x85L},{0x85L,0x10L},{0x85L,0x85L},{0x10L,0x85L},{0x85L,0x10L}},{{0x85L,0x85L},{0x10L,0x85L},{0x85L,0x10L},{0x85L,0x85L},{0x10L,0x85L}},{{0x85L,0x10L},{0x85L,0x85L},{0x10L,0x85L},{0x85L,0x10L},{0x85L,0x85L}},{{0x10L,0x85L},{0x85L,0x10L},{0x85L,0x85L},{0x10L,0x85L},{0x85L,0x10L}},{{0x85L,0x85L},{0x10L,0x85L},{0x85L,0x10L},{0x85L,0x85L},{0x10L,0x85L}},{{0x85L,0x10L},{0x85L,0x85L},{0x10L,0x85L},{0x85L,0x10L},{0x85L,0x85L}},{{0x10L,0x85L},{0x85L,0x10L},{0x85L,0x85L},{0x10L,0x85L},{0x85L,0x10L}},{{0x85L,0x85L},{0x10L,0x85L},{0x85L,0x10L},{0x85L,0x85L},{0x10L,0x85L}},{{0x85L,0x10L},{0x85L,0x85L},{0x10L,0x85L},{0x85L,0x10L},{0x85L,0x85L}},{{0x10L,0x85L},{0x85L,0x10L},{0x85L,0x85L},{0x10L,0x85L},{0x85L,0x10L}}};
    int32_t * const *l_3293 = &g_514;
    int32_t * const **l_3292 = &l_3293;
    int32_t * const ***l_3291 = &l_3292;
    uint8_t *l_3327 = &g_31[0];
    uint16_t l_3340 = 0x2D69L;
    uint16_t l_3380 = 0x6577L;
    int8_t **l_3395[6];
    int i, j, k;
    for (i = 0; i < 6; i++)
        l_3395[i] = &g_2246;
    if (g_2)
    { /* block id: 1 */
        uint8_t l_18 = 0x0EL;
        int32_t l_25 = (-5L);
        l_3026[0][0] = func_3(func_7(g_2, g_2, (l_3026[1][2] |= (0x6F7FBF21L > func_13(l_18, func_19(((l_25 = (((l_18 <= g_2) && (0x0A9B27FAL && (l_18 > 0xC5A3D7F1L))) < 0x2530A9BCL)) == g_2), l_26, l_18, g_2, g_2), l_26, l_26))), l_18, l_18), l_18, l_18);
    }
    else
    { /* block id: 1616 */
        uint32_t l_3127 = 8UL;
        int32_t l_3138 = 0x0C4C8D53L;
        int32_t l_3153 = 0x33A3E34BL;
        int32_t **l_3155 = &g_37;
        const int16_t l_3197 = 0xABAEL;
        uint8_t l_3232 = 0xCDL;
        const uint8_t *l_3242 = &g_2387[2][1];
        const uint8_t * const *l_3241 = &l_3242;
        int32_t * const l_3286 = &g_36;
        uint32_t l_3302 = 6UL;
        for (g_145 = (-20); (g_145 <= 3); g_145++)
        { /* block id: 1619 */
            int16_t l_3147[9] = {0L,0L,0L,0L,0L,0L,0L,0L,0L};
            int i;
            (*g_146) = (l_3127 , 1L);
            if ((*g_2575))
                continue;
            for (g_131 = (-12); (g_131 <= 1); g_131 = safe_add_func_uint16_t_u_u(g_131, 1))
            { /* block id: 1624 */
                uint32_t *l_3148 = &g_408[2][6];
                int16_t l_3154 = 0x527AL;
                (*g_514) ^= ((*g_146) = (safe_mul_func_uint16_t_u_u((safe_rshift_func_int16_t_s_s(0xD70CL, (((*g_434) , (--(*g_713))) & (safe_sub_func_uint16_t_u_u(((l_3138 &= (*g_1846)) & 0xAD6EL), (l_3127 != (((((safe_sub_func_uint8_t_u_u((0x27E1980DL < (((safe_mod_func_int16_t_s_s((l_3153 ^= (safe_add_func_int8_t_s_s((safe_mod_func_uint32_t_u_u((l_3147[5] | (-5L)), ((*l_3148)++))), (((((((void*)0 == g_3151) , 2L) , l_3147[5]) < (*g_1846)) >= l_3147[5]) | 0x77L)))), l_3154)) > l_3127) == 0L)), l_3154)) ^ (*g_434)) , l_3026[1][2]) >= l_3154) , l_3154))))))), (*g_1846))));
            }
        }
        (*l_3155) = &l_3153;
        if ((+0xFF1AF652L))
        { /* block id: 1634 */
            int32_t *l_3156[5];
            uint8_t ***l_3173 = &g_658[2];
            int8_t **l_3181 = &g_2246;
            const int16_t l_3183 = (-1L);
            int32_t l_3243 = 5L;
            uint32_t l_3267 = 4294967288UL;
            int i;
            for (i = 0; i < 5; i++)
                l_3156[i] = &g_36;
            (*l_3155) = &l_3026[0][0];
            for (g_124 = 0; (g_124 > (-8)); g_124--)
            { /* block id: 1638 */
                uint32_t l_3178 = 0xC9609AEAL;
                int8_t l_3179[1][5];
                uint32_t l_3180 = 18446744073709551612UL;
                int32_t l_3182 = (-1L);
                uint16_t **l_3227 = (void*)0;
                int32_t *l_3260[8] = {&g_358,&g_358,&g_1096[0],&g_358,&g_358,&g_1096[0],&g_358,&g_358};
                int32_t l_3265 = (-7L);
                uint16_t *l_3276[7] = {&g_1758[2][3][0],&g_1250,&g_1758[2][3][0],&g_1758[2][3][0],&g_1250,&g_1758[2][3][0],&g_1758[2][3][0]};
                int8_t *l_3277 = &g_126;
                int32_t * const *l_3278 = &g_146;
                int i, j;
                for (i = 0; i < 1; i++)
                {
                    for (j = 0; j < 5; j++)
                        l_3179[i][j] = 0x60L;
                }
                (*g_514) ^= ((l_26 && ((safe_sub_func_int32_t_s_s(((*g_37) != (((safe_rshift_func_uint8_t_u_s(((-1L) ^ (safe_rshift_func_uint8_t_u_s((safe_mul_func_uint16_t_u_u(l_3026[1][2], (0xE2F6L <= (((((l_3182 = (safe_sub_func_int32_t_s_s((safe_rshift_func_int16_t_s_s((**l_3155), (((*g_434) ^= ((safe_rshift_func_int8_t_s_s(((*g_2246) &= ((l_3173 == &g_658[2]) != (((((safe_div_func_uint32_t_u_u((safe_div_func_int32_t_s_s(((l_3178 ^ l_3178) | (**l_3155)), l_3179[0][0])), 4294967295UL)) == (**l_3155)) | l_3180) , l_3181) != &g_2246))), 4)) == l_3178)) != (**l_3155)))), 4294967295UL))) , (*g_454)) != &l_3156[1]) && l_3183) , 0UL)))), 4))), (**l_3155))) == 0x78F00C48L) || (**g_712))), 9L)) == 0x17DDD041L)) != 0x7496L);
                for (l_3178 = 26; (l_3178 != 20); l_3178--)
                { /* block id: 1645 */
                    uint8_t l_3231 = 0x9BL;
                    int16_t l_3268 = (-1L);
                    for (g_1312 = (-17); (g_1312 >= 7); g_1312 = safe_add_func_int8_t_s_s(g_1312, 5))
                    { /* block id: 1648 */
                        uint32_t *l_3198 = &g_408[2][6];
                        const uint16_t *l_3229 = &g_2057[5][1];
                        const uint16_t **l_3228 = &l_3229;
                        int32_t l_3230 = 0x605411FEL;
                        int8_t *l_3233 = (void*)0;
                        uint8_t **l_3240 = &g_659;
                        l_3156[1] = (((*l_3198) |= ((safe_lshift_func_int16_t_s_s((safe_mul_func_int8_t_s_s(((l_3179[0][4] <= (0L == (*g_1846))) & (safe_lshift_func_int8_t_s_s((**l_3155), (((((l_26 , (safe_div_func_uint8_t_u_u((((*g_2246) , ((*g_514) = (safe_unary_minus_func_int32_t_s(((*g_1846) > 0x8D74L))))) || ((*g_434) ^ (*g_434))), 0x0AL))) > l_3197) & l_3179[0][0]) , 0x7BL) && 0UL)))), 0x3FL)), l_26)) != 0xFF74B1E8L)) , (*l_3155));
                        (*g_146) |= (safe_mod_func_int16_t_s_s((safe_mul_func_uint16_t_u_u(((safe_mod_func_uint32_t_u_u((safe_add_func_uint16_t_u_u(g_3207[7], (safe_unary_minus_func_int16_t_s((((safe_sub_func_uint16_t_u_u((safe_mod_func_uint8_t_u_u((safe_mod_func_int32_t_s_s((safe_mod_func_int8_t_s_s((g_2239 &= ((((*g_1846) && (0xBCL && ((~(((((safe_mod_func_int16_t_s_s(((*g_1846) &= (safe_lshift_func_uint16_t_u_u((safe_rshift_func_uint8_t_u_u((((safe_sub_func_uint32_t_u_u(((safe_add_func_int16_t_s_s((((**l_3155) == (*g_2246)) != (l_3227 == l_3228)), (0xF5E6L & (0xCC5E7D7EL != l_3230)))) <= 0xD3L), (*g_2575))) == (**l_3155)) >= l_3231), l_3178)), 11))), l_3026[1][2])) < 0x6C78F6E4L) <= l_3232) , l_3179[0][0]) , (*g_1483))) , 0x5EL))) ^ 0xDC82L) < 0x6ACCL)), l_3026[1][1])), (**l_3155))), 0x50L)), (***g_993))) && (***g_1324)) , (-8L)))))), l_3179[0][2])) , 0x38A6L), (****g_992))), l_3179[0][0]));
                        (*g_514) |= (~((!(l_3230 > ((l_3230 , ((*g_2246) || l_3182)) , (safe_add_func_uint16_t_u_u((((safe_mul_func_uint16_t_u_u(((**l_3155) , ((***g_1324) = ((safe_rshift_func_uint16_t_u_s((((l_3240 == l_3241) , l_3243) , (safe_rshift_func_int16_t_s_s(((*g_1846) &= (l_3231 < 0xE8F6L)), l_3230))), l_3230)) , l_3230))), (**l_3155))) < l_3230) < (**l_3155)), l_3230))))) == (-1L)));
                        (*g_514) = ((*g_146) = ((**l_3155) = (((safe_sub_func_uint8_t_u_u((safe_mul_func_uint8_t_u_u(1UL, (*g_2246))), (((((((*l_3198) = (safe_add_func_uint16_t_u_u((safe_lshift_func_int8_t_s_u(0xDBL, 7)), ((safe_div_func_int8_t_s_s((safe_div_func_int32_t_s_s((safe_rshift_func_uint16_t_u_s((l_3173 != ((l_3156[1] == l_3260[3]) , (void*)0)), 0)), (((safe_mul_func_uint8_t_u_u((((l_3265 = ((safe_mul_func_int8_t_s_s((l_3230 | 7L), (*g_2246))) ^ l_3230)) | (*g_2575)) != l_3266[7][2][0]), l_3267)) | l_3182) , 0xC94E0367L))), l_3268)) >= 251UL)))) >= (**l_3155)) && 246UL) == l_3268) ^ 0x6F59L) | (**l_3155)))) | 0x97L) == l_3230)));
                    }
                    (*g_514) = (**l_3155);
                    (*g_454) = (*g_454);
                    if (l_3026[1][2])
                        break;
                }
                (*g_146) = (((((safe_rshift_func_int8_t_s_u(((**l_3181) = g_3271), 3)) && (*g_434)) , (**g_712)) ^ (**l_3155)) == ((*g_454) != ((safe_lshift_func_uint8_t_u_s((safe_lshift_func_uint16_t_u_u(3UL, (l_26 | (l_3182 = l_3179[0][0])))), ((*l_3277) ^= 0xE3L))) , l_3278)));
            }
        }
        else
        { /* block id: 1673 */
            int8_t l_3279 = 0x05L;
            int32_t l_3298 = 1L;
            int16_t l_3328 = (-2L);
            int8_t l_3378 = 0x76L;
            const uint32_t l_3379 = 9UL;
            int8_t l_3384 = 0xF5L;
            (*g_37) = (*g_514);
            l_3138 |= (~(**l_3155));
            if (((*g_146) = l_3279))
            { /* block id: 1677 */
                int32_t ****l_3294[1][4][5] = {{{&g_454,&g_454,(void*)0,&g_454,&g_454},{(void*)0,&g_454,(void*)0,(void*)0,&g_454},{&g_454,(void*)0,(void*)0,&g_454,(void*)0},{&g_454,&g_454,&g_454,&g_454,&g_454}}};
                const uint8_t * const **l_3317[9] = {&l_3241,&l_3241,&l_3241,&l_3241,&l_3241,&l_3241,&l_3241,&l_3241,&l_3241};
                const uint8_t * const ***l_3316 = &l_3317[1];
                int i, j, k;
                if ((safe_unary_minus_func_int16_t_s(((*g_1846) = ((&g_3271 != (void*)0) > (*g_1846))))))
                { /* block id: 1679 */
                    int32_t * const l_3281[8] = {&g_36,&g_36,&g_36,&g_36,&g_36,&g_36,&g_36,&g_36};
                    int32_t **l_3282 = (void*)0;
                    int32_t **l_3283 = &g_37;
                    int i;
                    (*l_3283) = l_3281[5];
                    (*l_3283) = ((((*g_2575) > 0xB5BFD70DL) || (safe_div_func_uint32_t_u_u(((void*)0 != l_3286), (safe_add_func_uint8_t_u_u(((safe_rshift_func_int16_t_s_s(((((l_3291 == l_3294[0][0][2]) > ((safe_add_func_int16_t_s_s(((****l_3291) >= (l_3279 <= (((safe_unary_minus_func_uint8_t_u((**l_3283))) || 0x4EL) , (-1L)))), (*g_1846))) , l_3279)) != (*g_434)) , l_3279), 0)) , 5UL), (-5L)))))) , (*l_3283));
                    g_3299++;
                }
                else
                { /* block id: 1683 */
                    uint32_t l_3307[9] = {0x1754E157L,0x1754E157L,0x1754E157L,0x1754E157L,0x1754E157L,0x1754E157L,0x1754E157L,0x1754E157L,0x1754E157L};
                    uint8_t ****l_3318 = &g_2219;
                    int i;
                    --l_3302;
                    if ((*g_146))
                    { /* block id: 1685 */
                        int32_t *** const **l_3319 = (void*)0;
                        int32_t *** const **l_3320 = (void*)0;
                        int32_t **l_3324 = &g_514;
                        int32_t *** const l_3323 = &l_3324;
                        int32_t *** const *l_3322[10][5] = {{&l_3323,&l_3323,&l_3323,&l_3323,&l_3323},{&l_3323,&l_3323,&l_3323,(void*)0,(void*)0},{&l_3323,&l_3323,&l_3323,&l_3323,&l_3323},{(void*)0,&l_3323,&l_3323,(void*)0,&l_3323},{(void*)0,(void*)0,&l_3323,&l_3323,&l_3323},{&l_3323,&l_3323,&l_3323,&l_3323,&l_3323},{&l_3323,&l_3323,&l_3323,&l_3323,&l_3323},{&l_3323,&l_3323,&l_3323,&l_3323,&l_3323},{&l_3323,(void*)0,&l_3323,&l_3323,(void*)0},{&l_3323,&l_3323,&l_3323,&l_3323,&l_3323}};
                        int32_t *** const **l_3321 = &l_3322[9][1];
                        int16_t l_3326 = 0x5EE0L;
                        int i, j;
                        (**l_3324) = (((l_3307[7] && (safe_rshift_func_int8_t_s_u(((((((((((void*)0 == &g_1846) <= ((safe_lshift_func_int16_t_s_u((safe_add_func_int8_t_s_s((((*g_1483) = (0x6558BEDCL > (*g_434))) , ((*g_2246) = (safe_lshift_func_uint16_t_u_s((l_3316 == l_3318), 11)))), (****l_3291))), ((((((*l_3321) = &g_454) == g_3325[0]) || l_3298) > (*g_434)) == l_3326))) , (-1L))) & (*g_514)) , (void*)0) != l_3327) & 0xA7L) == (***l_3292)) | (*g_434)) ^ (*g_146)), 3))) && 0L) != l_3298);
                        (**l_3293) |= l_3328;
                    }
                    else
                    { /* block id: 1691 */
                        (****l_3291) = (((void*)0 != &g_124) , (safe_sub_func_uint16_t_u_u((**g_712), (*g_1846))));
                    }
                }
                for (l_3138 = 0; (l_3138 <= (-17)); l_3138 = safe_sub_func_uint8_t_u_u(l_3138, 3))
                { /* block id: 1697 */
                    (*g_514) ^= (*g_2575);
                }
            }
            else
            { /* block id: 1700 */
                uint8_t l_3339[9] = {251UL,251UL,251UL,251UL,251UL,251UL,251UL,251UL,251UL};
                int i;
                (*g_514) &= ((safe_mul_func_int8_t_s_s((((safe_mul_func_uint16_t_u_u((safe_div_func_uint32_t_u_u(4294967295UL, l_3339[8])), (((l_3340 = (9L && 250UL)) & ((l_3339[5] , ((safe_sub_func_int16_t_s_s(((-10L) ^ ((*g_434)--)), 7UL)) > (((((**g_712) | (&g_454 != (void*)0)) > l_3339[8]) , l_3339[8]) < 0xF9L))) , 0x7C37L)) <= l_3339[2]))) , l_3339[0]) && (*g_2246)), 0x6CL)) && l_3339[3]);
            }
            for (g_2239 = (-16); (g_2239 <= (-26)); g_2239--)
            { /* block id: 1707 */
                uint8_t l_3383[4][5][8] = {{{0x22L,0x97L,247UL,0xC9L,0xC9L,247UL,0x97L,0x22L},{0xE5L,250UL,0x1FL,0x75L,9UL,255UL,1UL,3UL},{0xA8L,0xE3L,0x97L,4UL,0x75L,255UL,0UL,0x09L},{1UL,250UL,0x1EL,1UL,252UL,247UL,0x1FL,247UL},{0x09L,0x97L,252UL,0x97L,0x09L,0UL,250UL,0x1FL}},{{0UL,250UL,0x88L,1UL,1UL,0x0BL,0x65L,0x97L},{0xC9L,0xA8L,0x88L,0UL,0x97L,0UL,250UL,0x1EL},{1UL,4UL,252UL,0x1FL,0x88L,0x88L,0x1FL,252UL},{9UL,9UL,0x1EL,250UL,0UL,0x97L,0UL,0x88L},{0x1EL,255UL,0x97L,0x65L,0x0BL,1UL,1UL,0x88L}},{{255UL,0x22L,0x1FL,250UL,0UL,0x09L,0x97L,252UL},{1UL,252UL,247UL,0x1FL,247UL,252UL,1UL,0x1EL},{0x1FL,0xF3L,0x09L,0UL,255UL,0x75L,4UL,0x97L},{0UL,0x09L,3UL,1UL,255UL,9UL,0x75L,0x1FL},{0x1FL,4UL,0x22L,0x97L,247UL,0xC9L,0xC9L,247UL}},{{1UL,1UL,1UL,1UL,0UL,4UL,0x88L,0x09L},{255UL,247UL,1UL,4UL,0x0BL,0x1EL,0xF3L,3UL},{0x1EL,247UL,0x65L,0x88L,1UL,0x22L,0x75L,0xF3L},{0x75L,0xC9L,0xE5L,250UL,4UL,250UL,0xE5L,0xC9L},{4UL,0x22L,9UL,4UL,0UL,0x75L,0x65L,247UL}}};
                int32_t *l_3387 = &l_3298;
                int32_t ***l_3393 = &g_455;
                int i, j, k;
                for (g_436 = 0; (g_436 >= 58); g_436 = safe_add_func_uint8_t_u_u(g_436, 9))
                { /* block id: 1710 */
                    uint8_t l_3350 = 0UL;
                    int16_t l_3382 = 0x906CL;
                    const uint8_t l_3390 = 1UL;
                    int32_t ** const *l_3396 = &g_455;
                    if (l_3279)
                    { /* block id: 1711 */
                        uint8_t ***l_3349 = &g_658[2];
                        int32_t l_3355 = 0xE58C1806L;
                        uint32_t l_3381 = 0x8D96A914L;
                        int32_t **l_3385[4];
                        int32_t **l_3386 = &g_37;
                        int i;
                        for (i = 0; i < 4; i++)
                            l_3385[i] = &g_514;
                        (*l_3349) = &g_659;
                        l_3384 = (l_3350 || (safe_mul_func_uint16_t_u_u((((safe_div_func_int32_t_s_s(((l_3355 <= (*g_713)) , (l_3350 < (safe_rshift_func_uint8_t_u_u((((void*)0 == &g_2799) && (**l_3155)), 0)))), (safe_mul_func_int8_t_s_s(((*g_2246) = (safe_add_func_int16_t_s_s((safe_mul_func_int16_t_s_s((safe_add_func_int8_t_s_s(((safe_lshift_func_int16_t_s_s((((safe_rshift_func_uint8_t_u_u((safe_sub_func_int8_t_s_s((safe_rshift_func_uint16_t_u_s((((((*g_713) == (((((((safe_rshift_func_int16_t_s_s(((((*g_1846) = (*g_1846)) | g_2236) < 0x4AL), l_3378)) & (*g_2246)) || 0x10L) == l_3379) > 4294967289UL) && (-1L)) >= 1L)) < (**l_3155)) != (*g_434)) <= (*g_434)), 11)), (***l_3292))), 1)) == l_3380) , 0xF838L), (*l_3286))) > 1L), l_3381)), l_3382)), 0x3F1DL))), l_3383[0][1][7])))) ^ (-9L)) > (*g_434)), l_3383[3][2][6])));
                        (*l_3386) = (**l_3292);
                    }
                    else
                    { /* block id: 1717 */
                        int32_t ****l_3394 = &l_3393;
                        l_3387 = (void*)0;
                        (*g_146) = ((((**l_3293) >= (safe_mod_func_int8_t_s_s(((l_3390 ^ ((**l_3155) | ((((safe_mul_func_int16_t_s_s((((*l_3394) = l_3393) != ((l_3379 | (l_3395[4] != (void*)0)) , l_3396)), 5L)) & (*g_146)) >= (**l_3155)) & l_3298))) , (-1L)), (****l_3291)))) & 1L) ^ g_3397);
                        g_3398++;
                    }
                }
            }
        }
    }
    return (****l_3291);
}


/* ------------------------------------------ */
/* 
 * reads : g_1846 g_514 g_59 g_1509 g_434 g_138 g_3051 g_1847 g_408 g_37 g_36 g_131 g_712 g_713 g_69 g_436 g_2225 g_993 g_1590 g_1591 g_360
 * writes: g_1847 g_59 g_1509 g_138 g_131 g_36 g_436 g_2387 g_2225 g_713
 */
static const int32_t  func_3(const uint32_t  p_4, int32_t  p_5, const int16_t  p_6)
{ /* block id: 1558 */
    int8_t l_3038[3][4][7] = {{{(-9L),(-8L),0x33L,(-1L),1L,1L,(-2L)},{1L,(-6L),(-1L),0xE3L,0x61L,0x0FL,0x58L},{(-1L),0xF9L,(-9L),1L,0x61L,(-6L),(-6L)},{1L,0x33L,1L,0x33L,1L,0x00L,0x13L}},{{1L,0x61L,0xB1L,0x31L,(-1L),0xB9L,8L},{1L,0xFEL,0L,(-4L),0xFBL,(-1L),0xB1L},{1L,0x31L,(-8L),1L,(-6L),(-1L),0xE3L},{1L,1L,(-2L),0xFBL,0x52L,(-7L),(-1L)}},{{(-1L),(-2L),0xCAL,0xFBL,1L,0xFEL,1L},{1L,0x00L,0x00L,1L,(-2L),0x58L,1L},{(-9L),1L,(-9L),(-4L),0L,0x31L,0x1AL},{0x00L,0x58L,(-6L),0x31L,0x0FL,0xE3L,1L}}};
    uint8_t *l_3071 = &g_2387[1][1];
    int32_t l_3080 = 0L;
    int32_t l_3081 = 0x141AEC86L;
    int32_t l_3082 = 4L;
    int32_t l_3087[4] = {1L,1L,1L,1L};
    int8_t * const ***l_3105 = (void*)0;
    int8_t * const ****l_3104 = &l_3105;
    int8_t * const *****l_3106 = &l_3104;
    uint16_t l_3107 = 0x130AL;
    int16_t *l_3108 = &g_2225[6];
    uint16_t l_3122 = 65529UL;
    int i, j, k;
    (*g_514) ^= ((safe_lshift_func_uint16_t_u_s((safe_rshift_func_uint16_t_u_u(0x5884L, 4)), 7)) ^ (safe_mul_func_int16_t_s_s(((l_3038[1][1][5] > 249UL) <= p_4), ((*g_1846) = (0x837FL ^ 0xE54FL)))));
    for (p_5 = (-20); (p_5 < (-18)); ++p_5)
    { /* block id: 1563 */
        uint32_t l_3043 = 1UL;
        int32_t l_3053 = 0x27A5B9B0L;
        int32_t l_3079 = 0xBA3474DDL;
        int32_t l_3083 = 0x0378FB79L;
        int32_t l_3084 = 0x4EC607B8L;
        int32_t l_3086 = 0x87B4D2E8L;
        int32_t l_3088 = 5L;
        int32_t l_3089 = 0xEFC3DAA0L;
        int32_t l_3090 = 0xB68C8DD3L;
        int32_t l_3091 = 1L;
        int32_t l_3092 = (-1L);
        int32_t l_3093[4][1][7] = {{{0x9167FBDEL,0x9167FBDEL,0x9167FBDEL,0x9167FBDEL,0x9167FBDEL,0x9167FBDEL,0x9167FBDEL}},{{0L,0L,0L,0L,0L,0L,0L}},{{0x9167FBDEL,0x9167FBDEL,0x9167FBDEL,0x9167FBDEL,0x9167FBDEL,0x9167FBDEL,0x9167FBDEL}},{{0L,0L,0L,0L,0L,0L,0L}}};
        uint32_t l_3094 = 18446744073709551615UL;
        int i, j, k;
        for (g_1509 = 0; (g_1509 <= 6); g_1509 += 1)
        { /* block id: 1566 */
            uint32_t *l_3050 = &g_408[4][7];
            int32_t l_3052 = 0x71A954C8L;
            uint8_t *l_3068 = &g_131;
            int32_t ****l_3074 = &g_454;
            int32_t *l_3075 = &g_60[0][4][3];
            int32_t *l_3076 = (void*)0;
            int32_t *l_3077[2];
            int8_t l_3078 = 0x3FL;
            int32_t l_3085[3][2][9] = {{{0L,0L,0L,0L,0L,0L,0L,0L,0L},{0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL}},{{0L,0L,0L,0L,0L,0L,0L,0L,0L},{0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL}},{{0L,0L,0L,0L,0L,0L,0L,0L,0L},{0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL,0x2A21343BL}}};
            int i, j, k;
            for (i = 0; i < 2; i++)
                l_3077[i] = &l_3052;
            if ((safe_sub_func_int8_t_s_s(((l_3053 = (l_3043 < (safe_mod_func_int32_t_s_s(p_6, (((*g_434) = (*g_434)) ^ (l_3038[0][0][0] ^ (((1UL && (safe_sub_func_uint8_t_u_u(((((p_4 | p_5) , (safe_lshift_func_uint8_t_u_u(((void*)0 != l_3050), g_3051))) ^ l_3052) & 0x3911L), l_3038[1][1][5]))) | 0x33036F19L) , l_3052))))))) | 0x5FL), p_6)))
            { /* block id: 1569 */
                for (l_3043 = 1; (l_3043 <= 5); l_3043 += 1)
                { /* block id: 1572 */
                    uint32_t l_3055 = 3UL;
                    int i, j;
                    for (g_1847 = 4; (g_1847 >= 0); g_1847 -= 1)
                    { /* block id: 1575 */
                        int32_t l_3054 = 0xE1145BC8L;
                        int i, j;
                        (*g_514) = 0x27A2A679L;
                        if (g_408[g_1847][(g_1847 + 2)])
                            continue;
                        --l_3055;
                    }
                    if (g_408[l_3043][(g_1509 + 3)])
                        continue;
                    (*g_514) |= (*g_37);
                }
                if (l_3053)
                    break;
            }
            else
            { /* block id: 1584 */
                (*g_514) ^= (-2L);
                return p_5;
            }
            (*g_37) &= ((safe_div_func_int8_t_s_s((4L == l_3052), (safe_rshift_func_int8_t_s_s(((safe_mod_func_uint16_t_u_u((0xF60BDD11L | ((safe_rshift_func_uint8_t_u_s(((safe_lshift_func_int8_t_s_u(p_6, (++(*l_3068)))) <= ((*g_1846) ^= ((l_3071 != ((l_3068 == (void*)0) , (void*)0)) <= ((((safe_div_func_int32_t_s_s(((l_3053 = ((void*)0 != l_3074)) != p_5), 0x66F4258AL)) , 0xD0AF22D9L) , 0UL) >= 0x60F4L)))), l_3038[2][3][4])) , l_3043)), p_6)) >= p_4), 2)))) | (**g_712));
            --l_3094;
            for (g_436 = 0; (g_436 <= 6); g_436 += 1)
            { /* block id: 1595 */
                for (l_3092 = 6; (l_3092 >= 0); l_3092 -= 1)
                { /* block id: 1598 */
                    return p_4;
                }
                if (p_5)
                    break;
            }
        }
    }
    l_3087[0] = (safe_div_func_int32_t_s_s((((**g_993) = (((((*l_3108) &= ((*g_434) ^ (((safe_lshift_func_int8_t_s_s(p_4, 2)) ^ (safe_unary_minus_func_uint32_t_u(((-1L) == (safe_mul_func_uint8_t_u_u(((*l_3071) = 0x55L), ((l_3082 = ((*g_1846) = p_6)) | p_6))))))) , ((l_3080 & (((((((*l_3106) = l_3104) == (void*)0) , 0x7096EE73L) >= p_4) >= l_3107) != 0xC9CFL)) > l_3082)))) != p_4) , l_3081) , &l_3107)) != (void*)0), l_3080));
    (*g_514) &= ((((*g_37) = (safe_mod_func_uint16_t_u_u((safe_add_func_uint32_t_u_u((0xBB8BL | (p_6 <= (safe_mod_func_int8_t_s_s(p_6, ((safe_rshift_func_int16_t_s_u(0x7606L, (p_6 && l_3087[0]))) , (((((safe_div_func_int32_t_s_s((safe_rshift_func_int8_t_s_u(((safe_unary_minus_func_int32_t_s(l_3122)) , ((safe_div_func_int16_t_s_s(8L, l_3122)) != 0x444F67B9L)), l_3081)), 2L)) ^ (-1L)) > p_4) , (**g_1590)) , 0x96L)))))), l_3038[1][1][5])), p_6))) >= 0x6C7D49EBL) == 0xF40DL);
    return l_3038[1][1][6];
}


/* ------------------------------------------ */
/* 
 * reads : g_2236
 * writes: g_2236
 */
static uint32_t  func_7(int8_t  p_8, int16_t  p_9, int32_t  p_10, int16_t  p_11, int32_t  p_12)
{ /* block id: 1551 */
    uint16_t l_3029 = 0x94C3L;
    for (g_2236 = (-17); (g_2236 > 22); g_2236++)
    { /* block id: 1554 */
        l_3029++;
    }
    return l_3029;
}


/* ------------------------------------------ */
/* 
 * reads : g_146 g_60
 * writes:
 */
static int32_t  func_13(int32_t  p_14, int32_t  p_15, int16_t  p_16, uint16_t  p_17)
{ /* block id: 1548 */
    return (*g_146);
}


/* ------------------------------------------ */
/* 
 * reads : g_37 g_145 g_1250 g_69 g_713 g_434 g_2387 g_1846 g_1847 g_993 g_712 g_1590 g_1591 g_61 g_138 g_1324 g_992 g_1758 g_2246 g_510 g_2675 g_146 g_514 g_59 g_454 g_455 g_435 g_36
 * writes: g_2234 g_36 g_145 g_1250 g_138 g_69 g_1591 g_61 g_131 g_1847 g_1758 g_2225 g_31 g_60 g_59
 */
static int32_t  func_19(int32_t  p_20, uint32_t  p_21, const int32_t  p_22, int32_t  p_23, int32_t  p_24)
{ /* block id: 3 */
    uint16_t l_2271[8] = {0xDEC2L,0xDEC2L,0UL,0xDEC2L,0xDEC2L,0UL,0xDEC2L,0xDEC2L};
    int32_t l_2279 = 0x4E8C2824L;
    int32_t l_2329 = 0x307D7E8CL;
    int32_t l_2330 = 1L;
    int32_t l_2331 = 1L;
    int32_t l_2332 = 6L;
    uint8_t l_2333[6][9][4] = {{{255UL,4UL,255UL,3UL},{0UL,0x56L,2UL,0UL},{246UL,3UL,0x97L,0x56L},{3UL,4UL,0x97L,0x97L},{246UL,246UL,2UL,0x5BL},{0UL,0x19L,255UL,0x56L},{255UL,0x56L,3UL,255UL},{246UL,0x56L,252UL,0x56L},{0x56L,0x19L,0x97L,0x5BL}},{{0x45L,246UL,3UL,0x97L},{0UL,4UL,5UL,0x56L},{0UL,3UL,3UL,0UL},{0x45L,0x56L,0x97L,3UL},{0x56L,4UL,252UL,0x5BL},{246UL,0x45L,3UL,0x5BL},{255UL,4UL,255UL,3UL},{0UL,0x56L,2UL,0UL},{246UL,3UL,0x97L,0x56L}},{{3UL,4UL,0x97L,0x97L},{246UL,246UL,2UL,0x5BL},{0UL,0x19L,255UL,0x56L},{255UL,0x56L,3UL,255UL},{246UL,0x56L,252UL,0x56L},{0x56L,0x19L,0x97L,0x5BL},{0x45L,246UL,3UL,0x97L},{0UL,4UL,5UL,0x56L},{0UL,3UL,3UL,0UL}},{{0x45L,0x56L,0x97L,3UL},{0x56L,4UL,252UL,0x5BL},{246UL,0x45L,3UL,0x5BL},{255UL,4UL,255UL,3UL},{0UL,0x56L,2UL,0UL},{246UL,3UL,0x97L,0x56L},{3UL,4UL,0x97L,0x97L},{246UL,246UL,2UL,0x5BL},{0UL,0x19L,255UL,0x56L}},{{255UL,0x56L,3UL,255UL},{246UL,0x56L,252UL,0x56L},{0x56L,0x19L,0x97L,0x5BL},{0x45L,246UL,3UL,0x97L},{0UL,4UL,5UL,0x56L},{0UL,3UL,3UL,0UL},{0x45L,0x56L,0x97L,3UL},{0x56L,4UL,252UL,0x5BL},{246UL,0x45L,3UL,0x5BL}},{{255UL,4UL,252UL,5UL},{0x97L,255UL,0UL,0x97L},{3UL,5UL,6UL,255UL},{5UL,0x45L,6UL,6UL},{3UL,3UL,0UL,0x19L},{0x97L,255UL,252UL,255UL},{252UL,255UL,5UL,252UL},{3UL,255UL,4UL,255UL},{255UL,255UL,6UL,0x19L}}};
    int16_t l_2338 = (-1L);
    int32_t l_2339 = 0xCE9AC76DL;
    int32_t l_2340 = 1L;
    uint8_t **l_2352 = (void*)0;
    int16_t l_2375 = 1L;
    int8_t ***l_2396 = (void*)0;
    int8_t ****l_2395 = &l_2396;
    int32_t l_2405 = 0xE7CA1D27L;
    int32_t l_2419 = 0xCAE5D46BL;
    uint32_t l_2446 = 0x4AF43DC1L;
    uint16_t **l_2486[2][9][10] = {{{&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713},{&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713},{&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713},{(void*)0,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713},{&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713},{&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713},{&g_713,&g_713,(void*)0,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713},{&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713},{(void*)0,&g_713,&g_713,(void*)0,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713}},{{&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713},{&g_713,&g_713,&g_713,(void*)0,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713},{&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713},{&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713},{&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713},{&g_713,&g_713,&g_713,&g_713,&g_713,(void*)0,&g_713,&g_713,&g_713,&g_713},{&g_713,&g_713,&g_713,&g_713,(void*)0,(void*)0,&g_713,&g_713,&g_713,&g_713},{&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713},{&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713}}};
    int32_t l_2528[2];
    uint8_t l_2534 = 0xC1L;
    uint32_t l_2562 = 0xBBC01CAAL;
    const int32_t **l_2615 = &g_2575;
    const int32_t ***l_2614 = &l_2615;
    int8_t l_2718 = 0x7FL;
    int32_t l_2727 = 1L;
    uint16_t l_2757 = 0xBD99L;
    int32_t * const *l_2787[6];
    uint8_t ****l_2801 = (void*)0;
    int16_t l_2802 = 0x2117L;
    int16_t *l_2803 = &g_2225[9];
    const uint16_t l_2829 = 65529UL;
    uint32_t * const l_2837 = (void*)0;
    int32_t l_2854 = (-1L);
    int16_t l_2994 = 0x4B9BL;
    int32_t l_2995 = 0x159AF702L;
    uint32_t l_3018 = 0x29CF6467L;
    uint16_t ****l_3023 = &g_1324;
    int i, j, k;
    for (i = 0; i < 2; i++)
        l_2528[i] = 0x408F1F41L;
    for (i = 0; i < 6; i++)
        l_2787[i] = &g_37;
    for (p_21 = (-4); (p_21 == 4); p_21 = safe_add_func_int16_t_s_s(p_21, 3))
    { /* block id: 6 */
        const int16_t l_2281 = 0x5292L;
        int32_t *l_2321 = &g_2234;
        int32_t *l_2322 = (void*)0;
        int32_t l_2323 = 0L;
        int32_t *l_2324 = (void*)0;
        int32_t *l_2325 = &g_60[0][0][2];
        int32_t *l_2326 = &l_2279;
        int32_t *l_2327 = &g_60[0][4][3];
        int32_t *l_2328[1][4][10] = {{{&g_60[1][2][0],&g_61,&g_60[1][2][0],&g_60[1][2][0],&g_61,&g_60[1][2][0],&g_60[1][2][0],&g_61,&g_60[1][2][0],&g_60[1][2][0]},{&g_61,&g_61,&g_2236,&g_61,&g_61,&g_2236,&g_61,&g_61,&g_2236,&g_61},{&g_61,&g_60[1][2][0],&g_60[1][2][0],&g_61,&g_60[1][2][0],&g_60[1][2][0],&g_61,&g_60[1][2][0],&g_60[1][2][0],&g_61},{&g_60[1][2][0],&g_61,&g_60[1][2][0],&g_60[1][2][0],&g_61,&g_60[1][2][0],&g_60[1][2][0],&g_61,&g_60[1][2][0],&g_60[1][2][0]}}};
        int i, j, k;
        for (p_20 = 11; (p_20 == (-22)); --p_20)
        { /* block id: 9 */
            uint32_t **l_2265 = &g_434;
            int32_t l_2282 = (-1L);
            uint32_t l_2317 = 0UL;
            int32_t *l_2320 = &l_2282;
            for (p_23 = 0; (p_23 >= 0); p_23 -= 1)
            { /* block id: 12 */
                int32_t *l_35[7][7] = {{&g_36,&g_36,&g_36,(void*)0,&g_36,&g_36,&g_36},{&g_36,&g_36,&g_36,&g_36,&g_36,&g_36,&g_36},{&g_36,&g_36,&g_36,&g_36,&g_36,&g_36,&g_36},{&g_36,(void*)0,&g_36,&g_36,(void*)0,&g_36,(void*)0},{&g_36,&g_36,&g_36,&g_36,&g_36,&g_36,&g_36},{&g_36,&g_36,&g_36,&g_36,&g_36,&g_36,&g_36},{&g_36,&g_36,(void*)0,&g_36,&g_36,&g_36,&g_36}};
                int32_t **l_34[9][10][2] = {{{&l_35[4][1],&l_35[1][3]},{&l_35[0][0],&l_35[1][3]},{&l_35[5][1],(void*)0},{(void*)0,&l_35[1][3]},{(void*)0,(void*)0},{&l_35[5][1],&l_35[1][3]},{&l_35[0][0],&l_35[1][3]},{&l_35[4][1],(void*)0},{&l_35[1][3],(void*)0},{(void*)0,&l_35[1][3]}},{{&l_35[4][1],&l_35[1][3]},{&l_35[1][3],&l_35[1][3]},{&l_35[4][1],&l_35[1][3]},{(void*)0,(void*)0},{&l_35[1][3],(void*)0},{&l_35[4][1],&l_35[1][3]},{&l_35[0][0],&l_35[1][3]},{&l_35[5][1],(void*)0},{(void*)0,&l_35[1][3]},{(void*)0,(void*)0}},{{&l_35[5][1],&l_35[1][3]},{&l_35[0][0],&l_35[1][3]},{&l_35[4][1],(void*)0},{&l_35[1][3],(void*)0},{(void*)0,&l_35[1][3]},{&l_35[4][1],&l_35[1][3]},{&l_35[1][3],&l_35[1][3]},{&l_35[4][1],&l_35[1][3]},{(void*)0,(void*)0},{&l_35[1][3],(void*)0}},{{&l_35[4][1],&l_35[1][3]},{&l_35[0][0],&l_35[1][3]},{&l_35[5][1],(void*)0},{(void*)0,&l_35[1][3]},{(void*)0,(void*)0},{&l_35[5][1],&l_35[1][3]},{&l_35[0][0],&l_35[1][3]},{&l_35[4][1],(void*)0},{&l_35[1][3],(void*)0},{(void*)0,&l_35[1][0]}},{{&l_35[1][3],&l_35[1][3]},{&l_35[5][6],&l_35[1][3]},{&l_35[1][3],&l_35[1][0]},{&l_35[1][3],&l_35[1][3]},{&l_35[2][1],&l_35[6][4]},{&l_35[1][3],&l_35[0][3]},{&l_35[5][1],&l_35[1][3]},{&l_35[1][3],&l_35[6][4]},{&l_35[1][3],&l_35[5][0]},{&l_35[1][3],&l_35[6][4]}},{{&l_35[1][3],&l_35[1][3]},{&l_35[5][1],&l_35[0][3]},{&l_35[1][3],&l_35[6][4]},{&l_35[2][1],&l_35[1][3]},{&l_35[1][3],&l_35[1][0]},{&l_35[1][3],&l_35[1][3]},{&l_35[5][6],&l_35[1][3]},{&l_35[1][3],&l_35[1][0]},{&l_35[1][3],&l_35[1][3]},{&l_35[2][1],&l_35[6][4]}},{{&l_35[1][3],&l_35[0][3]},{&l_35[5][1],&l_35[1][3]},{&l_35[1][3],&l_35[6][4]},{&l_35[1][3],&l_35[5][0]},{&l_35[1][3],&l_35[6][4]},{&l_35[1][3],&l_35[1][3]},{&l_35[5][1],&l_35[0][3]},{&l_35[1][3],&l_35[6][4]},{&l_35[2][1],&l_35[1][3]},{&l_35[1][3],&l_35[1][0]}},{{&l_35[1][3],&l_35[1][3]},{&l_35[5][6],&l_35[1][3]},{&l_35[1][3],&l_35[1][0]},{&l_35[1][3],&l_35[1][3]},{&l_35[2][1],&l_35[6][4]},{&l_35[1][3],&l_35[0][3]},{&l_35[5][1],&l_35[1][3]},{&l_35[1][3],&l_35[6][4]},{&l_35[1][3],&l_35[5][0]},{&l_35[1][3],&l_35[6][4]}},{{&l_35[1][3],&l_35[1][3]},{&l_35[5][1],&l_35[0][3]},{&l_35[1][3],&l_35[6][4]},{&l_35[2][1],&l_35[1][3]},{&l_35[1][3],&l_35[1][0]},{&l_35[1][3],&l_35[1][3]},{&l_35[5][6],&l_35[1][3]},{&l_35[1][3],&l_35[1][0]},{&l_35[1][3],&l_35[1][3]},{&l_35[2][1],&l_35[6][4]}}};
                int32_t **l_2264 = &l_35[1][3];
                const int16_t l_2276[8] = {0xA6A5L,0xA6A5L,0xA6A5L,0xA6A5L,0xA6A5L,0xA6A5L,0xA6A5L,0xA6A5L};
                uint8_t ****l_2288 = &g_2219;
                int i, j, k;
            }
            return p_21;
        }
        l_2333[4][4][3]++;
        if (((*g_37) = ((*l_2321) = (safe_mod_func_int8_t_s_s((-1L), 0xF3L)))))
        { /* block id: 1225 */
            return l_2338;
        }
        else
        { /* block id: 1227 */
            uint32_t l_2341 = 18446744073709551615UL;
            l_2341++;
        }
        for (l_2329 = 0; (l_2329 >= 27); l_2329++)
        { /* block id: 1232 */
            for (g_145 = 0; (g_145 > 23); g_145 = safe_add_func_uint16_t_u_u(g_145, 1))
            { /* block id: 1235 */
                return l_2331;
            }
            for (l_2330 = 0; (l_2330 > (-5)); l_2330 = safe_sub_func_int16_t_s_s(l_2330, 5))
            { /* block id: 1240 */
                return l_2333[4][3][1];
            }
            (*g_37) = (safe_rshift_func_int8_t_s_s(p_23, 2));
        }
    }
    for (g_1250 = 0; (g_1250 <= 2); g_1250 += 1)
    { /* block id: 1248 */
        const int32_t *l_2353 = &g_36;
        const int32_t **l_2354 = &l_2353;
        int8_t * const *l_2386 = (void*)0;
        int8_t * const **l_2385[5] = {(void*)0,(void*)0,(void*)0,(void*)0,(void*)0};
        int8_t ***l_2393 = &g_435;
        int8_t ****l_2392 = &l_2393;
        int32_t l_2400 = 0xE45F6443L;
        int8_t l_2430[4];
        const int16_t *l_2450 = &g_2451;
        int16_t *l_2452 = &g_775;
        const uint16_t *l_2485 = &g_145;
        const uint16_t **l_2484 = &l_2485;
        const uint16_t ***l_2483[8];
        const uint32_t l_2507 = 0xC6FC5E1DL;
        int8_t *l_2512 = &g_126;
        int32_t l_2523 = 4L;
        int32_t l_2524 = 9L;
        int32_t l_2525 = 0x626DBABCL;
        int32_t l_2526 = 0xB725935DL;
        int32_t l_2527 = (-4L);
        int32_t l_2529 = 1L;
        int32_t l_2530 = 1L;
        uint8_t l_2531[6][3][9] = {{{0xF8L,0x49L,7UL,9UL,6UL,0x07L,254UL,255UL,2UL},{9UL,0x1EL,0xA4L,0x69L,248UL,0xBCL,1UL,0x07L,0xADL},{2UL,7UL,3UL,0xFBL,0x34L,0xFBL,3UL,7UL,2UL}},{{0xFBL,2UL,9UL,4UL,4UL,0x5FL,0xAEL,255UL,0x21L},{0xD8L,9UL,255UL,0x53L,0xBCL,0x34L,4UL,0xEEL,7UL},{0xFBL,4UL,0xAEL,0xD8L,0xEAL,0xEAL,7UL,9UL,3UL}},{{2UL,0x4AL,0xF8L,0UL,0x21L,250UL,9UL,0xDAL,255UL},{9UL,0x46L,0xDAL,9UL,249UL,0UL,0x28L,0x03L,1UL},{0xF8L,0xBCL,0xBBL,0x58L,0x56L,9UL,0xF2L,0xBCL,0x07L}},{{0x58L,0x11L,251UL,0x07L,0xB7L,252UL,4UL,0x44L,255UL},{0x03L,6UL,248UL,251UL,251UL,248UL,6UL,0x03L,0x21L},{6UL,0x0BL,0xD8L,2UL,255UL,0x56L,0UL,0x49L,255UL}},{{249UL,3UL,0x44L,255UL,0xBCL,0xFBL,0x56L,0x98L,0x21L},{0xBFL,254UL,0xEAL,3UL,0x5FL,248UL,255UL,251UL,255UL},{0xBBL,248UL,4UL,248UL,255UL,255UL,254UL,7UL,0x07L}},{{0xF2L,4UL,0x21L,0x4AL,9UL,0x11L,0xEEL,0xD6L,0xBFL},{0xCCL,255UL,0xF2L,0x4AL,7UL,4UL,0x34L,248UL,0x49L},{255UL,0xBFL,0x03L,248UL,0x98L,9UL,0xCCL,0x53L,0x53L}}};
        uint32_t l_2558 = 4294967295UL;
        int16_t l_2602 = (-1L);
        int i, j, k;
        for (i = 0; i < 4; i++)
            l_2430[i] = 0L;
        for (i = 0; i < 8; i++)
            l_2483[i] = &l_2484;
        p_24 = (&g_659 != l_2352);
        if (g_69[(g_1250 + 6)])
            continue;
        (*l_2354) = l_2353;
        (*l_2354) = &p_22;
        for (l_2330 = 0; (l_2330 <= 2); l_2330 += 1)
        { /* block id: 1255 */
            int8_t ****l_2382 = (void*)0;
            int8_t ***l_2384 = &g_435;
            int8_t ****l_2383 = &l_2384;
            int8_t *****l_2394 = &l_2383;
            int32_t l_2399[9][6][1] = {{{(-1L)},{(-1L)},{(-1L)},{0x5EEB2947L},{(-1L)},{(-1L)}},{{(-1L)},{(-1L)},{(-1L)},{0x5EEB2947L},{(-1L)},{(-1L)}},{{(-1L)},{(-1L)},{(-1L)},{0x5EEB2947L},{(-1L)},{(-1L)}},{{(-1L)},{(-1L)},{(-1L)},{0x5EEB2947L},{(-1L)},{(-1L)}},{{(-1L)},{(-1L)},{(-1L)},{0x5EEB2947L},{(-1L)},{(-1L)}},{{(-1L)},{(-1L)},{(-1L)},{0x5EEB2947L},{(-1L)},{(-1L)}},{{(-1L)},{(-1L)},{(-1L)},{0x5EEB2947L},{(-1L)},{(-1L)}},{{(-1L)},{(-1L)},{(-1L)},{0x5EEB2947L},{(-1L)},{(-1L)}},{{(-1L)},{(-1L)},{(-1L)},{0x5EEB2947L},{(-1L)},{(-1L)}}};
            uint16_t l_2418 = 65533UL;
            uint32_t *l_2426 = &g_138[3];
            uint32_t l_2509 = 1UL;
            uint8_t ****l_2560 = &g_2219;
            uint8_t *****l_2559 = &l_2560;
            uint32_t l_2573 = 18446744073709551612UL;
            int i, j, k;
            (*g_37) = (safe_lshift_func_int8_t_s_s(((((((*g_1590) = ((safe_mod_func_uint16_t_u_u(((*g_713) = (((((((safe_div_func_uint8_t_u_u((safe_lshift_func_int16_t_s_u(((safe_div_func_uint16_t_u_u(((((*g_434) = ((safe_mul_func_uint8_t_u_u(l_2340, (safe_mul_func_uint16_t_u_u((((safe_rshift_func_int8_t_s_u(l_2333[4][4][3], p_21)) , ((!(0x8BAFL > (((*l_2383) = ((safe_mul_func_int16_t_s_s(((safe_mod_func_int16_t_s_s(l_2375, (*g_713))) & (safe_mul_func_uint8_t_u_u(0xC5L, (safe_rshift_func_int16_t_s_u((safe_rshift_func_int8_t_s_s(p_24, 6)), 7))))), (*g_713))) , (void*)0)) != l_2385[4]))) >= 0x4190L)) >= l_2339), l_2339)))) && 6UL)) && p_24) , p_23), p_23)) || (-1L)), (*g_713))), g_2387[2][1])) | (*g_1846)) == p_21) , (***g_993)) | 1UL) > (*g_1846)) , 1UL)), p_22)) , (*g_1590))) == &p_23) == l_2333[4][4][3]) <= p_20) == 251UL), 5));
        }
    }
    for (l_2332 = 1; (l_2332 >= 0); l_2332 -= 1)
    { /* block id: 1347 */
        const int32_t *l_2638 = &l_2339;
        uint16_t ** const l_2650[10] = {&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713,&g_713};
        int32_t l_2656 = 1L;
        int32_t l_2659 = 0x8D981328L;
        int16_t l_2694 = (-10L);
        int16_t l_2706 = 0L;
        int32_t l_2709 = 0xF0B25886L;
        int32_t l_2712 = (-8L);
        int32_t l_2713[10][1] = {{4L},{4L},{0x088957D1L},{4L},{4L},{0x088957D1L},{4L},{4L},{0x088957D1L},{4L}};
        uint16_t l_2730 = 0xFE70L;
        uint8_t **l_2752 = &g_659;
        uint32_t **l_2791 = (void*)0;
        uint32_t ***l_2790 = &l_2791;
        uint32_t ***l_2792 = (void*)0;
        uint32_t **l_2793 = &g_434;
        int8_t *** const *l_2798 = (void*)0;
        uint8_t * const ****l_2800[2][10][6] = {{{&g_2799,&g_2799,&g_2799,&g_2799,&g_2799,&g_2799},{&g_2799,&g_2799,&g_2799,&g_2799,&g_2799,&g_2799},{&g_2799,&g_2799,&g_2799,&g_2799,&g_2799,&g_2799},{&g_2799,&g_2799,&g_2799,&g_2799,&g_2799,(void*)0},{&g_2799,(void*)0,&g_2799,(void*)0,&g_2799,&g_2799},{&g_2799,&g_2799,&g_2799,&g_2799,&g_2799,&g_2799},{&g_2799,&g_2799,&g_2799,&g_2799,&g_2799,&g_2799},{&g_2799,&g_2799,(void*)0,&g_2799,&g_2799,&g_2799},{&g_2799,&g_2799,&g_2799,(void*)0,&g_2799,&g_2799},{&g_2799,(void*)0,&g_2799,&g_2799,&g_2799,&g_2799}},{{&g_2799,&g_2799,&g_2799,&g_2799,&g_2799,&g_2799},{&g_2799,&g_2799,&g_2799,&g_2799,&g_2799,&g_2799},{&g_2799,&g_2799,&g_2799,&g_2799,&g_2799,&g_2799},{&g_2799,(void*)0,(void*)0,&g_2799,&g_2799,(void*)0},{&g_2799,&g_2799,&g_2799,&g_2799,&g_2799,&g_2799},{(void*)0,&g_2799,&g_2799,&g_2799,&g_2799,&g_2799},{&g_2799,&g_2799,&g_2799,&g_2799,&g_2799,&g_2799},{&g_2799,(void*)0,&g_2799,&g_2799,&g_2799,&g_2799},{&g_2799,&g_2799,&g_2799,&g_2799,&g_2799,&g_2799},{&g_2799,&g_2799,&g_2799,&g_2799,&g_2799,&g_2799}}};
        uint8_t l_2914 = 255UL;
        int i, j, k;
    }
    for (p_24 = 1; (p_24 >= 0); p_24 -= 1)
    { /* block id: 1503 */
        int32_t *l_2915 = &g_1096[0];
        int8_t ** const l_2916 = (void*)0;
        int32_t l_2928 = 0xB06FF22EL;
        uint16_t *l_2938[5][3];
        int32_t l_2971 = 9L;
        int8_t ***l_2975 = &g_435;
        uint32_t **l_2984 = (void*)0;
        int32_t l_2998 = (-4L);
        int32_t l_2999 = 0xB5DEAA51L;
        int32_t l_3000[7];
        uint16_t *****l_3024 = (void*)0;
        uint16_t *****l_3025 = &l_3023;
        int i, j;
        for (i = 0; i < 5; i++)
        {
            for (j = 0; j < 3; j++)
                l_2938[i][j] = &g_1758[3][0][1];
        }
        for (i = 0; i < 7; i++)
            l_3000[i] = (-3L);
        if (((*g_1590) != l_2915))
        { /* block id: 1504 */
            uint16_t *l_2937 = &g_1250;
            int8_t **** const l_2974 = &l_2396;
            int32_t l_2983 = 4L;
            int32_t ****l_2993 = &g_454;
            int32_t l_2996[3][1];
            uint32_t l_3015 = 0xBEECD428L;
            int i, j;
            for (i = 0; i < 3; i++)
            {
                for (j = 0; j < 1; j++)
                    l_2996[i][j] = 6L;
            }
            for (g_61 = 0; (g_61 <= 1); g_61 += 1)
            { /* block id: 1507 */
                int8_t l_2929 = (-4L);
                int32_t *l_2930 = &g_36;
                int8_t ***l_2976[5];
                int32_t l_2997 = 0L;
                int i;
                for (i = 0; i < 5; i++)
                    l_2976[i] = &g_435;
                for (l_2854 = 0; (l_2854 <= 2); l_2854 += 1)
                { /* block id: 1510 */
                    int8_t **l_2917 = &g_2246;
                    uint16_t ****l_2925 = &g_1324;
                    int32_t l_2977 = 1L;
                    uint8_t l_3001[3][3][5] = {{{0xC0L,253UL,253UL,0xC0L,253UL},{251UL,0UL,0x97L,0UL,251UL},{253UL,0xC0L,253UL,253UL,0xC0L}},{{251UL,0x17L,0xEAL,0UL,0xEAL},{0xC0L,0xC0L,0x82L,0xC0L,0xC0L},{0xEAL,0UL,0xEAL,0x17L,251UL}},{{0xC0L,253UL,253UL,0xC0L,253UL},{251UL,0UL,0x97L,0UL,251UL},{253UL,0xC0L,253UL,253UL,0xC0L}}};
                    int i, j, k;
                    for (g_131 = 0; (g_131 <= 4); g_131 += 1)
                    { /* block id: 1513 */
                        int8_t ***l_2918 = &l_2917;
                        int8_t l_2939 = 0x4DL;
                        int32_t l_2946 = (-7L);
                        uint8_t *l_2978 = &g_31[0];
                        int i, j, k;
                        l_2930 = (((l_2916 == ((*l_2918) = l_2917)) , (safe_rshift_func_int8_t_s_u((0xA3L || ((safe_lshift_func_int8_t_s_s(((void*)0 != l_2915), 6)) >= (safe_lshift_func_int8_t_s_u(((((*g_1846) = (l_2925 != (void*)0)) < (((safe_mul_func_int16_t_s_s(l_2928, ((+((0xCEL >= 0x34L) , l_2928)) != p_22))) , (*g_434)) , (-1L))) , (-2L)), l_2929)))), p_23))) , (void*)0);
                        l_2930 = ((safe_add_func_int8_t_s_s((p_24 & (safe_mod_func_uint32_t_u_u(((safe_add_func_uint32_t_u_u(((**g_1324) != (l_2938[4][2] = l_2937)), ((((l_2939 | (safe_sub_func_int32_t_s_s(0x0979E7F6L, (safe_lshift_func_int16_t_s_s(p_24, 14))))) != ((p_22 >= (l_2528[p_24] = (safe_mod_func_uint8_t_u_u(0x34L, p_20)))) == p_23)) < 0xC3B9L) ^ (****g_992)))) ^ l_2939), p_24))), l_2946)) , (void*)0);
                        (*g_146) = (safe_div_func_int32_t_s_s((safe_mod_func_uint16_t_u_u((g_1758[(l_2854 + 3)][(l_2854 + 3)][l_2854] |= 1UL), (safe_lshift_func_uint16_t_u_u((((void*)0 != &g_434) , (safe_lshift_func_int16_t_s_u((((*l_2978) = (safe_mod_func_int32_t_s_s((((safe_mul_func_int16_t_s_s((safe_add_func_uint16_t_u_u((safe_sub_func_uint8_t_u_u(((((safe_div_func_int8_t_s_s((((**g_712) |= ((+((((safe_div_func_uint16_t_u_u((((safe_lshift_func_uint8_t_u_s(((*g_1846) != ((*l_2803) = (safe_mul_func_uint16_t_u_u((l_2971 || ((((*g_2246) == ((safe_add_func_uint32_t_u_u((g_2675 != l_2974), ((((*l_2974) = l_2975) == l_2976[0]) < p_24))) , l_2928)) <= p_20) != 0x89L)), p_20)))), (*g_2246))) ^ l_2977) ^ (*g_2246)), p_22)) ^ p_21) <= 0xE8FBL) == l_2528[p_24])) != p_22)) , 0L), 0xA7L)) , l_2528[p_24]) | (*g_434)) ^ (*g_1846)), 3L)), p_20)), 65527UL)) , 2L) & (*g_1846)), p_24))) <= p_24), l_2939))), 5)))), 0xAECA8320L));
                    }
                    if ((((safe_mod_func_int16_t_s_s((safe_lshift_func_uint16_t_u_u((l_2971 <= p_21), 3)), ((l_2528[p_24] = l_2983) , ((((((p_22 , (l_2984 == &g_434)) >= (safe_add_func_uint8_t_u_u((l_2528[p_24] != (((safe_add_func_int16_t_s_s((safe_add_func_uint16_t_u_u((((*g_37) = ((l_2993 == (void*)0) < 0UL)) , (***g_993)), p_23)), (***g_993))) , (void*)0) == l_2993)), p_24))) & 0xEC1A434FL) , p_23) , p_21) | 0xBD554C6CL)))) && (****g_992)) & (*g_434)))
                    { /* block id: 1529 */
                        ++l_3001[1][0][3];
                        (*g_514) ^= p_21;
                    }
                    else
                    { /* block id: 1532 */
                        int32_t l_3012 = 0L;
                        int i, j, k;
                        (*g_37) ^= (safe_mul_func_uint16_t_u_u((safe_sub_func_uint16_t_u_u(65535UL, ((safe_add_func_int8_t_s_s((safe_lshift_func_int8_t_s_u(((p_20 , &l_2930) == (*g_454)), l_3012)), ((((safe_sub_func_int16_t_s_s((((*g_434) = (p_21 = (p_22 != l_3001[1][0][3]))) < ((((g_1758[(g_61 + 3)][(p_24 + 7)][l_2854] = (&g_2246 != (*l_2975))) != p_23) , 0xEEL) > p_22)), (**g_712))) <= (*g_713)) , l_3015) >= p_24))) , p_22))), 2UL));
                    }
                }
            }
            return p_24;
        }
        else
        { /* block id: 1541 */
            int32_t l_3016 = 0x8DB39DADL;
            int32_t l_3017[3];
            int i;
            for (i = 0; i < 3; i++)
                l_3017[i] = 0x6AFC90CCL;
            l_3018--;
        }
        (*g_514) |= (&g_1324 != ((safe_mul_func_uint8_t_u_u(6UL, 0x72L)) , ((*l_3025) = l_3023)));
    }
    return p_21;
}


/* ------------------------------------------ */
/* 
 * reads : g_36 g_69 g_37 g_138 g_436 g_360 g_510 g_434 g_408 g_31 g_59 g_146 g_60 g_2 g_514 g_124 g_415 g_658 g_126 g_61 g_713 g_454 g_455 g_358 g_775 g_435 g_131 g_961 g_1096 g_145 g_992 g_993 g_1202 g_1250 g_712 g_1312 g_1324 g_1590 g_659 g_1509 g_1758 g_2057 g_2075 g_1846 g_1847 g_2127 g_2156 g_1591 g_2236 g_2234
 * writes: g_36 g_59 g_60 g_61 g_69 g_37 g_360 g_510 g_436 g_145 g_415 g_131 g_31 g_138 g_658 g_712 g_659 g_455 g_775 g_126 g_124 g_358 g_408 g_454 g_1324 g_1483 g_435 g_1509 g_1758 g_514 g_1590 g_1847 g_2219 g_2246 g_2236 g_2234
 */
static int32_t * const  func_32(int32_t * p_33)
{ /* block id: 14 */
    uint16_t l_40 = 0xF32AL;
    int32_t *l_526 = &g_360;
    int32_t **l_525 = &l_526;
    int32_t ** const l_533 = &g_37;
    int16_t *l_774[2];
    int16_t *l_776[5][9] = {{&g_124,&g_775,&g_775,&g_124,(void*)0,&g_124,&g_775,&g_775,&g_124},{&g_775,&g_775,&g_124,&g_775,&g_775,&g_775,&g_775,&g_124,&g_775},{&g_775,(void*)0,&g_124,&g_775,(void*)0,&g_775,(void*)0,&g_124,&g_124},{&g_775,&g_775,&g_775,&g_775,&g_775,&g_775,&g_775,&g_775,&g_124},{&g_124,(void*)0,&g_124,&g_775,&g_775,&g_124,(void*)0,&g_124,&g_775}};
    uint16_t l_777[6][1] = {{65535UL},{9UL},{65535UL},{65535UL},{9UL},{65535UL}};
    int32_t ***l_1792 = &g_455;
    int32_t *l_2249 = &g_2236;
    int32_t *l_2250 = &g_2234;
    int i, j;
    for (i = 0; i < 2; i++)
        l_774[i] = &g_775;
    (*l_2250) ^= ((*l_2249) |= (safe_mul_func_uint8_t_u_u(l_40, func_41(((*l_1792) = func_44((g_775 ^= ((l_40 < func_49(l_40, (((safe_lshift_func_uint16_t_u_u((((func_57(l_40) >= (l_525 == ((0UL ^ (safe_div_func_uint8_t_u_u((safe_mod_func_uint8_t_u_u((safe_mod_func_int8_t_s_s(0xA1L, l_40)), 255UL)), l_40))) , &l_526))) ^ l_40) , 0x108BL), 3)) >= 8UL) , l_533), g_138[3], l_40, g_436)) <= g_408[3][9])), l_40, l_40, l_777[4][0])), p_33))));
    (*p_33) = (((safe_div_func_uint32_t_u_u((*l_2249), (safe_unary_minus_func_int8_t_s((safe_div_func_uint16_t_u_u((~(safe_rshift_func_int8_t_s_u((((*l_2249) >= ((safe_sub_func_int32_t_s_s(((((*g_713) = (safe_mul_func_int8_t_s_s((*l_2249), (*l_2249)))) <= (*l_2250)) != ((*l_2250) & 0x31L)), ((((*l_2250) || 0x9EL) & (*l_2249)) >= (*p_33)))) ^ (*l_2249))) <= (*g_434)), 4))), (*l_2249))))))) ^ (*l_2250)) & (*l_2250));
    p_33 = ((*l_533) = p_33);
    for (g_124 = 0; (g_124 < (-4)); g_124--)
    { /* block id: 1175 */
        return p_33;
    }
    return p_33;
}


/* ------------------------------------------ */
/* 
 * reads : g_415 g_124 g_60 g_434 g_138 g_1509 g_510 g_358 g_2057 g_61 g_146 g_31 g_2075 g_514 g_59 g_408 g_1846 g_1847 g_2127 g_1096 g_36 g_713 g_69 g_2156 g_131 g_436 g_775 g_1591 p_24
 * writes: g_415 g_124 g_1509 g_131 g_510 g_358 g_514 g_61 g_60 g_1590 g_436 g_1847 g_59 g_36 g_69 g_775 g_126 g_31 g_138 g_2219 g_2246 p_24
 */
static uint8_t  func_41(int32_t ** p_42, int32_t * p_43)
{ /* block id: 912 */
    int32_t *l_1795 = &g_60[0][3][2];
    int32_t l_1864 = 0x3228974EL;
    int32_t l_1869[4] = {0xA483868DL,0xA483868DL,0xA483868DL,0xA483868DL};
    const int8_t *l_1930 = &g_126;
    const int8_t **l_1929 = &l_1930;
    const int8_t ***l_1928 = &l_1929;
    const int8_t ****l_1927 = &l_1928;
    uint32_t l_1968[8][4] = {{2UL,1UL,2UL,0xDC5C3954L},{1UL,2UL,4294967292UL,2UL},{2UL,0UL,4294967292UL,4294967292UL},{1UL,1UL,2UL,4294967292UL},{0xDC5C3954L,0UL,0xDC5C3954L,2UL},{0xDC5C3954L,2UL,2UL,0xDC5C3954L},{1UL,2UL,4294967292UL,2UL},{2UL,0UL,4294967292UL,4294967292UL}};
    int32_t l_1988 = 0x9CEC8610L;
    uint32_t l_1993 = 0xC327587BL;
    uint16_t *l_2036 = &g_69[4];
    int32_t l_2046 = (-6L);
    int32_t l_2047 = 3L;
    int32_t l_2149 = 1L;
    uint32_t l_2171 = 0x43A65C1DL;
    uint8_t l_2174 = 0x1AL;
    const int8_t l_2220 = (-3L);
    int8_t l_2223[8] = {0x4EL,0x4EL,0x4EL,0x4EL,0x4EL,0x4EL,0x4EL,0x4EL};
    int i, j;
lbl_1873:
    for (g_415 = 0; (g_415 < (-25)); g_415--)
    { /* block id: 915 */
        int32_t l_1813 = 0xD5715D00L;
        int8_t l_1828 = 3L;
        int32_t l_1831 = 0xCCA7621AL;
        int32_t *l_1862 = &g_59[1];
        int32_t *l_1863 = &g_59[3];
        int32_t *l_1865 = &g_60[0][4][3];
        int32_t *l_1866 = &g_59[6];
        int32_t *l_1867 = (void*)0;
        int32_t *l_1868[4][4][2] = {{{&g_61,&g_36},{&g_60[0][4][1],&g_61},{&l_1831,&g_59[1]},{&l_1831,&g_61}},{{&g_60[0][4][1],&g_36},{&g_61,&l_1831},{(void*)0,&g_59[1]},{&g_59[1],&g_60[0][1][0]}},{{&g_60[0][1][0],&g_60[0][4][1]},{&g_36,&g_60[0][4][1]},{&g_60[0][1][0],&g_60[0][1][0]},{&g_59[1],&g_59[1]}},{{(void*)0,&l_1831},{&g_61,&g_36},{&g_60[0][4][1],&g_61},{&l_1831,&g_59[1]}}};
        uint8_t l_1870 = 7UL;
        int i, j, k;
        for (g_124 = 2; (g_124 >= 0); g_124 -= 1)
        { /* block id: 918 */
            uint8_t l_1803 = 0UL;
            int32_t l_1812 = 0x0A2A1D39L;
            int32_t l_1815[7][2][5] = {{{0L,0x1DDBFAEFL,0x1394708CL,(-7L),0xCF951AD2L},{9L,0x81596779L,(-7L),(-8L),0xB9144199L}},{{0x5CDB587BL,0L,0x81596779L,6L,0x08D53763L},{(-9L),0L,0L,0L,(-9L)}},{{(-1L),0x81596779L,0xB9144199L,1L,0x9F509A90L},{0xFFC6732DL,0x1DDBFAEFL,0xFAAD1AA0L,0xCF951AD2L,0xE291B965L}},{{(-7L),(-1L),0x4A8C519EL,0x81596779L,0x9F509A90L},{0xEA7A38EFL,0xCF951AD2L,6L,(-1L),(-9L)}},{{0x9F509A90L,(-9L),0xB975A64AL,0xFAAD1AA0L,0x08D53763L},{0xCF951AD2L,0xB9144199L,0xB975A64AL,0xB975A64AL,0xB9144199L}},{{0x2DAB1CE3L,8L,6L,(-1L),0xCF951AD2L},{(-1L),1L,0x4A8C519EL,0x08D53763L,0L}},{{0xB9144199L,0x4A8C519EL,0xFAAD1AA0L,0xFFC6732DL,(-1L)},{(-1L),(-1L),0xB9144199L,8L,0x4A8C519EL}}};
            int16_t *l_1843 = &g_124;
            const uint8_t *l_1858 = (void*)0;
            const uint8_t **l_1857[6][1];
            const uint8_t ***l_1856 = &l_1857[4][0];
            int i, j, k;
            for (i = 0; i < 6; i++)
            {
                for (j = 0; j < 1; j++)
                    l_1857[i][j] = &l_1858;
            }
        }
        l_1870--;
        if (g_124)
            goto lbl_1873;
    }
    if ((0xB1F92AABL == ((safe_lshift_func_int8_t_s_u(((*l_1795) , (*l_1795)), 4)) > (*g_434))))
    { /* block id: 956 */
        const int32_t *l_1884 = &l_1869[3];
        int8_t ***l_1901 = &g_435;
        int8_t * const l_1904 = (void*)0;
        int8_t * const *l_1903[1][6];
        int8_t * const **l_1902 = &l_1903[0][2];
        uint8_t l_1951 = 0xABL;
        int32_t l_1966 = 0xF42C7F39L;
        int32_t l_1967[3][8][6] = {{{7L,0x6AE2ACC6L,0L,0x34FDF0B3L,0x63305F13L,4L},{0x7CA956D1L,(-1L),0x63305F13L,0x6AE2ACC6L,4L,4L},{0L,0L,0L,0L,(-3L),0x6AE2ACC6L},{4L,(-1L),0xC143E02DL,0xB364E1CBL,0L,0x63305F13L},{0xC143E02DL,0x7CA956D1L,0L,(-1L),0L,(-1L)},{(-1L),(-1L),(-1L),4L,(-3L),0x7CA956D1L},{0x6AE2ACC6L,0L,0x34FDF0B3L,0x63305F13L,4L,(-3L)},{0xB364E1CBL,(-1L),4L,0x63305F13L,0x63305F13L,4L}},{{0x6AE2ACC6L,0x6AE2ACC6L,(-1L),7L,(-1L),(-3L)},{(-3L),0x6AE2ACC6L,0xC143E02DL,0x7CA956D1L,0L,(-1L)},{0xB364E1CBL,(-3L),0xC143E02DL,0L,0xC143E02DL,(-3L)},{4L,0L,(-1L),4L,0L,7L},{4L,0L,7L,0xC143E02DL,0x63305F13L,(-1L)},{0L,0L,(-1L),(-1L),0L,0L},{0L,0L,(-3L),0x6AE2ACC6L,0xC143E02DL,0x7CA956D1L},{(-1L),(-3L),0x63305F13L,0xB364E1CBL,0L,0x34FDF0B3L}},{{(-1L),0x6AE2ACC6L,0xB364E1CBL,0x6AE2ACC6L,(-1L),0xC143E02DL},{0L,0xC143E02DL,0L,(-1L),0x34FDF0B3L,4L},{0L,0x7CA956D1L,0x34FDF0B3L,0xC143E02DL,4L,4L},{4L,0L,0L,4L,(-1L),0xC143E02DL},{4L,(-1L),0xB364E1CBL,0L,0x6AE2ACC6L,0x34FDF0B3L},{0xB364E1CBL,0L,0x63305F13L,0x7CA956D1L,0x6AE2ACC6L,0x7CA956D1L},{(-3L),(-1L),(-3L),7L,(-1L),0L},{0xC143E02DL,0L,(-1L),0x34FDF0B3L,4L,(-1L)}}};
        int8_t l_2037 = 0L;
        int i, j, k;
        for (i = 0; i < 1; i++)
        {
            for (j = 0; j < 6; j++)
                l_1903[i][j] = &l_1904;
        }
        for (g_1509 = (-16); (g_1509 != 56); ++g_1509)
        { /* block id: 959 */
            int32_t *l_1880 = &g_36;
            int32_t **l_1881 = &l_1795;
            uint16_t **l_1896 = (void*)0;
            int16_t l_1915 = 0xADC0L;
            uint32_t l_1971 = 1UL;
            int32_t l_1990 = 0x95171AE5L;
            uint16_t ****l_2016 = &g_1324;
            for (g_131 = 24; (g_131 <= 16); --g_131)
            { /* block id: 962 */
                l_1880 = &l_1869[0];
            }
            (*l_1881) = p_43;
            for (g_510 = 0; (g_510 > (-17)); --g_510)
            { /* block id: 968 */
                const int32_t **l_1885 = &l_1884;
                (*l_1885) = l_1884;
            }
            for (g_358 = 0; (g_358 != (-19)); g_358 = safe_sub_func_uint8_t_u_u(g_358, 9))
            { /* block id: 973 */
                int8_t * const ***l_1905 = &l_1902;
                int32_t l_1909 = 0x8ABB3F3DL;
                int32_t l_1914[4][3];
                uint32_t l_1916 = 1UL;
                int16_t l_1950 = (-1L);
                uint8_t ***l_1956 = &g_658[4];
                uint8_t **l_1976 = (void*)0;
                uint32_t **l_1977 = (void*)0;
                int32_t l_2045 = (-1L);
                int32_t *** const *l_2053 = &g_454;
                int i, j;
                for (i = 0; i < 4; i++)
                {
                    for (j = 0; j < 3; j++)
                        l_1914[i][j] = 0x04CCC10CL;
                }
            }
        }
    }
    else
    { /* block id: 1063 */
        uint16_t l_2086 = 0x4952L;
        int32_t **l_2087 = &g_1591[5][6];
        const int32_t *l_2094 = (void*)0;
        const int32_t **l_2093[3][8];
        const int32_t ** const *l_2092 = &l_2093[0][7];
        const int32_t ** const **l_2091 = &l_2092;
        const int32_t ** const ***l_2090[6][3][9] = {{{&l_2091,&l_2091,&l_2091,(void*)0,(void*)0,&l_2091,&l_2091,&l_2091,(void*)0},{&l_2091,(void*)0,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,(void*)0,&l_2091},{&l_2091,(void*)0,&l_2091,(void*)0,&l_2091,&l_2091,(void*)0,&l_2091,(void*)0}},{{&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091},{&l_2091,&l_2091,(void*)0,&l_2091,(void*)0,&l_2091,&l_2091,(void*)0,&l_2091},{&l_2091,&l_2091,&l_2091,(void*)0,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091}},{{&l_2091,(void*)0,(void*)0,&l_2091,&l_2091,&l_2091,(void*)0,(void*)0,&l_2091},{&l_2091,(void*)0,&l_2091,(void*)0,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091},{(void*)0,&l_2091,&l_2091,&l_2091,&l_2091,(void*)0,&l_2091,&l_2091,&l_2091}},{{&l_2091,(void*)0,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,(void*)0,&l_2091},{&l_2091,&l_2091,&l_2091,(void*)0,(void*)0,&l_2091,&l_2091,&l_2091,&l_2091},{&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091}},{{&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,(void*)0,&l_2091,&l_2091,&l_2091},{&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091},{&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,(void*)0,&l_2091,&l_2091,&l_2091}},{{&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091},{&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,&l_2091},{&l_2091,&l_2091,&l_2091,&l_2091,&l_2091,(void*)0,&l_2091,&l_2091,&l_2091}}};
        int32_t l_2095 = 6L;
        int32_t l_2096[7] = {(-7L),(-7L),(-1L),(-7L),(-7L),(-1L),(-7L)};
        int8_t l_2105 = 0L;
        int16_t l_2140 = 0xC8C6L;
        const int8_t l_2173 = 0L;
        uint32_t **l_2189 = &g_434;
        int32_t l_2190 = (-7L);
        uint8_t ***l_2218 = &g_658[3];
        int16_t l_2235 = 0x4B03L;
        int32_t l_2237 = (-9L);
        int16_t l_2238 = 1L;
        int i, j, k;
        for (i = 0; i < 3; i++)
        {
            for (j = 0; j < 8; j++)
                l_2093[i][j] = &l_2094;
        }
        for (g_358 = (-3); (g_358 == 7); g_358 = safe_add_func_uint32_t_u_u(g_358, 9))
        { /* block id: 1066 */
            int32_t **l_2056 = &g_514;
            (*l_2056) = &l_1869[1];
            if (g_2057[4][3])
                break;
        }
        if ((*p_43))
        { /* block id: 1070 */
            int16_t l_2081 = 0xFF8CL;
            int32_t l_2102 = 0xDFDFE83FL;
            int32_t l_2103 = 0xA84F3B43L;
            int32_t l_2106 = 0x97BF29E5L;
            uint16_t *l_2132 = &g_69[6];
            int8_t *l_2138[7] = {&l_2105,&l_2105,&l_2105,&l_2105,&l_2105,&l_2105,&l_2105};
            uint16_t l_2139 = 0x7CF9L;
            int32_t *l_2141[9][5][5] = {{{&l_2102,&l_1864,&l_1988,(void*)0,&g_60[1][2][3]},{&g_60[0][4][3],&l_2102,&l_2095,&l_2096[6],&l_2095},{&l_2102,&g_60[0][4][3],&l_2095,&l_1864,&l_2096[4]},{&l_2096[4],&g_36,&l_2095,&l_2102,(void*)0},{(void*)0,&l_2095,&l_2095,&g_60[0][4][3],&l_2106}},{{&l_2102,&l_2102,&l_1988,&g_60[0][4][3],(void*)0},{&l_2102,&l_2095,&l_2095,&l_1864,&l_2096[4]},{(void*)0,&l_2095,&l_2095,&g_36,&l_2095},{&g_36,&l_2102,(void*)0,(void*)0,&g_60[1][2][3]},{&g_60[0][0][2],&l_2095,&g_60[1][1][2],&g_36,&g_36}},{{&l_2095,&g_36,(void*)0,&l_1864,&l_2096[3]},{&l_2095,&g_60[0][4][3],(void*)0,&g_60[0][4][3],&l_2095},{&g_60[0][0][2],&l_2102,&l_2096[4],&g_60[0][4][3],&l_1988},{&g_36,&l_1864,(void*)0,&l_2102,(void*)0},{(void*)0,(void*)0,(void*)0,&l_1864,(void*)0}},{{&l_2102,&l_1988,&g_60[1][1][2],&l_2096[6],&l_1988},{&l_2102,&l_2103,(void*)0,(void*)0,&l_2095},{(void*)0,&l_1988,&l_2095,&g_36,&l_2096[3]},{&l_2096[4],(void*)0,&l_2095,&g_36,&g_36},{&l_2102,&l_1864,&l_1988,(void*)0,&g_60[1][2][3]}},{{&g_60[0][4][3],&l_2102,&l_2095,&l_2096[6],&l_2095},{&l_2102,&g_60[0][4][3],&l_2095,&l_1864,&l_2096[4]},{&l_2096[4],&g_36,(void*)0,&l_2106,&l_2095},{&l_2095,&l_1988,&g_60[0][1][2],(void*)0,&g_60[0][4][3]},{(void*)0,&l_1988,&l_2103,&l_2106,&l_2095}},{{(void*)0,(void*)0,&g_60[0][4][3],&g_60[1][4][3],&l_2096[3]},{&l_2106,(void*)0,(void*)0,&l_1864,(void*)0},{&g_60[1][1][2],&l_1988,&l_2095,&l_2096[4],&l_2095},{&l_2095,&l_1988,(void*)0,&l_1864,&l_2102},{&l_1988,&g_60[1][1][2],&g_36,&g_60[1][4][3],(void*)0}},{{&l_1988,&l_2095,&l_2096[0],&l_2106,&g_60[0][1][2]},{&l_2095,&l_2102,&l_2096[3],(void*)0,(void*)0},{&g_60[1][1][2],(void*)0,&l_2096[0],&l_2106,&l_2096[0]},{&l_2106,&l_2106,&g_36,&l_1864,&l_2096[0]},{(void*)0,&g_60[1][2][3],(void*)0,&g_36,(void*)0}},{{(void*)0,&l_1988,&l_2095,&l_2096[4],&g_60[0][1][2]},{&l_2095,&g_60[1][2][3],(void*)0,&g_60[0][3][0],(void*)0},{&g_36,&l_2106,&g_60[0][4][3],&g_60[0][3][0],&l_2102},{&l_1988,(void*)0,&l_2103,&l_2096[4],&l_2095},{&l_2095,&l_2102,&g_60[0][1][2],&g_36,(void*)0}},{{&l_1988,&l_2095,(void*)0,&l_1864,&l_2096[3]},{&g_36,&g_60[1][1][2],(void*)0,&l_2106,&l_2095},{&l_2095,&l_1988,&g_60[0][1][2],(void*)0,&g_60[0][4][3]},{(void*)0,&l_1988,&l_2103,&l_2106,&l_2095},{(void*)0,(void*)0,&g_60[0][4][3],&g_60[1][4][3],&l_2096[3]}}};
            int16_t l_2170 = (-5L);
            int32_t *l_2175 = &g_59[1];
            uint8_t l_2240 = 0UL;
            uint16_t l_2243[9] = {5UL,65529UL,5UL,65529UL,5UL,65529UL,5UL,65529UL,5UL};
            int i, j, k;
            for (g_61 = 0; (g_61 <= 3); g_61 += 1)
            { /* block id: 1073 */
                int8_t l_2071 = 0x1AL;
                int32_t ** const *l_2078 = &g_455;
                int32_t ** const **l_2077 = &l_2078;
                int32_t ** const ***l_2076 = &l_2077;
                int32_t l_2101[5][1] = {{0xB5C5EAD7L},{4L},{0xB5C5EAD7L},{4L},{0xB5C5EAD7L}};
                int16_t l_2104 = 1L;
                int i, j;
                for (g_358 = 0; (g_358 <= 0); g_358 += 1)
                { /* block id: 1076 */
                    uint32_t **l_2069 = &g_434;
                    uint32_t ***l_2068 = &l_2069;
                    int32_t l_2070 = 9L;
                    if (((*p_43) = ((*g_146) = 0xE83D4D8CL)))
                    { /* block id: 1079 */
                        (*g_146) = 0x04E90537L;
                    }
                    else
                    { /* block id: 1081 */
                        int i, j;
                        (*p_43) = ((((safe_rshift_func_uint16_t_u_s(g_31[g_358], 0)) || (safe_sub_func_int16_t_s_s((-1L), (safe_rshift_func_int16_t_s_u((g_31[g_358] != ((l_1968[g_358][g_61] || (safe_add_func_int32_t_s_s(((*g_146) = ((safe_sub_func_int32_t_s_s(((((~(!(~(+(*l_1795))))) , 0xFAC5F3D3L) , p_43) == p_43), ((void*)0 != l_2068))) , 0L)), (*g_434)))) <= (-7L))), 6))))) <= l_2070) >= l_2071);
                    }
                }
                if ((safe_div_func_uint32_t_u_u(((((*g_146) = (safe_unary_minus_func_int16_t_s((g_2075 != l_2076)))) , (safe_add_func_int32_t_s_s((*p_43), (*g_514)))) & (l_2081 != ((safe_add_func_int32_t_s_s(0xAE26118AL, (safe_mul_func_uint16_t_u_u(l_2086, (!(l_2095 = (((l_2087 == (g_1590 = ((safe_sub_func_uint32_t_u_u(0xEE70B60DL, (*g_514))) , l_2087))) , g_2075) != l_2090[1][2][6]))))))) , 0x877CL))), l_2081)))
                { /* block id: 1089 */
                    int32_t *l_2097 = &l_1988;
                    int32_t *l_2098 = &g_59[1];
                    int32_t *l_2099 = &l_2096[4];
                    int32_t *l_2100[3];
                    uint32_t l_2107 = 0x9327F5E4L;
                    int i;
                    for (i = 0; i < 3; i++)
                        l_2100[i] = &l_1869[0];
                    l_2107++;
                    for (l_2046 = 1; (l_2046 <= 5); l_2046 += 1)
                    { /* block id: 1093 */
                        const int16_t l_2110 = 0L;
                        if (l_2110)
                            break;
                    }
                }
                else
                { /* block id: 1096 */
                    int16_t l_2117[4] = {0x585BL,0x585BL,0x585BL,0x585BL};
                    int i;
                    for (l_1988 = 4; (l_1988 >= 0); l_1988 -= 1)
                    { /* block id: 1099 */
                        uint8_t *l_2124[6][3][8] = {{{(void*)0,(void*)0,&g_31[0],&g_31[0],(void*)0,(void*)0,&g_131,(void*)0},{(void*)0,(void*)0,&g_131,(void*)0,(void*)0,&g_31[0],&g_31[0],(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0}},{{(void*)0,(void*)0,(void*)0,&g_31[0],&g_131,&g_131,&g_31[0],(void*)0},{(void*)0,(void*)0,&g_131,(void*)0,(void*)0,(void*)0,&g_131,(void*)0},{(void*)0,(void*)0,&g_31[0],&g_131,&g_131,&g_31[0],(void*)0,(void*)0}},{{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,&g_31[0],&g_31[0],&g_31[0],(void*)0,(void*)0,(void*)0},{&g_31[0],(void*)0,(void*)0,(void*)0,&g_31[0],&g_131,&g_131,&g_31[0]}},{{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,&g_31[0],(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,&g_131,(void*)0,(void*)0,&g_131,(void*)0},{(void*)0,(void*)0,(void*)0,&g_31[0],(void*)0,&g_31[0],(void*)0,(void*)0}},{{(void*)0,(void*)0,&g_131,(void*)0,(void*)0,&g_131,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,&g_31[0],(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,&g_31[0],&g_131,&g_131,&g_31[0],(void*)0,(void*)0,(void*)0}},{{&g_31[0],(void*)0,(void*)0,(void*)0,&g_31[0],&g_131,&g_131,&g_31[0]},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,&g_31[0],(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,&g_131,(void*)0,(void*)0,&g_131,(void*)0}}};
                        int i, j, k;
                        (*p_43) |= (safe_div_func_int16_t_s_s((safe_mul_func_uint8_t_u_u(g_408[(g_61 + 2)][(g_61 + 4)], ((safe_add_func_uint8_t_u_u(((l_2103 > l_2117[0]) , ((((((*g_1846) ^ (safe_mul_func_uint8_t_u_u(((~((((safe_lshift_func_uint16_t_u_u(l_2102, (safe_lshift_func_uint8_t_u_u(((*l_1795) = g_408[(g_61 + 2)][(g_61 + 4)]), 7)))) , (safe_sub_func_int32_t_s_s((((*l_2076) = g_2127) != (void*)0), (*l_1795)))) == (-1L)) >= l_2117[2])) <= (*g_434)), 2L))) , l_2106) == g_408[(g_61 + 2)][(g_61 + 4)]) , (-7L)) >= g_1096[0])), 0UL)) == (*g_434)))), 0x2AABL));
                    }
                    (*p_43) &= ((*l_1795) = l_2081);
                }
                for (g_436 = 0; (g_436 <= 5); g_436 += 1)
                { /* block id: 1109 */
                    (***l_2091) = p_43;
                }
            }
            g_36 |= ((~(safe_rshift_func_uint8_t_u_u(((((safe_lshift_func_uint8_t_u_s(((*l_1795) > (((*g_514) ^= (((void*)0 == l_2132) >= (((void*)0 == &g_434) == (((*g_1846) &= (*l_1795)) || (safe_mod_func_int32_t_s_s((*p_43), (safe_add_func_int8_t_s_s((g_510 ^= (!((safe_unary_minus_func_uint8_t_u((*l_1795))) != (*g_434)))), l_2139)))))))) , 0x3B27455CL)), (*l_1795))) < (*g_146)) , (*l_1795)) > l_2140), l_2081))) != (*l_1795));
            for (l_2086 = 0; (l_2086 <= 5); l_2086 += 1)
            { /* block id: 1119 */
                uint32_t l_2148 = 0x2EC0A92AL;
                uint8_t *l_2167 = &g_131;
                int16_t *l_2172[7][7] = {{&l_2170,&g_775,(void*)0,&l_2081,&g_775,&l_2081,(void*)0},{&g_775,&g_775,&l_2081,&g_775,&g_2156,&l_2081,&g_2156},{&g_775,(void*)0,(void*)0,&g_775,&l_2081,&l_2170,&g_775},{&l_2170,&g_2156,&l_2081,&l_2081,&g_2156,&l_2170,(void*)0},{&g_2156,&g_775,&l_2081,&g_775,&g_775,&l_2081,&g_775},{&g_2156,(void*)0,&l_2170,&g_2156,&l_2081,&l_2081,&g_2156},{&l_2170,&g_775,&l_2170,&l_2081,&g_775,(void*)0,(void*)0}};
                uint16_t l_2210 = 65530UL;
                int32_t l_2221 = 0x2F3755E1L;
                int32_t l_2222[3];
                int32_t l_2224 = 0x60EE7009L;
                int32_t l_2226 = 2L;
                int32_t l_2227 = 0xEA617DEEL;
                int32_t l_2228[1];
                int i, j;
                for (i = 0; i < 3; i++)
                    l_2222[i] = 0x6F7B8276L;
                for (i = 0; i < 1; i++)
                    l_2228[i] = (-1L);
                (***l_2091) = (**l_2092);
                if ((*l_1795))
                    break;
                l_1795 = (((((safe_div_func_uint16_t_u_u((4294967295UL ^ (((safe_sub_func_uint16_t_u_u(((l_2095 = (*l_1795)) || (((g_775 |= (safe_mul_func_uint8_t_u_u((((l_2148 && l_2149) != (safe_sub_func_uint16_t_u_u(((*g_434) && ((((safe_sub_func_int16_t_s_s((safe_rshift_func_int16_t_s_s((l_2148 , ((*g_1846) = ((((*g_713) = (*g_713)) | ((((g_2156 , ((safe_rshift_func_int8_t_s_s((safe_div_func_int8_t_s_s(((safe_add_func_int8_t_s_s(((safe_add_func_int32_t_s_s((safe_sub_func_uint8_t_u_u(((*l_2167)--), (((4UL ^ (*g_1846)) , (*g_146)) & (*g_146)))), (*g_434))) && l_2170), 0xEFL)) < 0x9E20L), g_31[0])), (*l_1795))) <= 0xFE4DL)) == 5UL) , (*l_1795)) || l_2148)) == (*l_1795)))), (*l_1795))), l_2148)) ^ l_2171) & 253UL) & (*p_43))), 65535UL))) || (*l_1795)), g_436))) , l_2173) >= l_2148)), l_2148)) <= (*l_1795)) , 0xC481E029L)), 1L)) ^ l_2148) >= (*g_434)) <= l_2174) , l_2175);
                for (l_2139 = 1; (l_2139 <= 6); l_2139 += 1)
                { /* block id: 1130 */
                    uint8_t *l_2176 = &g_31[0];
                    uint16_t *l_2183 = &g_1758[3][0][1];
                    int32_t l_2209 = 1L;
                    uint32_t l_2211[2][9];
                    int32_t l_2229 = 0xF892FDB3L;
                    int32_t l_2230 = 0xD0E01647L;
                    int32_t l_2231 = 1L;
                    int32_t l_2232 = 4L;
                    int32_t l_2233[9] = {(-10L),(-10L),0xEFA8FB7FL,(-10L),(-10L),0xEFA8FB7FL,(-10L),(-10L),0xEFA8FB7FL};
                    int i, j;
                    for (i = 0; i < 2; i++)
                    {
                        for (j = 0; j < 9; j++)
                            l_2211[i][j] = 0x465FC43EL;
                    }
                    for (g_131 = 1; (g_131 <= 4); g_131 += 1)
                    { /* block id: 1133 */
                        const uint16_t **l_2180 = (void*)0;
                        const uint16_t *l_2182[6][9][4];
                        const uint16_t **l_2181 = &l_2182[2][6][3];
                        int32_t l_2186 = 0xE8A6026BL;
                        int i, j, k;
                        for (i = 0; i < 6; i++)
                        {
                            for (j = 0; j < 9; j++)
                            {
                                for (k = 0; k < 4; k++)
                                    l_2182[i][j][k] = &g_961;
                            }
                        }
                        (*g_146) ^= (l_2176 != ((((((g_510 = (((safe_unary_minus_func_int16_t_s(((l_2036 = &l_2139) != ((safe_rshift_func_uint16_t_u_u((((*l_2181) = &l_2086) == l_2183), 2)) , (((((((safe_lshift_func_int16_t_s_u((9UL >= l_2186), 14)) , ((safe_sub_func_int8_t_s_s((((+(&g_434 == ((*g_434) , l_2189))) || (*g_1846)) , g_138[3]), l_2190)) , (*l_1795))) & (-10L)) < l_2148) <= l_2148) , 0UL) , (void*)0))))) < (*p_43)) > l_2148)) , l_2148) >= 0xB2L) , &l_1928) == &l_1928) , l_2167));
                        l_2141[l_2139][g_131][g_131] = ((safe_lshift_func_int16_t_s_s(((*g_1846) = (((((safe_sub_func_int16_t_s_s(((((((5L && 0x0CL) > (0L <= (l_2186 || l_2148))) || (g_126 = l_2148)) ^ ((safe_mod_func_int8_t_s_s(((((*l_1795) = (((safe_add_func_uint32_t_u_u((((**l_2189) = (((safe_mul_func_int16_t_s_s(((safe_mul_func_uint8_t_u_u(((((((safe_rshift_func_uint8_t_u_u(((*l_2176) = (*l_1795)), 2)) | (((safe_rshift_func_uint16_t_u_u(65535UL, (((safe_rshift_func_uint8_t_u_u((*l_1795), 3)) & 0xF2244D35L) ^ l_2148))) <= 0x883EL) | 0x30L)) <= l_2186) & l_2186) != (*g_434)) != l_2186), 247UL)) && 0x03BCL), (*g_1846))) && (*l_1795)) ^ 0xB4BFL)) == l_2148), 1UL)) , 0UL) > l_2186)) && l_2209) != l_2209), 0x52L)) | (-1L))) < l_2148) < l_2209), (*g_1846))) , (void*)0) == (void*)0) | l_2210) != l_2186)), l_2211[0][5])) , g_1591[l_2086][l_2086]);
                        (*p_43) ^= (!(safe_add_func_int16_t_s_s((safe_lshift_func_int8_t_s_s((l_2209 , 0x98L), 2)), (((((*l_2175) |= (l_2221 = (l_2209 <= ((*l_2176) = ((+l_2186) || ((*g_146) | (!(safe_div_func_int32_t_s_s(0L, (((l_2210 , &g_658[3]) != (g_2219 = l_2218)) & l_2220)))))))))) > (*g_434)) && (*l_2175)) <= 3L))));
                    }
                    for (l_2105 = 0; (l_2105 <= 6); l_2105 += 1)
                    { /* block id: 1152 */
                        return (*l_1795);
                    }
                    ++l_2240;
                }
            }
            (*g_514) ^= (l_2243[6] ^ 0x9B59B1E0L);
        }
        else
        { /* block id: 1159 */
            int8_t *l_2247 = &g_2239;
            int8_t * const l_2248[6] = {&g_2,&g_2,&g_2,&g_2,&g_2,&g_2};
            int i;
            l_2096[4] ^= (safe_div_func_uint32_t_u_u(((l_2247 = (g_2246 = &l_2105)) == l_2248[4]), 6UL));
        }
    }
    p_43 = &l_1988;
    return (*l_1795);
}


/* ------------------------------------------ */
/* 
 * reads : g_126 g_434 g_138 g_514 g_59 g_713 g_69 g_146 g_60 g_775 g_436 g_124 g_358 g_454 g_455 g_435 g_408 g_360 g_415 g_131 g_961 g_1096 g_510 g_145 g_37 g_61 g_992 g_993 g_1202 g_36 g_1250 g_712 g_1312 g_2 g_1324 g_31 g_1590 g_658 g_659 g_1509 g_1758
 * writes: g_415 g_60 g_59 g_775 g_138 g_436 g_69 g_126 g_124 g_358 g_408 g_658 g_360 g_61 g_131 g_510 g_145 g_37 g_454 g_1324 g_712 g_31 g_1483 g_659 g_435 g_1509 g_36 g_1758 g_514
 */
static int32_t ** func_44(const int16_t  p_45, uint16_t  p_46, uint16_t  p_47, int8_t  p_48)
{ /* block id: 453 */
    uint32_t l_789 = 3UL;
    int8_t *l_790 = &g_415;
    uint16_t *l_793[2][1];
    int32_t ***l_824 = &g_455;
    int32_t l_825 = 8L;
    uint32_t l_826 = 0xD587BD29L;
    int32_t *l_827 = (void*)0;
    int32_t l_851 = 0xD020B236L;
    int32_t l_855 = 0x2CE1D691L;
    int32_t l_856 = 0L;
    int32_t l_857[10] = {(-8L),0xCA3E0D9AL,0xF01EADB4L,0xF01EADB4L,0xCA3E0D9AL,(-8L),0xCA3E0D9AL,0xF01EADB4L,0xF01EADB4L,0xCA3E0D9AL};
    int32_t l_858 = (-6L);
    uint32_t l_860 = 7UL;
    uint16_t **l_874 = &l_793[0][0];
    int16_t l_919 = 0xCBE8L;
    const uint16_t *l_963 = (void*)0;
    const uint16_t **l_962 = &l_963;
    const uint16_t **l_964 = &l_963;
    const uint8_t l_1041[3][8][7] = {{{0xC9L,0xE7L,0xEFL,0x0CL,0x6BL,0xC2L,0xC9L},{0x14L,1UL,250UL,0xEFL,0xC9L,247UL,0xE7L},{1UL,246UL,247UL,249UL,0UL,255UL,1UL},{0xC9L,246UL,0x09L,7UL,255UL,0x99L,0x04L},{0xE5L,7UL,0x7DL,0x7DL,3UL,0x1BL,0x82L},{255UL,246UL,1UL,0x8FL,0xE5L,255UL,0xC2L},{247UL,255UL,255UL,0xEFL,0UL,0x60L,0x7DL},{0x23L,246UL,3UL,251UL,250UL,247UL,0xCAL}},{{0x09L,3UL,0xFBL,247UL,255UL,246UL,0xE5L},{1UL,0xCAL,0UL,0xE5L,0UL,255UL,9UL},{0x6CL,1UL,0x82L,0x71L,0xABL,0x38L,0x29L},{9UL,0xE5L,246UL,255UL,247UL,0xFBL,3UL},{255UL,247UL,0x29L,255UL,0x38L,0UL,1UL},{0x23L,0xEFL,0x9AL,0x71L,0x6BL,0x5EL,0x82L},{8UL,0xC2L,255UL,0xE5L,0x8FL,1UL,246UL},{0UL,255UL,0xABL,247UL,0x71L,0x71L,247UL}},{{0x1BL,255UL,0x1BL,251UL,0xC2L,247UL,0x29L},{246UL,0UL,255UL,0xEFL,1UL,246UL,1UL},{0xABL,0x29L,0x60L,0x8FL,0xB9L,247UL,0x99L},{0x6CL,0x1AL,247UL,0xB9L,9UL,0x71L,0xCAL},{0x8FL,0x9CL,246UL,246UL,0x5FL,1UL,0xEFL},{253UL,0x29L,255UL,1UL,0x38L,0x5EL,246UL},{0xABL,0x5FL,0x38L,0UL,0UL,0UL,0x82L},{0xEFL,0x09L,0xFBL,0x14L,1UL,0xFBL,255UL}}};
    int8_t ***l_1061 = &g_435;
    int8_t ***l_1064 = &g_435;
    uint8_t l_1067 = 248UL;
    int32_t *l_1124 = &l_825;
    int32_t **l_1123 = &l_1124;
    int8_t l_1173[1];
    int32_t l_1178 = (-10L);
    uint32_t l_1365 = 0xC69FFE11L;
    int16_t l_1432 = 0x41AEL;
    uint32_t l_1561 = 8UL;
    int32_t l_1572 = 0xF6720B70L;
    uint8_t ***l_1593[4];
    uint8_t *l_1594 = &l_1067;
    uint32_t l_1670 = 1UL;
    uint32_t *l_1691 = &g_408[4][8];
    uint16_t ** const **l_1710 = &g_993;
    int32_t l_1742[8][4][5] = {{{0x0F03A4D8L,1L,(-1L),5L,1L},{0xAE8F677BL,(-1L),0x2EAAF741L,0x2EAAF741L,(-1L)},{(-5L),1L,(-1L),1L,3L},{0L,2L,0x1BFB8ECBL,(-1L),0xE39D686EL}},{{8L,(-5L),(-5L),8L,0x485B1D2AL},{0L,0x2EAAF741L,0x63768321L,0x2619FB32L,(-1L)},{(-5L),0xA73697A5L,0x8F9D8BBDL,(-1L),0x8F9D8BBDL},{0xAE8F677BL,0xAE8F677BL,(-1L),0x2619FB32L,0x63768321L}},{{0x0F03A4D8L,5L,0x485B1D2AL,8L,(-5L)},{0x1BFB8ECBL,(-1L),0xE39D686EL,(-1L),0x1BFB8ECBL},{0xE1025F8AL,5L,3L,1L,(-1L)},{0xE4018007L,(-1L),0L,(-1L),(-1L)}},{{1L,0xE1025F8AL,1L,1L,0x485B1D2AL},{0x1BFB8ECBL,(-1L),(-1L),2L,0x2EAAF741L},{0x485B1D2AL,8L,(-5L),(-5L),8L},{0L,0x63768321L,(-1L),0x2EAAF741L,0xE39D686EL}},{{0xE1025F8AL,3L,1L,0xA73697A5L,0x0F03A4D8L},{0xAE8F677BL,0L,0L,0xAE8F677BL,0L},{0xE1025F8AL,(-5L),0x8F9D8BBDL,5L,0xA73697A5L},{0L,0x2619FB32L,1L,(-1L),1L}},{{0x485B1D2AL,0x485B1D2AL,0xA73697A5L,5L,0x8F9D8BBDL},{0x1BFB8ECBL,2L,0L,0xAE8F677BL,0L},{1L,0xA73697A5L,0x0F03A4D8L,0xA73697A5L,1L},{0xE4018007L,2L,0xE39D686EL,0x2EAAF741L,(-1L)}},{{5L,0x485B1D2AL,8L,(-5L),(-5L)},{0x2EAAF741L,0x2619FB32L,0x2EAAF741L,2L,(-1L)},{1L,(-5L),0x485B1D2AL,1L,1L},{(-1L),0L,(-1L),(-1L),0L}},{{8L,3L,0x485B1D2AL,1L,0x8F9D8BBDL},{0x2619FB32L,0x63768321L,0x2EAAF741L,0L,1L},{(-1L),8L,8L,(-1L),0xA73697A5L},{0x2619FB32L,(-1L),0xE39D686EL,0xE4018007L,0L}}};
    int i, j, k;
    for (i = 0; i < 2; i++)
    {
        for (j = 0; j < 1; j++)
            l_793[i][j] = &g_145;
    }
    for (i = 0; i < 1; i++)
        l_1173[i] = (-1L);
    for (i = 0; i < 4; i++)
        l_1593[i] = &g_658[3];
    if ((safe_lshift_func_uint8_t_u_s((((safe_add_func_int32_t_s_s(((*g_146) = (p_45 != (((g_126 != ((&g_69[4] != ((+(safe_sub_func_uint16_t_u_u(((safe_sub_func_uint32_t_u_u((*g_434), p_46)) > ((safe_mul_func_uint8_t_u_u((0x40L ^ ((*l_790) = (safe_unary_minus_func_uint8_t_u(l_789)))), (p_48 = (safe_lshift_func_int16_t_s_u((-6L), ((((((*g_434) ^ (*g_514)) , (*g_713)) , (*g_514)) > p_46) | 0x6DC26841L)))))) ^ p_47)), 65535UL))) , l_793[0][0])) && 0x8ACC9E21L)) | p_46) || 0xBD077CC9L))), l_789)) <= p_46) != p_45), l_789)))
    { /* block id: 457 */
        uint32_t * const l_796 = &g_436;
        int32_t l_810 = 0x310EDFCEL;
        int16_t *l_811 = &g_775;
        int8_t l_844 = 0xF9L;
        int32_t *l_845 = &g_59[4];
        int32_t l_846 = 0x652F5472L;
        int32_t *l_847 = (void*)0;
        int32_t *l_848 = (void*)0;
        int32_t *l_849 = (void*)0;
        int32_t *l_850 = &g_59[1];
        int32_t *l_852 = &l_846;
        int32_t *l_853 = &g_61;
        int32_t *l_854[3];
        int16_t l_859 = 0L;
        int i;
        for (i = 0; i < 3; i++)
            l_854[i] = &g_60[0][4][3];
        if ((safe_sub_func_int32_t_s_s((l_796 != (((((((((safe_lshift_func_int8_t_s_u((safe_unary_minus_func_uint8_t_u((safe_rshift_func_uint8_t_u_u((((*g_434) |= (safe_div_func_int8_t_s_s((((*g_146) != (((void*)0 == &g_69[2]) > ((*l_811) ^= ((safe_mod_func_int32_t_s_s(5L, ((*g_514) = (safe_sub_func_uint8_t_u_u(((l_789 <= (safe_sub_func_int32_t_s_s((+p_45), (!l_810)))) , p_46), p_46))))) , p_47)))) > p_48), p_48))) > 0x42A497C5L), 2)))), l_810)) | l_810) & 8UL) >= p_46) <= l_789) , &l_793[0][0]) != &l_793[0][0]) && (*g_514)) , (void*)0)), 0x2E530132L)))
        { /* block id: 461 */
            int32_t l_821 = 7L;
            (*g_514) = (safe_div_func_int16_t_s_s((g_59[1] == (safe_sub_func_int8_t_s_s((0x3683L ^ (((safe_rshift_func_int8_t_s_s((safe_unary_minus_func_int16_t_s((((safe_mod_func_int8_t_s_s((((*l_790) = l_821) && (safe_rshift_func_int16_t_s_s((((((((((((((0x42L < (l_824 == (void*)0)) , ((*g_146) &= (((*l_796) |= l_810) , l_810))) >= 1L) , l_825) & p_46) , 1L) , 0xFEL) , (-1L)) & 0x050B61B1L) && (*g_434)) < p_45) , (void*)0) != (void*)0), 2))), p_46)) > p_48) >= g_124))), l_810)) <= g_358) < l_826)), 5UL))), 65535UL));
            l_827 = &g_60[0][4][3];
        }
        else
        { /* block id: 467 */
            const int16_t l_834 = 1L;
            int32_t ** const l_843[8] = {&g_514,&g_514,&g_514,&g_514,&g_514,&g_514,&g_514,&g_514};
            int i;
            (*g_514) ^= (0x3980058AL <= (-8L));
            (*g_146) = (safe_lshift_func_uint16_t_u_u((safe_mod_func_int32_t_s_s(((safe_mul_func_uint8_t_u_u(l_834, ((safe_div_func_uint32_t_u_u((safe_div_func_int16_t_s_s(((safe_sub_func_uint32_t_u_u(0x27FAB59DL, (++(*g_434)))) == ((((*g_454) == l_843[5]) ^ (((*g_713) != (p_46 = (*g_713))) != ((*l_811) = ((p_47 || 4294967289UL) , (l_810 = g_59[1]))))) , l_844)), 0x917AL)), p_48)) == p_45))) >= 0x45993A07L), p_47)), (*g_713)));
        }
        --l_860;
    }
    else
    { /* block id: 476 */
        uint16_t ***l_873[10] = {&g_712,&g_712,&g_712,&g_712,&g_712,&g_712,&g_712,&g_712,&g_712,&g_712};
        int32_t l_879 = (-2L);
        int32_t *l_880 = &g_60[0][4][1];
        uint32_t l_990[3];
        int8_t ***l_1063 = &g_435;
        int8_t ***l_1065 = &g_435;
        int32_t ****l_1071 = &g_454;
        int32_t l_1108[2];
        int32_t l_1182 = 0xF31FF310L;
        uint32_t l_1249 = 0x30B3AA77L;
        uint8_t l_1382 = 1UL;
        uint8_t l_1431[3];
        uint8_t ***l_1435 = &g_658[2];
        uint8_t *l_1479 = (void*)0;
        uint8_t *l_1480 = &l_1431[2];
        uint32_t l_1485[2][6][9] = {{{0x001AC486L,1UL,0xD4514F8AL,0x7B4E6C99L,4294967293UL,0x43196522L,0x43196522L,4294967293UL,0x7B4E6C99L},{4294967295UL,0x0ACDEEBDL,4294967295UL,3UL,4294967290UL,0xF5ACFD47L,0x66335B3AL,4294967290UL,0x5C4275B8L},{0x001AC486L,0x972DEFA1L,0x0646B95BL,0x7B4E6C99L,1UL,1UL,0x43196522L,1UL,4294967295UL},{4294967295UL,4294967288UL,0x6102B2CFL,3UL,0x0ACDEEBDL,0x66335B3AL,0x66335B3AL,0x0ACDEEBDL,3UL},{0x001AC486L,4294967293UL,0x001AC486L,0x7B4E6C99L,0x972DEFA1L,0x4F90B9DFL,0x43196522L,0x972DEFA1L,0x05838E02L},{4294967295UL,4294967290UL,4294967295UL,3UL,4294967288UL,0x22B6C2F9L,0x66335B3AL,4294967288UL,0xBB659700L}},{{0x001AC486L,1UL,0xD4514F8AL,0x7B4E6C99L,4294967293UL,0x43196522L,0x43196522L,4294967293UL,0x7B4E6C99L},{4294967295UL,0x0ACDEEBDL,4294967295UL,3UL,4294967290UL,4294967295UL,0UL,0x66335B3AL,0x8121F976L},{4294967295UL,0x43196522L,0x55E71AF7L,0x6C626E1CL,1UL,0x2A49B2C7L,4UL,1UL,0xC95BEA71L},{0x9FBED03EL,0x22B6C2F9L,4294967295UL,0x5A1F2CF3L,0xF5ACFD47L,0UL,0UL,0xF5ACFD47L,0x5A1F2CF3L},{4294967295UL,0x4F90B9DFL,4294967295UL,0x6C626E1CL,0x43196522L,0x764EA846L,4UL,0x43196522L,8UL},{0x9FBED03EL,0x66335B3AL,0x5B65FAAEL,0x5A1F2CF3L,0x22B6C2F9L,0x4FA3FF0EL,0UL,0x22B6C2F9L,0x7F81A6ADL}}};
        uint32_t l_1538 = 18446744073709551606UL;
        uint32_t l_1542 = 0x5126608CL;
        const int8_t l_1564 = 0xCFL;
        int16_t l_1674 = 0L;
        uint32_t l_1675[4][2][6] = {{{9UL,9UL,0UL,0x1A6A88C2L,0UL,9UL},{0UL,4294967295UL,0x1A6A88C2L,0x1A6A88C2L,4294967295UL,0UL}},{{9UL,0UL,0x1A6A88C2L,0UL,9UL,9UL},{4294967295UL,0UL,0UL,4294967295UL,4294967295UL,4294967295UL}},{{4294967295UL,4294967295UL,4294967295UL,0UL,0UL,4294967295UL},{9UL,9UL,0UL,0x1A6A88C2L,0UL,9UL}},{{0UL,4294967295UL,0x1A6A88C2L,0x1A6A88C2L,4294967295UL,0UL},{9UL,0UL,0x1A6A88C2L,0UL,9UL,9UL}}};
        uint8_t l_1682 = 249UL;
        int32_t l_1755 = 0L;
        uint8_t l_1776 = 248UL;
        int i, j, k;
        for (i = 0; i < 3; i++)
            l_990[i] = 4294967295UL;
        for (i = 0; i < 2; i++)
            l_1108[i] = 0xA99751B8L;
        for (i = 0; i < 3; i++)
            l_1431[i] = 0UL;
        if ((safe_rshift_func_int8_t_s_s(0L, (((((safe_rshift_func_int16_t_s_s((((((safe_lshift_func_int16_t_s_s(((p_45 || (!(((*g_713)--) > p_48))) , (safe_mod_func_uint16_t_u_u((((&g_713 != (l_874 = &g_713)) , (++(*g_713))) != 0x7FDBL), (((p_45 && ((safe_sub_func_int16_t_s_s((((((&g_713 == &g_713) != 0x7EC58B7AL) , 0x7A3783A8L) == l_879) & p_47), 1UL)) != 2UL)) || 0UL) && l_879)))), g_775)) < 0xDACD2365L) == l_879) == 0UL) > p_48), 7)) == l_879) , (*g_434)) || p_47) >= p_46))))
        { /* block id: 480 */
            uint16_t l_892 = 0x8211L;
            int32_t *l_941 = (void*)0;
            int32_t *l_944 = &l_851;
            uint16_t ****l_1005 = &l_873[3];
            l_880 = &l_879;
            if (((p_47 | 0x59C7L) == ((*g_434) = ((p_45 || (*g_434)) >= (safe_lshift_func_int16_t_s_u((safe_mod_func_int32_t_s_s(((*g_434) && (safe_unary_minus_func_uint16_t_u((p_47 ^ (0x8C6AL | ((safe_lshift_func_uint8_t_u_u(((((safe_lshift_func_uint8_t_u_u(0x1BL, p_47)) != (*l_880)) != g_59[1]) , l_892), 3)) & 0xA9L)))))), (*l_880))), p_48))))))
            { /* block id: 483 */
                int32_t *l_925 = (void*)0;
                int32_t **l_945 = &l_827;
                uint8_t l_954 = 0xC4L;
                const uint16_t *l_960 = &g_961;
                const uint16_t **l_959 = &l_960;
                const uint16_t ***l_958[6];
                int i;
                for (i = 0; i < 6; i++)
                    l_958[i] = &l_959;
                for (g_126 = 2; (g_126 > 7); ++g_126)
                { /* block id: 486 */
                    int16_t *l_913 = (void*)0;
                    int16_t *l_914 = (void*)0;
                    int16_t *l_915 = &g_124;
                    int32_t l_916 = 0x331B7C2BL;
                    uint32_t *l_917[2][9] = {{&l_826,(void*)0,(void*)0,&l_826,(void*)0,&l_826,(void*)0,(void*)0,&l_826},{(void*)0,(void*)0,&l_789,(void*)0,(void*)0,(void*)0,(void*)0,&l_789,(void*)0}};
                    int32_t l_918[9];
                    int32_t l_920[4];
                    int16_t *l_921 = &g_775;
                    int i, j;
                    for (i = 0; i < 9; i++)
                        l_918[i] = 2L;
                    for (i = 0; i < 4; i++)
                        l_920[i] = 9L;
                    (*l_880) = (safe_add_func_uint32_t_u_u((~(safe_add_func_int32_t_s_s(0x2B42C6FBL, (((*l_921) |= (((safe_rshift_func_int16_t_s_u((safe_mul_func_uint8_t_u_u((p_48 ^ ((((safe_mul_func_uint16_t_u_u((p_45 <= (safe_lshift_func_uint8_t_u_u(((void*)0 != &g_454), 4))), ((safe_mul_func_int16_t_s_s(((safe_lshift_func_uint8_t_u_s(p_46, 6)) ^ (-1L)), ((l_918[4] = (safe_add_func_uint16_t_u_u(((((l_916 &= (p_47 , (((((((*l_915) = g_138[3]) > p_47) < p_45) < p_45) & 6UL) | 0xCCFFEDAEL))) ^ 0x8F8481BCL) | (*l_880)) , p_45), l_892))) , l_919))) == 251UL))) >= p_46) , (*l_880)) || 0xB3L)), l_920[1])), 14)) >= 0x4644L) , 1L)) != 0x0A15L)))), (*g_434)));
                    for (g_358 = 0; (g_358 == (-9)); g_358 = safe_sub_func_int32_t_s_s(g_358, 7))
                    { /* block id: 494 */
                        int32_t *l_924 = (void*)0;
                        uint32_t *l_940 = &g_408[2][5];
                        int32_t **l_942 = &l_924;
                        uint8_t ***l_943 = &g_658[3];
                        l_925 = l_924;
                        l_918[4] ^= (((safe_lshift_func_uint8_t_u_s(((safe_mod_func_uint16_t_u_u((g_435 == g_435), (((*g_514) = p_48) && ((*g_434) = (*l_880))))) > 4UL), p_47)) >= (((safe_div_func_int32_t_s_s((((*g_146) = l_892) && ((*l_940) &= (safe_lshift_func_int16_t_s_u((safe_sub_func_uint8_t_u_u((safe_mul_func_uint8_t_u_u((9UL < ((safe_add_func_uint8_t_u_u(p_48, p_47)) > l_892)), l_892)), (-1L))), 14)))), (*l_880))) || 0UL) || 255UL)) <= l_920[1]);
                        (*l_942) = l_941;
                        (*l_943) = &g_659;
                    }
                    (*g_514) = (p_48 && (-1L));
                }
                (*l_945) = l_944;
                for (g_775 = 0; (g_775 >= (-1)); g_775 = safe_sub_func_uint16_t_u_u(g_775, 1))
                { /* block id: 509 */
                    uint16_t l_957 = 1UL;
                    for (g_360 = 8; (g_360 >= 0); g_360 -= 1)
                    { /* block id: 512 */
                        int i;
                        (*l_827) = g_69[g_360];
                    }
                    for (l_826 = 7; (l_826 > 57); l_826 = safe_add_func_uint8_t_u_u(l_826, 2))
                    { /* block id: 517 */
                        int32_t *l_950 = &g_60[0][4][3];
                        int32_t *l_951 = &g_59[4];
                        int32_t *l_952 = &l_851;
                        int32_t *l_953[6][7][6] = {{{&l_851,&l_857[1],&g_36,(void*)0,(void*)0,&g_61},{&l_851,&l_857[1],&g_36,&g_60[0][4][3],&l_857[1],&l_857[1]},{(void*)0,&l_851,&l_851,(void*)0,&l_851,(void*)0},{&g_60[0][4][3],&g_36,&l_857[1],&l_851,&g_61,&l_857[4]},{(void*)0,&g_36,&l_857[1],&l_851,&g_61,&g_60[0][4][3]},{&g_61,&g_36,(void*)0,&g_60[1][0][3],&l_851,&g_60[1][0][3]},{&g_60[1][1][0],&l_851,&g_60[1][1][0],&l_857[1],&l_857[1],&g_61}},{{&g_61,&l_857[1],&l_857[4],&l_857[1],(void*)0,&g_36},{&l_857[1],&l_857[1],&g_61,&l_857[1],&l_879,&l_857[1]},{&g_61,(void*)0,&l_851,&l_857[1],&l_857[1],&l_851},{&g_60[1][1][0],&g_60[1][1][0],&l_855,&g_60[1][0][3],&g_59[1],&l_857[1]},{&g_61,&l_857[4],&g_59[1],&l_851,(void*)0,&l_855},{(void*)0,&g_61,&g_59[1],&l_851,&g_60[1][1][0],&l_857[1]},{&g_60[0][4][3],&l_851,&l_855,(void*)0,&l_855,&l_851}},{{&g_61,&g_36,&l_851,&l_857[4],(void*)0,&l_857[1]},{&l_851,&g_60[1][0][3],&g_61,&l_857[1],&g_61,&l_857[1]},{&g_61,&g_60[1][0][3],&g_61,&g_61,(void*)0,(void*)0},{&g_60[1][1][0],&g_36,&g_59[8],&g_59[8],&g_36,&g_60[1][1][0]},{&l_857[1],&l_851,&l_857[1],(void*)0,&g_59[8],&l_857[4]},{&l_879,&g_61,&l_855,&g_36,&l_851,&g_61},{&l_879,&g_61,&g_36,(void*)0,&g_60[1][0][3],&l_851}},{{&l_857[1],&g_59[8],&g_61,&g_59[8],&l_857[1],&l_855},{&g_60[1][1][0],&l_857[1],&l_857[1],&g_61,(void*)0,&g_59[1]},{&g_61,&l_855,&l_857[1],&l_857[1],&g_61,&g_59[1]},{&l_851,&g_36,&l_857[1],&l_857[4],&l_855,&l_855},{&g_61,&g_61,&g_61,&g_61,&l_851,&l_851},{&l_857[4],&l_857[1],&g_36,&l_851,(void*)0,&g_61},{&l_857[1],&l_857[1],&l_855,&g_61,(void*)0,&l_857[4]}},{{&g_61,&l_857[1],&l_857[1],&g_60[1][1][0],&l_851,&g_60[1][1][0]},{&g_59[8],&g_61,&g_59[8],&l_857[1],&l_855,(void*)0},{(void*)0,&g_36,&g_61,&l_879,&g_61,&l_857[1]},{&g_36,&l_855,&g_61,&l_879,(void*)0,&l_857[1]},{(void*)0,&l_857[1],&l_851,&l_857[1],&l_857[1],&l_851},{&g_59[8],&g_59[8],&g_36,&g_60[1][1][0],&g_60[1][0][3],&g_36},{&g_61,&g_61,&g_60[1][0][3],&g_61,&l_851,&g_36}},{{&l_857[1],&g_61,&g_60[1][0][3],&l_851,&g_59[8],&g_36},{&l_857[4],&l_851,&g_36,&g_61,&g_36,&l_851},{&g_61,&g_36,&l_851,&l_857[4],(void*)0,&l_857[1]},{&l_851,&g_60[1][0][3],&g_61,&l_857[1],&g_61,&l_857[1]},{&g_61,&g_60[1][0][3],&g_61,&g_61,(void*)0,(void*)0},{&g_60[1][1][0],&g_36,&g_59[8],&g_59[8],&g_36,&g_60[1][1][0]},{&l_857[1],&l_851,&l_857[1],(void*)0,&g_59[8],&l_857[4]}}};
                        int i, j, k;
                        ++l_954;
                        l_957 |= ((*l_952) = (((*l_790) ^= (-1L)) & (*l_944)));
                    }
                    (*g_514) = ((*l_827) |= (*l_880));
                }
                l_964 = (l_962 = (void*)0);
            }
            else
            { /* block id: 528 */
                for (g_61 = 0; g_61 < 2; g_61 += 1)
                {
                    for (l_892 = 0; l_892 < 5; l_892 += 1)
                    {
                        for (g_358 = 0; g_358 < 4; g_358 += 1)
                        {
                            g_60[g_61][l_892][g_358] = 6L;
                        }
                    }
                }
            }
            for (g_131 = (-5); (g_131 <= 34); g_131 = safe_add_func_int16_t_s_s(g_131, 5))
            { /* block id: 533 */
                uint16_t ***l_973 = &l_874;
                int32_t l_984 = 0xDFBF9410L;
                int32_t **l_1000 = &l_941;
                uint8_t *l_1027 = &g_131;
                for (p_47 = (-26); (p_47 < 29); p_47 = safe_add_func_int32_t_s_s(p_47, 6))
                { /* block id: 536 */
                    uint16_t ****l_974 = &l_973;
                    uint16_t ****l_975 = &l_873[1];
                    int32_t *l_985[6][2][2] = {{{&g_61,&g_59[1]},{&g_59[1],&g_61}},{{&g_59[1],&g_59[1]},{&g_61,&g_59[1]}},{{&g_59[1],&g_61},{&g_59[1],&g_59[1]}},{{&g_61,&g_59[1]},{&g_59[1],&g_61}},{{&g_59[1],&g_59[1]},{&g_61,&g_59[1]}},{{&g_59[1],&g_61},{&g_59[1],&g_61}}};
                    uint16_t l_995[10][3][3] = {{{0x876CL,0xB242L,0x0660L},{65532UL,65532UL,65535UL},{65530UL,0xB242L,65535UL}},{{65535UL,4UL,65535UL},{65530UL,0xA11BL,65530UL},{65532UL,65535UL,65535UL}},{{0x876CL,1UL,65535UL},{65532UL,65535UL,65535UL},{65535UL,0xA11BL,0x0660L}},{{65532UL,4UL,65532UL},{0x876CL,0xB242L,0x0660L},{65532UL,65532UL,65535UL}},{{65530UL,0xB242L,65535UL},{65535UL,4UL,65535UL},{65530UL,0xA11BL,65530UL}},{{65532UL,65535UL,65535UL},{0x876CL,1UL,65535UL},{65532UL,65535UL,65535UL}},{{65535UL,0xA11BL,0x0660L},{65532UL,4UL,65532UL},{0x876CL,0xB242L,0x0660L}},{{65532UL,65532UL,65535UL},{65530UL,0xB242L,65535UL},{65535UL,4UL,65535UL}},{{65530UL,0xA11BL,65530UL},{65532UL,65535UL,65535UL},{0x876CL,1UL,65535UL}},{{65532UL,65535UL,65535UL},{65535UL,0xA11BL,0x0660L},{65532UL,4UL,65532UL}}};
                    int i, j, k;
                }
            }
        }
        else
        { /* block id: 565 */
            int8_t ****l_1062 = &l_1061;
            uint8_t ***l_1066 = &g_658[3];
            int32_t *l_1068 = (void*)0;
            int32_t *l_1069 = (void*)0;
            int32_t l_1070 = (-1L);
            int32_t l_1105 = 0x2603CE82L;
            int32_t l_1109 = 0x5D5B4DEDL;
            int32_t l_1110[4] = {4L,4L,4L,4L};
            uint16_t l_1112 = 0x8815L;
            int i;
            if ((((*g_434) < (safe_mul_func_int8_t_s_s(((safe_sub_func_int32_t_s_s(((((safe_mod_func_uint8_t_u_u(((safe_lshift_func_int16_t_s_u(((safe_add_func_uint32_t_u_u((safe_rshift_func_uint16_t_u_s(((((((((g_358 = (((safe_sub_func_uint16_t_u_u((p_47 = (safe_add_func_int16_t_s_s((((safe_sub_func_uint16_t_u_u(p_45, (((*l_1062) = l_1061) == l_1063))) , 0x4037D8D8L) <= (((*g_434) >= ((l_1064 != (l_1065 = l_1064)) != ((void*)0 == l_1066))) , l_1067)), (*l_880)))), p_45)) , (void*)0) == (void*)0)) , p_47) | 0x9FE39FA7L) , g_961) , p_47) < (*l_880)) == 0x4F7AL) || p_47), g_138[3])), p_46)) <= p_45), l_1070)) || 0x0DL), 0x71L)) < p_45) , l_1071) == &l_824), 0xDE5D4DB2L)) , l_1070), p_45))) <= p_45))
            { /* block id: 570 */
lbl_1099:
                l_880 = &l_1070;
            }
            else
            { /* block id: 572 */
                const int8_t ****l_1085 = (void*)0;
                for (g_436 = 0; (g_436 > 39); ++g_436)
                { /* block id: 575 */
                    uint32_t l_1076 = 1UL;
                    const int32_t *l_1100 = &l_857[1];
                    for (g_358 = 0; (g_358 >= (-14)); g_358 = safe_sub_func_int16_t_s_s(g_358, 4))
                    { /* block id: 578 */
                        l_1076++;
                        if ((*l_880))
                            break;
                        if (p_46)
                            continue;
                    }
                    (*g_514) ^= ((safe_rshift_func_uint16_t_u_s(0x7586L, ((p_45 & (((safe_lshift_func_int16_t_s_u((((safe_lshift_func_uint16_t_u_s(((void*)0 == l_1085), (safe_div_func_int16_t_s_s((safe_sub_func_int16_t_s_s(((!0xE0L) && p_46), (l_1070 == (safe_sub_func_uint16_t_u_u((safe_lshift_func_uint8_t_u_s((safe_mul_func_int8_t_s_s(0L, l_1070)), 6)), 0xCBD5L))))), p_47)))) , (void*)0) != (void*)0), g_1096[0])) >= 0xE085DD08L) > l_1076)) == (-1L)))) , 0xEB6DF802L);
                    l_1070 |= (-2L);
                    for (g_510 = (-2); (g_510 != (-29)); g_510--)
                    { /* block id: 587 */
                        const int32_t **l_1101 = &l_1100;
                        if (g_360)
                            goto lbl_1099;
                        (*l_1101) = l_1100;
                        (*l_1101) = &l_1070;
                        if (p_48)
                            break;
                    }
                }
            }
            for (g_145 = 0; (g_145 == 21); ++g_145)
            { /* block id: 597 */
                int32_t *l_1104 = (void*)0;
                int32_t *l_1106 = (void*)0;
                int32_t *l_1107[6][5] = {{&l_1070,(void*)0,&g_36,&g_60[0][4][3],&g_60[0][4][3]},{(void*)0,(void*)0,(void*)0,&g_59[0],(void*)0},{&g_60[0][4][3],&g_59[3],&g_59[0],&g_60[0][4][3],&g_59[0]},{&g_60[0][4][3],&g_60[0][4][3],&g_36,(void*)0,&l_1070},{(void*)0,&l_1070,&g_59[0],&g_59[0],&l_1070},{&l_1070,&g_59[3],(void*)0,&l_1070,&g_59[0]}};
                int32_t l_1111 = 0xC680B001L;
                int i, j;
                l_1070 = 0x81C649FFL;
                l_1112++;
                return (*g_454);
            }
        }
        for (p_46 = 0; (p_46 > 38); ++p_46)
        { /* block id: 605 */
            uint8_t l_1129[1][5][9] = {{{255UL,255UL,0xC0L,255UL,255UL,0xC0L,255UL,255UL,0xC0L},{1UL,1UL,0x8DL,1UL,1UL,0x8DL,1UL,1UL,0x8DL},{255UL,255UL,0xC0L,255UL,255UL,0xC0L,255UL,255UL,0xC0L},{1UL,1UL,0x8DL,1UL,1UL,0x8DL,1UL,1UL,0x8DL},{255UL,255UL,0xC0L,255UL,255UL,0xC0L,255UL,255UL,0xC0L}}};
            int16_t *l_1144 = &g_124;
            int32_t *l_1148[6][1][3] = {{{&l_1108[1],(void*)0,&l_851}},{{&g_36,&g_36,&l_851}},{{(void*)0,&l_1108[1],&l_851}},{{&l_1108[1],(void*)0,&l_851}},{{&g_36,&g_36,&l_851}},{{(void*)0,&l_1108[1],&l_851}}};
            uint16_t ***l_1211 = &l_874;
            uint32_t l_1212[4][2] = {{1UL,1UL},{1UL,1UL},{1UL,1UL},{1UL,1UL}};
            uint32_t l_1258[3][10][8] = {{{0x0ECC242CL,2UL,0xBBA08DF3L,18446744073709551614UL,18446744073709551615UL,0x4194A657L,0xACFC1F18L,18446744073709551606UL},{1UL,0x728BE276L,18446744073709551615UL,0x4194A657L,18446744073709551613UL,0x4A4E1478L,18446744073709551614UL,2UL},{0xBBA08DF3L,0xC6AFF327L,0xEBB805F8L,18446744073709551613UL,0xEBB805F8L,0xC6AFF327L,0xBBA08DF3L,18446744073709551615UL},{18446744073709551609UL,0x073E66A2L,0x4194A657L,0x93447063L,0xC450AD13L,2UL,0xC6AFF327L,0xF001BE9DL},{0UL,0UL,2UL,0x0ECC242CL,0xC450AD13L,18446744073709551609UL,18446744073709551615UL,18446744073709551613UL},{18446744073709551609UL,0xD0026597L,0xACFC1F18L,0xF001BE9DL,0xEBB805F8L,2UL,0x93447063L,0x073E66A2L},{0xBBA08DF3L,0x71035224L,0xFAD7F9E8L,0UL,18446744073709551613UL,18446744073709551614UL,18446744073709551615UL,4UL},{1UL,1UL,0xFC2D4B21L,0xFAD7F9E8L,18446744073709551615UL,18446744073709551615UL,0xFAD7F9E8L,0xFC2D4B21L},{0x0ECC242CL,0x0ECC242CL,0xCE6368AAL,1UL,0xD0026597L,0xFC2D4B21L,0x71035224L,0UL},{0x71035224L,0xEBB805F8L,0x3A03219BL,0xC450AD13L,18446744073709551614UL,0UL,2UL,0UL}},{{0xEBB805F8L,18446744073709551615UL,18446744073709551614UL,1UL,2UL,0UL,0x834DBD27L,0xFC2D4B21L},{18446744073709551606UL,0x3A03219BL,18446744073709551614UL,0xFAD7F9E8L,0xBBA08DF3L,0x834DBD27L,1UL,4UL},{18446744073709551614UL,0xFC2D4B21L,18446744073709551615UL,0UL,0UL,0x073E66A2L,0xEBB805F8L,0x073E66A2L},{0xFAD7F9E8L,0xF001BE9DL,0xD0026597L,0xF001BE9DL,0xFAD7F9E8L,0x728BE276L,2UL,18446744073709551613UL},{2UL,4UL,1UL,0x0ECC242CL,18446744073709551615UL,18446744073709551606UL,0x073E66A2L,0xF001BE9DL},{1UL,4UL,1UL,0x93447063L,4UL,0x3A03219BL,2UL,18446744073709551615UL},{18446744073709551615UL,0x4A4E1478L,0xD0026597L,18446744073709551613UL,0x728BE276L,18446744073709551613UL,0xEBB805F8L,2UL},{18446744073709551613UL,18446744073709551615UL,18446744073709551615UL,0x4194A657L,18446744073709551609UL,0x71035224L,1UL,18446744073709551606UL},{0xC6AFF327L,0x834DBD27L,18446744073709551614UL,18446744073709551614UL,18446744073709551614UL,18446744073709551614UL,0x834DBD27L,0xC6AFF327L},{18446744073709551615UL,0xECA7B7A3L,18446744073709551614UL,0x834DBD27L,0x0ECC242CL,18446744073709551615UL,2UL,18446744073709551609UL}},{{1UL,18446744073709551609UL,0x3A03219BL,4UL,0x834DBD27L,18446744073709551615UL,0x71035224L,0UL},{18446744073709551613UL,0xECA7B7A3L,0xCE6368AAL,18446744073709551606UL,0x3A03219BL,18446744073709551614UL,0xFAD7F9E8L,0xBBA08DF3L},{0UL,0x834DBD27L,0xFC2D4B21L,18446744073709551613UL,0x073E66A2L,0x71035224L,18446744073709551615UL,0x5DC9B454L},{0x4A4E1478L,0UL,0x93447063L,0xBBA08DF3L,0x0ECC242CL,0UL,0x0ECC242CL,0xBBA08DF3L},{0xECA7B7A3L,18446744073709551606UL,0xECA7B7A3L,2UL,0xACFC1F18L,18446744073709551615UL,1UL,0xC450AD13L},{0UL,18446744073709551615UL,0xFC2D4B21L,18446744073709551614UL,0x4194A657L,0xFAD7F9E8L,0xACFC1F18L,0UL},{0UL,4UL,18446744073709551609UL,0xD0026597L,0xACFC1F18L,0xF001BE9DL,0xEBB805F8L,2UL},{0xECA7B7A3L,0x3A03219BL,0x71035224L,18446744073709551615UL,0x0ECC242CL,18446744073709551614UL,0x728BE276L,0xF001BE9DL},{18446744073709551606UL,0xD0026597L,0xCE6368AAL,18446744073709551613UL,18446744073709551614UL,4UL,0xECA7B7A3L,0xECA7B7A3L},{0x4194A657L,18446744073709551615UL,0xEBB805F8L,0xEBB805F8L,18446744073709551615UL,0x4194A657L,18446744073709551613UL,0UL}}};
            int32_t ****l_1285 = &g_454;
            int32_t l_1306 = 0xD7709800L;
            uint32_t l_1354 = 0UL;
            int i, j, k;
            if (((safe_mod_func_uint32_t_u_u((safe_add_func_int32_t_s_s((+(safe_mod_func_uint32_t_u_u(((((l_1123 != &l_1124) >= (~(safe_sub_func_int8_t_s_s((safe_lshift_func_uint16_t_u_u(l_1129[0][0][2], (safe_div_func_uint16_t_u_u((safe_rshift_func_uint8_t_u_u((safe_rshift_func_uint16_t_u_u(((g_408[2][6] ^ (safe_add_func_int8_t_s_s((safe_sub_func_uint8_t_u_u((((safe_mul_func_int16_t_s_s(((*l_1144) = (((*g_146) = ((*g_146) > p_47)) && (safe_mod_func_int16_t_s_s(2L, 0xCCE6L)))), (((*g_514) = (!(((&g_435 == (void*)0) && 0x1E7E6082L) , (*g_514)))) , p_45))) ^ p_47) , 253UL), p_46)), p_45))) ^ (*g_434)), l_1129[0][1][7])), l_1129[0][4][0])), p_46)))), p_46)))) , 0L) , p_45), 8UL))), 0x70A85053L)), (*g_434))) | 254UL))
            { /* block id: 609 */
                int32_t **l_1145 = &g_37;
                (*l_1145) = &g_59[1];
                for (l_860 = 0; (l_860 < 52); l_860 = safe_add_func_int8_t_s_s(l_860, 8))
                { /* block id: 613 */
                    l_1148[3][0][0] = (*l_1145);
                }
            }
            else
            { /* block id: 616 */
                uint32_t *l_1161 = (void*)0;
                uint32_t *l_1162 = &g_408[4][7];
                uint32_t *l_1163[2];
                int32_t l_1164 = 0L;
                int8_t l_1165 = 0x78L;
                int32_t l_1175 = 0x51F4F9EEL;
                int32_t l_1177 = 0x008E83A0L;
                int32_t l_1180 = 0xCBB2DE62L;
                int32_t l_1181 = (-1L);
                int32_t l_1183 = 0x5E58F2BFL;
                int32_t l_1189 = 9L;
                int32_t l_1191 = 0xFD59E9D3L;
                int32_t l_1192[6][5] = {{2L,1L,2L,2L,1L},{0x04104790L,(-3L),(-10L),0x1EC6F59FL,(-10L)},{1L,1L,0x167B7268L,1L,1L},{(-10L),0x1EC6F59FL,(-10L),(-3L),0x04104790L},{1L,2L,2L,1L,2L},{0x04104790L,0x1EC6F59FL,1L,0x1EC6F59FL,0x04104790L}};
                uint8_t l_1193 = 4UL;
                const uint16_t ***l_1205 = &l_962;
                int16_t l_1223 = 0x7D73L;
                int32_t l_1251 = 2L;
                int32_t l_1329[1];
                const uint32_t l_1448 = 0x7DF362DFL;
                int32_t **l_1458 = (void*)0;
                int i, j;
                for (i = 0; i < 2; i++)
                    l_1163[i] = &g_436;
                for (i = 0; i < 1; i++)
                    l_1329[i] = 1L;
                if (((+(safe_mul_func_int8_t_s_s((p_46 & ((((*g_434)++) ^ (((l_1164 = (safe_sub_func_uint32_t_u_u(((g_61 ^ (+(~(+(safe_lshift_func_int8_t_s_s(0xE2L, 3)))))) , ((*l_1162) = (0L ^ ((*g_514) &= ((*g_146) = (safe_rshift_func_int16_t_s_s((9UL != ((g_358 , ((*g_992) != &l_962)) | p_48)), g_61))))))), p_48))) < 0L) <= p_46)) == l_1165)), 0x64L))) != 65535UL))
                { /* block id: 622 */
                    uint16_t l_1169 = 65535UL;
                    int32_t **l_1172 = &l_827;
                    int32_t l_1174 = (-7L);
                    int32_t l_1176 = (-1L);
                    int32_t l_1179 = 0xE825BFAEL;
                    int32_t l_1184 = 1L;
                    int32_t l_1185 = (-1L);
                    int32_t l_1186 = 0x368B2BF9L;
                    int32_t l_1187 = 0x2D5947ADL;
                    int32_t l_1188 = 0xA351F4C8L;
                    int32_t l_1190[8] = {0xD6BFCEA0L,(-10L),0xD6BFCEA0L,0xD6BFCEA0L,(-10L),0xD6BFCEA0L,0xD6BFCEA0L,(-10L)};
                    int i;
                    for (l_919 = 1; (l_919 == 1); l_919++)
                    { /* block id: 625 */
                        int8_t l_1168 = 0x45L;
                        ++l_1169;
                    }
                    (*l_1172) = l_1148[3][0][0];
                    ++l_1193;
                }
                else
                { /* block id: 630 */
                    int8_t l_1214[6][7][1] = {{{5L},{1L},{5L},{1L},{5L},{1L},{5L}},{{1L},{5L},{1L},{5L},{1L},{5L},{1L}},{{5L},{1L},{5L},{1L},{5L},{1L},{5L}},{{1L},{5L},{1L},{5L},{1L},{5L},{1L}},{{5L},{1L},{5L},{1L},{5L},{1L},{5L}},{{1L},{5L},{1L},{5L},{1L},{5L},{1L}}};
                    uint16_t ***l_1323 = &l_874;
                    int32_t l_1330 = 0x3DE92DE1L;
                    int32_t ***l_1331 = (void*)0;
                    int i, j, k;
                    for (l_856 = 8; (l_856 >= 0); l_856 -= 1)
                    { /* block id: 633 */
                        const uint16_t ***l_1204 = &l_962;
                        const uint16_t ****l_1203[9][3][9] = {{{&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,(void*)0},{&l_1204,&l_1204,&l_1204,(void*)0,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204},{&l_1204,(void*)0,(void*)0,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204}},{{(void*)0,&l_1204,(void*)0,&l_1204,&l_1204,(void*)0,&l_1204,&l_1204,&l_1204},{&l_1204,(void*)0,&l_1204,(void*)0,&l_1204,&l_1204,&l_1204,(void*)0,&l_1204},{&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,(void*)0}},{{(void*)0,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,(void*)0,&l_1204},{&l_1204,&l_1204,&l_1204,&l_1204,(void*)0,(void*)0,(void*)0,&l_1204,&l_1204},{&l_1204,(void*)0,&l_1204,&l_1204,&l_1204,(void*)0,&l_1204,&l_1204,&l_1204}},{{&l_1204,(void*)0,&l_1204,(void*)0,&l_1204,(void*)0,&l_1204,(void*)0,&l_1204},{&l_1204,&l_1204,&l_1204,&l_1204,(void*)0,&l_1204,&l_1204,&l_1204,&l_1204},{&l_1204,&l_1204,&l_1204,(void*)0,(void*)0,&l_1204,&l_1204,(void*)0,&l_1204}},{{&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,(void*)0,&l_1204,&l_1204,&l_1204},{(void*)0,&l_1204,&l_1204,(void*)0,&l_1204,(void*)0,(void*)0,&l_1204,(void*)0},{&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,(void*)0,&l_1204}},{{(void*)0,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,(void*)0,&l_1204},{&l_1204,&l_1204,(void*)0,&l_1204,&l_1204,(void*)0,&l_1204,&l_1204,&l_1204},{&l_1204,(void*)0,&l_1204,(void*)0,&l_1204,(void*)0,(void*)0,(void*)0,&l_1204}},{{&l_1204,(void*)0,(void*)0,&l_1204,&l_1204,(void*)0,(void*)0,&l_1204,&l_1204},{(void*)0,&l_1204,&l_1204,(void*)0,&l_1204,&l_1204,&l_1204,(void*)0,&l_1204},{&l_1204,&l_1204,(void*)0,&l_1204,&l_1204,(void*)0,(void*)0,&l_1204,&l_1204}},{{&l_1204,&l_1204,(void*)0,(void*)0,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204},{(void*)0,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204},{&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,(void*)0,&l_1204,&l_1204}},{{&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204},{&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,&l_1204,(void*)0,&l_1204,(void*)0},{&l_1204,(void*)0,&l_1204,&l_1204,&l_1204,&l_1204,(void*)0,&l_1204,&l_1204}}};
                        int32_t ****l_1206 = &l_824;
                        uint32_t l_1213 = 0x6CD7B8E6L;
                        uint8_t *l_1238 = &g_131;
                        int i, j, k;
                        (*g_146) = (((((safe_mod_func_uint32_t_u_u(((safe_lshift_func_uint8_t_u_u((!(((safe_mul_func_int8_t_s_s(((*l_790) |= g_1202), (l_1177 = (!(p_45 ^ ((l_1205 = (void*)0) != (((((*l_1071) = (void*)0) == ((*l_1206) = &g_455)) , (safe_rshift_func_int8_t_s_s((((*l_1162) = 4294967295UL) >= (safe_mod_func_uint16_t_u_u(((l_1211 != ((((void*)0 != (*l_1061)) > p_46) , (void*)0)) , l_1193), g_60[0][4][3]))), 4))) , (*g_992)))))))) , l_1212[2][0]) <= 8L)), 4)) != p_46), (*g_434))) , l_1213) != 0UL) , p_47) <= l_1214[5][5][0]);
                        l_1251 ^= ((safe_mod_func_uint16_t_u_u(((safe_mul_func_uint16_t_u_u((safe_sub_func_int32_t_s_s((+((safe_add_func_uint16_t_u_u(l_1223, ((g_69[l_856] = (safe_rshift_func_int8_t_s_u((safe_add_func_uint8_t_u_u((safe_mod_func_uint8_t_u_u((safe_mod_func_uint16_t_u_u((safe_div_func_int8_t_s_s(((((((((((safe_add_func_uint32_t_u_u(l_1191, (((safe_rshift_func_int8_t_s_s(((((*g_146) |= ((((*l_1238) ^= p_48) , (safe_mul_func_uint16_t_u_u(((safe_mod_func_uint32_t_u_u(((*g_713) || (safe_div_func_uint32_t_u_u((((((((safe_mul_func_int8_t_s_s(p_47, p_46)) ^ (safe_sub_func_int16_t_s_s(g_69[6], (l_1214[5][5][0] | ((p_46 <= 1UL) <= g_36))))) | l_1214[5][5][0]) || (*g_713)) >= (*g_434)) , g_138[0]) && p_45), (*g_514)))), p_48)) <= p_47), p_48))) , l_1249)) <= p_45) & p_47), 3)) | (*g_514)) == p_46))) != 0x4E7AL) != p_46) < 0UL) , g_1250) , p_46) != l_1214[3][6][0]) < 0xB137L) , (*g_146)) , p_45), 1UL)), p_48)), 0xBDL)), 1UL)), l_1214[3][2][0]))) | l_1214[5][5][0]))) && 0x02L)), 0xC9004992L)), p_45)) != l_1214[5][5][0]), l_1214[5][5][0])) < p_48);
                    }
                    if ((((safe_div_func_int32_t_s_s(((*g_514) = ((p_46 >= 0x9A75L) || 0xACL)), p_47)) || (*g_713)) && (safe_lshift_func_int8_t_s_u((safe_add_func_uint32_t_u_u(((p_47 < (g_436 != (((**g_992) == ((*l_1211) = (void*)0)) ^ (*g_514)))) && p_47), 8UL)), l_1258[2][3][3]))))
                    { /* block id: 648 */
                        uint8_t *l_1269 = &l_1193;
                        uint8_t *l_1279 = &l_1067;
                        int32_t *****l_1284 = &l_1071;
                        uint16_t ***l_1307 = &g_712;
                        (*g_146) = (safe_add_func_int32_t_s_s((safe_lshift_func_int16_t_s_s((safe_mod_func_uint8_t_u_u(p_45, (safe_lshift_func_uint16_t_u_u((((*l_1279) = (((((safe_add_func_uint8_t_u_u(((((((*l_1269) = p_47) > ((!(safe_div_func_int16_t_s_s(p_45, (((safe_unary_minus_func_int8_t_s((l_1214[5][5][0] | ((safe_div_func_uint32_t_u_u((p_48 != (p_47 , (safe_add_func_uint16_t_u_u((l_1214[5][5][0] < (!(1L != (safe_lshift_func_int16_t_s_s(((*l_1144) &= g_1202), 13))))), p_46)))), p_46)) | 0xBEL)))) <= (-7L)) ^ 9UL)))) >= p_48)) && (*g_434)) != p_46) , p_48), 5UL)) || 0x1207L) ^ l_1214[5][5][0]) && 2L) ^ p_45)) && p_45), p_46)))), l_1214[1][5][0])), 4294967295UL));
                        (*g_514) ^= (((*l_790) &= (-8L)) == ((safe_mul_func_uint8_t_u_u((((*l_1284) = &g_454) == l_1285), (((safe_mul_func_uint16_t_u_u((safe_add_func_int16_t_s_s(l_1191, (l_1108[0] &= (((l_1306 = (safe_div_func_uint8_t_u_u(((*l_1279) = ((safe_sub_func_uint16_t_u_u(((safe_rshift_func_uint8_t_u_u((p_47 & (safe_rshift_func_int8_t_s_s((!((safe_sub_func_uint32_t_u_u((l_1214[1][6][0] >= l_1214[5][5][0]), ((safe_sub_func_uint16_t_u_u((((safe_div_func_uint16_t_u_u((((((*g_713) = (!(safe_mul_func_uint8_t_u_u(((*l_1269) |= 0x14L), (l_1144 == &g_775))))) ^ 0x29A5L) < p_47) != 0xCE61ED42L), p_46)) > 0x3BE5L) , (*g_713)), p_46)) | 0xC9L))) != l_1214[1][3][0])), 2))), 0)) > l_1214[2][4][0]), g_510)) , 0x2AL)), l_1214[5][5][0]))) , l_1307) != (*g_992))))), (-1L))) < g_60[0][4][3]) , p_45))) >= p_46));
                        return &g_37;
                    }
                    else
                    { /* block id: 662 */
                        uint8_t *l_1313 = &l_1129[0][2][4];
                        int32_t l_1322[9] = {(-3L),(-10L),(-3L),(-10L),(-3L),(-10L),(-3L),(-10L),(-3L)};
                        int i;
                        l_1329[0] = ((safe_sub_func_int8_t_s_s(((safe_mul_func_uint8_t_u_u(((*l_1313) |= g_1312), (p_48 <= (+(safe_rshift_func_int16_t_s_s((safe_div_func_uint32_t_u_u((safe_lshift_func_uint8_t_u_u(((safe_rshift_func_uint8_t_u_s(l_1322[4], 7)) < (l_1323 == (g_1324 = &l_874))), 5)), ((*l_1162) = (safe_rshift_func_int8_t_s_s((safe_div_func_int32_t_s_s((~p_45), (p_47 , 0x74FE25C3L))), 1))))), g_131)))))) != p_47), 0x79L)) | p_48);
                        l_1330 = l_1322[4];
                        l_1322[4] = ((void*)0 != l_1331);
                    }
                }
                for (l_789 = (-25); (l_789 >= 52); l_789 = safe_add_func_int8_t_s_s(l_789, 8))
                { /* block id: 673 */
                    uint32_t l_1350[2][1][4];
                    int32_t **l_1355 = &l_1148[3][0][0];
                    int i, j, k;
                    for (i = 0; i < 2; i++)
                    {
                        for (j = 0; j < 1; j++)
                        {
                            for (k = 0; k < 4; k++)
                                l_1350[i][j][k] = 18446744073709551615UL;
                        }
                    }
                    for (p_48 = (-2); (p_48 == (-3)); p_48 = safe_sub_func_uint32_t_u_u(p_48, 5))
                    { /* block id: 676 */
                        uint32_t l_1353 = 18446744073709551615UL;
                        (*g_146) &= ((p_47 , (safe_mul_func_uint8_t_u_u(p_45, (safe_rshift_func_uint16_t_u_s(((safe_add_func_int16_t_s_s(p_47, ((+(((safe_mod_func_uint32_t_u_u((((*l_1162) = (safe_add_func_int32_t_s_s((((g_1096[0] , ((((safe_div_func_int32_t_s_s(((safe_sub_func_uint16_t_u_u(((*g_514) | p_48), (l_1350[0][0][1] = p_46))) & (safe_mul_func_int16_t_s_s(g_358, g_2))), (*g_434))) || p_48) , 65535UL) | p_47)) && 1UL) | l_1353), 0xB364D226L))) , 0xA0A58F63L), l_1191)) && p_46) != l_1353)) != l_1354))) >= p_45), g_415))))) ^ (*g_713));
                        return &g_37;
                    }
                }
                (*g_146) |= ((*g_713) && ((((((*g_1324) = (*g_1324)) == &l_793[0][0]) & (((((safe_unary_minus_func_int16_t_s(((safe_add_func_uint32_t_u_u((safe_div_func_uint16_t_u_u(0UL, ((*g_713) = p_45))), (safe_add_func_uint8_t_u_u(((safe_mod_func_int32_t_s_s(l_1365, (((safe_div_func_uint32_t_u_u((((safe_rshift_func_uint8_t_u_s(((*l_1071) == l_824), 7)) < g_1096[0]) != 0x39CA519CL), 0xF92D732FL)) , p_48) && p_46))) , 252UL), p_46)))) , p_47))) != 0x16L) != l_1180) | 1UL) | l_1192[4][4])) || 0x53A17BC8L) | 6L));
                if ((((safe_mod_func_uint16_t_u_u(l_1249, 0x29DDL)) | ((safe_div_func_uint32_t_u_u((((*l_1162) = (p_46 && (safe_rshift_func_int8_t_s_u(g_145, ((l_1251 = (p_47 = (&g_775 != ((safe_div_func_int8_t_s_s(((*l_790) = p_45), p_47)) , &p_45)))) == (+(g_775 ^= (safe_rshift_func_uint16_t_u_u(((*g_713) = ((((*l_1144) = ((safe_sub_func_uint16_t_u_u((((*g_146) = p_48) || p_48), p_45)) , (-5L))) <= 0L) != (*g_514))), 12))))))))) ^ l_1164), (*g_434))) < l_1382)) < p_45))
                { /* block id: 694 */
                    uint8_t *l_1385 = &g_31[0];
                    int32_t l_1414 = 7L;
                    uint8_t l_1447 = 0x67L;
                    int32_t **l_1455 = (void*)0;
                    l_880 = &l_1181;
                    if ((safe_mul_func_uint16_t_u_u(((((*l_1385)--) && 8UL) < ((((!(p_47 = (safe_sub_func_uint16_t_u_u((safe_lshift_func_int8_t_s_u(0xD6L, ((safe_sub_func_int8_t_s_s((((safe_div_func_uint16_t_u_u(((safe_mul_func_int16_t_s_s((safe_rshift_func_uint8_t_u_u(p_46, 1)), (safe_add_func_uint8_t_u_u((safe_sub_func_int16_t_s_s(g_415, ((safe_mul_func_int8_t_s_s((safe_lshift_func_uint16_t_u_u(((*g_713) = (l_1164 = ((g_408[2][6] , ((safe_sub_func_uint8_t_u_u((p_45 ^ 0x25L), (*l_880))) ^ (safe_div_func_uint8_t_u_u((safe_sub_func_int8_t_s_s((((g_36 , p_47) & p_46) , g_126), p_45)), l_1414)))) , 0xF394L))), l_1414)), (*l_880))) != 0x04DC5837L))), p_48)))) , p_48), 0x7F7CL)) & 0x8846L) && (*g_146)), p_48)) >= 4294967295UL))), p_48)))) && 0x5D09L) > 0UL) , p_46)), p_46)))
                    { /* block id: 700 */
                        int16_t l_1430 = 0xBBD6L;
                        (*g_514) = (safe_add_func_int32_t_s_s((((safe_div_func_int32_t_s_s(0x9175FE28L, (~((safe_mul_func_uint8_t_u_u((safe_add_func_uint16_t_u_u(((safe_lshift_func_uint8_t_u_u((safe_mul_func_int8_t_s_s((safe_div_func_int32_t_s_s(((void*)0 == &l_1192[3][4]), (+(safe_unary_minus_func_uint8_t_u(l_1430))))), 0xBBL)), l_1414)) == p_48), (1L <= l_1431[0]))), (-10L))) , (*g_434))))) , l_1432) , (*g_146)), p_48));
                    }
                    else
                    { /* block id: 702 */
                        uint8_t ****l_1436 = &l_1435;
                        int32_t l_1445 = 9L;
                        int16_t *l_1446[1];
                        int i;
                        for (i = 0; i < 1; i++)
                            l_1446[i] = &g_775;
                        l_1251 = (l_1063 != (((!(l_1447 = ((*l_1144) = ((0xEB40L ^ (safe_add_func_uint32_t_u_u((*g_434), (((*l_1436) = l_1435) == &g_658[3])))) == (((safe_lshift_func_uint8_t_u_s((safe_div_func_int8_t_s_s(p_47, 0x51L)), ((safe_add_func_int16_t_s_s((((-8L) & (safe_mul_func_int16_t_s_s(p_46, 7L))) > p_47), 1UL)) ^ g_415))) > 4294967290UL) || l_1445))))) != p_47) , (void*)0));
                        (*g_146) = (((*g_146) , 0x7A77L) ^ ((0xBAD2L || (l_1448 >= (p_48 = (safe_div_func_uint16_t_u_u(2UL, ((((*l_880) = ((safe_lshift_func_uint16_t_u_s(p_47, (((*g_514) = ((~((safe_add_func_uint32_t_u_u(((((((*l_1071) != &g_455) != 0x7B6E557FL) >= (*g_514)) < l_1447) <= 0x290502A0L), 4294967295UL)) >= p_48)) , (*g_514))) && 0x6D566369L))) , p_48)) , 0x9053L) , g_60[0][4][3])))))) , (*l_880)));
                        return l_1455;
                    }
                }
                else
                { /* block id: 713 */
                    for (g_126 = 0; (g_126 != (-12)); g_126--)
                    { /* block id: 716 */
                        return l_1458;
                    }
                }
            }
            for (g_415 = 0; (g_415 != 10); g_415 = safe_add_func_int32_t_s_s(g_415, 3))
            { /* block id: 723 */
                int32_t l_1465 = 0x90C86AAFL;
                int32_t **l_1466[3];
                int i;
                for (i = 0; i < 3; i++)
                    l_1466[i] = &l_827;
            }
        }
        if ((safe_lshift_func_uint16_t_u_u((g_360 >= (p_47 != ((safe_div_func_uint8_t_u_u((((!((*g_514) , (safe_div_func_uint16_t_u_u(((safe_rshift_func_uint16_t_u_u((safe_mul_func_uint8_t_u_u(((*l_1480) = ((void*)0 == &l_793[0][0])), ((*l_790) |= 2L))), (*g_713))) < 0xB9L), (((((g_1483 = ((safe_lshift_func_int8_t_s_u(((&g_659 == (void*)0) ^ 0x34L), p_48)) , &l_1249)) != &l_1249) ^ 0x8F060E18L) == p_48) | l_1485[1][5][1]))))) | p_45) != 0xA1L), p_46)) < g_408[2][6]))), 8)))
        { /* block id: 744 */
            uint32_t l_1512 = 0x0753D77DL;
            int32_t **l_1517 = &l_827;
            int32_t l_1537 = 0xA118C07FL;
            int32_t *l_1566 = &g_61;
            int32_t *l_1567 = &l_1537;
            int32_t *l_1568 = &l_856;
            int32_t *l_1569 = &g_59[1];
            int32_t *l_1570 = &l_879;
            int32_t *l_1571[9];
            uint8_t l_1573 = 7UL;
            int i;
            for (i = 0; i < 9; i++)
                l_1571[i] = &l_1182;
            for (g_436 = 12; (g_436 <= 55); g_436 = safe_add_func_int8_t_s_s(g_436, 9))
            { /* block id: 747 */
                int32_t * const l_1490 = &g_59[1];
                for (l_858 = (-21); (l_858 <= (-8)); l_858 = safe_add_func_int8_t_s_s(l_858, 1))
                { /* block id: 750 */
                    int32_t **l_1491 = &l_880;
                    (*l_1491) = l_1490;
                }
                for (g_131 = (-22); (g_131 < 32); g_131++)
                { /* block id: 755 */
                    int32_t *l_1494 = &g_59[1];
                    int32_t **l_1495 = &g_37;
                    int32_t ****l_1504 = &l_824;
                    uint16_t **l_1505 = &g_713;
                    uint16_t * const l_1508 = &g_1509;
                    uint16_t * const *l_1507[5][8][1] = {{{(void*)0},{&l_1508},{&l_1508},{(void*)0},{&l_1508},{&l_1508},{&l_1508},{(void*)0}},{{&l_1508},{&l_1508},{(void*)0},{&l_1508},{&l_1508},{&l_1508},{(void*)0},{&l_1508}},{{&l_1508},{(void*)0},{&l_1508},{&l_1508},{&l_1508},{(void*)0},{&l_1508},{&l_1508}},{{(void*)0},{&l_1508},{&l_1508},{&l_1508},{(void*)0},{&l_1508},{&l_1508},{(void*)0}},{{&l_1508},{&l_1508},{&l_1508},{(void*)0},{&l_1508},{&l_1508},{(void*)0},{&l_1508}}};
                    uint16_t * const **l_1506 = &l_1507[3][4][0];
                    int32_t ****l_1510 = (void*)0;
                    int32_t *****l_1511 = &l_1071;
                    int i, j, k;
                    if (p_46)
                        break;
                    (*l_1495) = l_1494;
                    (*l_1490) = ((safe_rshift_func_int16_t_s_s((safe_mul_func_uint8_t_u_u(247UL, (safe_div_func_uint16_t_u_u(((*g_434) && (*l_1490)), (safe_div_func_uint32_t_u_u(((((*l_1490) || (l_1504 == ((*l_1511) = (l_1510 = ((l_1505 != ((*l_1506) = l_1505)) , &g_454))))) , l_1061) == (void*)0), (*g_434))))))), (*l_1490))) , p_48);
                }
                l_1512--;
            }
            if (((*g_146) |= l_1512))
            { /* block id: 766 */
                for (p_48 = (-8); (p_48 >= 24); p_48 = safe_add_func_int32_t_s_s(p_48, 5))
                { /* block id: 769 */
                    return (*l_824);
                }
            }
            else
            { /* block id: 772 */
                int32_t l_1520 = (-1L);
                for (l_1382 = 0; (l_1382 != 48); l_1382 = safe_add_func_uint32_t_u_u(l_1382, 3))
                { /* block id: 775 */
                    int8_t l_1522 = 1L;
                    int32_t l_1523 = 1L;
                    int32_t l_1536 = (-10L);
                    int32_t l_1541 = 0x1F61027AL;
                    if ((l_1520 = ((*g_146) = (-1L))))
                    { /* block id: 778 */
                        int8_t l_1521 = (-4L);
                        if (p_47)
                            break;
                        l_1522 = l_1521;
                    }
                    else
                    { /* block id: 781 */
                        int32_t *l_1524 = &l_855;
                        int32_t *l_1525 = &g_36;
                        int32_t *l_1526 = &l_1108[0];
                        int32_t *l_1527 = &g_60[0][4][3];
                        int32_t *l_1528 = &l_879;
                        int32_t *l_1529 = (void*)0;
                        int32_t *l_1530 = &g_60[0][2][2];
                        int32_t *l_1531 = &g_36;
                        int32_t *l_1532 = (void*)0;
                        int32_t *l_1533 = &l_855;
                        int32_t *l_1534 = &g_36;
                        int32_t *l_1535[2];
                        int i;
                        for (i = 0; i < 2; i++)
                            l_1535[i] = (void*)0;
                        ++l_1538;
                        l_1542--;
                    }
                    return &g_514;
                }
            }
            for (l_851 = 21; (l_851 <= 10); l_851 = safe_sub_func_int8_t_s_s(l_851, 1))
            { /* block id: 790 */
                int32_t l_1565 = (-1L);
                (*g_514) |= (((safe_sub_func_uint16_t_u_u((safe_div_func_int8_t_s_s((safe_mod_func_uint32_t_u_u(p_46, 4L)), (safe_mod_func_uint8_t_u_u(p_45, (((safe_lshift_func_uint16_t_u_s(((safe_mul_func_int16_t_s_s((0xC1L <= ((safe_rshift_func_uint8_t_u_s(((((l_1561 < (safe_add_func_uint16_t_u_u(l_1564, ((~p_45) && ((*l_1480) = (l_1565 < 1L)))))) , &g_454) != &g_454) <= p_45), 1)) > 0x8D0979DCL)), l_1565)) != p_47), 6)) , p_46) || p_48))))), p_46)) , g_69[6]) != 0x8BL);
            }
            l_1573--;
        }
        else
        { /* block id: 795 */
            uint8_t *l_1579 = &g_131;
            uint8_t ** const l_1578 = &l_1579;
            uint8_t ** const *l_1577 = &l_1578;
            uint8_t ** const **l_1576 = &l_1577;
            int32_t l_1605 = 0x9D3CEF20L;
            uint32_t l_1635 = 0xA0B6A9DBL;
            int8_t **l_1656 = (void*)0;
            int32_t l_1663 = (-1L);
            int32_t **l_1673[5] = {&g_514,&g_514,&g_514,&g_514,&g_514};
            int16_t l_1711 = 0x11BEL;
            int32_t l_1714 = 4L;
            int32_t *l_1744 = &l_855;
            uint8_t l_1765 = 0xB3L;
            uint32_t l_1790 = 5UL;
            uint32_t l_1791 = 0x09D0C495L;
            int i;
            if (((((*l_1480) &= 250UL) & ((((((*l_1576) = l_1435) == (((*g_514) = (+(safe_lshift_func_uint8_t_u_s(p_46, (g_435 == g_435))))) , &g_658[3])) , ((safe_div_func_int32_t_s_s(0x3603FE2EL, (safe_rshift_func_uint8_t_u_s((++(*l_1579)), 4)))) ^ p_47)) ^ 0UL) < p_47)) && 0xA1D3L))
            { /* block id: 800 */
                int8_t l_1607 = 0xDBL;
                for (g_775 = (-4); (g_775 >= 1); ++g_775)
                { /* block id: 803 */
                    uint8_t ****l_1592[8];
                    int32_t l_1606 = (-1L);
                    int i;
                    for (i = 0; i < 8; i++)
                        l_1592[i] = &l_1435;
                    (*g_146) = ((*g_713) < (g_1590 == &g_1591[5][6]));
                    l_1607 &= ((((l_1593[1] = l_1435) != &g_658[2]) || (+(((((***l_1576) = (**l_1435)) == ((*l_1578) = l_1594)) && (4294967290UL != (((safe_mul_func_int8_t_s_s((safe_add_func_uint8_t_u_u((l_1606 ^= (safe_mul_func_int16_t_s_s(((((((&p_48 == &p_48) , ((*l_790) = ((safe_rshift_func_uint16_t_u_s(((*g_713) = (+0xDA44L)), (safe_rshift_func_int8_t_s_s(8L, p_46)))) == 1L))) < l_1605) >= 0x4746L) == p_48) > 3L), g_131))), p_48)), 1L)) && p_48) < p_48))) || l_1605))) , (*g_146));
                    if (l_1607)
                        continue;
                    (*g_514) ^= (safe_mod_func_int16_t_s_s(((*g_434) , (255UL <= l_1606)), p_48));
                }
                return (*l_824);
            }
            else
            { /* block id: 816 */
                int16_t l_1625[5][7];
                int8_t **l_1626 = &l_790;
                uint32_t l_1629 = 0xA3E6BA5DL;
                int8_t *l_1630 = &l_1173[0];
                int i, j;
                for (i = 0; i < 5; i++)
                {
                    for (j = 0; j < 7; j++)
                        l_1625[i][j] = 0x8253L;
                }
                (*g_146) = ((safe_mod_func_uint32_t_u_u((safe_add_func_int8_t_s_s(p_45, (safe_mod_func_int16_t_s_s(((safe_mul_func_int16_t_s_s((safe_unary_minus_func_int8_t_s((p_45 != ((safe_sub_func_uint8_t_u_u((safe_add_func_uint16_t_u_u(((((*l_790) = (l_1625[2][5] , l_1605)) || (p_48 = ((*l_1630) = ((l_1626 == ((*l_1064) = (void*)0)) < ((safe_div_func_int32_t_s_s((((l_1629 && (&g_658[2] != l_1435)) | 0xD91DL) , 0xD5441AC9L), 0x10740426L)) , p_48))))) ^ p_46), l_1605)), g_59[7])) , p_46)))), 0x547DL)) && (*g_434)), p_46)))), p_46)) ^ g_1509);
            }
            for (g_1509 = 0; (g_1509 < 38); g_1509 = safe_add_func_uint16_t_u_u(g_1509, 1))
            { /* block id: 825 */
                uint8_t l_1647 = 0x58L;
                uint16_t *l_1661[8] = {&g_69[0],&g_69[5],&g_69[0],&g_69[5],&g_69[0],&g_69[5],&g_69[0],&g_69[5]};
                int32_t l_1662[8][3] = {{(-1L),0xF23F40CAL,0xA058F09DL},{0x60BB2647L,(-1L),0xF23F40CAL},{0x60BB2647L,3L,0xB82B7CEFL},{(-1L),0xFA4AA8CDL,(-1L)},{0xB82B7CEFL,3L,0x60BB2647L},{0xF23F40CAL,(-1L),0x60BB2647L},{0xA058F09DL,0xF23F40CAL,(-1L)},{1L,1L,0xB82B7CEFL}};
                int i, j;
                for (l_789 = (-9); (l_789 == 15); ++l_789)
                { /* block id: 828 */
                    --l_1635;
                }
                for (g_36 = 0; (g_36 == (-18)); g_36 = safe_sub_func_uint16_t_u_u(g_36, 5))
                { /* block id: 833 */
                    uint32_t l_1640[1];
                    int32_t l_1669 = 0x1BDB15C6L;
                    int i;
                    for (i = 0; i < 1; i++)
                        l_1640[i] = 0xAFBC8874L;
                    if (p_48)
                    { /* block id: 834 */
                        int8_t l_1643 = (-1L);
                        int32_t *l_1644 = (void*)0;
                        int32_t *l_1645 = &l_1182;
                        int32_t *l_1646[4][1][6] = {{{&l_1182,&g_36,(void*)0,(void*)0,&g_36,&l_1182}},{{&l_1605,&l_1182,(void*)0,&l_1182,&l_1605,&l_1605}},{{&l_855,&l_1182,&l_1182,&l_855,&g_36,&l_855}},{{&l_855,&g_36,&l_855,&l_1182,&l_1182,&l_855}}};
                        int i, j, k;
                        --l_1640[0];
                        if (l_1640[0])
                            continue;
                        l_1647++;
                        (*g_146) &= (safe_sub_func_uint32_t_u_u((l_1640[0] , (safe_lshift_func_int8_t_s_s((g_510 &= (safe_mul_func_int8_t_s_s((((l_1656 == ((*l_1061) = l_1656)) < g_1509) | ((p_47++) ^ (0x42L != (((!(p_45 | (l_1661[0] != &p_46))) , &g_510) == &g_510)))), (-1L)))), g_408[2][6]))), p_45));
                    }
                    else
                    { /* block id: 842 */
                        int32_t *l_1664 = &l_855;
                        int32_t *l_1665 = (void*)0;
                        int32_t *l_1666 = &l_1663;
                        int32_t *l_1667 = &l_1662[2][0];
                        int32_t *l_1668[7][2] = {{&g_59[8],&l_1662[2][0]},{&g_59[8],&l_1662[2][0]},{&g_59[8],&l_1662[2][0]},{&g_59[8],&l_1662[2][0]},{&g_59[8],&l_1662[2][0]},{&g_59[8],&l_1662[2][0]},{&g_59[8],&l_1662[2][0]}};
                        int i, j;
                        (*g_146) = p_48;
                        ++l_1670;
                        l_1662[1][0] = ((*g_146) = 0x32BC2857L);
                    }
                    return l_1673[2];
                }
                --l_1675[3][1][0];
                for (g_360 = 0; (g_360 >= 25); g_360 = safe_add_func_uint16_t_u_u(g_360, 2))
                { /* block id: 853 */
                    uint32_t *l_1689[8] = {&l_1542,&l_1542,&l_1542,&l_1542,&l_1542,&l_1542,&l_1542,&l_1542};
                    uint32_t **l_1690 = (void*)0;
                    int32_t l_1703 = 0x9EF797C4L;
                    int i;
                    (*g_514) &= (*g_146);
                    if (((safe_rshift_func_int8_t_s_u(p_48, 2)) > (((*l_1579) = (--l_1682)) == (safe_mod_func_int8_t_s_s((safe_mul_func_int16_t_s_s(0L, p_47)), (((l_1691 = l_1689[1]) != ((safe_div_func_int8_t_s_s(0L, (p_48 || ((safe_div_func_int16_t_s_s((safe_mod_func_int8_t_s_s(((*l_790) = (safe_mul_func_uint8_t_u_u(((*l_1594) = ((void*)0 != l_873[7])), (safe_unary_minus_func_uint16_t_u(((safe_mod_func_int8_t_s_s((l_1662[1][2] ^= l_1703), 0x88L)) , 1UL)))))), l_1703)), p_46)) || g_145)))) , &l_1670)) & l_1647))))))
                    { /* block id: 861 */
                        return (*l_824);
                    }
                    else
                    { /* block id: 863 */
                        return (*l_824);
                    }
                }
            }
            if (((((safe_lshift_func_uint8_t_u_u(p_47, ((((*g_146) = ((((*g_514) = ((((void*)0 == &g_408[5][0]) && p_45) <= ((*g_434)++))) | p_47) | (1L <= (((void*)0 == l_1710) & (((g_124 &= ((0x09BA0DEDL > (-1L)) , 0L)) && p_47) != 0UL))))) , (*g_434)) != 0x6663A05DL))) || p_47) > p_46) , 0x9E8BC888L))
            { /* block id: 872 */
                int32_t l_1712[1];
                int32_t l_1713[8][2][3] = {{{0xE0DAFB5FL,(-7L),(-7L)},{0x6966D37CL,(-7L),0xDF1FC2D9L}},{{(-1L),(-7L),0L},{0xE0DAFB5FL,(-7L),(-7L)}},{{0x6966D37CL,(-7L),0xDF1FC2D9L},{(-1L),(-7L),0L}},{{0xE0DAFB5FL,(-7L),(-7L)},{0x6966D37CL,(-7L),0xDF1FC2D9L}},{{(-1L),(-7L),0L},{0xE0DAFB5FL,(-7L),(-7L)}},{{0x6966D37CL,(-7L),0xDF1FC2D9L},{(-1L),(-7L),0L}},{{0xE0DAFB5FL,(-7L),(-7L)},{0x6966D37CL,(-7L),0xDF1FC2D9L}},{{(-1L),(-7L),0L},{0xE0DAFB5FL,(-7L),(-7L)}}};
                int16_t l_1715 = 9L;
                int32_t l_1716 = (-1L);
                uint32_t l_1717 = 1UL;
                int32_t *l_1720[4] = {&l_1714,&l_1714,&l_1714,&l_1714};
                int i, j, k;
                for (i = 0; i < 1; i++)
                    l_1712[i] = 0x31D00C21L;
                for (g_775 = 0; g_775 < 9; g_775 += 1)
                {
                    g_69[g_775] = 0xA232L;
                }
                ++l_1717;
                l_1720[1] = &l_1713[7][0][1];
                for (l_1715 = 9; (l_1715 <= 15); l_1715++)
                { /* block id: 878 */
                    uint32_t l_1725[1][2][1];
                    int32_t *l_1743 = (void*)0;
                    int32_t l_1757[2][8][6] = {{{0x49E5A31AL,0xA31FA484L,2L,0L,0x8FADFB52L,0xC791BA3CL},{0xC791BA3CL,0L,0xFCCBC020L,0L,2L,0x49E5A31AL},{2L,0x8FADFB52L,0xA71F3D56L,1L,0xC791BA3CL,0xC791BA3CL},{0x8FADFB52L,0x46E5F6F7L,0x46E5F6F7L,0x8FADFB52L,0xA31FA484L,0xC791BA3CL},{0xFCCBC020L,0xC791BA3CL,0xA71F3D56L,0x49E5A31AL,1L,0x49E5A31AL},{0xA31FA484L,0L,0xA31FA484L,0L,1L,2L},{0xA71F3D56L,0xC791BA3CL,0xFCCBC020L,0xA31FA484L,0xA31FA484L,0xFCCBC020L},{0x46E5F6F7L,0x46E5F6F7L,0x8FADFB52L,0xA31FA484L,0xC791BA3CL,0L}},{{0xA71F3D56L,0x8FADFB52L,2L,0L,2L,0x8FADFB52L},{0xA31FA484L,0xA71F3D56L,2L,0x49E5A31AL,0x46E5F6F7L,0L},{0xFCCBC020L,0x49E5A31AL,0x8FADFB52L,0x8FADFB52L,0x49E5A31AL,0xFCCBC020L},{0x8FADFB52L,0x49E5A31AL,0xFCCBC020L,1L,0x46E5F6F7L,2L},{2L,0xA71F3D56L,0xA31FA484L,0xA71F3D56L,2L,0x49E5A31AL},{2L,0x8FADFB52L,0xA71F3D56L,1L,0xC791BA3CL,0xC791BA3CL},{0x8FADFB52L,0x46E5F6F7L,0x46E5F6F7L,0x8FADFB52L,0xA31FA484L,0xC791BA3CL},{0xFCCBC020L,0xC791BA3CL,0xA71F3D56L,0x49E5A31AL,1L,0x49E5A31AL}}};
                    int i, j, k;
                    for (i = 0; i < 1; i++)
                    {
                        for (j = 0; j < 2; j++)
                        {
                            for (k = 0; k < 1; k++)
                                l_1725[i][j][k] = 9UL;
                        }
                    }
                    (*g_514) |= p_47;
                    if ((((!(((((!(*g_434)) & (g_59[1] & p_46)) & (l_1725[0][0][0] > (safe_mul_func_int16_t_s_s((safe_mod_func_uint16_t_u_u(0x764CL, (safe_mul_func_int16_t_s_s(((g_1250 == (safe_mul_func_int8_t_s_s(p_45, (((((safe_div_func_int32_t_s_s((safe_lshift_func_uint16_t_u_u(1UL, (~(safe_add_func_uint32_t_u_u((&g_455 == &g_455), p_46))))), p_48)) , 0x19E31692L) ^ 0L) != 0L) || (*g_434))))) && p_47), 65529UL)))), l_1742[6][3][3])))) & p_45) == g_360)) , 1UL) < 0x0FL))
                    { /* block id: 880 */
                        int32_t ***l_1751 = &l_1673[0];
                        int16_t *l_1754 = &l_1432;
                        int16_t *l_1756 = &g_775;
                        l_1744 = l_1743;
                        (*g_146) ^= (safe_lshift_func_int16_t_s_s((safe_mul_func_int16_t_s_s(p_46, (safe_sub_func_int8_t_s_s((((*l_1071) != l_1751) <= (&g_435 != (void*)0)), 0UL)))), (safe_lshift_func_int16_t_s_u(((((*l_1754) = ((void*)0 == &g_658[0])) | ((*l_1756) ^= ((p_45 , p_45) | l_1755))) < (***l_1751)), p_45))));
                    }
                    else
                    { /* block id: 885 */
                        l_827 = &l_857[1];
                        g_1758[3][0][1]++;
                        g_514 = &g_61;
                    }
                    for (p_47 = 2; (p_47 > 57); p_47 = safe_add_func_int32_t_s_s(p_47, 2))
                    { /* block id: 892 */
                        int8_t l_1763 = (-7L);
                        int32_t l_1764 = 1L;
                        (*g_146) &= 1L;
                        --l_1765;
                        if (p_47)
                            break;
                        return &g_514;
                    }
                }
            }
            else
            { /* block id: 899 */
                int8_t l_1789 = (-1L);
                for (l_1249 = 18; (l_1249 <= 9); l_1249 = safe_sub_func_int8_t_s_s(l_1249, 1))
                { /* block id: 902 */
                    (*g_514) |= ((safe_mod_func_int16_t_s_s(p_45, 0xDE63L)) > (safe_mod_func_uint8_t_u_u(((g_775 , (safe_sub_func_uint16_t_u_u(l_1776, (!((safe_mul_func_int8_t_s_s(p_46, ((safe_mod_func_int16_t_s_s((((p_45 <= ((safe_mod_func_int8_t_s_s((safe_mod_func_int16_t_s_s((((g_145 | p_45) & ((safe_sub_func_uint8_t_u_u(((*l_1579) ^= ((safe_sub_func_int16_t_s_s((l_1789 ^ 0L), p_47)) , p_46)), 0xA2L)) > 0xD456L)) && l_1790), 0x2067L)), 0xCDL)) ^ p_47)) | p_46) == l_1789), (*g_713))) || 0xB4L))) < 3L))))) ^ 0xD0L), l_1791)));
                }
            }
            for (l_858 = 0; l_858 < 8; l_858 += 1)
            {
                for (l_1790 = 0; l_1790 < 4; l_1790 += 1)
                {
                    for (g_775 = 0; g_775 < 5; g_775 += 1)
                    {
                        l_1742[l_858][l_1790][g_775] = 0x47264078L;
                    }
                }
            }
        }
    }
    return (*l_824);
}


/* ------------------------------------------ */
/* 
 * reads : g_434 g_138 g_436 g_408 g_31 g_59 g_146 g_60 g_69 g_2 g_360 g_36 g_514 g_37 g_124 g_415 g_658 g_126 g_61 g_713 g_454 g_455 g_358 g_510
 * writes: g_360 g_37 g_510 g_436 g_145 g_415 g_69 g_59 g_60 g_131 g_31 g_138 g_658 g_712 g_659 g_455
 */
static uint32_t  func_49(uint16_t  p_50, int32_t ** const  p_51, int32_t  p_52, int8_t  p_53, uint8_t  p_54)
{ /* block id: 265 */
    int32_t *l_540 = (void*)0;
    int32_t l_551 = 0x82C03D9FL;
    int32_t l_555 = (-1L);
    int32_t l_557 = 0xD8A38C6FL;
    int32_t ***l_583[5] = {&g_455,&g_455,&g_455,&g_455,&g_455};
    uint32_t l_633 = 18446744073709551609UL;
    const uint32_t l_656 = 0x411EFF5AL;
    uint16_t *l_710 = &g_69[4];
    uint16_t **l_709 = &l_710;
    int i;
lbl_539:
    for (g_360 = 1; (g_360 >= 0); g_360 -= 1)
    { /* block id: 268 */
        int32_t *l_534 = &g_59[5];
        (*p_51) = l_534;
        for (g_510 = 0; (g_510 <= 1); g_510 += 1)
        { /* block id: 272 */
            return (*g_434);
        }
    }
    for (g_436 = 25; (g_436 > 44); g_436 = safe_add_func_uint8_t_u_u(g_436, 5))
    { /* block id: 278 */
        const uint16_t *l_541 = &g_69[7];
        int32_t l_546 = 6L;
        int8_t *l_547 = &g_415;
        int32_t l_552 = 0xFCB77EC7L;
        int32_t l_553 = 0x0A279ABBL;
        int32_t l_554 = 0x31D6845EL;
        int32_t l_556 = 0xC2775E94L;
        int32_t l_558 = 2L;
        int32_t l_559 = 0xB7C1040AL;
        int32_t ***l_581[10] = {&g_455,&g_455,&g_455,&g_455,&g_455,&g_455,&g_455,&g_455,&g_455,&g_455};
        uint32_t l_616 = 0x0D85AE67L;
        int32_t l_635[10] = {0x7AF0BAD7L,0x7AF0BAD7L,0x7AF0BAD7L,0x7AF0BAD7L,0x7AF0BAD7L,0x7AF0BAD7L,0x7AF0BAD7L,0x7AF0BAD7L,0x7AF0BAD7L,0x7AF0BAD7L};
        uint16_t l_664 = 1UL;
        int16_t l_734 = 0xCC65L;
        uint32_t l_735 = 0x14DBAF86L;
        int i;
        for (g_145 = 0; (g_145 > 47); g_145 = safe_add_func_uint16_t_u_u(g_145, 4))
        { /* block id: 281 */
            if (g_436)
                goto lbl_539;
        }
        (*p_51) = l_540;
        if ((((void*)0 != l_541) != (safe_rshift_func_int16_t_s_u((((!(safe_lshift_func_int8_t_s_s(((*l_547) = l_546), 7))) ^ g_408[4][8]) ^ 0x8BL), 4))))
        { /* block id: 286 */
            int32_t *l_550[10] = {&g_60[0][4][3],&g_60[0][4][3],&g_60[0][4][3],&g_60[0][4][3],&g_60[0][4][3],&g_60[0][4][3],&g_60[0][4][3],&g_60[0][4][3],&g_60[0][4][3],&g_60[0][4][3]};
            uint8_t l_560 = 0UL;
            uint16_t *l_567 = &g_145;
            uint16_t *l_576 = &g_69[7];
            int32_t ****l_582[10][1];
            uint32_t l_615 = 0x6C53EE8BL;
            int32_t l_638 = (-8L);
            int i, j;
            for (i = 0; i < 10; i++)
            {
                for (j = 0; j < 1; j++)
                    l_582[i][j] = (void*)0;
            }
            for (g_360 = 0; (g_360 != (-29)); g_360 = safe_sub_func_uint16_t_u_u(g_360, 8))
            { /* block id: 289 */
                return (*g_434);
            }
            --l_560;
            if ((safe_sub_func_uint8_t_u_u((safe_lshift_func_uint16_t_u_u((((*l_567) = g_138[3]) <= (l_552 ^ (safe_mod_func_uint16_t_u_u(((*l_576) = (safe_mul_func_uint8_t_u_u((safe_add_func_int8_t_s_s(g_31[0], 8L)), (l_546 = (safe_add_func_uint32_t_u_u(p_50, (*g_434))))))), ((((safe_add_func_int16_t_s_s((p_54 , (safe_sub_func_int8_t_s_s(((l_583[4] = l_581[2]) != l_581[2]), p_52))), g_59[1])) | (*g_146)) & p_54) & (-6L)))))), g_408[2][6])), (-5L))))
            { /* block id: 297 */
                uint32_t l_603[3];
                int32_t *l_617 = (void*)0;
                int i;
                for (i = 0; i < 3; i++)
                    l_603[i] = 0x9414E551L;
                for (g_510 = 9; (g_510 >= 0); g_510 -= 1)
                { /* block id: 300 */
                    const uint8_t l_602 = 0UL;
                    uint8_t l_604 = 255UL;
                    int32_t l_605 = (-1L);
                    for (l_560 = 0; (l_560 <= 9); l_560 += 1)
                    { /* block id: 303 */
                        int i;
                        l_605 = (((((((((safe_div_func_uint8_t_u_u((safe_sub_func_uint16_t_u_u(p_50, ((*g_146) && (l_603[2] ^= ((((((((p_53 , (safe_mod_func_uint32_t_u_u((&l_541 == (void*)0), (+((p_54 || ((safe_lshift_func_int8_t_s_u((safe_add_func_uint32_t_u_u((g_69[5] | ((*l_547) = 0x37L)), (safe_rshift_func_uint16_t_u_u((safe_rshift_func_int16_t_s_s((((safe_mod_func_uint8_t_u_u((safe_div_func_int8_t_s_s((((!((((4294967287UL > p_53) | g_59[1]) & 8UL) <= 0L)) ^ p_54) == p_53), p_52)), p_54)) | p_54) && (-1L)), 9)), g_138[3])))), g_2)) ^ 255UL)) >= l_602))))) & (*g_146)) > (*g_146)) , g_436) && 0xCBL) == p_50) == (-2L)) >= 65533UL))))), (-10L))) & g_60[0][4][3]) , l_602) || l_603[2]) || l_603[2]) >= l_604) > g_360) >= g_436) >= g_36);
                        (*g_146) = ((0x1D37402DL || (*g_514)) , ((*g_514) = p_54));
                        (*g_514) = (*g_514);
                    }
                    (*p_51) = (*p_51);
                }
                if (p_50)
                { /* block id: 313 */
                    return (*g_434);
                }
                else
                { /* block id: 315 */
                    uint32_t l_608 = 0x2C838B9FL;
                    uint8_t l_612 = 0xA6L;
                    for (l_546 = 22; (l_546 <= 12); l_546 = safe_sub_func_int8_t_s_s(l_546, 8))
                    { /* block id: 318 */
                        uint8_t l_609 = 0UL;
                        if (l_608)
                            break;
                        --l_609;
                    }
                    p_52 |= l_608;
                    (*g_514) ^= l_612;
                    for (l_559 = 0; (l_559 < (-28)); l_559 = safe_sub_func_uint16_t_u_u(l_559, 7))
                    { /* block id: 326 */
                        (*g_146) &= l_615;
                        (*g_514) &= (p_52 , l_616);
                        if (l_603[2])
                            continue;
                        (*p_51) = l_617;
                    }
                }
                if ((*g_514))
                    break;
            }
            else
            { /* block id: 334 */
                uint32_t l_637 = 0UL;
                uint32_t l_657 = 0x8AE57ECFL;
                (*g_146) &= (&g_436 == (void*)0);
                for (g_131 = 0; (g_131 < 17); g_131 = safe_add_func_uint32_t_u_u(g_131, 4))
                { /* block id: 338 */
                    uint32_t l_623 = 0x5CA092ADL;
                    for (l_554 = (-7); (l_554 == (-20)); l_554--)
                    { /* block id: 341 */
                        int16_t l_622 = 0L;
                        l_623++;
                        if ((*g_146))
                            continue;
                    }
                    for (l_559 = 0; (l_559 <= 8); l_559 += 1)
                    { /* block id: 347 */
                        const int32_t *l_632 = &g_61;
                        int32_t *l_634[7];
                        int32_t **** const l_636 = &l_583[4];
                        int i;
                        for (i = 0; i < 7; i++)
                            l_634[i] = (void*)0;
                        l_638 |= (((safe_div_func_int32_t_s_s((((safe_sub_func_uint32_t_u_u((safe_mul_func_int16_t_s_s((g_59[l_559] <= ((*l_567) = ((*l_576) &= (l_632 != ((l_633 &= (*g_146)) , l_634[4]))))), 7UL)), (*g_434))) , ((g_124 , l_635[4]) , l_636)) != l_582[7][0]), (*g_434))) == 0x07D52D4DL) > l_637);
                        p_52 &= 0xA782E568L;
                    }
                }
                for (l_616 = 0; (l_616 == 29); ++l_616)
                { /* block id: 357 */
                    uint32_t l_653 = 18446744073709551615UL;
                    int32_t *l_654[7][5] = {{&l_546,(void*)0,&l_557,&g_61,&l_555},{&g_60[0][0][2],(void*)0,&l_558,&l_559,&g_59[1]},{(void*)0,&l_559,&l_556,&g_60[1][0][2],&g_60[1][0][2]},{&g_60[0][0][2],&l_557,&g_60[0][0][2],&l_556,&l_551},{&l_546,&l_557,&g_59[1],(void*)0,(void*)0},{(void*)0,&l_559,&g_60[1][0][2],&l_558,&l_546},{&l_555,(void*)0,&g_59[1],(void*)0,&l_555}};
                    uint8_t *l_655 = &g_31[0];
                    uint8_t ***l_660 = (void*)0;
                    uint8_t ***l_661 = &g_658[3];
                    int i, j;
                    p_52 = (((*l_661) = ((safe_div_func_uint32_t_u_u((l_657 = ((*g_434) = (((*g_514) = (l_637 | 0UL)) || (safe_mul_func_int16_t_s_s((g_408[4][2] ^ p_53), (safe_mod_func_uint32_t_u_u(((safe_mul_func_int8_t_s_s((!(safe_sub_func_uint8_t_u_u(g_415, (((*l_655) = ((safe_mul_func_uint16_t_u_u(((0xE3L != ((((0UL & ((l_653 ^ (((*g_434) & (*g_514)) , 0xDF15A246L)) ^ 0x1573C95DL)) > 0L) , l_654[2][0]) != (void*)0)) , 0x53B7L), p_53)) >= 0xAB7CL)) & g_59[7])))), 248UL)) , p_53), l_656))))))), l_637)) , g_658[3])) != (void*)0);
                    (*p_51) = (*p_51);
                    if (p_53)
                        continue;
                    for (l_553 = (-15); (l_553 < 21); l_553++)
                    { /* block id: 368 */
                        (*g_514) = ((*g_146) |= (*g_514));
                        l_664--;
                        return (*g_434);
                    }
                }
            }
            for (g_145 = 24; (g_145 != 26); ++g_145)
            { /* block id: 378 */
                int32_t l_671 = (-3L);
                for (p_50 = 1; (p_50 <= 5); p_50 += 1)
                { /* block id: 381 */
                    int16_t *l_682[10] = {&g_124,&g_124,&g_124,&g_124,&g_124,&g_124,&g_124,&g_124,&g_124,&g_124};
                    int32_t l_683 = 6L;
                    uint8_t *l_696[3][10] = {{&g_131,&g_131,&l_560,&g_31[0],&g_31[0],&g_31[0],&l_560,&g_131,&g_131,&l_560},{&l_560,&g_31[0],&g_31[0],&g_31[0],&g_31[0],&l_560,&l_560,&l_560,&g_31[0],&g_31[0]},{&g_31[0],&g_131,&g_31[0],&g_31[0],&l_560,&g_131,&l_560,&g_31[0],&g_31[0],&g_31[0]}};
                    int32_t l_705 = 0x94593FD2L;
                    int i, j;
                    if ((*g_514))
                        break;
                    (*g_514) = ((((+(safe_add_func_uint8_t_u_u(p_50, l_671))) , ((((g_408[2][6] , (safe_div_func_uint16_t_u_u(0UL, ((((safe_rshift_func_int8_t_s_u(((safe_rshift_func_uint8_t_u_s((2L > (((((safe_rshift_func_int8_t_s_s((((safe_div_func_uint16_t_u_u(p_53, (l_683 = g_124))) && (safe_mod_func_uint16_t_u_u((safe_mul_func_int8_t_s_s((safe_lshift_func_uint16_t_u_u((safe_lshift_func_int16_t_s_u((safe_sub_func_uint8_t_u_u((safe_add_func_int8_t_s_s(((p_52 > (++p_54)) > ((safe_sub_func_int8_t_s_s((((safe_mul_func_uint16_t_u_u((safe_lshift_func_int16_t_s_u((&g_659 == &l_696[1][4]), p_52)), 0x415CL)) , (void*)0) != &l_560), (-1L))) , g_126)), p_52)), 0x83L)), 9)), 1)), p_50)), g_415))) == 4L), p_50)) , (-1L)) , 4294967289UL) >= (*g_434)) & 0x9D18L)), l_671)) > p_53), 7)) == 0x15L) != l_705) || (*g_434))))) >= l_671) & p_50) | g_61)) != p_50) == p_50);
                    if (l_671)
                        break;
                }
            }
        }
        else
        { /* block id: 389 */
            uint16_t **l_711 = (void*)0;
            int32_t l_714 = (-2L);
            int32_t l_718[1][4];
            int32_t l_733 = (-1L);
            const int16_t *l_768 = &g_124;
            int i, j;
            for (i = 0; i < 1; i++)
            {
                for (j = 0; j < 4; j++)
                    l_718[i][j] = 0xE11A78C6L;
            }
            for (l_556 = 0; (l_556 >= (-25)); --l_556)
            { /* block id: 392 */
                uint8_t l_708 = 254UL;
                for (g_510 = 0; (g_510 <= 4); g_510 += 1)
                { /* block id: 395 */
                    int i;
                    if (l_708)
                        break;
                    (*g_514) = l_708;
                }
                l_718[0][1] &= (l_708 >= (((g_126 < (l_709 == (g_712 = l_711))) && (((*g_434) = (l_714 != (safe_unary_minus_func_int32_t_s(((*g_514) = (((*g_514) >= (safe_mod_func_int16_t_s_s(g_59[1], g_60[0][0][1]))) != ((((p_53 < (*g_434)) ^ p_50) >= 0xE6L) == 0x38L))))))) , p_50)) == (*g_146)));
                if (l_718[0][1])
                    break;
                if ((*g_146))
                    break;
            }
            for (l_558 = 25; (l_558 != 20); l_558 = safe_sub_func_uint32_t_u_u(l_558, 9))
            { /* block id: 408 */
                int8_t ***l_725 = &g_435;
                int32_t l_738 = 9L;
                uint32_t l_746 = 1UL;
                if ((*g_146))
                { /* block id: 409 */
                    uint32_t l_745[5] = {0UL,0UL,0UL,0UL,0UL};
                    int i;
                    for (l_664 = 3; (l_664 <= 9); l_664 += 1)
                    { /* block id: 412 */
                        int8_t ***l_726 = &g_435;
                        int32_t l_727[7][7][5] = {{{1L,1L,(-8L),0L,0xAC6AC439L},{0xE288136EL,0x1BA38A8AL,1L,(-1L),(-1L)},{1L,0xB996CF60L,0xBC9EBEC7L,0L,0xBC9EBEC7L},{0x1BA38A8AL,0x1BA38A8AL,0L,0x47413CE9L,(-1L)},{0xB996CF60L,1L,0xBC9EBEC7L,0xA7A60C50L,0xAC6AC439L},{0x1BA38A8AL,0xE288136EL,1L,0x47413CE9L,1L},{1L,1L,(-8L),0L,0xAC6AC439L}},{{0xE288136EL,0x1BA38A8AL,1L,(-1L),(-1L)},{1L,0xB996CF60L,0xBC9EBEC7L,0L,0xBC9EBEC7L},{0x1BA38A8AL,0x1BA38A8AL,0L,0x47413CE9L,(-1L)},{0xB996CF60L,1L,0xBC9EBEC7L,0xA7A60C50L,0xAC6AC439L},{0x1BA38A8AL,0xE288136EL,1L,0x47413CE9L,1L},{1L,1L,(-8L),0L,0xAC6AC439L},{0xE288136EL,0x1BA38A8AL,1L,(-1L),(-1L)}},{{1L,0xB996CF60L,0xBC9EBEC7L,0L,0xBC9EBEC7L},{0x1BA38A8AL,0x1BA38A8AL,0L,0x47413CE9L,(-1L)},{0xB996CF60L,1L,0xBC9EBEC7L,0xA7A60C50L,0xAC6AC439L},{0x1BA38A8AL,0xE288136EL,1L,0x47413CE9L,1L},{1L,1L,(-8L),0L,0xAC6AC439L},{0xE288136EL,0x1BA38A8AL,1L,(-1L),(-1L)},{1L,0xB996CF60L,0xBC9EBEC7L,0L,0xBC9EBEC7L}},{{0x1BA38A8AL,0x1BA38A8AL,0L,0x47413CE9L,(-1L)},{0xB996CF60L,1L,0xBC9EBEC7L,0xA7A60C50L,0xAC6AC439L},{0x1BA38A8AL,0xE288136EL,1L,0x47413CE9L,1L},{1L,1L,(-8L),0L,0xAC6AC439L},{0xE288136EL,0x1BA38A8AL,1L,(-1L),(-1L)},{1L,0xB996CF60L,0xBC9EBEC7L,0L,0xBC9EBEC7L},{0x1BA38A8AL,0x1BA38A8AL,0L,0x47413CE9L,(-1L)}},{{0xB996CF60L,1L,0xBC9EBEC7L,0xA7A60C50L,0xAC6AC439L},{0x1BA38A8AL,0xE288136EL,1L,0x47413CE9L,1L},{1L,1L,(-8L),0L,0xAC6AC439L},{0xE288136EL,0x1BA38A8AL,1L,(-1L),(-1L)},{1L,0xB996CF60L,0xBC9EBEC7L,0L,0xBC9EBEC7L},{0x1BA38A8AL,0x1BA38A8AL,0L,0x47413CE9L,(-1L)},{0xB996CF60L,1L,0xBC9EBEC7L,0xA7A60C50L,0xAC6AC439L}},{{0x1BA38A8AL,0xE288136EL,1L,0x47413CE9L,1L},{0xBC9EBEC7L,0xBC9EBEC7L,0xBF005C69L,1L,2L},{0L,1L,0L,1L,0L},{0xBC9EBEC7L,(-8L),0L,1L,0L},{1L,1L,0x29987E69L,(-2L),0L},{(-8L),0xBC9EBEC7L,0L,0xAA4F085EL,2L},{1L,0L,0L,(-2L),0L}},{{0xBC9EBEC7L,0xBC9EBEC7L,0xBF005C69L,1L,2L},{0L,1L,0L,1L,0L},{0xBC9EBEC7L,(-8L),0L,1L,0L},{1L,1L,0x29987E69L,(-2L),0L},{(-8L),0xBC9EBEC7L,0L,0xAA4F085EL,2L},{1L,0L,0L,(-2L),0L},{0xBC9EBEC7L,0xBC9EBEC7L,0xBF005C69L,1L,2L}}};
                        uint8_t **l_732 = &g_659;
                        uint8_t *l_736 = &g_31[0];
                        int16_t *l_737[7][10][3] = {{{&g_124,(void*)0,&l_734},{(void*)0,&g_124,(void*)0},{&g_124,&g_124,&l_734},{&g_124,&g_124,&l_734},{&g_124,&g_124,&l_734},{&g_124,&g_124,&l_734},{&l_734,(void*)0,(void*)0},{&g_124,(void*)0,&l_734},{&g_124,&g_124,&g_124},{&g_124,&l_734,&g_124}},{{(void*)0,(void*)0,&g_124},{&l_734,&g_124,(void*)0},{&l_734,&l_734,(void*)0},{&g_124,&l_734,&l_734},{&l_734,&g_124,&g_124},{&l_734,&l_734,&g_124},{(void*)0,(void*)0,&g_124},{&g_124,&g_124,(void*)0},{&g_124,&l_734,(void*)0},{&g_124,&l_734,&g_124}},{{&l_734,(void*)0,&l_734},{&g_124,&l_734,&g_124},{&g_124,&l_734,&g_124},{&g_124,(void*)0,&g_124},{&g_124,&l_734,(void*)0},{(void*)0,&l_734,&g_124},{&g_124,&g_124,&g_124},{(void*)0,(void*)0,&g_124},{&l_734,&l_734,&g_124},{&l_734,&g_124,&g_124}},{{&g_124,&l_734,&l_734},{&g_124,&l_734,&g_124},{&g_124,&g_124,&g_124},{&g_124,(void*)0,&g_124},{&g_124,&l_734,&g_124},{&l_734,&g_124,&g_124},{&l_734,(void*)0,(void*)0},{&l_734,(void*)0,&g_124},{(void*)0,&g_124,&g_124},{&g_124,&g_124,&g_124}},{{&g_124,&g_124,&l_734},{(void*)0,&g_124,&g_124},{&g_124,&g_124,&l_734},{&g_124,(void*)0,&g_124},{&l_734,&l_734,&l_734},{&g_124,(void*)0,&g_124},{(void*)0,(void*)0,&g_124},{&g_124,&l_734,&g_124},{&l_734,(void*)0,&g_124},{(void*)0,&l_734,(void*)0}},{{&l_734,(void*)0,&l_734},{&l_734,(void*)0,&g_124},{&l_734,&l_734,&l_734},{&l_734,(void*)0,&g_124},{&l_734,&g_124,(void*)0},{&g_124,&g_124,&l_734},{&l_734,&l_734,&l_734},{&l_734,&g_124,&l_734},{&g_124,&g_124,&l_734},{(void*)0,&g_124,(void*)0}},{{&l_734,&g_124,&g_124},{(void*)0,&g_124,&l_734},{&g_124,&g_124,&g_124},{&g_124,&l_734,&l_734},{&g_124,&g_124,(void*)0},{&g_124,&l_734,&g_124},{&l_734,&l_734,&g_124},{&g_124,&l_734,&g_124},{&g_124,(void*)0,&g_124},{&g_124,&l_734,&l_734}}};
                        int i, j, k;
                        (*p_51) = &l_718[0][1];
                        l_635[l_664] |= (safe_sub_func_int8_t_s_s(((+(*g_713)) <= (safe_rshift_func_uint16_t_u_s(((**p_51) ^ (l_725 == l_726)), (((*l_547) = p_53) != l_727[4][5][3])))), ((*l_736) = (safe_lshift_func_uint8_t_u_u(((p_54 ^ (safe_mod_func_uint16_t_u_u((((0x77L > (((*l_732) = ((l_718[0][3] , p_52) , (void*)0)) == &p_54)) || l_733) > l_727[4][5][3]), 0x2525L))) <= l_734), l_735)))));
                        l_746 ^= ((*g_146) = ((l_718[0][1] = 0x564EL) , ((l_738 || ((**l_709) |= 0xC3CCL)) < (safe_sub_func_uint16_t_u_u(p_50, (safe_add_func_uint16_t_u_u(((safe_add_func_int8_t_s_s(((*l_547) = p_53), (l_718[0][3] || ((l_745[0] < (((*g_454) = (*g_454)) != (void*)0)) & p_50)))) & l_745[3]), g_61)))))));
                        (**p_51) &= (0x54A292B6L > (p_54 & (g_358 , ((*l_736) = (~(safe_mul_func_uint16_t_u_u(p_50, 9UL)))))));
                    }
                    (*g_146) |= (safe_add_func_int32_t_s_s(((safe_add_func_int16_t_s_s(((void*)0 != &g_2), p_53)) | (safe_div_func_int16_t_s_s((safe_lshift_func_int8_t_s_u((p_54 , ((0x7874L == (safe_div_func_int16_t_s_s((((((p_50 >= ((safe_unary_minus_func_int16_t_s((safe_lshift_func_int8_t_s_u(((*l_547) = g_2), 5)))) | ((l_714 = (((safe_mod_func_int32_t_s_s((safe_add_func_int8_t_s_s(p_50, p_53)), (*g_514))) ^ 0UL) || p_54)) | 4294967295UL))) ^ (-1L)) != l_745[3]) , (*g_434)) , 0xF7FBL), 1L))) >= 1UL)), 6)), 0x7B0EL))), l_738));
                }
                else
                { /* block id: 430 */
                    for (l_559 = 0; (l_559 < 25); l_559++)
                    { /* block id: 433 */
                        (*g_146) ^= ((g_126 , &l_734) != l_768);
                        (*p_51) = (*p_51);
                    }
                }
                for (p_54 = 0; (p_54 <= 24); p_54 = safe_add_func_int16_t_s_s(p_54, 4))
                { /* block id: 440 */
                    uint16_t l_773[8][2] = {{0x9B95L,0x9F13L},{0xE64DL,0x9F13L},{0x9B95L,0x9F13L},{0xE64DL,0x9F13L},{0x9B95L,0x9F13L},{0xE64DL,0x9F13L},{0x9B95L,0x9F13L},{0xE64DL,0x9F13L}};
                    int i, j;
                    for (l_664 = 0; (l_664 >= 19); l_664 = safe_add_func_int16_t_s_s(l_664, 1))
                    { /* block id: 443 */
                        (*g_146) |= l_718[0][1];
                    }
                    (*g_146) = l_773[3][0];
                }
            }
        }
    }
    return p_54;
}


/* ------------------------------------------ */
/* 
 * reads : g_36 g_69 g_37 p_24 l_3153
 * writes: g_36 g_59 g_60 g_61 g_69 g_37 p_24 l_3153
 */
static uint32_t  func_57(int16_t  p_58)
{ /* block id: 15 */
    int32_t *l_62 = &g_59[1];
    int32_t l_67 = 3L;
    int32_t l_91 = 0xC7F14991L;
    int32_t l_92[8][8] = {{1L,0x1594A516L,6L,6L,0x1594A516L,1L,0x1594A516L,6L},{0x03B84D85L,0x1594A516L,0x03B84D85L,1L,1L,0x03B84D85L,0x1594A516L,0x03B84D85L},{0xC4F7295DL,1L,6L,1L,0xC4F7295DL,0xC4F7295DL,1L,6L},{0xC4F7295DL,0xC4F7295DL,1L,6L,1L,0xC4F7295DL,0xC4F7295DL,1L},{0x03B84D85L,1L,1L,0x03B84D85L,0x1594A516L,0x03B84D85L,1L,1L},{1L,0x1594A516L,6L,6L,0x1594A516L,1L,0x1594A516L,6L},{0x03B84D85L,0x1594A516L,0x03B84D85L,1L,1L,0x03B84D85L,0x1594A516L,0x03B84D85L},{0xC4F7295DL,1L,6L,1L,0xC4F7295DL,0xC4F7295DL,1L,6L}};
    int32_t l_94 = (-7L);
    uint8_t l_95 = 0x96L;
    int32_t **l_100 = (void*)0;
    uint8_t *l_177 = &g_31[0];
    const int32_t l_181 = 0xD7EB5230L;
    uint16_t l_218 = 0x8B7BL;
    int8_t l_219 = 0xA8L;
    const uint8_t l_274 = 3UL;
    int32_t **l_302 = &g_37;
    uint8_t l_356 = 1UL;
    const int8_t l_406 = 1L;
    int32_t *l_438[5] = {&l_94,&l_94,&l_94,&l_94,&l_94};
    uint16_t *l_457 = &l_218;
    const int8_t *l_484[6] = {&l_406,&l_406,&l_406,&l_406,&l_406,&l_406};
    const int8_t **l_483 = &l_484[2];
    uint8_t l_492 = 0x16L;
    int32_t l_513 = 0L;
    uint32_t l_523 = 0x8A4C21B0L;
    int i, j;
    for (g_36 = 0; (g_36 <= 0); g_36 += 1)
    { /* block id: 18 */
        int32_t l_68 = 2L;
        int32_t l_89 = 0x7EEACC20L;
        int32_t l_93 = (-5L);
        for (p_58 = 0; (p_58 <= 0); p_58 += 1)
        { /* block id: 21 */
            uint8_t l_72 = 255UL;
            int32_t l_87 = 0x6EE5324EL;
            int32_t l_88 = (-2L);
            int32_t l_90 = 2L;
            int32_t **l_98 = &g_37;
            int32_t ***l_99[1][3];
            int i, j;
            for (i = 0; i < 1; i++)
            {
                for (j = 0; j < 3; j++)
                    l_99[i][j] = &l_98;
            }
            for (g_59[1] = 0; (g_59[1] <= 0); g_59[1] += 1)
            { /* block id: 24 */
                int8_t l_65 = 0xA8L;
                int32_t l_66[10] = {0L,0L,0x855F075FL,0L,0L,0x855F075FL,0L,0L,0x855F075FL,0L};
                int i;
                for (g_60[0][4][3] = 0; (g_60[0][4][3] <= 0); g_60[0][4][3] += 1)
                { /* block id: 27 */
                    int32_t *l_64[7];
                    int i;
                    for (i = 0; i < 7; i++)
                        l_64[i] = &g_61;
                    for (g_61 = 0; (g_61 >= 0); g_61 -= 1)
                    { /* block id: 30 */
                        int32_t **l_63 = &l_62;
                        (*l_63) = l_62;
                    }
                    ++g_69[6];
                }
                ++l_72;
                for (l_68 = 0; (l_68 <= 0); l_68 += 1)
                { /* block id: 38 */
                    int32_t *l_79 = &l_67;
                    int32_t *l_80 = &g_61;
                    int32_t *l_81 = &g_60[0][4][3];
                    int32_t *l_82 = &l_66[5];
                    int32_t *l_83 = (void*)0;
                    int32_t *l_84 = &l_67;
                    int32_t *l_85 = &g_60[0][4][3];
                    int32_t *l_86[2];
                    int i;
                    for (i = 0; i < 2; i++)
                        l_86[i] = &g_61;
                    (*l_79) |= (safe_sub_func_int32_t_s_s((safe_sub_func_int8_t_s_s(0xBDL, g_36)), ((*g_37) ^= ((p_58 > p_58) >= g_36))));
                    (*l_79) = 9L;
                    ++l_95;
                }
            }
            l_100 = l_98;
            for (l_94 = 0; (l_94 >= 0); l_94 -= 1)
            { /* block id: 48 */
                for (l_67 = 0; (l_67 <= 0); l_67 += 1)
                { /* block id: 51 */
                    for (g_61 = 0; (g_61 <= 7); g_61 += 1)
                    { /* block id: 54 */
                        int i, j;
                        (*l_100) = &l_92[(l_94 + 3)][(g_36 + 5)];
                    }
                }
                if (p_58)
                    break;
            }
        }
    }
    for (l_95 = 0; (l_95 < 13); l_95 = safe_add_func_int8_t_s_s(l_95, 6))
    { /* block id: 64 */
        const int32_t l_122 = 0xE33F915BL;
        int32_t * const l_132 = &g_60[0][4][3];
        int32_t *l_133[9][4][6] = {{{(void*)0,&g_36,(void*)0,&l_92[2][7],(void*)0,&g_59[0]},{&g_36,&g_59[0],(void*)0,&l_92[6][7],&l_92[6][7],(void*)0},{&l_92[2][7],&l_92[2][7],&g_60[1][2][2],&l_92[6][7],&g_59[0],(void*)0},{&g_36,&g_60[1][2][2],&l_92[4][2],(void*)0,&l_92[4][2],&g_60[1][2][2]}},{{&l_92[6][7],&g_36,&l_92[4][2],(void*)0,&l_92[2][7],(void*)0},{(void*)0,(void*)0,&g_60[1][2][2],&g_60[1][2][2],(void*)0,(void*)0},{&g_60[1][2][2],(void*)0,(void*)0,&g_60[0][0][1],&l_92[2][7],&l_92[4][2]},{&l_92[4][2],&g_36,&l_92[6][7],&g_36,&l_92[4][2],(void*)0}},{{&l_92[4][2],&g_60[1][2][2],&g_36,&g_60[0][0][1],&g_59[0],&g_59[0]},{&g_60[1][2][2],&l_92[2][7],&l_92[2][7],&g_60[1][2][2],&l_92[6][7],&g_59[0]},{(void*)0,&g_59[0],&g_36,(void*)0,&g_60[0][0][1],(void*)0},{&l_92[6][7],(void*)0,&l_92[6][7],(void*)0,&g_60[0][0][1],&l_92[4][2]}},{{&g_36,&g_59[0],(void*)0,&l_92[6][7],&l_92[6][7],(void*)0},{&l_92[2][7],&l_92[2][7],&g_60[1][2][2],&l_92[6][7],&g_59[0],(void*)0},{&g_36,&g_60[1][2][2],&l_92[4][2],(void*)0,&l_92[4][2],&g_60[1][2][2]},{&l_92[6][7],&g_36,&l_92[4][2],(void*)0,&l_92[2][7],(void*)0}},{{(void*)0,(void*)0,&g_60[1][2][2],&g_60[1][2][2],(void*)0,(void*)0},{&g_60[1][2][2],(void*)0,(void*)0,&g_60[0][0][1],&l_92[2][7],&l_92[4][2]},{&l_92[4][2],&g_36,&l_92[6][7],&g_36,&l_92[4][2],(void*)0},{&l_92[4][2],&g_60[1][2][2],&g_36,&g_60[0][0][1],&g_59[0],&g_59[0]}},{{&g_60[1][2][2],&l_92[2][7],&l_92[2][7],&g_60[1][2][2],&l_92[6][7],&g_59[0]},{(void*)0,&g_59[0],&g_36,(void*)0,&g_60[0][0][1],(void*)0},{&l_92[6][7],(void*)0,&l_92[6][7],(void*)0,&g_60[0][0][1],&l_92[4][2]},{&g_36,&g_59[0],(void*)0,&l_92[6][7],&l_92[6][7],(void*)0}},{{&l_92[2][7],&l_92[2][7],&g_60[1][2][2],&l_92[6][7],&g_59[0],(void*)0},{&g_36,&g_60[1][2][2],&l_92[4][2],(void*)0,&l_92[4][2],&g_60[1][2][2]},{&l_92[6][7],&g_36,&l_92[4][2],(void*)0,&l_92[2][7],(void*)0},{(void*)0,(void*)0,&g_60[1][2][2],&g_60[1][2][2],(void*)0,(void*)0}},{{&g_60[1][2][2],(void*)0,(void*)0,&g_60[0][0][1],&l_92[2][7],&l_92[4][2]},{&l_92[4][2],&g_36,&l_92[6][7],&g_36,&l_92[4][2],(void*)0},{&l_92[4][2],&g_60[1][2][2],&g_36,&g_60[0][0][1],&g_59[0],&g_59[0]},{&g_60[1][2][2],&l_92[2][7],&l_92[2][7],&g_60[1][2][2],&l_92[6][7],&g_59[0]}},{{(void*)0,&g_59[0],&g_36,(void*)0,&g_59[0],&g_60[1][2][2]},{(void*)0,&g_60[0][0][1],(void*)0,&g_36,&g_59[0],(void*)0},{(void*)0,&l_92[4][2],&l_92[6][7],(void*)0,(void*)0,&l_92[6][7]},{(void*)0,(void*)0,&l_92[2][7],(void*)0,&l_92[4][2],&g_36}}};
        int8_t *l_175[1][4];
        int16_t l_217 = 0x3422L;
        uint16_t *l_255 = &g_69[6];
        int32_t * const **l_303[1];
        uint32_t *l_407 = &g_408[2][6];
        const int32_t *l_475 = (void*)0;
        int8_t * const *l_511 = (void*)0;
        int i, j, k;
        for (i = 0; i < 1; i++)
        {
            for (j = 0; j < 4; j++)
                l_175[i][j] = &g_126;
        }
        for (i = 0; i < 1; i++)
            l_303[i] = (void*)0;
    }
    return p_58;
}




/* ---------------------------------------- */
int main (int argc, char* argv[])
{
    int i, j, k;
    int print_hash_value = 0;
    if (argc == 2 && strcmp(argv[1], "1") == 0) print_hash_value = 1;
    platform_main_begin();
    crc32_gentab();
    func_1();
    transparent_crc(g_2, "g_2", print_hash_value);
    for (i = 0; i < 1; i++)
    {
        transparent_crc(g_31[i], "g_31[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_36, "g_36", print_hash_value);
    for (i = 0; i < 9; i++)
    {
        transparent_crc(g_59[i], "g_59[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    for (i = 0; i < 2; i++)
    {
        for (j = 0; j < 5; j++)
        {
            for (k = 0; k < 4; k++)
            {
                transparent_crc(g_60[i][j][k], "g_60[i][j][k]", print_hash_value);
                if (print_hash_value) printf("index = [%d][%d][%d]\n", i, j, k);

            }
        }
    }
    transparent_crc(g_61, "g_61", print_hash_value);
    for (i = 0; i < 9; i++)
    {
        transparent_crc(g_69[i], "g_69[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_124, "g_124", print_hash_value);
    transparent_crc(g_126, "g_126", print_hash_value);
    transparent_crc(g_131, "g_131", print_hash_value);
    for (i = 0; i < 4; i++)
    {
        transparent_crc(g_138[i], "g_138[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_145, "g_145", print_hash_value);
    transparent_crc(g_358, "g_358", print_hash_value);
    transparent_crc(g_360, "g_360", print_hash_value);
    for (i = 0; i < 6; i++)
    {
        for (j = 0; j < 10; j++)
        {
            transparent_crc(g_408[i][j], "g_408[i][j]", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

        }
    }
    transparent_crc(g_415, "g_415", print_hash_value);
    transparent_crc(g_436, "g_436", print_hash_value);
    transparent_crc(g_510, "g_510", print_hash_value);
    transparent_crc(g_775, "g_775", print_hash_value);
    transparent_crc(g_961, "g_961", print_hash_value);
    for (i = 0; i < 1; i++)
    {
        transparent_crc(g_1096[i], "g_1096[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_1202, "g_1202", print_hash_value);
    transparent_crc(g_1250, "g_1250", print_hash_value);
    transparent_crc(g_1312, "g_1312", print_hash_value);
    transparent_crc(g_1484, "g_1484", print_hash_value);
    transparent_crc(g_1509, "g_1509", print_hash_value);
    for (i = 0; i < 6; i++)
    {
        for (j = 0; j < 9; j++)
        {
            for (k = 0; k < 3; k++)
            {
                transparent_crc(g_1758[i][j][k], "g_1758[i][j][k]", print_hash_value);
                if (print_hash_value) printf("index = [%d][%d][%d]\n", i, j, k);

            }
        }
    }
    transparent_crc(g_1847, "g_1847", print_hash_value);
    transparent_crc(g_1959, "g_1959", print_hash_value);
    for (i = 0; i < 7; i++)
    {
        for (j = 0; j < 8; j++)
        {
            transparent_crc(g_2057[i][j], "g_2057[i][j]", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

        }
    }
    transparent_crc(g_2156, "g_2156", print_hash_value);
    for (i = 0; i < 10; i++)
    {
        transparent_crc(g_2225[i], "g_2225[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_2234, "g_2234", print_hash_value);
    transparent_crc(g_2236, "g_2236", print_hash_value);
    transparent_crc(g_2239, "g_2239", print_hash_value);
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            transparent_crc(g_2387[i][j], "g_2387[i][j]", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

        }
    }
    transparent_crc(g_2451, "g_2451", print_hash_value);
    transparent_crc(g_2907, "g_2907", print_hash_value);
    transparent_crc(g_3051, "g_3051", print_hash_value);
    for (i = 0; i < 10; i++)
    {
        transparent_crc(g_3207[i], "g_3207[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_3271, "g_3271", print_hash_value);
    transparent_crc(g_3299, "g_3299", print_hash_value);
    transparent_crc(g_3397, "g_3397", print_hash_value);
    transparent_crc(g_3398, "g_3398", print_hash_value);
    platform_main_end(crc32_context ^ 0xFFFFFFFFUL, print_hash_value);
    return 0;
}

/************************ statistics *************************
XXX max struct depth: 0
breakdown:
   depth: 0, occurrence: 805
XXX total union variables: 0

XXX non-zero bitfields defined in structs: 0
XXX zero bitfields defined in structs: 0
XXX const bitfields defined in structs: 0
XXX volatile bitfields defined in structs: 0
XXX structs with bitfields in the program: 0
breakdown:
XXX full-bitfields structs in the program: 0
breakdown:
XXX times a bitfields struct's address is taken: 0
XXX times a bitfields struct on LHS: 0
XXX times a bitfields struct on RHS: 0
XXX times a single bitfield on LHS: 0
XXX times a single bitfield on RHS: 0

XXX max expression depth: 50
breakdown:
   depth: 1, occurrence: 386
   depth: 2, occurrence: 129
   depth: 3, occurrence: 4
   depth: 4, occurrence: 6
   depth: 5, occurrence: 3
   depth: 6, occurrence: 2
   depth: 8, occurrence: 1
   depth: 9, occurrence: 1
   depth: 14, occurrence: 2
   depth: 15, occurrence: 2
   depth: 16, occurrence: 2
   depth: 17, occurrence: 5
   depth: 18, occurrence: 6
   depth: 19, occurrence: 4
   depth: 20, occurrence: 5
   depth: 21, occurrence: 5
   depth: 22, occurrence: 2
   depth: 23, occurrence: 6
   depth: 24, occurrence: 1
   depth: 25, occurrence: 5
   depth: 26, occurrence: 4
   depth: 27, occurrence: 3
   depth: 28, occurrence: 3
   depth: 30, occurrence: 3
   depth: 31, occurrence: 6
   depth: 32, occurrence: 1
   depth: 35, occurrence: 2
   depth: 36, occurrence: 2
   depth: 38, occurrence: 2
   depth: 39, occurrence: 1
   depth: 40, occurrence: 1
   depth: 42, occurrence: 2
   depth: 43, occurrence: 1
   depth: 46, occurrence: 1
   depth: 47, occurrence: 1
   depth: 50, occurrence: 1

XXX total number of pointers: 604

XXX times a variable address is taken: 1521
XXX times a pointer is dereferenced on RHS: 568
breakdown:
   depth: 1, occurrence: 463
   depth: 2, occurrence: 78
   depth: 3, occurrence: 18
   depth: 4, occurrence: 9
XXX times a pointer is dereferenced on LHS: 494
breakdown:
   depth: 1, occurrence: 467
   depth: 2, occurrence: 18
   depth: 3, occurrence: 5
   depth: 4, occurrence: 4
XXX times a pointer is compared with null: 72
XXX times a pointer is compared with address of another variable: 24
XXX times a pointer is compared with another pointer: 23
XXX times a pointer is qualified to be dereferenced: 11166

XXX max dereference level: 6
breakdown:
   level: 0, occurrence: 0
   level: 1, occurrence: 2371
   level: 2, occurrence: 300
   level: 3, occurrence: 264
   level: 4, occurrence: 115
   level: 5, occurrence: 8
   level: 6, occurrence: 3
XXX number of pointers point to pointers: 292
XXX number of pointers point to scalars: 312
XXX number of pointers point to structs: 0
XXX percent of pointers has null in alias set: 29.3
XXX average alias set size: 1.49

XXX times a non-volatile is read: 3202
XXX times a non-volatile is write: 1494
XXX times a volatile is read: 0
XXX    times read thru a pointer: 0
XXX times a volatile is write: 0
XXX    times written thru a pointer: 0
XXX times a volatile is available for access: 0
XXX percentage of non-volatile access: 100

XXX forward jumps: 1
XXX backward jumps: 9

XXX stmts: 414
XXX max block depth: 5
breakdown:
   depth: 0, occurrence: 32
   depth: 1, occurrence: 35
   depth: 2, occurrence: 65
   depth: 3, occurrence: 80
   depth: 4, occurrence: 95
   depth: 5, occurrence: 107

XXX percentage a fresh-made variable is used: 14.8
XXX percentage an existing variable is used: 85.2
********************* end of statistics **********************/

