/*
 * Copyright 2014 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-packed-struct --no-math64 --lang-cpp
 * Seed:      2354592696
 */

#include "csmith.h"


static long __undefined;

/* --- Struct/Union Declarations --- */
/* --- GLOBAL VARIABLES --- */
static int32_t g_8[4] = {(-1L),(-1L),(-1L),(-1L)};
static int32_t g_10 = 0x095A9796L;
static uint8_t g_14 = 0xBBL;
static uint16_t g_68 = 65535UL;
static int32_t g_89 = (-1L);
static int32_t *g_88 = &g_89;
static const uint16_t g_95 = 65535UL;
static const uint16_t *g_94 = &g_95;
static int32_t g_101[1][2][5] = {{{0L,0L,0L,0L,0L},{(-1L),(-1L),(-1L),(-1L),(-1L)}}};
static uint16_t g_168 = 65535UL;
static int16_t g_175 = (-10L);
static uint8_t g_177 = 1UL;
static int8_t g_208 = 1L;
static int8_t *g_207[4] = {&g_208,&g_208,&g_208,&g_208};
static int32_t g_263 = (-4L);
static int32_t **g_311 = NULL;
static int32_t ***g_310 = &g_311;
static uint32_t g_324[4][1][5] = {{{0xA3D675C6L,0x497B3AE0L,0xA3D675C6L,1UL,1UL}},{{0xA3D675C6L,0x497B3AE0L,0xA3D675C6L,1UL,1UL}},{{0xA3D675C6L,0x497B3AE0L,0xA3D675C6L,1UL,1UL}},{{0xA3D675C6L,0x497B3AE0L,0xA3D675C6L,1UL,1UL}}};
static uint32_t g_369 = 0x38F403BAL;
static int16_t **g_435 = NULL;
static const int32_t g_490 = (-1L);
static int8_t g_532 = 0xE9L;
static uint32_t g_534 = 0UL;
static int32_t g_679[1][5] = {{0x6C6BABE0L,0x6C6BABE0L,0x6C6BABE0L,0x6C6BABE0L,0x6C6BABE0L}};
static int16_t *g_691 = &g_175;
static int32_t *g_735 = NULL;
static uint16_t g_813 = 1UL;
static int16_t g_906 = 0x50BEL;
static uint32_t g_912 = 0x1175B058L;
static int8_t * const *g_1027 = &g_207[2];
static int8_t * const **g_1026[5] = {&g_1027,&g_1027,&g_1027,&g_1027,&g_1027};
static int8_t **g_1029 = &g_207[1];
static int8_t ***g_1028 = &g_1029;
static uint8_t g_1098 = 251UL;
static int16_t ***g_1103 = &g_435;
static int16_t ****g_1102 = &g_1103;
static uint32_t *g_1251 = &g_534;
static uint32_t **g_1250 = &g_1251;
static uint32_t ***g_1249 = &g_1250;
static int8_t ***g_1452 = &g_1029;
static uint8_t *g_1457 = &g_1098;
static uint8_t **g_1456 = &g_1457;
static int32_t *g_1463 = &g_10;
static int32_t **g_1486 = &g_1463;
static int32_t **g_1487 = &g_735;
static int16_t **** const *g_1490 = &g_1102;
static int16_t **** const **g_1489 = &g_1490;
static int32_t g_1555 = 0x5CD64271L;
static uint16_t g_1566 = 65531UL;
static int8_t g_1611 = (-1L);
static int16_t g_1671[8] = {(-7L),(-7L),(-7L),(-7L),(-7L),(-7L),(-7L),(-7L)};
static uint32_t g_1726 = 2UL;
static uint32_t g_1781[2][2] = {{1UL,1UL},{1UL,1UL}};
static int8_t ****g_1806 = &g_1028;
static int8_t *****g_1805[10][1][3] = {{{NULL,NULL,NULL}},{{&g_1806,&g_1806,&g_1806}},{{NULL,NULL,NULL}},{{&g_1806,&g_1806,&g_1806}},{{NULL,NULL,NULL}},{{&g_1806,&g_1806,&g_1806}},{{NULL,NULL,NULL}},{{&g_1806,&g_1806,&g_1806}},{{NULL,NULL,NULL}},{{&g_1806,&g_1806,&g_1806}}};
static uint32_t g_1846[4] = {1UL,1UL,1UL,1UL};
static const uint32_t g_1878[9][9][3] = {{{18446744073709551609UL,0x41FAE503L,5UL},{4UL,0xB45FB625L,0xBA90DCABL},{0x7859E91FL,18446744073709551609UL,5UL},{0UL,0x87F82538L,1UL},{0xDE88EC26L,0x8F3A2F9CL,0xC2B3141CL},{0x8C538065L,0x49C63EC0L,0x44D75A98L},{18446744073709551615UL,18446744073709551615UL,0x3EA8F13BL},{0x44D75A98L,18446744073709551614UL,18446744073709551606UL},{0xB1C843BDL,18446744073709551615UL,0x384A1D15L}},{{0x5E837D39L,0x49C63EC0L,0x5E837D39L},{18446744073709551615UL,0x8F3A2F9CL,18446744073709551609UL},{0UL,0x87F82538L,0xB7463E48L},{0x384A1D15L,18446744073709551609UL,0x97952306L},{0x03506829L,0xB45FB625L,0xB011D241L},{0x384A1D15L,0x41FAE503L,0x7859E91FL},{0UL,0x0EC69127L,0xD92197E9L},{18446744073709551615UL,5UL,0x06FB78C1L},{0x5E837D39L,0xD81B3B3EL,0UL}},{{0xB1C843BDL,0x5098CCB1L,1UL},{0x44D75A98L,0x37E638FAL,0UL},{18446744073709551615UL,0x06FB78C1L,0x06FB78C1L},{0x8C538065L,18446744073709551607UL,0xD92197E9L},{0xDE88EC26L,0xC2B3141CL,0x7859E91FL},{0UL,0xA98FC4D4L,0xB011D241L},{0x7859E91FL,0xB1C843BDL,0x97952306L},{4UL,0xA98FC4D4L,0xB7463E48L},{18446744073709551609UL,0xC2B3141CL,18446744073709551609UL}},{{0UL,18446744073709551607UL,0x5E837D39L},{5UL,0x06FB78C1L,0x384A1D15L},{0xB7463E48L,0x37E638FAL,18446744073709551606UL},{0x8F3A2F9CL,0x5098CCB1L,0x3EA8F13BL},{0xB7463E48L,0xD81B3B3EL,0x44D75A98L},{5UL,5UL,0xC2B3141CL},{0UL,0x0EC69127L,1UL},{18446744073709551609UL,0x41FAE503L,5UL},{4UL,0xB45FB625L,0xBA90DCABL}},{{0x7859E91FL,18446744073709551609UL,5UL},{0UL,0x87F82538L,1UL},{0xDE88EC26L,0x8F3A2F9CL,0xC2B3141CL},{0x8C538065L,0x49C63EC0L,0x44D75A98L},{18446744073709551615UL,18446744073709551615UL,0x3EA8F13BL},{0x44D75A98L,18446744073709551614UL,18446744073709551606UL},{0xB1C843BDL,18446744073709551615UL,0x384A1D15L},{0x5E837D39L,0x49C63EC0L,0x5E837D39L},{18446744073709551615UL,0x8F3A2F9CL,18446744073709551609UL}},{{0UL,0x87F82538L,0xB7463E48L},{0x384A1D15L,18446744073709551609UL,0x97952306L},{0x03506829L,0xB45FB625L,0UL},{18446744073709551609UL,5UL,0x8F3A2F9CL},{0x44D75A98L,0x36765C43L,0xD909217BL},{0x06FB78C1L,0x7859E91FL,0x97952306L},{0xB513056EL,0x0EC69127L,0x44D75A98L},{0x41FAE503L,0xB1C843BDL,0x384A1D15L},{0x03506829L,0xDAD1FA39L,0x44D75A98L}},{{0xDE88EC26L,0x97952306L,0x97952306L},{0xB011D241L,0UL,0xD909217BL},{0x3EA8F13BL,0x5098CCB1L,0x8F3A2F9CL},{0x8C538065L,0x87F82538L,0UL},{0x8F3A2F9CL,0x41FAE503L,1UL},{0x685D1A38L,0x87F82538L,0x5E837D39L},{0x6768B2D9L,0x5098CCB1L,0x6768B2D9L},{1UL,0UL,0xB513056EL},{0x7859E91FL,0x97952306L,18446744073709551609UL}},{{0x5E837D39L,0xDAD1FA39L,0xBA90DCABL},{18446744073709551615UL,0xB1C843BDL,18446744073709551615UL},{0x5E837D39L,0x0EC69127L,0x03506829L},{0x7859E91FL,0x7859E91FL,0x5098CCB1L},{1UL,0x36765C43L,18446744073709551606UL},{0x6768B2D9L,5UL,0x7859E91FL},{0x685D1A38L,18446744073709551614UL,0xB7463E48L},{0x8F3A2F9CL,0x6768B2D9L,0x7859E91FL},{0x8C538065L,0x2406F886L,18446744073709551606UL}},{{0x3EA8F13BL,18446744073709551615UL,0x5098CCB1L},{0xB011D241L,0xB45FB625L,0x03506829L},{0xDE88EC26L,0x06FB78C1L,18446744073709551615UL},{0x03506829L,0xD81B3B3EL,0xBA90DCABL},{0x41FAE503L,0x06FB78C1L,18446744073709551609UL},{0xB513056EL,0xB45FB625L,0xB513056EL},{0x06FB78C1L,18446744073709551615UL,0x6768B2D9L},{0x44D75A98L,0x2406F886L,0x5E837D39L},{18446744073709551609UL,0x6768B2D9L,1UL}}};
static uint32_t * const g_1962 = &g_324[3][0][0];
static uint32_t * const *g_1961 = &g_1962;
static uint16_t g_2002 = 4UL;
static int16_t ** const * const g_2016 = &g_435;
static int16_t ** const * const *g_2015 = &g_2016;
static int16_t ** const * const **g_2014 = &g_2015;
static int16_t ** const * const **g_2018 = &g_2015;


/* --- FORWARD DECLARATIONS --- */
static uint32_t  func_1(void);
static int32_t  func_5(int32_t  p_6, uint32_t  p_7);
static uint8_t  func_39(uint32_t  p_40, int32_t * p_41, int32_t  p_42);
static const int32_t * func_52(int32_t  p_53, uint8_t  p_54, uint32_t  p_55, int16_t  p_56, uint8_t  p_57);
static int32_t * func_64(uint16_t  p_65, int32_t * p_66);
static int32_t * func_69(int8_t  p_70);
static uint8_t  func_76(uint8_t  p_77, const int32_t * const  p_78, int32_t * p_79);
static int32_t * const  func_80(int32_t * p_81);
static int32_t * func_82(int32_t  p_83, uint16_t  p_84, int32_t * p_85);
static int32_t  func_92(const uint16_t * p_93);


/* --- FUNCTIONS --- */
/* ------------------------------------------ */
/* 
 * reads : g_8 g_14 g_10 g_68 g_88 g_912 g_94 g_95 g_735 g_101 g_1250 g_1251 g_534 g_679 g_1029 g_207 g_208 g_691 g_1463 g_168 g_1457 g_1098 g_1249 g_1489 g_263 g_89 g_175 g_813 g_1566 g_1027 g_1611 g_532 g_1726 g_1028 g_1781 g_1490 g_1102 g_1103 g_435 g_177 g_1555 g_906 g_324 g_1671 g_1487 g_1961 g_1456 g_2002 g_1486 g_1962 g_2014
 * writes: g_14 g_68 g_10 g_735 g_88 g_168 g_534 g_1028 g_1452 g_101 g_1456 g_175 g_1486 g_1487 g_263 g_89 g_94 g_813 g_208 g_1555 g_1566 g_532 g_1098 g_1611 g_1726 g_1102 g_1781 g_435 g_177 g_207 g_2002 g_1463 g_324 g_2014 g_2018
 */
static uint32_t  func_1(void)
{ /* block id: 0 */
    uint32_t l_4 = 0x20398070L;
    int32_t l_17 = (-1L);
    int32_t *l_18 = &l_17;
    int32_t *l_21[4][2][10] = {{{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL},{NULL,NULL,&g_8[0],NULL,NULL,&g_8[3],&g_8[0],&g_8[3],NULL,NULL}},{{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL},{NULL,NULL,&g_8[1],NULL,NULL,NULL,&g_8[1],NULL,NULL,NULL}},{{NULL,NULL,NULL,&g_8[3],NULL,NULL,NULL,&g_8[3],NULL,NULL},{NULL,&g_8[3],&g_8[0],&g_8[3],NULL,NULL,&g_8[0],NULL,NULL,&g_8[3]}},{{NULL,&g_8[3],NULL,NULL,NULL,&g_8[3],NULL,NULL,NULL,&g_8[3]},{NULL,NULL,&g_8[1],NULL,NULL,NULL,&g_8[1],NULL,NULL,NULL}}};
    uint16_t l_1947 = 0UL;
    uint8_t l_1950 = 8UL;
    int32_t l_1952 = (-7L);
    int32_t l_1967 = 0x2594DE78L;
    int8_t *l_1968 = &g_208;
    uint32_t l_1969 = 0xA55E1FD4L;
    uint32_t **l_1994 = &g_1251;
    int32_t l_2003 = 0xD7936716L;
    int16_t *****l_2013 = &g_1102;
    int16_t ******l_2012 = &l_2013;
    int16_t ** const * const ***l_2017[9];
    int i, j, k;
    for (i = 0; i < 9; i++)
        l_2017[i] = NULL;
    (*l_18) = (safe_rshift_func_uint16_t_u_s((((l_4 , (func_5(g_8[0], l_4) ^ 0x4D07DDBFL)) , 5UL) , (((((+func_5(g_8[0], (l_17 |= ((g_8[0] || (l_4 , l_4)) , g_8[2])))) >= g_10) , 0xA6C2E3A4L) , 0L) < 4294967295UL)), g_8[0]));
    if (func_5(((*l_18) = (safe_lshift_func_uint8_t_u_u(func_5(g_14, (*l_18)), 3))), (&g_10 == &g_10)))
    { /* block id: 8 */
        uint32_t l_30 = 0x8A7E8B7DL;
        int16_t l_49 = (-1L);
        const int16_t l_50 = 0xB00FL;
        int32_t *l_51 = &l_17;
        uint16_t *l_1948 = NULL;
        uint16_t *l_1949 = NULL;
        uint16_t *l_1951[1][8][1] = {{{NULL},{&g_168},{NULL},{&g_168},{NULL},{&g_168},{NULL},{&g_168}}};
        int8_t l_1953 = (-4L);
        uint32_t l_1954[8][4][2] = {{{0xF7B7F389L,0x84E19BCBL},{0x2B89271DL,0x84E19BCBL},{0xF7B7F389L,0x84E19BCBL},{0x2B89271DL,0x84E19BCBL}},{{0xF7B7F389L,0x84E19BCBL},{0x2B89271DL,0x84E19BCBL},{0xF7B7F389L,0x84E19BCBL},{0x2B89271DL,0x84E19BCBL}},{{0xF7B7F389L,0x84E19BCBL},{0x2B89271DL,0x84E19BCBL},{0xF7B7F389L,0x84E19BCBL},{0x2B89271DL,0x84E19BCBL}},{{0xF7B7F389L,0x84E19BCBL},{0x2B89271DL,0x84E19BCBL},{0xF7B7F389L,0x84E19BCBL},{0x2B89271DL,0x84E19BCBL}},{{0xF7B7F389L,0x84E19BCBL},{0x2B89271DL,0x84E19BCBL},{0xF7B7F389L,0x84E19BCBL},{0x2B89271DL,0x84E19BCBL}},{{0xF7B7F389L,0x84E19BCBL},{0x2B89271DL,0x84E19BCBL},{0xF7B7F389L,0x84E19BCBL},{0x2B89271DL,0x84E19BCBL}},{{0xF7B7F389L,0x84E19BCBL},{0x2B89271DL,0x84E19BCBL},{0xF7B7F389L,0x84E19BCBL},{0x2B89271DL,0x84E19BCBL}},{{0xF7B7F389L,0x84E19BCBL},{0x2B89271DL,0x84E19BCBL},{0xF7B7F389L,0x84E19BCBL},{0x2B89271DL,0x84E19BCBL}}};
        int i, j, k;
        (*l_18) = ((((NULL != &g_8[1]) <= ((((safe_add_func_uint8_t_u_u(((*g_1457) = func_5(((safe_rshift_func_int8_t_s_u((((++g_14) , (-8L)) , (((safe_rshift_func_int16_t_s_s(l_30, 1)) <= (func_5((((safe_mul_func_uint16_t_u_u((l_1952 = (l_30 , ((safe_rshift_func_uint16_t_u_s((safe_rshift_func_uint16_t_u_u((l_1950 ^= (+((safe_mod_func_uint8_t_u_u(func_39((((((func_5((func_5(g_10, func_5((((((((safe_add_func_uint8_t_u_u(((safe_mul_func_uint16_t_u_u((NULL != &g_10), (safe_lshift_func_int8_t_s_s(g_10, 1)))) ^ 0x8CD8B12AL), g_8[0])) <= l_30) != 0x7384L) < (*l_18)) , (*l_18)) , l_49) <= (*l_18)), g_14)) & l_50), g_8[0]) >= 0x8DL) , &g_8[3]) != NULL) , (int32_t*) NULL) != NULL), l_51, g_8[1]), g_906)) < l_1947))), 10)), (*l_51))) , 0xE604L))), 0x59B6L)) ^ (*l_51)) | (*l_51)), (*l_51)) | (*l_51))) <= (*l_51))), g_324[3][0][0])) , (*l_18)), (*l_18))), l_1953)) , (*l_18)) | (*l_18)) & (*l_51))) | (*l_51)) , l_1954[3][2][0]);
        return g_1671[5];
    }
    else
    { /* block id: 885 */
        int8_t *l_1963 = &g_1611;
        int32_t l_1966 = 1L;
        const int32_t *l_1971 = &g_89;
        const int32_t **l_1970 = &l_1971;
        uint16_t *l_1991[2];
        uint32_t *l_1999 = &l_1969;
        int i;
        for (i = 0; i < 2; i++)
            l_1991[i] = &g_813;
        (*g_1487) = &l_17;
        (*l_1970) = func_52((safe_div_func_uint8_t_u_u((safe_mul_func_uint16_t_u_u(((*g_1249) != (*g_1249)), (safe_rshift_func_uint16_t_u_s(((*l_18) & (NULL != (*g_1490))), (NULL == g_1961))))), ((((**g_1028) = l_1963) != ((safe_lshift_func_uint8_t_u_s(((l_1967 |= l_1966) <= 0x55L), 5)) , l_1968)) ^ l_1969))), (*l_18), l_1966, (*l_18), (**g_1456));
        l_18 = ((*g_1486) = ((((safe_div_func_uint16_t_u_u((safe_div_func_int8_t_s_s(((safe_rshift_func_uint8_t_u_s((safe_rshift_func_uint16_t_u_u(((safe_mul_func_uint8_t_u_u(0UL, ((g_2002 = ((*g_1251) < (safe_lshift_func_int8_t_s_u(((((safe_div_func_int32_t_s_s((((safe_sub_func_uint16_t_u_u((safe_rshift_func_uint8_t_u_u((*l_18), 1)), (g_168 &= (safe_unary_minus_func_int8_t_s(0x8AL))))) < ((safe_mul_func_int16_t_s_s((l_1994 != ((safe_mul_func_int8_t_s_s(((***g_1028) |= (*l_18)), (safe_add_func_uint32_t_u_u((++(*l_1999)), (**g_1487))))) , (*g_1249))), g_2002)) , 0xCDA1EE90L)) && (*l_18)), 0x4EED3296L)) && (**g_1456)) <= (*l_18)) >= 255UL), l_2003)))) , (*l_18)))) == (*l_18)), 8)), 2)) <= (*l_18)), 1L)), 8L)) != 0xEBL) , (*g_1457)) , (int32_t*) NULL));
    }
    (**g_1487) = ((safe_add_func_int8_t_s_s(l_1952, (((**g_1456) | (-8L)) <= (safe_mul_func_int16_t_s_s(l_1952, (l_17 , (0x039BF18DL > ((safe_sub_func_int32_t_s_s((safe_add_func_uint16_t_u_u(65535UL, ((((*l_2012) = &g_1102) != (g_2018 = (g_2014 = ((((*g_1962) = 3UL) , (**g_1456)) , g_2014)))) <= l_17))), (*g_735))) <= l_1967)))))))) || l_1952);
    return (*g_1962);
}


/* ------------------------------------------ */
/* 
 * reads : g_14
 * writes: g_14
 */
static int32_t  func_5(int32_t  p_6, uint32_t  p_7)
{ /* block id: 1 */
    int32_t *l_9[2];
    uint32_t l_11 = 1UL;
    int i;
    for (i = 0; i < 2; i++)
        l_9[i] = &g_10;
    l_11--;
    ++g_14;
    return p_6;
}


/* ------------------------------------------ */
/* 
 * reads : g_8 g_10 g_68 g_14 g_88 g_912 g_94 g_813 g_95 g_735 g_101 g_1250 g_1251 g_534 g_679 g_1029 g_207 g_208 g_691 g_1463 g_168 g_1457 g_1098 g_1249 g_1489 g_175 g_89 g_1566 g_1027 g_1611 g_532 g_1726 g_1028 g_1781 g_1490 g_1102 g_1103 g_435 g_177 g_1555 g_263
 * writes: g_68 g_10 g_735 g_88 g_168 g_14 g_534 g_1028 g_1452 g_101 g_1456 g_175 g_1486 g_1487 g_263 g_89 g_94 g_813 g_208 g_1555 g_1566 g_532 g_1098 g_1611 g_1726 g_1102 g_1781 g_435 g_177
 */
static uint8_t  func_39(uint32_t  p_40, int32_t * p_41, int32_t  p_42)
{ /* block id: 10 */
    uint16_t *l_67 = &g_68;
    int32_t l_75 = 1L;
    int32_t **l_1491[8] = {&g_735,NULL,&g_735,NULL,&g_735,NULL,&g_735,NULL};
    int32_t *l_1492 = NULL;
    const int32_t *l_1680 = &g_10;
    const int32_t **l_1679 = &l_1680;
    int32_t *l_1681 = &g_101[0][1][2];
    uint32_t l_1738 = 0x915B1875L;
    int16_t ****l_1759 = &g_1103;
    int8_t l_1785[2][10][5] = {{{0L,0xD1L,0L,0x10L,0xA1L},{(-4L),0xF8L,0L,(-9L),9L},{(-1L),0L,0x19L,0L,0x60L},{0x10L,(-7L),0L,9L,(-1L)},{0x20L,0L,0L,(-4L),0x12L},{1L,(-1L),(-1L),0x89L,0x10L},{0x1CL,0x60L,0x33L,0L,0x8FL},{0x7BL,0x4EL,9L,0L,1L},{0x83L,0x8FL,(-1L),0x89L,0x3AL},{0L,(-4L),(-1L),(-4L),0L}},{{(-1L),(-9L),(-7L),9L,(-8L)},{0x8FL,0x46L,0xD1L,0L,(-4L)},{0xD1L,(-7L),0x60L,(-9L),(-8L)},{(-1L),0L,1L,0x10L,0L},{(-8L),0x50L,(-7L),0x46L,0x3AL},{0x33L,1L,0x3AL,0xC2L,1L},{(-1L),0x20L,0x10L,(-1L),0x8FL},{(-1L),(-1L),(-1L),0x20L,0x10L},{0x33L,9L,0x12L,0L,0x12L},{(-8L),(-8L),1L,0x3AL,(-1L)}}};
    uint32_t l_1789 = 18446744073709551613UL;
    uint32_t **l_1796 = &g_1251;
    int16_t l_1841 = 0x47E8L;
    int8_t ****l_1864 = &g_1452;
    const uint32_t *l_1877 = &g_1878[1][2][2];
    const uint32_t **l_1876 = &l_1877;
    int16_t l_1889 = 0x474EL;
    int32_t l_1941 = 0x901B980BL;
    uint8_t *l_1944 = &g_14;
    uint8_t *l_1945 = NULL;
    uint8_t *l_1946 = &g_177;
    int i, j, k;
lbl_1744:
    (*l_1679) = func_52(g_8[0], g_8[0], ((g_10 , (func_5((g_8[0] && ((safe_lshift_func_int8_t_s_u(func_5((safe_mul_func_int8_t_s_s(((l_1492 = func_64(((*l_67) |= 0xAE56L), func_69(((safe_add_func_uint16_t_u_u((g_168 = ((safe_sub_func_int32_t_s_s(l_75, ((l_75 , func_76(g_14, func_80(func_82((g_10 = (safe_rshift_func_uint8_t_u_u(g_8[2], 6))), g_14, g_88)), &g_101[0][1][1])) < 5UL))) || p_40)), l_75)) >= (*g_94))))) != NULL), 0x19L)), p_40), p_40)) <= p_40)), p_40) , (*g_1251))) < p_42), p_40, p_40);
    if (((p_41 = &p_42) != (l_1681 = &g_89)))
    { /* block id: 749 */
        uint16_t l_1684[9][7] = {{0x4D1DL,1UL,0x075BL,0xEA90L,0xD27EL,65526UL,0x9259L},{0x075BL,0xFB9BL,0x10FFL,65526UL,65530UL,6UL,65526UL},{1UL,0x9259L,0xD27EL,0UL,65526UL,0UL,0xD27EL},{6UL,6UL,0x10FFL,0xDC46L,65526UL,0x9922L,0x9259L},{0x9922L,0x3934L,6UL,1UL,0x10FFL,65527UL,0xFC16L},{0x10FFL,1UL,65526UL,65526UL,65526UL,0xFC16L,6UL},{0x861FL,0xD27EL,6UL,65535UL,65530UL,65530UL,65535UL},{0UL,0xD27EL,0UL,6UL,0xFC16L,65526UL,65526UL},{0x4D1DL,1UL,3UL,0xFC16L,65527UL,0x10FFL,1UL}};
        uint8_t * const *l_1695 = &g_1457;
        int32_t l_1711 = 0x5C5B3728L;
        int8_t l_1728 = 0x47L;
        int32_t l_1733 = 0x9B2D669CL;
        int32_t l_1735 = 1L;
        int32_t l_1737 = 0xD5DDB545L;
        int32_t l_1784 = (-7L);
        int32_t l_1786 = (-1L);
        int32_t l_1787 = 0L;
        int32_t l_1788 = 0xB7C3DCB2L;
        int i, j;
        for (g_1611 = 0; (g_1611 > 2); g_1611 = safe_add_func_uint16_t_u_u(g_1611, 8))
        { /* block id: 752 */
            int32_t l_1710 = 1L;
            int32_t l_1731 = 0x84BCF933L;
            int32_t l_1732 = (-1L);
            int32_t l_1734 = 0L;
            int32_t l_1775 = 1L;
            int32_t l_1776 = 0xE5BFAA72L;
            int32_t l_1777 = (-6L);
            int32_t l_1778 = 0x647D0747L;
            int32_t l_1779 = 0x099AC607L;
            int32_t l_1780 = 0xD5FEF757L;
            (*p_41) &= l_1684[1][6];
            for (g_175 = 3; (g_175 >= 1); g_175 -= 1)
            { /* block id: 756 */
                int32_t l_1730 = 8L;
                int32_t *l_1746 = &g_10;
                int32_t l_1760 = 1L;
                int32_t l_1774[1][2][5] = {{{2L,(-1L),2L,2L,(-1L)},{(-1L),2L,2L,(-1L),2L}}};
                int i, j, k;
                if ((safe_div_func_int32_t_s_s(g_8[g_175], (safe_sub_func_int8_t_s_s((-1L), g_8[g_175])))))
                { /* block id: 757 */
                    uint32_t ***l_1724 = &g_1250;
                    int32_t l_1727 = (-7L);
                    int32_t l_1729 = 0x4E2B1F57L;
                    int32_t l_1736 = 0xD335B7D7L;
                    for (p_40 = 0; (p_40 <= 4); p_40 += 1)
                    { /* block id: 760 */
                        uint32_t *l_1725 = &g_1726;
                        int i;
                        l_1711 = (safe_rshift_func_int8_t_s_s(((safe_mul_func_int16_t_s_s(g_8[g_175], (safe_sub_func_int16_t_s_s((l_1695 == ((((((((safe_add_func_uint16_t_u_u((safe_mod_func_int16_t_s_s(((0UL ^ (((p_40 >= (safe_div_func_uint16_t_u_u((!(*g_94)), ((safe_div_func_int16_t_s_s(1L, (safe_rshift_func_int16_t_s_s(((*p_41) , 5L), (safe_mul_func_uint16_t_u_u((safe_lshift_func_int16_t_s_u(((*p_41) < p_42), 14)), g_8[g_175])))))) | 0x7A52D48EL)))) || (*p_41)) , (*p_41))) , 6L), 1UL)), l_1710)) | p_40) , l_1710) | 0x94D1L) , &g_1456) != &g_1456) && 0x35F8L) , l_1695)), (*g_691))))) >= 1UL), 4));
                        (*g_1463) = ((((((safe_sub_func_uint16_t_u_u((l_1711 &= (safe_mod_func_uint8_t_u_u(((p_40 > (*g_1457)) <= ((*g_94) >= (p_40 == (safe_add_func_int32_t_s_s((((p_40 < p_40) & (safe_sub_func_int8_t_s_s((~(safe_lshift_func_uint16_t_u_u(((((l_1727 ^= ((*l_1725) &= ((**g_1250) ^= (safe_sub_func_int16_t_s_s((l_1724 != l_1724), (((((~0xE6FD0E25L) ^ 8L) != 0x1FF1L) <= (*g_94)) | g_8[g_175])))))) == (*p_41)) < p_40) == p_40), 1))), l_1728))) , (*p_41)), (*l_1681)))))), p_42))), l_1728)) <= l_1729) > (*g_94)) , (int32_t***) NULL) == &g_311) & p_40);
                    }
                    if ((*g_1463))
                    { /* block id: 768 */
                        (*g_1463) ^= l_1711;
                        if ((*p_41))
                            continue;
                    }
                    else
                    { /* block id: 771 */
                        return p_42;
                    }
                    l_1738--;
                }
                else
                { /* block id: 775 */
                    uint8_t l_1741 = 0xA9L;
                    l_1741--;
                    if (l_75)
                        goto lbl_1744;
                }
                if (l_1735)
                { /* block id: 779 */
                    (*l_1681) ^= l_1728;
                }
                else
                { /* block id: 781 */
                    int32_t l_1745 = 0xB909AFC6L;
                    int16_t *****l_1747 = NULL;
                    int16_t *****l_1748 = &g_1102;
                    int32_t l_1768[9][4][3] = {{{0xCD9A7C8AL,(-5L),(-4L)},{0xAF3B7215L,0x2196F175L,(-6L)},{1L,(-1L),0x3F1D03C1L},{(-1L),0x2196F175L,(-1L)}},{{0x21C896E3L,(-5L),0L},{0x2196F175L,0x41C49213L,0L},{(-1L),0xAACA832CL,(-1L)},{0x919DCA21L,0x21C896E3L,0x3F1D03C1L}},{{0x41C49213L,0xF437A5A9L,(-6L)},{0x919DCA21L,0xEDA3817EL,(-4L)},{(-1L),(-1L),0x520C3304L},{0x2196F175L,(-1L),0x4D455C86L}},{{0x21C896E3L,0xEDA3817EL,0L},{(-1L),0xF437A5A9L,0xA4D09836L},{1L,0x21C896E3L,0L},{0xAF3B7215L,0xAACA832CL,0x4D455C86L}},{{0xCD9A7C8AL,0x41C49213L,0x520C3304L},{0xCD9A7C8AL,(-5L),(-4L)},{0xAF3B7215L,0x2196F175L,(-6L)},{1L,(-1L),0x3F1D03C1L}},{{(-1L),0x2196F175L,(-1L)},{0x21C896E3L,(-5L),0L},{0x2196F175L,0x41C49213L,0L},{(-1L),0xAACA832CL,(-1L)}},{{0x919DCA21L,0x21C896E3L,0x3F1D03C1L},{0x41C49213L,0xF437A5A9L,(-6L)},{0x919DCA21L,0xEDA3817EL,(-4L)},{(-1L),(-1L),0x520C3304L}},{{0x2196F175L,(-1L),0x4D455C86L},{0x21C896E3L,0xEDA3817EL,0L},{(-1L),0xF437A5A9L,0xA4D09836L},{1L,0x21C896E3L,0L}},{{0xAF3B7215L,0xAACA832CL,0x4D455C86L},{0xCD9A7C8AL,0x41C49213L,0x520C3304L},{0xCD9A7C8AL,(-5L),(-4L)},{0xAF3B7215L,0x2196F175L,(-6L)}}};
                    int i, j, k;
                    for (p_42 = 7; (p_42 >= 0); p_42 -= 1)
                    { /* block id: 784 */
                        int i;
                        if ((*p_41))
                            break;
                        if (l_1745)
                            break;
                        l_1746 = &p_42;
                        if (l_1710)
                            continue;
                    }
                    (*l_1681) = ((0x2EEBL < (((*l_1748) = &g_1103) != (((safe_rshift_func_int8_t_s_u(p_40, l_1745)) ^ ((*l_1746) = (safe_sub_func_int8_t_s_s((safe_mul_func_int16_t_s_s((-1L), (~l_1745))), (((***g_1028) = 0x9DL) != ((((safe_mod_func_int32_t_s_s((-6L), (safe_mod_func_uint32_t_u_u((**g_1250), 0x6072443AL)))) & p_40) != (*l_1746)) ^ 4UL)))))) , l_1759))) < l_1760);
                    if ((*p_41))
                    { /* block id: 794 */
                        int32_t * const l_1767 = &g_263;
                        int32_t * const *l_1766 = &l_1767;
                        int32_t * const * const *l_1765 = &l_1766;
                        int32_t l_1769 = 0xF3C67E0AL;
                        int32_t l_1770 = 0xDE144CE1L;
                        int32_t l_1771 = 0x87004860L;
                        int32_t l_1772 = 0L;
                        int32_t l_1773[4][2][1];
                        int i, j, k;
                        for (i = 0; i < 4; i++)
                        {
                            for (j = 0; j < 2; j++)
                            {
                                for (k = 0; k < 1; k++)
                                    l_1773[i][j][k] = 0xCD9C8AADL;
                            }
                        }
                        (*l_1681) ^= ((*l_1746) = (*p_41));
                        (*l_1679) = func_82(((*p_41) = ((p_42 || ((*g_94) != (&g_1250 == &g_1250))) && (((l_1745 , (safe_mul_func_int8_t_s_s((((**g_1029) = ((NULL != (uint32_t*) l_1746) || ((*l_1746) == (p_42 >= 0xAB24L)))) != 0xDAL), l_1737))) , l_1765) == &g_311))), p_40, p_41);
                        g_1781[1][0]++;
                    }
                    else
                    { /* block id: 801 */
                        (*p_41) = 0xF85691D2L;
                    }
                }
                l_1789++;
            }
            if ((*p_41))
                break;
        }
    }
    else
    { /* block id: 809 */
        int8_t ****l_1797[3][10][8] = {{{NULL,&g_1028,&g_1028,&g_1452,&g_1028,&g_1452,&g_1028,&g_1028},{&g_1028,&g_1028,&g_1028,&g_1028,&g_1028,&g_1028,&g_1452,&g_1028},{NULL,&g_1452,&g_1028,&g_1452,&g_1452,&g_1028,&g_1028,&g_1452},{&g_1452,&g_1028,NULL,&g_1452,&g_1028,&g_1452,NULL,&g_1452},{&g_1452,&g_1452,&g_1028,NULL,&g_1452,&g_1452,NULL,&g_1452},{&g_1028,&g_1028,NULL,&g_1028,&g_1028,&g_1452,&g_1452,NULL},{NULL,&g_1452,&g_1028,&g_1028,&g_1452,&g_1452,&g_1452,&g_1452},{&g_1452,&g_1452,NULL,NULL,&g_1452,&g_1452,NULL,&g_1452},{NULL,&g_1028,&g_1028,&g_1028,&g_1028,&g_1452,&g_1452,NULL},{&g_1028,&g_1452,&g_1452,&g_1028,&g_1452,&g_1452,&g_1452,&g_1452}},{{&g_1452,&g_1452,&g_1028,NULL,&g_1452,&g_1452,NULL,&g_1452},{&g_1028,&g_1028,NULL,&g_1028,&g_1028,&g_1452,&g_1452,NULL},{NULL,&g_1452,&g_1028,&g_1028,&g_1452,&g_1452,&g_1452,&g_1452},{&g_1452,&g_1452,NULL,NULL,&g_1452,&g_1452,NULL,&g_1452},{NULL,&g_1028,&g_1028,&g_1028,&g_1028,&g_1452,&g_1452,NULL},{&g_1028,&g_1452,&g_1452,&g_1028,&g_1452,&g_1452,&g_1452,&g_1452},{&g_1452,&g_1452,&g_1028,NULL,&g_1452,&g_1452,NULL,&g_1452},{&g_1028,&g_1028,NULL,&g_1028,&g_1028,&g_1452,&g_1452,NULL},{NULL,&g_1452,&g_1028,&g_1028,&g_1452,&g_1452,&g_1452,&g_1452},{&g_1452,&g_1452,NULL,NULL,&g_1452,&g_1452,NULL,&g_1452}},{{NULL,&g_1028,&g_1028,&g_1028,&g_1028,&g_1452,&g_1452,NULL},{&g_1028,&g_1452,&g_1452,&g_1028,&g_1452,&g_1452,&g_1452,&g_1452},{&g_1452,&g_1452,&g_1028,NULL,&g_1452,&g_1452,NULL,&g_1452},{&g_1028,&g_1028,NULL,&g_1028,&g_1028,&g_1452,&g_1452,NULL},{NULL,&g_1452,&g_1028,&g_1028,&g_1452,&g_1452,&g_1452,&g_1452},{&g_1452,&g_1452,NULL,NULL,&g_1452,&g_1452,NULL,&g_1452},{NULL,&g_1028,&g_1028,&g_1028,&g_1028,&g_1452,&g_1452,NULL},{&g_1028,&g_1452,&g_1452,&g_1028,&g_1452,&g_1452,NULL,NULL},{NULL,&g_1028,&g_1028,&g_1452,&g_1028,&g_1452,&g_1028,NULL},{&g_1452,&g_1028,&g_1452,NULL,&g_1028,&g_1452,NULL,&g_1028}}};
        int32_t l_1809 = (-5L);
        int32_t *l_1811 = &g_89;
        int32_t l_1828 = 0x18381127L;
        int32_t l_1830 = 2L;
        int32_t l_1837 = 1L;
        int32_t l_1843 = 0x4408EEE1L;
        int32_t *l_1924 = &l_1809;
        int i, j, k;
        for (p_42 = (-7); (p_42 >= (-19)); p_42--)
        { /* block id: 812 */
            int8_t *****l_1798 = &l_1797[2][7][5];
            uint32_t *l_1807[10];
            int32_t l_1808 = 0x8CAAAE7BL;
            int32_t l_1810 = (-10L);
            int16_t l_1813[4];
            int32_t l_1820 = 0x8E71FA34L;
            int32_t l_1821 = 8L;
            int32_t l_1823 = 0L;
            int32_t l_1824 = 0xE5358F3EL;
            int32_t l_1827 = 0x2A6C0624L;
            int32_t l_1829 = 0L;
            int32_t l_1832 = 0x231C0186L;
            int32_t l_1835 = 1L;
            int32_t l_1838 = 1L;
            int32_t l_1842[4] = {(-1L),(-1L),(-1L),(-1L)};
            const uint32_t *l_1875 = &g_1846[2];
            const uint32_t **l_1874[10] = {&l_1875,&l_1875,&l_1875,&l_1875,&l_1875,&l_1875,&l_1875,&l_1875,&l_1875,&l_1875};
            int i;
            for (i = 0; i < 10; i++)
                l_1807[i] = &l_1738;
            for (i = 0; i < 4; i++)
                l_1813[i] = (-1L);
            (*g_1463) = (*p_41);
        }
    }
    g_1555 &= (safe_div_func_uint32_t_u_u((safe_sub_func_int8_t_s_s(0xD7L, (+(safe_sub_func_uint32_t_u_u((((*l_1946) ^= (safe_rshift_func_uint8_t_u_s(((*l_1944) = ((*g_1457) = (((safe_mod_func_int32_t_s_s(((*g_1463) |= (safe_add_func_uint16_t_u_u(0x2230L, ((safe_lshift_func_int8_t_s_s(((safe_add_func_int8_t_s_s((((((****g_1489) = (g_175 , (***g_1490))) != NULL) | ((0xFFA26F57L || 0L) , ((*l_1681) = (l_1941 < (safe_div_func_uint16_t_u_u((((((!(0xFEF0B100L & p_40)) | p_42) ^ (*l_1681)) || 1UL) && (*g_1457)), p_42)))))) != p_40), p_40)) != p_40), 2)) && 0L)))), (*g_1251))) & (*p_41)) , 0UL))), 7))) | 4L), (*p_41)))))), 0x49EE9D83L));
    return (*g_1457);
}


/* ------------------------------------------ */
/* 
 * reads : g_691 g_175 g_1249 g_1250 g_1251 g_534 g_88 g_89 g_813 g_263 g_1029 g_207 g_1457 g_1098 g_101 g_1463 g_10 g_1566 g_94 g_95 g_1027 g_208 g_1611 g_532 g_68
 * writes: g_88 g_68 g_263 g_89 g_94 g_813 g_208 g_175 g_10 g_1555 g_1566 g_532 g_1098 g_534 g_14 g_1611
 */
static const int32_t * func_52(int32_t  p_53, uint8_t  p_54, uint32_t  p_55, int16_t  p_56, uint8_t  p_57)
{ /* block id: 675 */
    int32_t * const l_1493 = &g_89;
    int32_t **l_1494 = &g_88;
    uint16_t l_1523 = 0xBC23L;
    int32_t l_1626 = (-1L);
    int32_t l_1630 = 0x2F07589FL;
    int32_t l_1635 = 0x2A660ECFL;
    int32_t l_1636 = 0x149622CEL;
    int32_t l_1638 = 0xF571B7A6L;
    int32_t l_1640 = 0x4D6D3401L;
    int32_t l_1641 = 0xE0CBE1D6L;
    int32_t l_1642 = 0xB844DA30L;
    int32_t l_1643 = 0xA3C3B5ABL;
    int32_t l_1644 = (-1L);
    int32_t l_1645 = 0x1F07B77DL;
    int32_t l_1646 = 0xE5CFA295L;
    int32_t l_1649 = (-1L);
    int32_t l_1650[6][4] = {{0L,0x2CBBE18CL,0L,0L},{0x2CBBE18CL,0x2CBBE18CL,0L,0x2CBBE18CL},{0x2CBBE18CL,0L,0L,0x2CBBE18CL},{0L,0x2CBBE18CL,0L,0L},{0x2CBBE18CL,0x2CBBE18CL,0L,0x2CBBE18CL},{0x2CBBE18CL,0L,0L,0x2CBBE18CL}};
    int32_t l_1657 = (-4L);
    int i, j;
lbl_1575:
    (*l_1494) = l_1493;
    for (g_68 = 24; (g_68 == 39); g_68 = safe_add_func_uint8_t_u_u(g_68, 4))
    { /* block id: 679 */
        uint16_t l_1504[6];
        const int32_t *l_1518 = &g_101[0][0][1];
        int8_t * const l_1535 = &g_532;
        int8_t *l_1537 = &g_532;
        int32_t l_1617 = 0xDC512F73L;
        int32_t l_1629[4][1] = {{(-6L)},{0x1AD9824DL},{(-6L)},{0x1AD9824DL}};
        int8_t l_1637 = (-10L);
        int i, j;
        for (i = 0; i < 6; i++)
            l_1504[i] = 0UL;
        for (g_263 = 3; (g_263 >= 0); g_263 -= 1)
        { /* block id: 682 */
            const uint16_t l_1513 = 0x834AL;
            uint8_t *l_1514 = &g_14;
            const int32_t *l_1517 = &g_89;
            int32_t *l_1565 = NULL;
            int32_t **l_1564 = &l_1565;
            int32_t l_1568[7];
            int i;
            for (i = 0; i < 7; i++)
                l_1568[i] = 0L;
            for (g_89 = 3; (g_89 >= 1); g_89 -= 1)
            { /* block id: 685 */
                int32_t l_1503 = 0x8350D1F8L;
                const uint16_t *l_1505[7];
                const uint16_t **l_1506 = &l_1505[1];
                uint32_t l_1515[2];
                uint32_t *l_1554[7] = {&l_1515[1],&l_1515[1],&l_1515[1],&l_1515[1],&l_1515[1],&l_1515[1],&l_1515[1]};
                int32_t l_1567 = (-5L);
                uint16_t *l_1574 = NULL;
                uint16_t **l_1573 = &l_1574;
                int i;
                for (i = 0; i < 7; i++)
                    l_1505[i] = &g_813;
                for (i = 0; i < 2; i++)
                    l_1515[i] = 0x234DA6F4L;
                if (((safe_add_func_int16_t_s_s((((((safe_mul_func_int16_t_s_s((safe_lshift_func_int8_t_s_s(l_1503, 1)), l_1504[0])) , ((((p_57 & (NULL == &p_54)) & 1UL) <= ((((*l_1506) = (g_94 = l_1505[0])) != NULL) , ((safe_mod_func_int16_t_s_s((p_56 = (safe_mod_func_int32_t_s_s(((safe_add_func_int16_t_s_s((*g_691), l_1503)) , p_53), (***g_1249)))), p_53)) == l_1513))) , (**l_1494))) & 0x6641EF11L) , (uint8_t*) NULL) != l_1514), l_1515[1])) & (***g_1249)))
                { /* block id: 689 */
                    uint32_t l_1516 = 1UL;
                    if (l_1516)
                    { /* block id: 690 */
                        return l_1517;
                    }
                    else
                    { /* block id: 692 */
                        return l_1518;
                    }
                }
                else
                { /* block id: 695 */
                    uint16_t *l_1521 = &g_813;
                    int8_t *l_1536 = &g_532;
                    (*g_1463) = (((((**g_1029) = (safe_mod_func_uint16_t_u_u((NULL != &g_1250), ((*l_1521) ^= 1UL)))) <= (*g_1457)) >= ((safe_unary_minus_func_uint32_t_u((!(**g_1250)))) > (l_1523 <= ((safe_unary_minus_func_uint32_t_u((safe_add_func_uint16_t_u_u((safe_mod_func_int32_t_s_s((safe_rshift_func_int16_t_s_s(((*g_691) = ((safe_mul_func_int16_t_s_s(p_56, (0x2F59L || ((((safe_mod_func_int8_t_s_s(p_53, (*l_1518))) == (-7L)) >= (-1L)) == g_175)))) , 0xBA32L)), p_56)), (*g_1251))), g_89)))) <= p_56)))) , 0xBDB685A7L);
                    if ((*g_1463))
                        continue;
                    (*g_1463) |= (l_1535 != (l_1537 = l_1536));
                }
                (*g_1463) |= (safe_mod_func_int8_t_s_s((safe_div_func_int8_t_s_s(p_54, (safe_rshift_func_int8_t_s_u(((safe_rshift_func_uint16_t_u_s(((safe_add_func_int8_t_s_s(((*l_1535) = ((NULL == (*g_1249)) , ((l_1503 || (*g_1251)) > (safe_div_func_int16_t_s_s((safe_add_func_uint32_t_u_u((p_55 = (((safe_sub_func_int32_t_s_s(((g_1555 = 0x02FA4FDCL) != (*l_1493)), (g_1566 ^= (((((safe_sub_func_uint8_t_u_u(((safe_add_func_uint8_t_u_u(p_53, (((safe_mod_func_int8_t_s_s((safe_rshift_func_uint16_t_u_u(((+(p_56 != 0xE9L)) > p_54), (**l_1494))), 0xD9L)) , 0x63D33749L) ^ (**g_1250)))) , l_1515[1]), (*l_1518))) , l_1515[0]) > p_57) , l_1564) != &l_1565)))) , &g_1098) != &p_54)), (**g_1250))), p_57))))), (**l_1494))) | (*l_1493)), l_1515[1])) != (*l_1518)), 0)))), 1L));
                (*g_1463) = ((l_1568[1] = (!(3L <= l_1567))) && ((safe_rshift_func_int16_t_s_s((safe_sub_func_uint16_t_u_u((*g_94), (*g_94))), (*g_691))) > (((*l_1573) = &g_1566) == &l_1504[0])));
                if ((*l_1517))
                    break;
            }
            for (g_1098 = 1; (g_1098 <= 4); g_1098 += 1)
            { /* block id: 716 */
                int8_t l_1596 = (-1L);
                uint16_t l_1612[10][1];
                int32_t l_1627[10][8][3] = {{{0xC0858DD3L,0x6CDF6292L,0x0C47EFC1L},{1L,0x2B909333L,(-1L)},{(-1L),0x51500EF7L,8L},{(-3L),1L,(-1L)},{(-10L),0L,0x0C47EFC1L},{0x2B39689EL,(-4L),1L},{0xCF339FD2L,(-4L),0xB192890FL},{0xE885E439L,1L,0xE885E439L}},{{(-1L),(-6L),(-4L)},{0xBA747FABL,0xB96D546FL,(-4L)},{4L,0xCF339FD2L,0x6CDF6292L},{1L,9L,0x05C6FB27L},{4L,0x301C8E77L,8L},{0xBA747FABL,0x28220F40L,4L},{(-1L),0L,0L},{0xE885E439L,0x7AC51D76L,0x7AC51D76L}},{{0xCF339FD2L,0x9B745613L,0x20AF4157L},{0x2B39689EL,(-3L),0xE885E439L},{(-10L),0x0C47EFC1L,6L},{(-3L),0xB96D546FL,0x28220F40L},{(-1L),0x0C47EFC1L,(-6L)},{1L,(-3L),0xC54F3900L},{0xC0858DD3L,0x9B745613L,8L},{0xB96D546FL,0x7AC51D76L,0xE4F7FA0BL}},{{0L,0L,0xCF339FD2L},{0x7085AA06L,0x28220F40L,0xF46FF3C9L},{0xCF339FD2L,0x301C8E77L,0x930F5A2FL},{0x2A0E2F99L,9L,0xE885E439L},{0xE30DA511L,0xCF339FD2L,0x930F5A2FL},{2L,0xB96D546FL,0xF46FF3C9L},{0x1801E895L,(-6L),0xCF339FD2L},{1L,1L,0xE4F7FA0BL}},{{8L,(-4L),8L},{0xC9619119L,(-4L),0xC54F3900L},{0xEF4FC547L,0L,(-6L)},{0x9BB809B8L,1L,0x28220F40L},{0xCF339FD2L,0x51500EF7L,6L},{0x9BB809B8L,0x2B909333L,0xE885E439L},{0xEF4FC547L,0x6CDF6292L,0x20AF4157L},{0xC9619119L,0xB96D546FL,0x7AC51D76L}},{{8L,0L,0L},{0x2A0E2F99L,0xC9619119L,0x2B909333L},{0x930F5A2FL,0xEF4FC547L,6L},{0x28220F40L,0x9BB809B8L,0x4059FABFL},{0x0C47EFC1L,0xCF339FD2L,0x1801E895L},{4L,0x9BB809B8L,0x7085AA06L},{(-1L),0xEF4FC547L,0x51500EF7L},{0xC54F3900L,0xC9619119L,0x05C6FB27L}},{{0xCF339FD2L,8L,(-4L)},{1L,1L,0x2A0E2F99L},{(-4L),0x1801E895L,4L},{0x2A0E2F99L,2L,(-3L)},{0x20AF4157L,0xE30DA511L,6L},{0xF46FF3C9L,0x2A0E2F99L,(-3L)},{0x6CDF6292L,0xCF339FD2L,4L},{(-1L),0x7085AA06L,0x2A0E2F99L}},{{(-1L),0L,(-4L)},{0x05C6FB27L,0xB96D546FL,0x05C6FB27L},{(-6L),0xC0858DD3L,0x51500EF7L},{0x7AC51D76L,1L,0x7085AA06L},{0xB192890FL,(-1L),0x1801E895L},{0x2A0E2F99L,(-3L),0x4059FABFL},{0xB192890FL,(-10L),6L},{0x7AC51D76L,0x2B39689EL,0x2B909333L}},{{(-6L),0xCF339FD2L,8L},{0x05C6FB27L,0xE885E439L,0xE885E439L},{(-1L),(-1L),0x301C8E77L},{(-1L),0xBA747FABL,0x05C6FB27L},{0x6CDF6292L,4L,0x9B745613L},{0xF46FF3C9L,1L,0x2B39689EL},{0x20AF4157L,4L,0xC0858DD3L},{0x2A0E2F99L,0xBA747FABL,9L}},{{(-4L),(-1L),6L},{1L,0xE885E439L,1L},{0xCF339FD2L,0xCF339FD2L,(-1L)},{0xC54F3900L,0x2B39689EL,0x9BB809B8L},{(-1L),(-10L),1L},{4L,(-3L),0x05C6FB27L},{0x0C47EFC1L,(-1L),1L},{0x28220F40L,1L,0x9BB809B8L}}};
                uint8_t l_1661 = 0x91L;
                uint8_t l_1672 = 0x8AL;
                int i, j, k;
                for (i = 0; i < 10; i++)
                {
                    for (j = 0; j < 1; j++)
                        l_1612[i][j] = 0xADEAL;
                }
                if (p_53)
                    goto lbl_1575;
                for (g_813 = 1; (g_813 <= 4); g_813 += 1)
                { /* block id: 720 */
                    int16_t l_1610[5];
                    int32_t l_1628 = 1L;
                    int32_t l_1631 = 0x2FD5F7A3L;
                    int32_t l_1632 = 0x49EF7935L;
                    int32_t l_1634 = 0xBFA600F1L;
                    int32_t l_1639 = 0xDFC860C3L;
                    int32_t l_1647 = 0x7A248064L;
                    int32_t l_1648 = 0x06A924C2L;
                    int32_t l_1651 = 0x3BAFF8AFL;
                    int32_t l_1652 = 0xE4B57DEBL;
                    int32_t l_1653 = 0x330A2A19L;
                    int32_t l_1654 = 0xF11007C4L;
                    int32_t l_1655 = 1L;
                    int32_t l_1656[6];
                    uint8_t l_1658 = 0x6DL;
                    int32_t l_1675 = 8L;
                    uint16_t l_1676 = 0x29D9L;
                    int i;
                    for (i = 0; i < 5; i++)
                        l_1610[i] = 0xB1EEL;
                    for (i = 0; i < 6; i++)
                        l_1656[i] = 1L;
                    if (((safe_mul_func_uint8_t_u_u((((l_1612[9][0] = ((safe_sub_func_uint8_t_u_u(((++(*g_1251)) & 0x55C69D38L), (((*g_94) , (safe_lshift_func_int16_t_s_u((safe_sub_func_int32_t_s_s(((+(safe_lshift_func_int8_t_s_s((safe_add_func_int8_t_s_s((*l_1517), ((*l_1535) ^= ((safe_mul_func_uint8_t_u_u((safe_add_func_int32_t_s_s((safe_sub_func_int8_t_s_s((((l_1596 & (*l_1517)) || (((*l_1514) = ((safe_mul_func_int8_t_s_s(0xBAL, (p_57 > (!((safe_add_func_int8_t_s_s(((safe_sub_func_uint32_t_u_u((safe_unary_minus_func_int16_t_s(((safe_lshift_func_uint8_t_u_s(0xB1L, 6)) == (safe_rshift_func_uint8_t_u_s(((safe_sub_func_int16_t_s_s((0x08L == p_57), l_1610[4])) , (*g_1457)), 7))))), p_53)) , (**g_1027)), (*l_1518))) | l_1596))))) && (*l_1517))) , p_56)) >= g_1611), l_1596)), 0UL)), l_1596)) < (**g_1027))))), 4))) > (*g_1457)), p_53)), p_54))) ^ l_1596))) | p_57)) || 1UL) , p_55), l_1610[4])) == 8L))
                    { /* block id: 725 */
                        int32_t *l_1613 = &g_89;
                        int32_t *l_1614 = &g_1555;
                        int32_t *l_1615 = &g_1555;
                        int32_t *l_1616 = &l_1568[5];
                        int32_t *l_1618 = &g_101[0][1][4];
                        int32_t *l_1619 = &g_1555;
                        int32_t *l_1620 = &g_10;
                        int32_t *l_1621 = &l_1568[3];
                        int32_t *l_1622 = &g_1555;
                        int32_t *l_1623 = &l_1617;
                        int32_t *l_1624 = &g_89;
                        int32_t *l_1625[8][10][3] = {{{&g_1555,NULL,&g_89},{&l_1568[5],&l_1568[1],&g_89},{&g_89,&l_1568[1],&l_1568[5]},{&l_1568[5],NULL,NULL},{&g_1555,&l_1568[1],&g_89},{&l_1568[1],&l_1568[1],NULL},{&g_89,NULL,&l_1568[5]},{&l_1568[1],NULL,&g_89},{&g_1555,NULL,&g_89},{&l_1568[5],&l_1568[1],&g_89}},{{&g_89,&l_1568[1],&l_1568[5]},{&l_1568[5],NULL,NULL},{&g_1555,&l_1568[1],&g_89},{&l_1568[1],&l_1568[1],NULL},{&g_89,NULL,&l_1568[5]},{&l_1568[1],NULL,&g_89},{&g_1555,NULL,&g_89},{&l_1568[5],&l_1568[1],&g_89},{&g_89,&l_1568[1],&l_1568[5]},{&l_1568[5],NULL,NULL}},{{&g_1555,&l_1568[1],&g_89},{&l_1568[1],&l_1568[1],NULL},{&g_89,NULL,&l_1568[5]},{&l_1568[1],NULL,&g_89},{&g_1555,NULL,&g_101[0][1][4]},{&l_1568[1],&l_1568[1],&l_1617},{&l_1568[5],NULL,NULL},{&l_1568[1],&g_1555,&g_1555},{NULL,NULL,&g_101[0][1][4]},{NULL,&l_1568[1],&g_1555}},{{&l_1568[5],&l_1568[4],NULL},{NULL,&g_1555,&l_1617},{NULL,&l_1568[4],&g_101[0][1][4]},{&l_1568[1],&l_1568[1],&l_1617},{&l_1568[5],NULL,NULL},{&l_1568[1],&g_1555,&g_1555},{NULL,NULL,&g_101[0][1][4]},{NULL,&l_1568[1],&g_1555},{&l_1568[5],&l_1568[4],NULL},{NULL,&g_1555,&l_1617}},{{NULL,&l_1568[4],&g_101[0][1][4]},{&l_1568[1],&l_1568[1],&l_1617},{&l_1568[5],NULL,NULL},{&l_1568[1],&g_1555,&g_1555},{NULL,NULL,&g_101[0][1][4]},{NULL,&l_1568[1],&g_1555},{&l_1568[5],&l_1568[4],NULL},{NULL,&g_1555,&l_1617},{NULL,&l_1568[4],&g_101[0][1][4]},{&l_1568[1],&l_1568[1],&l_1617}},{{&l_1568[5],NULL,NULL},{&l_1568[1],&g_1555,&g_1555},{NULL,NULL,&g_101[0][1][4]},{NULL,&l_1568[1],&g_1555},{&l_1568[5],&l_1568[4],NULL},{NULL,&g_1555,&l_1617},{NULL,&l_1568[4],&g_101[0][1][4]},{&l_1568[1],&l_1568[1],&l_1617},{&l_1568[5],NULL,NULL},{&l_1568[1],&g_1555,&g_1555}},{{NULL,NULL,&g_101[0][1][4]},{NULL,&l_1568[1],&g_1555},{&l_1568[5],&l_1568[4],NULL},{NULL,&g_1555,&l_1617},{NULL,&l_1568[4],&g_101[0][1][4]},{&l_1568[1],&l_1568[1],&l_1617},{&l_1568[5],NULL,NULL},{&l_1568[1],&g_1555,&g_1555},{NULL,NULL,&g_101[0][1][4]},{NULL,&l_1568[1],&g_1555}},{{&l_1568[5],&l_1568[4],NULL},{NULL,&g_1555,&l_1617},{NULL,&l_1568[4],&g_101[0][1][4]},{&l_1568[1],&l_1568[1],&l_1617},{&l_1568[5],NULL,NULL},{&l_1568[1],&g_1555,&g_1555},{NULL,NULL,&g_101[0][1][4]},{NULL,&l_1568[1],&g_1555},{&l_1568[5],&l_1568[4],NULL},{NULL,&g_1555,&l_1617}}};
                        int32_t l_1633[6][3][5] = {{{0x54E12B57L,(-1L),(-1L),0x54E12B57L,0x549A8D90L},{0x54E12B57L,0xD8394710L,0x67A448C4L,0x55C0B040L,0L},{0L,(-1L),0x67A448C4L,0xC213F2D5L,(-1L)}},{{0x2BAA21AFL,0xA4F12C09L,(-1L),0x55C0B040L,(-1L)},{8L,1L,1L,0x54E12B57L,0L},{0L,0x2BAA21AFL,6L,1L,(-1L)}},{{0x5288A55AL,6L,0L,1L,(-4L)},{0L,8L,8L,0L,(-1L)},{0L,0x55C0B040L,0xC213F2D5L,0x9E74C91AL,6L}},{{0x5288A55AL,8L,0xC213F2D5L,(-5L),0xFDBFCCF4L},{0L,6L,8L,0x9E74C91AL,0xFDBFCCF4L},{1L,0x2BAA21AFL,0L,0L,6L}},{{0L,0x2BAA21AFL,6L,1L,(-1L)},{0x5288A55AL,6L,0L,1L,(-4L)},{0L,8L,8L,0L,(-1L)}},{{0L,0x55C0B040L,0xC213F2D5L,0x9E74C91AL,6L},{0x5288A55AL,8L,0xC213F2D5L,(-5L),0xFDBFCCF4L},{0L,6L,8L,0x9E74C91AL,0xFDBFCCF4L}}};
                        int i, j, k;
                        --l_1658;
                        l_1661++;
                        (*l_1623) &= (safe_div_func_uint32_t_u_u((*l_1517), p_54));
                        if (p_57)
                            continue;
                    }
                    else
                    { /* block id: 730 */
                        if (p_57)
                            break;
                    }
                    (*g_1463) = (-4L);
                    for (l_1648 = 4; (l_1648 >= 1); l_1648 -= 1)
                    { /* block id: 736 */
                        int32_t *l_1666 = &l_1654;
                        int32_t *l_1667 = &l_1634;
                        int32_t *l_1668 = NULL;
                        int32_t *l_1669 = &l_1629[1][0];
                        int32_t *l_1670[3][6] = {{&l_1628,&l_1636,&l_1636,&l_1628,NULL,&l_1628},{&l_1628,NULL,&l_1628,&l_1636,&l_1636,&l_1628},{NULL,NULL,&l_1636,&l_1629[1][0],&l_1636,NULL}};
                        int i, j;
                        l_1672++;
                        l_1676--;
                    }
                }
            }
        }
    }
    (*l_1494) = NULL;
    return (*l_1494);
}


/* ------------------------------------------ */
/* 
 * reads : g_94 g_95 g_168 g_1457 g_1098 g_1249 g_1250 g_1251 g_534 g_1489 g_1463 g_88 g_101 g_813
 * writes: g_168 g_534 g_1486 g_1487 g_10 g_101
 */
static int32_t * func_64(uint16_t  p_65, int32_t * p_66)
{ /* block id: 664 */
    int32_t *l_1470 = &g_8[0];
    int32_t **l_1471 = &l_1470;
    int32_t l_1472 = 8L;
    uint16_t *l_1473[2][3] = {{&g_813,&g_168,&g_168},{&g_813,&g_168,&g_168}};
    int32_t l_1482 = 4L;
    int32_t **l_1483[8][2] = {{&g_88,NULL},{&g_88,&g_88},{NULL,&g_88},{&g_88,NULL},{&g_88,&g_88},{NULL,&g_88},{&g_88,NULL},{&g_88,&g_88}};
    int32_t **l_1485 = &g_1463;
    int32_t ***l_1484[7];
    uint16_t *l_1488 = &g_168;
    int i, j;
    for (i = 0; i < 7; i++)
        l_1484[i] = &l_1485;
    (*g_88) |= (safe_sub_func_int16_t_s_s(((((safe_add_func_int8_t_s_s((((safe_rshift_func_uint16_t_u_s(((((*l_1471) = l_1470) != ((l_1472 , (((g_168 ^= (*g_94)) , (safe_lshift_func_int16_t_s_u((safe_mul_func_uint8_t_u_u((*g_1457), ((safe_div_func_uint32_t_u_u((++(***g_1249)), ((*g_1463) = (((((l_1482 ^= l_1472) && (l_1482 , ((l_1483[2][0] == (g_1487 = (g_1486 = &p_66))) , (((((((~((l_1488 == NULL) == p_65)) , (int16_t******) NULL) == g_1489) <= 0xAAB5L) , l_1488) == l_1488) == p_65)))) & (*g_94)) <= p_65) ^ p_65)))) <= p_65))), 11))) > 0xF0D8L)) , p_66)) < 65535UL), p_65)) != 4UL) <= p_65), p_65)) , (***g_1249)) == 0xE4B2D116L) | 7L), p_65));
    return p_66;
}


/* ------------------------------------------ */
/* 
 * reads : g_14 g_735 g_101 g_1250 g_1251 g_94 g_95 g_534 g_679 g_1029 g_207 g_208 g_691 g_88 g_1463 g_813
 * writes: g_14 g_534 g_1028 g_1452 g_101 g_1456 g_735 g_175
 */
static int32_t * func_69(int8_t  p_70)
{ /* block id: 646 */
    uint8_t *l_1419[9] = {&g_177,&g_1098,&g_177,&g_177,&g_1098,&g_177,&g_177,&g_1098,&g_177};
    int32_t l_1420 = 0x8112C32BL;
    int32_t l_1421 = 0x5D192EC3L;
    int32_t l_1422 = (-2L);
    int32_t l_1423 = 3L;
    int32_t l_1424[1][7][9] = {{{0xA557835BL,0x13D4A42FL,0x65F5FA38L,0x65F5FA38L,0x13D4A42FL,0xA557835BL,0x11973284L,(-3L),3L},{0L,(-3L),1L,(-1L),1L,0x2B1E312BL,0xA557835BL,0x65F5FA38L,0xD082371BL},{(-1L),1L,(-3L),0L,0x11973284L,(-10L),0x11973284L,0L,(-3L)},{0x65F5FA38L,0x65F5FA38L,0x13D4A42FL,0xA557835BL,0x11973284L,(-3L),3L,0xD082371BL,7L},{0xCC668815L,0x7AE882F6L,0xD082371BL,(-6L),1L,(-1L),0x2B1E312BL,0x11973284L,0x11973284L},{7L,0x5A5A6D7DL,0x13D4A42FL,1L,0x13D4A42FL,0x5A5A6D7DL,7L,(-1L),4L},{7L,0x2B1E312BL,(-3L),0x5A5A6D7DL,0L,1L,(-1L),(-10L),0xA557835BL}}};
    int16_t ***** const l_1427 = &g_1102;
    int16_t *****l_1428 = &g_1102;
    int16_t ******l_1429 = &l_1428;
    int16_t *l_1442 = &g_175;
    int32_t l_1443 = 0xCFA03042L;
    int8_t ***l_1450 = &g_1029;
    int8_t ****l_1451[8][6][5] = {{{&g_1028,&l_1450,NULL,NULL,NULL},{&g_1028,&l_1450,&l_1450,&g_1028,&l_1450},{&g_1028,&g_1028,NULL,&l_1450,&g_1028},{&l_1450,&l_1450,&l_1450,&g_1028,&g_1028},{&g_1028,&g_1028,&g_1028,&g_1028,&g_1028},{&g_1028,&l_1450,&g_1028,&l_1450,&g_1028}},{{NULL,&g_1028,&l_1450,&g_1028,&l_1450},{NULL,&l_1450,&g_1028,&g_1028,&l_1450},{NULL,&g_1028,&l_1450,&l_1450,&l_1450},{&g_1028,&g_1028,&g_1028,&l_1450,&g_1028},{&g_1028,NULL,&l_1450,NULL,&l_1450},{&l_1450,NULL,&g_1028,&g_1028,&l_1450}},{{&g_1028,NULL,&g_1028,&l_1450,&l_1450},{&l_1450,&g_1028,&l_1450,&g_1028,&g_1028},{&g_1028,&g_1028,&l_1450,NULL,&g_1028},{&l_1450,&l_1450,&g_1028,&l_1450,&g_1028},{&g_1028,&g_1028,&l_1450,&l_1450,&g_1028},{&l_1450,&l_1450,&l_1450,&g_1028,&g_1028}},{{&g_1028,&g_1028,&g_1028,&g_1028,&g_1028},{&g_1028,&l_1450,&g_1028,&l_1450,&g_1028},{NULL,&g_1028,&l_1450,&g_1028,&l_1450},{NULL,&l_1450,&g_1028,&g_1028,&l_1450},{NULL,&g_1028,&l_1450,&l_1450,&l_1450},{&g_1028,&g_1028,&g_1028,&l_1450,&g_1028}},{{&g_1028,NULL,&l_1450,NULL,&l_1450},{&l_1450,NULL,&g_1028,&g_1028,&l_1450},{&g_1028,NULL,&g_1028,&l_1450,&l_1450},{&l_1450,&g_1028,&l_1450,&g_1028,&g_1028},{&g_1028,&g_1028,&l_1450,NULL,&g_1028},{&l_1450,&l_1450,&g_1028,&l_1450,&g_1028}},{{&g_1028,&g_1028,&l_1450,&l_1450,&g_1028},{&l_1450,&l_1450,&l_1450,&g_1028,&g_1028},{&g_1028,&g_1028,&g_1028,&g_1028,&g_1028},{&g_1028,&l_1450,&g_1028,&l_1450,&g_1028},{NULL,&g_1028,&l_1450,&g_1028,&l_1450},{NULL,&l_1450,&g_1028,&g_1028,&l_1450}},{{NULL,&g_1028,&l_1450,&l_1450,&l_1450},{&g_1028,&g_1028,&g_1028,&l_1450,&g_1028},{&g_1028,NULL,&l_1450,NULL,&l_1450},{&l_1450,NULL,&g_1028,&g_1028,&l_1450},{&g_1028,NULL,&g_1028,&l_1450,&g_1028},{&l_1450,&g_1028,&g_1028,&g_1028,&l_1450}},{{&g_1028,&l_1450,&g_1028,&g_1028,&g_1028},{&l_1450,&l_1450,&l_1450,&l_1450,&l_1450},{&g_1028,&g_1028,&g_1028,&l_1450,&g_1028},{&l_1450,&l_1450,&g_1028,&l_1450,&l_1450},{&l_1450,&g_1028,&g_1028,&g_1028,&g_1028},{&g_1028,&l_1450,&g_1028,&l_1450,&l_1450}}};
    int32_t **l_1453 = &g_735;
    uint8_t **l_1455[5][6][8];
    uint8_t ***l_1454[4][4][6] = {{{&l_1455[0][4][6],&l_1455[0][4][6],&l_1455[4][5][0],NULL,&l_1455[0][1][4],&l_1455[1][2][1]},{&l_1455[4][5][0],&l_1455[3][2][5],&l_1455[4][5][0],&l_1455[4][5][0],&l_1455[4][5][0],&l_1455[4][5][0]},{NULL,&l_1455[4][5][0],&l_1455[4][5][0],NULL,&l_1455[0][4][6],&l_1455[1][2][1]},{&l_1455[3][0][2],NULL,&l_1455[4][5][0],&l_1455[4][5][6],&l_1455[4][5][0],&l_1455[4][5][6]}},{{&l_1455[4][5][6],&l_1455[4][5][0],&l_1455[4][5][6],&l_1455[4][5][0],NULL,&l_1455[3][0][2]},{&l_1455[1][2][1],&l_1455[0][4][6],NULL,&l_1455[4][5][0],&l_1455[4][5][0],NULL},{&l_1455[4][5][0],&l_1455[4][5][0],&l_1455[4][5][0],&l_1455[4][5][0],&l_1455[3][2][5],&l_1455[4][5][0]},{&l_1455[1][2][1],&l_1455[0][1][4],NULL,&l_1455[4][5][0],&l_1455[0][4][6],&l_1455[0][4][6]}},{{&l_1455[4][5][6],&l_1455[4][5][0],&l_1455[4][5][0],&l_1455[4][5][6],&l_1455[1][2][3],&l_1455[4][5][0]},{&l_1455[3][0][2],NULL,&l_1455[4][5][6],NULL,NULL,&l_1455[4][5][0]},{NULL,&l_1455[0][4][6],&l_1455[0][1][4],&l_1455[4][5][0],NULL,NULL},{&l_1455[4][5][0],NULL,&l_1455[2][0][1],NULL,&l_1455[1][2][3],&l_1455[4][5][0]}},{{&l_1455[0][4][6],&l_1455[4][5][0],&l_1455[4][5][0],&l_1455[4][5][0],&l_1455[0][4][6],&l_1455[4][5][0]},{&l_1455[4][5][0],&l_1455[0][1][4],NULL,&l_1455[4][5][6],&l_1455[3][2][5],&l_1455[4][5][0]},{&l_1455[4][5][0],&l_1455[4][5][0],&l_1455[4][5][6],&l_1455[0][1][4],&l_1455[4][5][0],&l_1455[4][5][0]},{NULL,&l_1455[0][4][6],NULL,&l_1455[2][0][1],NULL,&l_1455[4][5][0]}}};
    int16_t l_1459 = 5L;
    int i, j, k;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 6; j++)
        {
            for (k = 0; k < 8; k++)
                l_1455[i][j][k] = &l_1419[0];
        }
    }
    l_1423 |= ((safe_add_func_int32_t_s_s(0L, ((**g_1250) = (safe_lshift_func_int8_t_s_u(((safe_div_func_uint8_t_u_u((g_14++), (((l_1427 == ((*l_1429) = l_1428)) ^ (-6L)) && p_70))) != (safe_rshift_func_uint8_t_u_u(((safe_rshift_func_int16_t_s_u((((l_1443 = (safe_div_func_uint32_t_u_u((safe_add_func_int32_t_s_s((*g_735), ((l_1424[0][5][3] <= ((safe_mod_func_uint16_t_u_u(p_70, ((l_1442 == NULL) , 0x8830L))) < p_70)) & p_70))), p_70))) && 0L) > l_1422), p_70)) ^ 0x24L), l_1420))), l_1421))))) == l_1420);
    (*g_735) = ((*g_94) && (safe_rshift_func_int8_t_s_s((((((((safe_rshift_func_int16_t_s_s((p_70 == ((((*l_1429) != (*l_1429)) , ((l_1423 <= (((**g_1250) , (((safe_div_func_int16_t_s_s(((g_1452 = (g_1028 = l_1450)) != NULL), p_70)) , (*g_94)) || 0x2E08L)) >= l_1421)) && p_70)) , l_1420)), 7)) <= g_679[0][4]) == 0x8AD548DCL) || (**g_1029)) , l_1453) != NULL) && p_70), 1)));
    if (((g_1456 = &l_1419[0]) != NULL))
    { /* block id: 656 */
        int32_t *l_1458[3][9][3] = {{{NULL,NULL,&l_1422},{&l_1421,&l_1420,&g_89},{NULL,&g_101[0][0][0],&g_10},{&l_1443,&l_1443,&l_1422},{NULL,&l_1443,&g_89},{NULL,&g_101[0][0][0],&l_1443},{&l_1422,&l_1420,&g_89},{&g_10,NULL,&l_1443},{&g_10,&g_89,&g_89}},{{&g_89,&l_1421,&l_1422},{&g_89,&l_1422,&g_10},{&g_10,NULL,&g_89},{&g_10,&l_1422,&l_1422},{&l_1422,NULL,NULL},{NULL,&l_1422,NULL},{NULL,&l_1421,NULL},{&l_1443,&g_89,NULL},{NULL,NULL,&l_1422}},{{&l_1421,&l_1420,&g_89},{NULL,&g_101[0][0][0],&l_1421},{&g_10,&g_10,&l_1420},{&g_89,&g_10,&l_1422},{&l_1423,&l_1443,&g_10},{&g_101[0][0][0],&l_1422,NULL},{&l_1421,&l_1423,&g_10},{&g_89,&l_1422,&l_1422},{&g_89,&g_10,&l_1420}}};
        uint8_t l_1460[9][9][3] = {{{250UL,0UL,0UL},{250UL,250UL,0UL},{255UL,0UL,0UL},{0UL,255UL,0UL},{255UL,255UL,255UL},{250UL,0UL,0UL},{250UL,250UL,0UL},{255UL,0UL,0UL},{0UL,255UL,0UL}},{{255UL,255UL,255UL},{250UL,0UL,0UL},{250UL,250UL,0UL},{255UL,0UL,0UL},{0UL,255UL,0UL},{255UL,255UL,255UL},{250UL,0UL,0UL},{250UL,250UL,0UL},{255UL,0UL,0UL}},{{0UL,255UL,0UL},{255UL,255UL,255UL},{250UL,0UL,0UL},{250UL,250UL,0UL},{255UL,0UL,0UL},{0UL,255UL,0UL},{255UL,255UL,255UL},{250UL,0UL,0UL},{250UL,250UL,0UL}},{{255UL,0UL,0UL},{0UL,255UL,0UL},{255UL,255UL,255UL},{250UL,0UL,0UL},{250UL,250UL,0UL},{255UL,0UL,0UL},{0UL,255UL,0UL},{255UL,255UL,255UL},{250UL,0UL,0UL}},{{250UL,250UL,0UL},{255UL,0UL,0UL},{0UL,255UL,0UL},{255UL,255UL,255UL},{250UL,0UL,0UL},{250UL,250UL,0UL},{255UL,0UL,0UL},{0UL,255UL,0UL},{255UL,255UL,255UL}},{{250UL,0UL,0UL},{250UL,250UL,0UL},{255UL,0UL,0UL},{0UL,255UL,0UL},{255UL,255UL,255UL},{250UL,0UL,0UL},{250UL,250UL,0UL},{255UL,0UL,0UL},{0UL,255UL,0UL}},{{255UL,255UL,255UL},{250UL,0UL,0UL},{0UL,0UL,255UL},{0UL,255UL,255UL},{255UL,250UL,255UL},{0UL,250UL,0UL},{0UL,255UL,255UL},{0UL,0UL,255UL},{0UL,255UL,255UL}},{{255UL,250UL,255UL},{0UL,250UL,0UL},{0UL,255UL,255UL},{0UL,0UL,255UL},{0UL,255UL,255UL},{255UL,250UL,255UL},{0UL,250UL,0UL},{0UL,255UL,255UL},{0UL,0UL,255UL}},{{0UL,255UL,255UL},{255UL,250UL,255UL},{0UL,250UL,0UL},{0UL,255UL,255UL},{0UL,0UL,255UL},{0UL,255UL,255UL},{255UL,250UL,255UL},{0UL,250UL,0UL},{0UL,255UL,255UL}}};
        int i, j, k;
        (*l_1453) = l_1458[0][6][1];
        --l_1460[3][2][1];
    }
    else
    { /* block id: 659 */
        (*g_88) = (((*g_691) = p_70) <= 65534UL);
    }
    return g_1463;
}


/* ------------------------------------------ */
/* 
 * reads : g_912
 * writes: g_735 g_88
 */
static uint8_t  func_76(uint8_t  p_77, const int32_t * const  p_78, int32_t * p_79)
{ /* block id: 640 */
    int32_t **l_1411 = &g_735;
    int32_t **l_1412 = &g_88;
    (*l_1412) = func_80(((*l_1411) = p_79));
    (*l_1412) = p_79;
    return g_912;
}


/* ------------------------------------------ */
/* 
 * reads :
 * writes:
 */
static int32_t * const  func_80(int32_t * p_81)
{ /* block id: 638 */
    return p_81;
}


/* ------------------------------------------ */
/* 
 * reads :
 * writes:
 */
static int32_t * func_82(int32_t  p_83, uint16_t  p_84, int32_t * p_85)
{ /* block id: 13 */
    int32_t l_592[2];
    const int32_t l_595[2][2][1] = {{{(-1L)},{(-1L)}},{{(-1L)},{(-1L)}}};
    const int8_t l_598 = 0xC0L;
    uint16_t *l_610 = &g_168;
    int8_t l_655 = 1L;
    int32_t l_656[8][1][1] = {{{4L}},{{4L}},{{0xD2B475C6L}},{{4L}},{{4L}},{{0xD2B475C6L}},{{4L}},{{4L}}};
    uint32_t l_663 = 0UL;
    int16_t l_678 = 0x00A6L;
    int16_t l_680 = 0L;
    int32_t ***l_715 = NULL;
    int16_t * const *l_864[10];
    uint32_t l_907[10] = {0x8FD9B42AL,0xCB637439L,0x8FD9B42AL,0x8FD9B42AL,0xCB637439L,0x8FD9B42AL,0x8FD9B42AL,0xCB637439L,0x8FD9B42AL,0x8FD9B42AL};
    int8_t l_911 = (-9L);
    int32_t l_964 = 0xA692B646L;
    int32_t l_1012 = (-9L);
    int32_t l_1093[4][3][8] = {{{2L,9L,(-3L),9L,2L,0L,0x9A570B86L,1L},{0L,0x56E35751L,2L,(-1L),0xB912FE8EL,0L,9L,9L},{0x9BC7F200L,0x19546F1DL,2L,2L,0x19546F1DL,0x9BC7F200L,0x9A570B86L,0xB912FE8EL}},{{0xB912FE8EL,0x68511652L,(-3L),1L,9L,(-1L),0x9BC7F200L,0L},{(-3L),0x67113F6AL,0L,1L,0L,0x67113F6AL,(-3L),0xB912FE8EL},{0x19546F1DL,0L,0x56E35751L,2L,(-1L),0xB912FE8EL,0L,9L}},{{1L,0xE0D73146L,0x33C53D7FL,(-1L),(-1L),0x33C53D7FL,0xE0D73146L,1L},{0x19546F1DL,1L,0x67113F6AL,9L,0L,0xE0D73146L,0x56E35751L,0x68511652L},{(-3L),0x9BC7F200L,4L,0xE0D73146L,9L,0xE0D73146L,4L,0x9BC7F200L}},{{0xB912FE8EL,1L,0x68511652L,0x9A570B86L,0x19546F1DL,0x33C53D7FL,0L,4L},{0x9BC7F200L,0xE0D73146L,(-1L),0L,0xB912FE8EL,0xB912FE8EL,0L,(-1L)},{0L,0L,0x68511652L,0x33C53D7FL,2L,0x67113F6AL,(-1L),1L}}};
    int32_t l_1120 = 0x0B67F3DBL;
    uint16_t l_1130 = 7UL;
    uint8_t l_1193[7][9][3] = {{{0x19L,0x45L,251UL},{246UL,1UL,0x9BL},{255UL,0UL,0UL},{0x90L,255UL,0x37L},{0x96L,0x19L,255UL},{0x96L,0xE8L,253UL},{0x90L,0xC2L,250UL},{255UL,255UL,251UL},{246UL,0xB5L,0xABL}},{{0x19L,255UL,0x90L},{1UL,0xC2L,4UL},{255UL,0xE8L,0x42L},{8UL,0x19L,0x42L},{249UL,255UL,4UL},{0UL,0UL,0x90L},{8UL,1UL,0xABL},{0UL,0x45L,251UL},{8UL,0x73L,250UL}},{{0UL,246UL,253UL},{249UL,8UL,255UL},{8UL,8UL,0x37L},{255UL,246UL,0UL},{1UL,0x73L,0x9BL},{0x19L,0x45L,251UL},{246UL,1UL,0x9BL},{255UL,0UL,0UL},{0x90L,255UL,0x37L}},{{0x96L,0x19L,255UL},{0x96L,0xE8L,253UL},{0x90L,0xC2L,250UL},{255UL,255UL,251UL},{246UL,0xB5L,0xABL},{0x19L,255UL,0x90L},{1UL,0xC2L,4UL},{255UL,0xE8L,0x42L},{8UL,0x19L,0x42L}},{{249UL,255UL,4UL},{0UL,0UL,0x90L},{8UL,1UL,0xABL},{0UL,0x45L,251UL},{8UL,0x73L,250UL},{0UL,246UL,253UL},{249UL,8UL,255UL},{8UL,8UL,0x37L},{255UL,246UL,0UL}},{{1UL,0x73L,0x9BL},{0x19L,0x45L,251UL},{246UL,1UL,0x9BL},{255UL,0UL,0UL},{0x90L,255UL,0x37L},{0x96L,0x19L,255UL},{0x96L,0xE8L,253UL},{0x90L,0xC2L,250UL},{255UL,255UL,251UL}},{{246UL,0xB5L,0xABL},{0x19L,255UL,0x90L},{1UL,0xC2L,4UL},{255UL,0xE8L,0x42L},{8UL,0x19L,0x42L},{249UL,255UL,4UL},{0UL,0UL,0x90L},{8UL,1UL,0xABL},{0UL,0x45L,251UL}}};
    uint32_t l_1214 = 0xA67816D7L;
    int8_t **l_1230 = &g_207[2];
    int32_t *l_1239 = &l_656[3][0][0];
    int16_t ** const *l_1292 = &g_435;
    int16_t ** const **l_1291 = &l_1292;
    int32_t l_1329 = 0L;
    int16_t ***l_1339 = &g_435;
    uint32_t l_1340 = 0xE0FECC7EL;
    const uint32_t ***l_1369 = NULL;
    int i, j, k;
    for (i = 0; i < 2; i++)
        l_592[i] = 0x6EF68121L;
    for (i = 0; i < 10; i++)
        l_864[i] = NULL;
    for (p_84 = 14; (p_84 == 60); p_84 = safe_add_func_int16_t_s_s(p_84, 4))
    { /* block id: 16 */
        int32_t *l_594[4];
        int32_t **l_593 = &l_594[2];
        int32_t l_616 = (-1L);
        int32_t l_619 = 1L;
        int16_t * const l_648[5] = {&g_175,&g_175,&g_175,&g_175,&g_175};
        int32_t l_653[4][1];
        uint32_t l_681 = 1UL;
        int8_t **l_876 = NULL;
        int8_t l_904 = 0x2AL;
        uint32_t l_908 = 0xDB682572L;
        int32_t l_910 = (-10L);
        int16_t l_1180[6];
        int8_t l_1233 = (-9L);
        int16_t l_1234 = 1L;
        int32_t l_1306 = 1L;
        int32_t l_1323 = 1L;
        uint8_t l_1400[3][9];
        int i, j;
        for (i = 0; i < 4; i++)
            l_594[i] = &g_8[0];
        for (i = 0; i < 4; i++)
        {
            for (j = 0; j < 1; j++)
                l_653[i][j] = (-2L);
        }
        for (i = 0; i < 6; i++)
            l_1180[i] = 0x47ABL;
        for (i = 0; i < 3; i++)
        {
            for (j = 0; j < 9; j++)
                l_1400[i][j] = 0x4EL;
        }
    }
    return &g_10;
}


/* ------------------------------------------ */
/* 
 * reads : g_88 g_89
 * writes:
 */
static int32_t  func_92(const uint16_t * p_93)
{ /* block id: 17 */
    uint8_t l_96 = 0x79L;
    uint8_t l_135 = 0xE2L;
    int32_t l_145 = 0x9B5C0F6DL;
    const int32_t *l_153 = NULL;
    int32_t l_157 = 0xF2D310D2L;
    int32_t *l_182[6] = {&g_8[2],NULL,&g_8[2],&g_8[2],NULL,&g_8[2]};
    int32_t **l_181 = &l_182[3];
    int32_t l_195 = 0x4882324AL;
    uint8_t l_196[9] = {0x74L,0xD3L,0x74L,0xD3L,0x74L,0xD3L,0x74L,0xD3L,0x74L};
    uint8_t l_241 = 0x45L;
    int32_t *l_244 = &l_195;
    uint16_t *l_266 = NULL;
    int32_t ***l_312 = &l_181;
    uint16_t l_333 = 65532UL;
    uint16_t l_407 = 0UL;
    uint8_t l_455 = 1UL;
    int16_t **l_473 = NULL;
    const int32_t *l_494 = &l_145;
    int32_t l_513 = (-1L);
    int16_t l_567 = 0x6F4BL;
    int32_t *l_589 = &l_513;
    int i;
    return (*g_88);
}




/* ---------------------------------------- */
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();
    for (i = 0; i < 4; i++)
    {
        transparent_crc(g_8[i], "g_8[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_10, "g_10", print_hash_value);
    transparent_crc(g_14, "g_14", print_hash_value);
    transparent_crc(g_68, "g_68", print_hash_value);
    transparent_crc(g_89, "g_89", print_hash_value);
    transparent_crc(g_95, "g_95", print_hash_value);
    for (i = 0; i < 1; i++)
    {
        for (j = 0; j < 2; j++)
        {
            for (k = 0; k < 5; k++)
            {
                transparent_crc(g_101[i][j][k], "g_101[i][j][k]", print_hash_value);
                if (print_hash_value) printf("index = [%d][%d][%d]\n", i, j, k);

            }
        }
    }
    transparent_crc(g_168, "g_168", print_hash_value);
    transparent_crc(g_175, "g_175", print_hash_value);
    transparent_crc(g_177, "g_177", print_hash_value);
    transparent_crc(g_208, "g_208", print_hash_value);
    transparent_crc(g_263, "g_263", print_hash_value);
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 1; j++)
        {
            for (k = 0; k < 5; k++)
            {
                transparent_crc(g_324[i][j][k], "g_324[i][j][k]", print_hash_value);
                if (print_hash_value) printf("index = [%d][%d][%d]\n", i, j, k);

            }
        }
    }
    transparent_crc(g_369, "g_369", print_hash_value);
    transparent_crc(g_490, "g_490", print_hash_value);
    transparent_crc(g_532, "g_532", print_hash_value);
    transparent_crc(g_534, "g_534", print_hash_value);
    for (i = 0; i < 1; i++)
    {
        for (j = 0; j < 5; j++)
        {
            transparent_crc(g_679[i][j], "g_679[i][j]", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

        }
    }
    transparent_crc(g_813, "g_813", print_hash_value);
    transparent_crc(g_906, "g_906", print_hash_value);
    transparent_crc(g_912, "g_912", print_hash_value);
    transparent_crc(g_1098, "g_1098", print_hash_value);
    transparent_crc(g_1555, "g_1555", print_hash_value);
    transparent_crc(g_1566, "g_1566", print_hash_value);
    transparent_crc(g_1611, "g_1611", print_hash_value);
    for (i = 0; i < 8; i++)
    {
        transparent_crc(g_1671[i], "g_1671[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

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

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

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

            }
        }
    }
    transparent_crc(g_2002, "g_2002", print_hash_value);
    platform_main_end(crc32_context ^ 0xFFFFFFFFUL, print_hash_value);
    return 0;
}

/************************ statistics *************************
XXX max struct depth: 0
breakdown:
   depth: 0, occurrence: 489
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: 60
breakdown:
   depth: 1, occurrence: 97
   depth: 2, occurrence: 14
   depth: 3, occurrence: 5
   depth: 4, occurrence: 1
   depth: 8, occurrence: 1
   depth: 9, occurrence: 1
   depth: 18, occurrence: 2
   depth: 19, occurrence: 2
   depth: 20, occurrence: 1
   depth: 22, occurrence: 1
   depth: 24, occurrence: 2
   depth: 26, occurrence: 1
   depth: 28, occurrence: 1
   depth: 31, occurrence: 1
   depth: 33, occurrence: 2
   depth: 35, occurrence: 1
   depth: 39, occurrence: 1
   depth: 40, occurrence: 1
   depth: 41, occurrence: 1
   depth: 60, occurrence: 1

XXX total number of pointers: 435

XXX times a variable address is taken: 1134
XXX times a pointer is dereferenced on RHS: 320
breakdown:
   depth: 1, occurrence: 285
   depth: 2, occurrence: 27
   depth: 3, occurrence: 8
XXX times a pointer is dereferenced on LHS: 267
breakdown:
   depth: 1, occurrence: 244
   depth: 2, occurrence: 16
   depth: 3, occurrence: 6
   depth: 4, occurrence: 1
XXX times a pointer is compared with null: 45
XXX times a pointer is compared with address of another variable: 4
XXX times a pointer is compared with another pointer: 14
XXX times a pointer is qualified to be dereferenced: 7978

XXX max dereference level: 6
breakdown:
   level: 0, occurrence: 0
   level: 1, occurrence: 1190
   level: 2, occurrence: 134
   level: 3, occurrence: 79
   level: 4, occurrence: 27
   level: 5, occurrence: 11
   level: 6, occurrence: 13
XXX number of pointers point to pointers: 171
XXX number of pointers point to scalars: 264
XXX number of pointers point to structs: 0
XXX percent of pointers has null in alias set: 25.5
XXX average alias set size: 1.48

XXX times a non-volatile is read: 1625
XXX times a non-volatile is write: 810
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: 5

XXX stmts: 92
XXX max block depth: 5
breakdown:
   depth: 0, occurrence: 28
   depth: 1, occurrence: 11
   depth: 2, occurrence: 6
   depth: 3, occurrence: 9
   depth: 4, occurrence: 16
   depth: 5, occurrence: 22

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

