/*
 * 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 --lang-cpp
 * Seed:      2604553870
 */

#include "csmith.h"


static long __undefined;

/* --- Struct/Union Declarations --- */
struct S0 {
   unsigned f0 : 21;
   uint8_t  f1;
   const unsigned f2 : 30;
   unsigned f3 : 8;
   signed f4 : 13;
   unsigned f5 : 5;
   unsigned f6 : 18;
   unsigned f7 : 3;
};

struct S1 {
   const int32_t  f0;
   unsigned f1 : 9;
   unsigned f2 : 16;
};

struct S2 {
   int32_t  f0;
   int64_t  f1;
};

/* --- GLOBAL VARIABLES --- */
static int32_t g_2 = 9L;
static int16_t g_27 = 0x03BEL;
static int16_t g_38 = 6L;
static int16_t *g_37[8][8] = {{&g_38,NULL,&g_38,&g_38,NULL,&g_38,&g_38,&g_38},{&g_38,&g_38,&g_38,&g_38,&g_38,&g_38,NULL,&g_38},{&g_38,&g_38,&g_38,&g_38,&g_38,&g_38,&g_38,&g_38},{&g_38,&g_38,&g_38,&g_38,&g_38,&g_38,&g_38,&g_38},{&g_38,&g_38,&g_38,&g_38,&g_38,&g_38,&g_38,&g_38},{&g_38,NULL,&g_38,&g_38,NULL,&g_38,&g_38,&g_38},{&g_38,&g_38,&g_38,&g_38,&g_38,&g_38,&g_38,&g_38},{&g_38,&g_38,&g_38,&g_38,&g_38,&g_38,&g_38,&g_38}};
static int32_t g_62 = 0x3DA513E6L;
static int32_t *g_61 = &g_62;
static uint16_t g_68 = 0xCE71L;
static uint8_t g_78 = 0x1DL;
static uint32_t g_114 = 0x200BAF9CL;
static struct S2 g_121 = {0x5C255F5DL,-10L};
static uint64_t g_159 = 0UL;
static uint16_t g_161 = 0x490DL;
static uint8_t g_184 = 8UL;
static uint32_t g_187 = 0x30F3DA43L;
static int32_t g_202 = 0x4816DB70L;
static uint64_t g_203 = 18446744073709551615UL;
static struct S1 g_208 = {0xB9C60537L,10,69};
static uint32_t g_215 = 0x25330C45L;
static int32_t g_239 = 9L;
static int8_t g_240 = 3L;
static int16_t g_241[4] = {0xD26EL,0xD26EL,0xD26EL,0xD26EL};
static int64_t g_242 = 7L;
static uint16_t g_244[3] = {65534UL,65534UL,65534UL};
static struct S2 g_291[4][6] = {{{0L,0x2B7545660DAF5139LL},{-3L,0L},{0L,0x2B7545660DAF5139LL},{-3L,0L},{0L,0x2B7545660DAF5139LL},{-3L,0L}},{{0x468E1691L,0x9955880D6DFFD78ALL},{-3L,0L},{0x468E1691L,0x9955880D6DFFD78ALL},{-3L,0L},{0x468E1691L,0x9955880D6DFFD78ALL},{-3L,0L}},{{0L,0x2B7545660DAF5139LL},{-3L,0L},{0L,0x2B7545660DAF5139LL},{-3L,0L},{0L,0x2B7545660DAF5139LL},{-3L,0L}},{{0x468E1691L,0x9955880D6DFFD78ALL},{-3L,0L},{0x468E1691L,0x9955880D6DFFD78ALL},{-3L,0L},{0x468E1691L,0x9955880D6DFFD78ALL},{-3L,0L}}};
static uint64_t g_323 = 1UL;
static int64_t *g_379 = &g_242;
static int64_t **g_378[4] = {&g_379,&g_379,&g_379,&g_379};
static const int32_t *g_385 = &g_291[0][1].f0;
static int32_t g_386[4] = {0L,0L,0L,0L};
static struct S0 g_408 = {1391,0xFDL,15322,15,20,0,166,1};
static struct S0 * const g_414 = &g_408;
static struct S0 * const *g_413[3][5] = {{NULL,NULL,&g_414,NULL,NULL},{&g_414,NULL,&g_414,&g_414,NULL},{NULL,&g_414,&g_414,NULL,&g_414}};
static int32_t g_467 = 0x3F4F500CL;
static uint32_t g_468 = 3UL;
static int32_t g_476 = (-7L);
static uint8_t *g_553 = &g_184;
static uint8_t **g_552[9][3] = {{&g_553,&g_553,&g_553},{&g_553,&g_553,&g_553},{&g_553,&g_553,&g_553},{&g_553,&g_553,&g_553},{&g_553,&g_553,&g_553},{&g_553,&g_553,&g_553},{&g_553,&g_553,&g_553},{&g_553,&g_553,&g_553},{&g_553,&g_553,&g_553}};
static int64_t * const **g_561 = NULL;
static int64_t g_565 = 0L;
static uint16_t *g_569 = &g_68;
static uint16_t * const *g_568 = &g_569;
static struct S2 *g_589 = &g_291[0][1];
static struct S0 g_605 = {1424,0xCBL,22754,10,-53,2,290,0};
static int8_t g_706 = 8L;
static uint32_t *g_708 = &g_114;
static uint32_t **g_707 = &g_708;
static uint64_t g_721 = 0xC18F15E9DB4D38A5LL;
static uint32_t g_732[5] = {4UL,4UL,4UL,4UL,4UL};


/* --- FORWARD DECLARATIONS --- */
static uint16_t  func_1(void);
static struct S1  func_11(uint64_t  p_12, struct S0  p_13, int32_t  p_14, int32_t  p_15);
static int8_t  func_18(int16_t  p_19, struct S0  p_20, const struct S0  p_21, uint8_t  p_22);
static struct S0  func_24(const int16_t  p_25);
static const struct S0  func_32(int16_t * p_33, int16_t * p_34, int16_t * p_35, uint32_t  p_36);
static int16_t * func_39(int16_t * p_40, struct S2  p_41, const int16_t  p_42);
static struct S2  func_43(uint64_t  p_44, int8_t  p_45, int64_t  p_46, const int16_t * p_47, int32_t  p_48);
static uint64_t  func_49(int16_t * p_50, int16_t * p_51, uint8_t  p_52);
static int16_t * func_53(uint8_t  p_54);
static const int32_t * func_63(uint16_t  p_64, uint32_t  p_65);


/* --- FUNCTIONS --- */
/* ------------------------------------------ */
/* 
 * reads : g_2 g_37 g_38 g_68 g_62 g_78 g_61 g_114 g_121 g_159 g_187 g_203 g_215 g_161 g_244 g_202 g_241 g_242 g_208 g_323 g_378 g_291.f0 g_386 g_385 g_184 g_413 g_379 g_240 g_569 g_408.f1 g_565 g_706 g_707 g_568 g_467 g_721 g_732 g_408.f0 g_708 g_476 g_589 g_291
 * writes: g_2 g_27 g_61 g_68 g_78 g_62 g_114 g_38 g_121.f1 g_121.f0 g_159 g_161 g_187 g_203 g_215 g_244 g_184 g_242 g_291 g_323 g_378 g_385 g_413 g_240 g_552 g_589 g_467 g_241 g_721 g_732 g_476 g_706
 */
static uint16_t  func_1(void)
{ /* block id: 0 */
    int32_t l_23 = 0x5ECCE35AL;
    int16_t *l_55 = &g_38;
    const int32_t l_409 = (-1L);
    int8_t l_740[6];
    struct S0 l_770[6][4] = {{{194,0x1EL,26558,5,45,3,258,0},{560,246UL,5062,13,1,2,403,1},{194,0x1EL,26558,5,45,3,258,0},{194,0x1EL,26558,5,45,3,258,0}},{{560,246UL,5062,13,1,2,403,1},{560,246UL,5062,13,1,2,403,1},{426,7UL,3307,9,-84,3,210,1},{560,246UL,5062,13,1,2,403,1}},{{560,246UL,5062,13,1,2,403,1},{194,0x1EL,26558,5,45,3,258,0},{194,0x1EL,26558,5,45,3,258,0},{560,246UL,5062,13,1,2,403,1}},{{194,0x1EL,26558,5,45,3,258,0},{560,246UL,5062,13,1,2,403,1},{194,0x1EL,26558,5,45,3,258,0},{194,0x1EL,26558,5,45,3,258,0}},{{560,246UL,5062,13,1,2,403,1},{560,246UL,5062,13,1,2,403,1},{426,7UL,3307,9,-84,3,210,1},{560,246UL,5062,13,1,2,403,1}},{{560,246UL,5062,13,1,2,403,1},{194,0x1EL,26558,5,45,3,258,0},{194,0x1EL,26558,5,45,3,258,0},{560,246UL,5062,13,1,2,403,1}}};
    int i, j;
    for (i = 0; i < 6; i++)
        l_740[i] = 0L;
    for (g_2 = 0; (g_2 >= (-27)); g_2--)
    { /* block id: 3 */
        int16_t *l_26 = &g_27;
        int32_t l_738[1][3];
        int32_t *l_792[9][5];
        int i, j;
        for (i = 0; i < 1; i++)
        {
            for (j = 0; j < 3; j++)
                l_738[i][j] = 0x140016D3L;
        }
        for (i = 0; i < 9; i++)
        {
            for (j = 0; j < 5; j++)
                l_792[i][j] = &g_291[0][1].f0;
        }
        l_23 = (safe_mod_func_int32_t_s_s((safe_rshift_func_int16_t_s_s((safe_div_func_int16_t_s_s((0xFDEB7727L != (func_11((safe_mul_func_int8_t_s_s(func_18(l_23, func_24(((*l_26) = 1L)), func_32(g_37[1][3], l_26, func_39(&g_38, func_43(func_49(func_53((NULL != l_55)), &g_38, g_38), g_386[0], l_23, &g_241[2], l_23), l_409), l_738[0][1]), l_740[4]), g_386[2])), l_770[4][1], l_770[4][1].f2, l_738[0][1]) , (*g_385))), l_738[0][1])), l_738[0][0])), l_770[4][1].f0));
    }
    return l_740[0];
}


/* ------------------------------------------ */
/* 
 * reads : g_589 g_291 g_467 g_208
 * writes: g_291 g_467
 */
static struct S1  func_11(uint64_t  p_12, struct S0  p_13, int32_t  p_14, int32_t  p_15)
{ /* block id: 356 */
    int32_t *l_774 = NULL;
    int32_t *l_775 = &g_386[3];
    int32_t l_776 = (-4L);
    int32_t *l_777 = &g_476;
    int32_t *l_778 = &g_386[3];
    int32_t *l_779 = &g_291[0][1].f0;
    int32_t *l_780 = &g_467;
    int32_t *l_781 = &g_121.f0;
    int32_t *l_782 = NULL;
    int32_t *l_783 = NULL;
    int32_t *l_784 = &g_121.f0;
    int32_t *l_785 = &l_776;
    int32_t *l_786 = &g_386[3];
    int32_t *l_787 = &g_476;
    int32_t *l_788[5];
    uint32_t l_789 = 4294967295UL;
    int i;
    for (i = 0; i < 5; i++)
        l_788[i] = &g_467;
    (*g_589) = (*g_589);
    for (g_467 = (-24); (g_467 >= (-17)); g_467 = safe_add_func_int16_t_s_s(g_467, 2))
    { /* block id: 360 */
        struct S2 l_773 = {7L,0L};
        (*g_589) = l_773;
    }
    l_789--;
    return g_208;
}


/* ------------------------------------------ */
/* 
 * reads : g_408.f0 g_708 g_114 g_467 g_476 g_408.f1 g_61 g_386
 * writes: g_476 g_240 g_706 g_62 g_61
 */
static int8_t  func_18(int16_t  p_19, struct S0  p_20, const struct S0  p_21, uint8_t  p_22)
{ /* block id: 344 */
    int16_t l_743[9] = {(-1L),(-1L),(-1L),(-1L),(-1L),(-1L),(-1L),(-1L),(-1L)};
    int32_t l_752 = (-4L);
    int32_t *l_753 = &g_476;
    struct S2 **l_758 = &g_589;
    int8_t *l_759 = NULL;
    int8_t *l_760 = &g_240;
    int8_t *l_761 = NULL;
    int8_t *l_762 = &g_706;
    int32_t l_763[5][9] = {{0x84E88DC3L,0x30E877D1L,0x84E88DC3L,0x128A5967L,0x128A5967L,0x84E88DC3L,0x30E877D1L,0x84E88DC3L,0x128A5967L},{0x84E88DC3L,0x128A5967L,0x128A5967L,0x84E88DC3L,0x30E877D1L,0x84E88DC3L,0x128A5967L,0x128A5967L,0x84E88DC3L},{0x8A917A69L,0x128A5967L,0L,0x128A5967L,0x8A917A69L,0x8A917A69L,0x128A5967L,0L,0x128A5967L},{0x128A5967L,0x30E877D1L,0L,0L,0x30E877D1L,0x128A5967L,0x30E877D1L,0L,0L},{0x8A917A69L,0x8A917A69L,0x128A5967L,0L,0x128A5967L,0x8A917A69L,0x8A917A69L,0x128A5967L,0L}};
    int32_t *l_764 = &g_62;
    uint32_t *l_765[3];
    uint16_t l_766 = 0xF503L;
    int32_t **l_769 = &g_61;
    int i, j;
    for (i = 0; i < 3; i++)
        l_765[i] = &g_187;
    (*l_764) = (l_763[4][6] = (((safe_add_func_uint16_t_u_u(l_743[0], (!((l_743[6] > ((safe_div_func_uint64_t_u_u((safe_add_func_uint32_t_u_u(l_743[8], (((*l_762) = ((*l_760) = ((safe_lshift_func_int16_t_s_u(((p_21.f3 < (safe_mod_func_int64_t_s_s(((((*l_753) = (l_752 = p_20.f1)) <= (safe_div_func_int8_t_s_s((safe_mod_func_int16_t_s_s(0xB8ECL, (p_20.f2 | ((((g_408.f0 , ((((p_21.f2 , p_21.f0) != (*g_708)) != 0x4E7498EBL) , l_758)) == NULL) , 0L) , 0xBFE5L)))), 0x90L))) != 0xE0L), g_467))) , (*l_753)), 14)) && 65535UL))) & g_408.f1))), 1L)) < l_743[0])) ^ p_20.f2)))) ^ 0L) >= l_743[0]));
    (*l_769) = &g_386[2];
    return (**l_769);
}


/* ------------------------------------------ */
/* 
 * reads :
 * writes:
 */
static struct S0  func_24(const int16_t  p_25)
{ /* block id: 5 */
    uint8_t l_28 = 1UL;
    struct S0 l_31 = {1310,250UL,6302,7,41,3,97,1};
    --l_28;
    return l_31;
}


/* ------------------------------------------ */
/* 
 * reads :
 * writes:
 */
static const struct S0  func_32(int16_t * p_33, int16_t * p_34, int16_t * p_35, uint32_t  p_36)
{ /* block id: 342 */
    const struct S0 l_739[6][2] = {{{320,0x7AL,32637,2,-27,2,378,0},{320,0x7AL,32637,2,-27,2,378,0}},{{320,0x7AL,32637,2,-27,2,378,0},{320,0x7AL,32637,2,-27,2,378,0}},{{320,0x7AL,32637,2,-27,2,378,0},{320,0x7AL,32637,2,-27,2,378,0}},{{320,0x7AL,32637,2,-27,2,378,0},{320,0x7AL,32637,2,-27,2,378,0}},{{320,0x7AL,32637,2,-27,2,378,0},{320,0x7AL,32637,2,-27,2,378,0}},{{320,0x7AL,32637,2,-27,2,378,0},{320,0x7AL,32637,2,-27,2,378,0}}};
    int i, j;
    return l_739[2][1];
}


/* ------------------------------------------ */
/* 
 * reads : g_385 g_62 g_2 g_68 g_184 g_413 g_244 g_208.f0 g_121.f0 g_61 g_114 g_379 g_240 g_291.f0 g_569 g_242 g_121.f1 g_408.f1 g_38 g_241 g_565 g_706 g_707 g_568 g_467 g_721 g_732
 * writes: g_68 g_61 g_184 g_413 g_78 g_121.f0 g_242 g_240 g_215 g_38 g_244 g_552 g_589 g_467 g_241 g_721 g_732
 */
static int16_t * func_39(int16_t * p_40, struct S2  p_41, const int16_t  p_42)
{ /* block id: 206 */
    struct S0 *l_412 = &g_408;
    struct S0 ** const l_411 = &l_412;
    int32_t l_433 = 0x4FB4C694L;
    struct S2 l_438 = {-10L,1L};
    int32_t l_485 = 0x47EB926BL;
    int32_t l_489 = (-5L);
    int32_t l_491 = (-5L);
    int32_t l_497[1][2][7] = {{{1L,0x49C8437AL,0x027D64C9L,0x027D64C9L,0x49C8437AL,1L,0x49C8437AL},{0L,1L,1L,0L,0x49C8437AL,0L,1L}}};
    int16_t l_566 = (-6L);
    int64_t **l_571 = &g_379;
    uint8_t *l_616 = &g_78;
    const struct S1 l_690 = {8L,21,198};
    struct S2 *l_701[10][4];
    uint64_t *l_704 = &g_159;
    uint64_t **l_703 = &l_704;
    uint32_t l_715 = 0x9F38D7D3L;
    int32_t l_718 = 0x12E69001L;
    int8_t l_719 = 0xD2L;
    int32_t *l_724 = &g_121.f0;
    int32_t *l_725 = &g_476;
    int32_t *l_726[4][7] = {{&g_291[0][1].f0,&l_497[0][0][3],&l_497[0][0][3],&g_291[0][1].f0,&l_497[0][0][3],&l_497[0][0][3],&g_291[0][1].f0},{&g_476,&l_497[0][0][3],&g_476,&g_386[0],&l_491,&g_386[0],&g_476},{&g_291[0][1].f0,&g_291[0][1].f0,&l_485,&g_291[0][1].f0,&g_291[0][1].f0,&l_485,&g_291[0][1].f0},{&l_491,&g_386[0],&g_476,&l_497[0][0][3],&g_476,&g_386[0],&l_491}};
    int8_t l_727 = 0x0FL;
    int32_t l_728 = 0x918BB4DCL;
    int8_t l_729 = (-1L);
    int64_t l_730 = 0x057B8866389C3D9ALL;
    int32_t l_731 = 0x218CCC61L;
    uint32_t l_735[3][8] = {{4UL,0xC3126DF4L,4294967288UL,0x0F3DCF02L,4294967295UL,0x220CCB51L,4294967295UL,0x0F3DCF02L},{0x3C85B5A0L,0x3828014FL,0x3C85B5A0L,0xAB1F2D4FL,0x0F3DCF02L,0x220CCB51L,4294967288UL,4294967288UL},{4294967288UL,0xC3126DF4L,4UL,4UL,0xC3126DF4L,4294967288UL,0x0F3DCF02L,4294967295UL}};
    int i, j, k;
    for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 4; j++)
            l_701[i][j] = &g_121;
    }
    if ((*g_385))
    { /* block id: 207 */
        const int64_t l_425 = 0L;
        int64_t l_445[1][7][8] = {{{6L,0x5503377F6E0C2E72LL,0xDB1D715F2161BBA0LL,8L,0xC2EEBBADC442C092LL,8L,0xDB1D715F2161BBA0LL,0x5503377F6E0C2E72LL},{0L,0xDB1D715F2161BBA0LL,(-1L),8L,0x9650F0EF7A1B8096LL,0xE43D72817AE39055LL,0xE43D72817AE39055LL,0x9650F0EF7A1B8096LL},{(-9L),0x9650F0EF7A1B8096LL,0x9650F0EF7A1B8096LL,(-9L),0L,0x5503377F6E0C2E72LL,0xE43D72817AE39055LL,6L},{0xDB1D715F2161BBA0LL,(-9L),(-1L),0xE43D72817AE39055LL,(-1L),(-9L),0xDB1D715F2161BBA0LL,0xC2EEBBADC442C092LL},{(-1L),(-9L),0xDB1D715F2161BBA0LL,0xC2EEBBADC442C092LL,0x5503377F6E0C2E72LL,0x5503377F6E0C2E72LL,0xC2EEBBADC442C092LL,0xDB1D715F2161BBA0LL},{0x9650F0EF7A1B8096LL,0x9650F0EF7A1B8096LL,(-9L),0L,0x5503377F6E0C2E72LL,0xE43D72817AE39055LL,6L,0xE43D72817AE39055LL},{(-1L),0xDB1D715F2161BBA0LL,0L,0xDB1D715F2161BBA0LL,(-1L),8L,0x9650F0EF7A1B8096LL,0xE43D72817AE39055LL}}};
        int32_t l_456 = 0xF544D161L;
        int32_t l_457 = (-3L);
        int32_t l_472 = 0x70112BE4L;
        int32_t l_473 = (-3L);
        int32_t l_474 = (-8L);
        int32_t l_482 = 3L;
        int32_t l_487 = 0xF8FC29F0L;
        int32_t l_488 = 1L;
        int32_t l_495 = 0x89F792B4L;
        int32_t l_499 = 7L;
        int32_t l_501 = 8L;
        int32_t l_503[8][4] = {{4L,(-1L),(-1L),4L},{0x45F54343L,0xC77ACF08L,0x5D3F1EBDL,(-1L)},{0xC77ACF08L,0x923204FEL,1L,(-1L)},{(-1L),0x45F54343L,(-1L),(-1L)},{9L,0x923204FEL,9L,(-1L)},{4L,0xC77ACF08L,9L,4L},{(-1L),(-1L),0x5D3F1EBDL,0xC77ACF08L},{(-1L),0x923204FEL,0x5D3F1EBDL,0x5D3F1EBDL}};
        int8_t l_508 = (-1L);
        const int64_t *l_537 = &l_438.f1;
        const int64_t **l_536 = &l_537;
        uint8_t *l_540[1][10] = {{&g_184,&g_184,NULL,&g_184,NULL,&g_184,&g_184,NULL,&g_184,NULL}};
        struct S1 l_567[5] = {{0x8D6E23A6L,16,120},{0x8D6E23A6L,16,120},{0x8D6E23A6L,16,120},{0x8D6E23A6L,16,120},{0x8D6E23A6L,16,120}};
        int64_t l_572[6][1][3];
        struct S0 *l_603 = &g_408;
        struct S0 *l_618 = &g_605;
        int16_t l_624 = 0xB59DL;
        int8_t *l_683 = &g_240;
        struct S2 **l_700[2][3][2] = {{{&g_589,&g_589},{&g_589,&g_589},{&g_589,&g_589}},{{&g_589,&g_589},{&g_589,&g_589},{&g_589,&g_589}}};
        int16_t *l_702[4][1];
        int8_t *l_705 = &l_508;
        int i, j, k;
        for (i = 0; i < 6; i++)
        {
            for (j = 0; j < 1; j++)
            {
                for (k = 0; k < 3; k++)
                    l_572[i][j][k] = 0xD283F39FEC0527E5LL;
            }
        }
        for (i = 0; i < 4; i++)
        {
            for (j = 0; j < 1; j++)
                l_702[i][j] = &g_241[3];
        }
        for (g_68 = 0; (g_68 <= 3); g_68 += 1)
        { /* block id: 210 */
            int32_t **l_410 = &g_61;
            struct S0 **l_421[3][5] = {{&l_412,&l_412,&l_412,&l_412,&l_412},{&l_412,&l_412,&l_412,&l_412,&l_412},{&l_412,&l_412,&l_412,&l_412,&l_412}};
            struct S1 l_442 = {0x8A5D5689L,10,57};
            uint64_t l_448 = 0x6347FF966CC3914CLL;
            int32_t l_471 = 1L;
            int32_t l_478 = 8L;
            int32_t l_480 = 0xFA8E425CL;
            int32_t l_483 = 0x315C4785L;
            int32_t l_484 = 0x680B5AEDL;
            int32_t l_490 = 0xE692470BL;
            int32_t l_496 = 0L;
            int32_t l_498 = (-1L);
            int32_t l_500 = 0x95A5B8D0L;
            int32_t l_502 = 0L;
            int32_t l_504 = 0L;
            int32_t l_505 = 0x05779FDBL;
            int32_t l_506 = 0x918B72A4L;
            int32_t l_507 = 0x2EA2263BL;
            int32_t l_510 = 0xE311EADEL;
            int32_t l_511 = 0x75ECBCB0L;
            int32_t l_512 = 0x1C2CC190L;
            int32_t l_513 = 0L;
            int32_t l_514 = 6L;
            int32_t l_515 = 0x0937537CL;
            int32_t l_517 = 0x3441E561L;
            int32_t l_518 = 0xC823A3FCL;
            int32_t l_519 = 0x90011C2FL;
            int32_t l_520 = 0x341C22D6L;
            int32_t l_521 = 0x5CAAD854L;
            int32_t l_522 = (-10L);
            int32_t l_523 = 0x049BF5F2L;
            int32_t l_524 = (-8L);
            uint16_t l_525 = 65535UL;
            int64_t ***l_590 = &g_378[0];
            int64_t l_629 = 0x46CA53608441CAF0LL;
            int16_t l_677 = 0L;
            uint8_t **l_681 = &l_540[0][2];
            int i, j;
            (*l_410) = &g_2;
            for (g_184 = 0; (g_184 <= 2); g_184 += 1)
            { /* block id: 214 */
                struct S0 * const **l_415 = NULL;
                struct S0 * const **l_416[6];
                uint8_t *l_424 = &g_78;
                int32_t *l_426[2];
                uint64_t *l_462 = &g_159;
                uint64_t *l_463 = &g_159;
                int16_t l_493 = 0x6E98L;
                int8_t l_494 = 0xF3L;
                int64_t l_509 = 0xC174661CDA2966DCLL;
                int32_t l_516 = 0x5FDB9509L;
                int64_t * const l_564 = &g_565;
                int64_t * const *l_563 = &l_564;
                int64_t * const **l_562[10] = {&l_563,&l_563,&l_563,&l_563,&l_563,&l_563,&l_563,&l_563,&l_563,&l_563};
                int8_t *l_601 = &g_240;
                struct S0 *l_604[2];
                int32_t * const l_620 = &l_487;
                int64_t l_634 = 1L;
                struct S2 l_641 = {2L,0L};
                int i;
                for (i = 0; i < 6; i++)
                    l_416[i] = &g_413[0][2];
                for (i = 0; i < 2; i++)
                    l_426[i] = NULL;
                for (i = 0; i < 2; i++)
                    l_604[i] = &g_605;
                g_121.f0 &= ((l_411 != (g_413[1][3] = g_413[0][2])) , (safe_add_func_int8_t_s_s((((safe_div_func_uint8_t_u_u((&l_412 == l_421[1][3]), ((NULL == (*l_411)) && g_244[g_184]))) < (((*l_424) = (((0x12C856C1CC60DBF6LL < (safe_mul_func_uint8_t_u_u((g_244[g_184] | g_208.f0), 0UL))) < 0x8AL) , 255UL)) == l_425)) >= 6UL), 3UL)));
                for (g_242 = 0; (g_242 <= 3); g_242 += 1)
                { /* block id: 220 */
                    int8_t *l_439 = &g_240;
                    uint16_t *l_440 = &g_244[g_184];
                    int32_t l_441 = (-1L);
                    struct S1 *l_452 = &g_208;
                    struct S1 **l_451 = &l_452;
                    int32_t l_475 = 8L;
                    int32_t l_477 = 0x536BCEFBL;
                    int32_t l_486[10] = {0x481F5BC6L,0x481F5BC6L,0x481F5BC6L,0x481F5BC6L,0x481F5BC6L,0x481F5BC6L,0x481F5BC6L,0x481F5BC6L,0x481F5BC6L,0x481F5BC6L};
                    int16_t l_492 = 0x66BEL;
                    uint8_t **l_541 = &l_540[0][0];
                    uint8_t ***l_554 = &l_541;
                    int32_t *l_570 = &l_516;
                    uint32_t * const l_588 = &g_114;
                    uint32_t * const *l_587[4][9][1] = {{{NULL},{NULL},{&l_588},{&l_588},{NULL},{&l_588},{&l_588},{NULL},{NULL}},{{NULL},{NULL},{NULL},{&l_588},{&l_588},{NULL},{&l_588},{&l_588},{NULL}},{{NULL},{NULL},{NULL},{NULL},{&l_588},{&l_588},{NULL},{&l_588},{&l_588}},{{NULL},{NULL},{NULL},{NULL},{NULL},{&l_588},{&l_588},{NULL},{&l_588}}};
                    int i, j, k;
                }
                if ((p_42 && (((safe_mod_func_int8_t_s_s(0L, (safe_add_func_int8_t_s_s((**l_410), ((g_114 >= (NULL == (*l_571))) > ((((safe_div_func_int64_t_s_s((((safe_lshift_func_int8_t_s_s((((*l_601) ^= (safe_sub_func_int16_t_s_s((-9L), ((0L <= (p_42 < 4UL)) > p_42)))) == p_41.f0), g_291[0][1].f0)) && (*g_569)) <= 0xD53C66FD4F73076ELL), p_42)) ^ p_41.f0) != 0UL) > 0xF8645B00L)))))) && (*g_379)) , l_489)))
                { /* block id: 267 */
                    int32_t l_617 = (-7L);
                    l_495 &= ((safe_unary_minus_func_uint8_t_u((((*l_411) = l_603) != ((((l_604[1] = &g_408) != (((safe_mul_func_int16_t_s_s(((l_617 = ((*l_616) = (safe_mod_func_uint64_t_u_u(((safe_mod_func_uint64_t_u_u((g_121.f1 > (((safe_rshift_func_uint8_t_u_u((p_41.f1 , p_41.f1), ((safe_div_func_int8_t_s_s((!(l_616 == l_540[0][0])), (-1L))) && 4294967291UL))) < p_42) , 0UL)), (*g_379))) != 0xE395B63D813E0CE4LL), l_567[1].f0)))) | (-7L)), (**l_410))) , (**l_410)) , l_603)) & 0xE7L) , l_618)))) == p_41.f0);
                }
                else
                { /* block id: 273 */
                    int8_t l_619 = 1L;
                    int32_t l_622 = 0x58D90218L;
                    int32_t l_627[3][2][3] = {{{0x6C7084D8L,1L,1L},{(-2L),0x656137AFL,(-2L)}},{{0x6C7084D8L,0x6C7084D8L,1L},{0xC42365C0L,0x656137AFL,0xC42365C0L}},{{0x6C7084D8L,1L,1L},{(-2L),0x656137AFL,(-2L)}}};
                    int16_t l_630 = 0x0383L;
                    uint64_t l_631 = 2UL;
                    int i, j, k;
                    if ((*g_61))
                    { /* block id: 274 */
                        return p_40;
                    }
                    else
                    { /* block id: 276 */
                        if (l_619)
                            break;
                    }
                    for (g_215 = 0; (g_215 <= 3); g_215 += 1)
                    { /* block id: 281 */
                        int32_t **l_621 = &g_61;
                        int32_t l_623 = 1L;
                        int32_t l_625 = 0x55945757L;
                        int32_t l_626 = (-10L);
                        int32_t l_628[7][6] = {{(-1L),(-1L),(-1L),(-1L),(-1L),(-1L)},{(-1L),(-1L),(-1L),(-1L),(-1L),(-1L)},{(-1L),(-1L),(-1L),(-1L),(-1L),(-1L)},{(-1L),(-1L),(-1L),(-1L),(-1L),(-1L)},{(-1L),(-1L),(-1L),(-1L),(-1L),(-1L)},{(-1L),(-1L),(-1L),(-1L),(-1L),(-1L)},{(-1L),(-1L),(-1L),(-1L),(-1L),(-1L)}};
                        int i, j;
                        (*l_621) = l_620;
                        l_631--;
                    }
                    p_41.f0 &= (l_634 , (*g_385));
                }
                (*l_620) = (((g_408.f1 , (safe_div_func_int8_t_s_s((&g_385 == &g_61), (l_501 = 5L)))) >= (safe_mul_func_uint16_t_u_u((((**l_410) , (-9L)) || ((((((safe_mod_func_uint16_t_u_u(((l_641 , (**l_410)) != p_41.f0), p_42)) ^ (*p_40)) & 0x0CL) || 1UL) , (-3L)) >= 1L)), (*p_40)))) ^ 248UL);
            }
            for (l_472 = 3; (l_472 >= 0); l_472 -= 1)
            { /* block id: 292 */
                int i;
                if (g_241[g_68])
                    break;
                for (l_624 = 0; (l_624 >= 0); l_624 -= 1)
                { /* block id: 296 */
                    int16_t *l_657[8][5][6] = {{{&g_38,&g_38,&g_38,NULL,&g_38,NULL},{&g_241[0],NULL,&g_241[3],NULL,&l_624,&g_241[g_68]},{&g_38,&g_38,&g_241[0],NULL,NULL,&g_241[3]},{NULL,&g_241[0],&g_241[3],NULL,NULL,NULL},{NULL,NULL,&l_624,&g_241[g_68],&g_241[0],&g_241[2]}},{{&g_241[2],NULL,&g_241[g_68],NULL,&g_38,NULL},{&g_38,&g_241[g_68],&g_241[3],NULL,&g_38,NULL},{&g_38,NULL,&g_38,&l_566,&g_241[3],&g_38},{NULL,NULL,&g_241[3],&g_241[3],NULL,NULL},{&g_38,&l_624,&g_241[3],&g_38,NULL,&g_241[3]}},{{NULL,NULL,&g_241[3],NULL,&g_241[3],&l_624},{&g_241[g_68],&l_624,NULL,NULL,&l_566,&l_624},{&l_624,NULL,&l_566,NULL,NULL,&g_38},{NULL,&l_566,&g_241[3],&g_241[0],NULL,&l_624},{&g_241[1],&g_241[3],NULL,&g_38,NULL,NULL}},{{NULL,&g_241[0],NULL,&g_38,&l_624,NULL},{NULL,&g_38,&l_566,&l_566,&g_241[0],NULL},{&g_241[2],&g_38,&g_241[3],&l_624,&g_38,&g_241[2]},{&g_241[0],&l_624,&g_241[2],&g_241[3],&g_241[2],&l_624},{NULL,&g_241[3],NULL,&g_241[2],&g_38,&g_241[3]}},{{&g_38,NULL,&g_241[2],&g_241[g_68],&g_38,NULL},{NULL,NULL,NULL,&l_566,&g_38,NULL},{&l_624,&g_241[3],&g_241[g_68],NULL,&g_241[2],NULL},{NULL,&l_624,NULL,NULL,&g_38,&g_241[3]},{&l_624,&g_38,&g_38,&l_566,&g_241[0],&g_38}},{{NULL,&g_38,&g_38,NULL,&l_624,&l_566},{&g_241[2],&g_241[0],&g_241[3],NULL,NULL,NULL},{&g_241[3],&g_241[3],NULL,NULL,NULL,&g_241[g_68]},{NULL,&l_566,&g_241[g_68],NULL,NULL,&g_241[g_68]},{NULL,NULL,&l_624,&g_38,&l_566,NULL}},{{&g_241[g_68],&l_624,NULL,&g_241[0],&g_241[0],&l_624},{&g_241[0],&g_241[g_68],NULL,NULL,NULL,NULL},{&l_566,NULL,&l_624,NULL,&l_624,&g_241[g_68]},{NULL,&l_624,&g_241[g_68],&l_624,&g_241[g_68],&g_241[g_68]},{NULL,&g_241[3],NULL,NULL,&g_241[3],NULL}},{{&g_241[3],&g_241[3],&g_241[3],NULL,&g_241[g_68],&l_566},{&l_566,NULL,&g_38,NULL,&g_38,&g_38},{&g_241[0],&g_241[0],&g_38,&g_241[g_68],NULL,&g_241[3]},{&g_241[g_68],NULL,NULL,NULL,&g_241[2],NULL},{&g_241[g_68],&l_624,&g_241[g_68],&g_241[3],NULL,NULL}}};
                    uint16_t *l_674 = NULL;
                    uint16_t *l_675 = &g_244[0];
                    int i, j, k;
                    if (l_497[l_624][(l_624 + 1)][(l_472 + 2)])
                        break;
                    if ((1UL ^ ((0UL >= (safe_add_func_int32_t_s_s((safe_mod_func_int8_t_s_s((l_457 = ((safe_mod_func_uint16_t_u_u(0xE961L, (safe_sub_func_uint16_t_u_u((safe_mul_func_uint8_t_u_u((safe_lshift_func_uint16_t_u_u((l_497[l_624][(l_624 + 1)][(l_472 + 2)] != (((*p_40) = (0xA3B3L | (0x1353L ^ 4L))) && (g_408.f1 < ((*l_616) = p_41.f0)))), 6)), l_495)), g_241[g_68])))) , 0x84L)), p_41.f0)), 0x07DE3AA1L))) <= 0x6467FAD3L)))
                    { /* block id: 301 */
                        const uint16_t *l_655 = &g_244[2];
                        const uint16_t **l_654 = &l_655;
                        const uint16_t ***l_656 = &l_654;
                        (*l_656) = l_654;
                        return &g_241[3];
                    }
                    else
                    { /* block id: 304 */
                        int i, j, k;
                        l_497[l_624][l_624][(g_68 + 2)] = (&g_378[3] == &l_571);
                        if (l_438.f1)
                            continue;
                        (*l_410) = (*l_410);
                    }
                    if ((safe_rshift_func_uint16_t_u_u(((*l_675) = (((safe_div_func_uint8_t_u_u(252UL, l_474)) && (3UL ^ (((*p_40) & (safe_rshift_func_int8_t_s_s((+(l_497[l_624][(l_624 + 1)][(l_472 + 2)] || ((safe_rshift_func_uint8_t_u_s((safe_mul_func_int8_t_s_s((safe_add_func_int64_t_s_s((0UL == (safe_mul_func_uint8_t_u_u(((*g_569) , ((safe_sub_func_uint16_t_u_u((3L > l_497[0][0][2]), l_485)) & g_241[g_68])), p_41.f0))), l_438.f1)), p_41.f1)), p_41.f0)) , 255UL))), g_565))) < 0x23L))) || l_488)), l_474)))
                    { /* block id: 310 */
                        return p_40;
                    }
                    else
                    { /* block id: 312 */
                        int32_t *l_676 = &l_512;
                        (*l_676) |= 0xC60B90E3L;
                        if (l_677)
                            continue;
                    }
                    for (l_485 = 3; (l_485 >= 0); l_485 -= 1)
                    { /* block id: 318 */
                        uint8_t ***l_680 = &g_552[0][2];
                        int32_t *l_682[10] = {&l_499,&l_488,&l_499,&l_499,&l_488,&l_499,&l_499,&l_488,&l_499,&l_499};
                        int i;
                        l_490 = (safe_div_func_uint16_t_u_u((((*l_680) = &g_553) == l_681), (-5L)));
                    }
                }
            }
        }
        g_467 |= (((*l_683) = 0x75L) >= ((safe_mul_func_uint16_t_u_u(((safe_rshift_func_int16_t_s_u((safe_add_func_int32_t_s_s((l_690 , ((((((safe_add_func_int8_t_s_s(((*l_705) = (((safe_div_func_int32_t_s_s((safe_unary_minus_func_int64_t_s(((((safe_lshift_func_int16_t_s_s((l_499 |= ((*p_40) = (safe_sub_func_int32_t_s_s((*g_385), ((g_589 = (l_701[2][1] = &g_291[0][1])) != &g_291[1][3]))))), 5)) || l_438.f0) == ((-8L) < (((((p_41.f0 && p_42) & g_242) && 65533UL) >= p_41.f0) ^ 0x0575L))) || (*g_385)))), 0x74555EFDL)) , l_703) != NULL)), p_41.f1)) && g_706) >= 1UL) , (uint32_t**) NULL) == g_707) | p_41.f0)), p_41.f1)), (*g_569))) ^ (**g_568)), 0xD444L)) | 0x2E5CL));
        return &g_241[3];
    }
    else
    { /* block id: 333 */
        int32_t *l_709 = &g_386[0];
        int32_t *l_710 = &g_291[0][1].f0;
        int32_t *l_711 = &g_386[0];
        int32_t *l_712[10] = {&g_476,&g_476,&g_476,&g_476,&g_476,&g_476,&g_476,&g_476,&g_476,&g_476};
        int8_t l_713[2][10] = {{8L,8L,8L,8L,8L,8L,8L,8L,8L,8L},{8L,8L,8L,8L,8L,8L,8L,8L,8L,8L}};
        int8_t l_714 = (-4L);
        int8_t l_720 = 0x74L;
        int i, j;
        for (g_242 = 0; g_242 < 4; g_242 += 1)
        {
            g_241[g_242] = 0xA2BAL;
        }
        ++l_715;
        --g_721;
    }
    p_41.f0 |= p_42;
    ++g_732[4];
    --l_735[1][1];
    return p_40;
}


/* ------------------------------------------ */
/* 
 * reads : g_187 g_61 g_2 g_291.f0 g_121
 * writes: g_242 g_68 g_291 g_203
 */
static struct S2  func_43(uint64_t  p_44, int8_t  p_45, int64_t  p_46, const int16_t * p_47, int32_t  p_48)
{ /* block id: 199 */
    struct S1 *l_389[8] = {&g_208,&g_208,&g_208,&g_208,&g_208,&g_208,&g_208,&g_208};
    struct S2 *l_396 = &g_121;
    uint16_t *l_399 = &g_161;
    uint64_t *l_402 = &g_203;
    int32_t l_403[3][3] = {{0x065366F1L,0x065366F1L,0x065366F1L},{(-1L),(-1L),(-1L)},{0x065366F1L,0x065366F1L,0x065366F1L}};
    int64_t l_404 = 0x9AD62FCB4E69716BLL;
    int32_t *l_405 = &g_291[0][1].f0;
    struct S0 *l_407 = &g_408;
    struct S0 **l_406 = &l_407;
    int i, j;
    for (g_242 = 0; g_242 < 4; g_242 += 1)
    {
        for (g_68 = 0; g_68 < 6; g_68 += 1)
        {
            struct S2 tmp = {0xF74DE0BBL,0xE77EDE5556FB1F53LL};
            g_291[g_242][g_68] = tmp;
        }
    }
    (*l_405) ^= (safe_mul_func_uint16_t_u_u(p_45, (!((&g_208 == l_389[7]) > ((l_403[0][0] = ((safe_rshift_func_int8_t_s_u((safe_mul_func_uint16_t_u_u((safe_mul_func_int16_t_s_s((l_396 != NULL), (safe_div_func_uint64_t_u_u(((NULL == l_399) , ((*l_402) = (l_389[7] == ((safe_add_func_int8_t_s_s(0x0DL, g_187)) , l_389[7])))), l_403[2][1])))), l_404)), l_403[2][1])) , (*g_61))) , 9UL)))));
    (*l_406) = NULL;
    return g_121;
}


/* ------------------------------------------ */
/* 
 * reads : g_2 g_68 g_62 g_78 g_38 g_61 g_114 g_121 g_159 g_187 g_203 g_215 g_161 g_244 g_202 g_241 g_242 g_208 g_323 g_378 g_291.f0
 * writes: g_61 g_68 g_78 g_62 g_114 g_38 g_121.f1 g_121.f0 g_159 g_161 g_187 g_203 g_215 g_244 g_184 g_242 g_291 g_323 g_378 g_385
 */
static uint64_t  func_49(int16_t * p_50, int16_t * p_51, uint8_t  p_52)
{ /* block id: 10 */
    int32_t *l_57 = &g_2;
    int32_t **l_58 = NULL;
    int32_t *l_60 = &g_2;
    int32_t **l_59[1];
    uint16_t *l_66 = NULL;
    uint16_t *l_67 = &g_68;
    const int32_t *l_384 = &g_291[0][1].f0;
    const int32_t **l_383[7] = {&l_384,&l_384,&l_384,&l_384,&l_384,&l_384,&l_384};
    int i;
    for (i = 0; i < 1; i++)
        l_59[i] = &l_60;
    g_61 = (l_57 = l_57);
    g_385 = func_63(((*l_67) ^= g_2), g_62);
    g_291[0][1].f0 &= 0x21F51DF0L;
    return g_208.f2;
}


/* ------------------------------------------ */
/* 
 * reads :
 * writes:
 */
static int16_t * func_53(uint8_t  p_54)
{ /* block id: 8 */
    int16_t *l_56 = NULL;
    return l_56;
}


/* ------------------------------------------ */
/* 
 * reads : g_78 g_68 g_62 g_2 g_38 g_61 g_114 g_121 g_159 g_187 g_203 g_215 g_161 g_244 g_202 g_241 g_242 g_208 g_323 g_378
 * writes: g_78 g_62 g_114 g_38 g_121.f1 g_121.f0 g_159 g_68 g_161 g_187 g_203 g_215 g_244 g_184 g_242 g_291 g_323 g_378
 */
static const int32_t * func_63(uint16_t  p_64, uint32_t  p_65)
{ /* block id: 14 */
    int32_t *l_69 = NULL;
    int32_t **l_70 = &l_69;
    int32_t l_91 = 0xE8BE9C2CL;
    uint16_t **l_98 = NULL;
    uint8_t l_223 = 1UL;
    uint8_t *l_237 = &g_184;
    int32_t l_267 = 0x50EEFC11L;
    uint32_t l_268 = 0x089C4C44L;
    uint8_t l_305 = 255UL;
    int32_t l_356 = (-1L);
    int32_t l_358 = 0x1ABD8A15L;
    uint32_t l_375 = 0xAF36EF52L;
    int64_t ***l_380 = &g_378[3];
    int64_t **l_382 = &g_379;
    int64_t ***l_381 = &l_382;
lbl_190:
    (*l_70) = l_69;
    if ((safe_rshift_func_int16_t_s_u(p_64, 10)))
    { /* block id: 16 */
        uint16_t *l_85[1];
        int32_t l_89 = (-6L);
        struct S2 l_122[6] = {{0L,0x1CD949914032C2DELL},{0L,0x1CD949914032C2DELL},{0L,0x1CD949914032C2DELL},{0L,0x1CD949914032C2DELL},{0L,0x1CD949914032C2DELL},{0L,0x1CD949914032C2DELL}};
        struct S1 l_136 = {0L,20,34};
        uint8_t *l_163 = &g_78;
        struct S1 *l_207 = &g_208;
        struct S1 *l_247 = &g_208;
        int i;
        for (i = 0; i < 1; i++)
            l_85[i] = &g_68;
        if (p_64)
        { /* block id: 17 */
            uint8_t *l_77 = &g_78;
            uint16_t *l_83[2][1][1];
            uint16_t **l_84 = &l_83[1][0][0];
            int32_t l_88 = 1L;
            int32_t *l_90 = NULL;
            int i, j, k;
            for (i = 0; i < 2; i++)
            {
                for (j = 0; j < 1; j++)
                {
                    for (k = 0; k < 1; k++)
                        l_83[i][j][k] = NULL;
                }
            }
            l_91 &= ((+(65535UL == ((~((safe_div_func_int16_t_s_s((((safe_div_func_int8_t_s_s(p_64, (+((((((*l_77)--) <= (safe_rshift_func_uint8_t_u_s((((*l_84) = l_83[1][0][0]) == l_85[0]), 4))) < p_64) & (g_68 <= g_62)) , ((safe_rshift_func_int16_t_s_u((g_2 ^ g_38), p_64)) & l_88))))) == (*g_61)) | p_64), l_89)) , g_62)) ^ p_65))) , p_65);
            if (p_64)
            { /* block id: 21 */
                int32_t *l_92 = &g_62;
                int32_t *l_93 = &l_89;
                (*l_93) = ((*l_92) |= l_89);
            }
            else
            { /* block id: 24 */
                return &g_2;
            }
        }
        else
        { /* block id: 27 */
            uint32_t *l_113 = &g_114;
            int32_t l_115 = 1L;
            struct S2 l_126 = {0x3EC0817FL,-8L};
            uint8_t *l_151 = &g_78;
            int16_t *l_182[3];
            int32_t l_221 = 0xB19B034DL;
            int32_t l_222 = 1L;
            int32_t *l_236[6][4][8] = {{{&l_89,&l_126.f0,&l_221,&l_89,&g_62,NULL,&l_126.f0,&l_126.f0},{&l_122[5].f0,&g_62,NULL,NULL,&g_62,&l_122[5].f0,&l_115,&l_122[5].f0},{&l_89,&l_115,&l_91,&l_126.f0,&l_122[5].f0,&l_91,&g_62,&l_91},{&l_222,&l_126.f0,&l_126.f0,&l_126.f0,&l_222,&l_126.f0,&l_126.f0,&l_122[5].f0}},{{&l_89,&l_222,&l_122[5].f0,NULL,&l_126.f0,&l_89,&l_89,&l_126.f0},{&l_89,&l_122[5].f0,&l_122[5].f0,&l_89,&l_115,&l_91,&l_126.f0,&l_122[5].f0},{&l_126.f0,&g_62,&l_126.f0,&l_122[5].f0,&g_62,&l_221,&g_62,&l_122[5].f0},{&l_91,&g_62,&l_91,&l_122[5].f0,&l_126.f0,&l_91,&l_115,&l_89}},{{&l_222,&l_122[5].f0,NULL,&l_126.f0,&l_89,&l_89,&l_126.f0,NULL},{&l_222,&l_222,&l_221,&l_122[5].f0,&l_126.f0,&l_126.f0,&l_222,&l_126.f0},{&l_91,&l_126.f0,&l_122[5].f0,&l_91,&g_62,&l_91,&l_122[5].f0,&l_126.f0},{&l_126.f0,&l_115,NULL,&l_122[5].f0,&l_115,&l_122[5].f0,&g_62,NULL}},{{&l_89,&g_62,NULL,&l_126.f0,&l_126.f0,NULL,&g_62,&l_89},{&l_89,&l_126.f0,NULL,&l_122[5].f0,&l_222,&l_89,&l_122[5].f0,&l_122[5].f0},{&l_222,&l_89,&l_122[5].f0,&l_122[5].f0,&l_122[5].f0,&l_89,&l_222,&l_122[5].f0},{&l_89,&l_126.f0,&l_221,&l_89,&g_62,NULL,&l_126.f0,&l_126.f0}},{{&l_122[5].f0,&g_62,NULL,NULL,&g_62,&l_122[5].f0,&l_115,&l_122[5].f0},{&l_89,&l_115,&l_126.f0,&l_91,NULL,&l_126.f0,&l_89,&l_126.f0},{&l_122[5].f0,&l_91,&g_62,&l_91,&l_122[5].f0,&l_126.f0,&l_91,&l_115},{&l_221,&l_122[5].f0,NULL,&g_2,&l_91,&l_221,&l_221,&l_91}},{{NULL,NULL,NULL,NULL,&l_126.f0,&l_126.f0,&l_91,NULL},{&l_91,&l_89,&g_62,&l_115,&l_89,&l_89,&l_89,&l_115},{&l_126.f0,&l_89,&l_126.f0,NULL,&l_91,&l_126.f0,&l_126.f0,NULL},{&l_122[5].f0,NULL,&g_2,&l_91,&l_221,&l_221,&l_91,&g_2}}};
            struct S1 **l_248 = &l_207;
            int i, j, k;
            for (i = 0; i < 3; i++)
                l_182[i] = &g_38;
            if ((g_62 ^ (!((safe_sub_func_int64_t_s_s((~(l_115 = (g_62 , ((safe_lshift_func_int16_t_s_s((NULL == l_98), (safe_rshift_func_uint16_t_u_s(((((*l_113) ^= (safe_mul_func_int16_t_s_s((0x3A24L >= (-6L)), (safe_rshift_func_uint16_t_u_s((safe_lshift_func_int8_t_s_s(p_64, 1)), ((l_89 = (safe_mod_func_int16_t_s_s((safe_sub_func_int32_t_s_s(0L, (safe_lshift_func_uint16_t_u_s((0x2F0D9F09L & 1UL), 4)))), p_64))) ^ g_68)))))) != 0xC0EDEAE2L) == g_2), p_64)))) || g_2)))), p_65)) & p_65))))
            { /* block id: 31 */
                int32_t *l_116 = NULL;
                int16_t l_160 = 1L;
                int32_t l_166 = 4L;
                struct S2 l_179 = {0x56559E35L,7L};
                int32_t *l_185 = NULL;
                int32_t *l_186[6][6][5] = {{{&g_121.f0,&g_121.f0,NULL,&l_166,NULL},{&l_89,&g_62,NULL,&l_89,&l_179.f0},{NULL,&l_122[5].f0,&l_89,NULL,NULL},{NULL,&g_62,&l_89,&g_62,NULL},{&l_89,&g_121.f0,&l_122[5].f0,NULL,&g_121.f0},{NULL,&l_115,&g_121.f0,&g_62,NULL}},{{NULL,&l_166,NULL,&g_121.f0,&g_121.f0},{&l_89,&g_62,&l_89,&l_89,NULL},{&g_121.f0,&l_122[5].f0,NULL,&g_121.f0,NULL},{&l_126.f0,&l_122[5].f0,&l_89,&g_62,&l_179.f0},{&l_89,NULL,NULL,NULL,NULL},{&l_179.f0,&l_115,&l_89,&g_62,NULL}},{{&l_166,NULL,NULL,NULL,&l_166},{&l_89,&l_122[5].f0,&g_121.f0,&l_89,&l_126.f0},{&l_166,&l_122[5].f0,&l_122[5].f0,&l_166,NULL},{&l_179.f0,&g_62,&l_89,&l_122[5].f0,&l_126.f0},{&l_89,&l_166,&l_89,NULL,&l_166},{&l_126.f0,&l_115,NULL,&l_122[5].f0,NULL}},{{&g_121.f0,&g_121.f0,NULL,&l_166,NULL},{&l_89,&g_62,NULL,&l_89,&l_179.f0},{NULL,&l_122[5].f0,&l_89,NULL,NULL},{NULL,&g_62,&l_89,&g_62,NULL},{&l_89,&g_121.f0,&l_122[5].f0,NULL,&g_121.f0},{NULL,&l_115,&g_121.f0,&g_62,NULL}},{{NULL,&l_166,NULL,&g_121.f0,&g_121.f0},{&l_89,&g_62,&l_89,&l_89,NULL},{&g_121.f0,&l_122[5].f0,NULL,&g_121.f0,NULL},{&l_126.f0,NULL,&l_126.f0,&l_115,NULL},{&l_115,NULL,&l_126.f0,&l_126.f0,NULL},{NULL,NULL,&l_89,&l_89,NULL}},{{&l_122[5].f0,NULL,&g_121.f0,NULL,&l_122[5].f0},{&l_89,NULL,&l_89,NULL,&l_89},{&l_122[5].f0,NULL,NULL,&l_122[5].f0,&l_126.f0},{NULL,&l_115,&l_126.f0,NULL,&l_89},{&l_115,&l_122[5].f0,&l_115,&l_126.f0,&l_122[5].f0},{&l_89,NULL,NULL,NULL,NULL}}};
                int i, j, k;
                g_62 &= (g_68 , p_65);
                for (g_38 = (-4); (g_38 < 27); g_38++)
                { /* block id: 35 */
                    for (g_114 = (-27); (g_114 != 17); ++g_114)
                    { /* block id: 38 */
                        uint32_t l_123 = 4294967286UL;
                        struct S2 *l_127 = &l_122[1];
                        l_122[5] = g_121;
                        ++l_123;
                        (*l_127) = (g_114 , l_126);
                    }
                }
                for (g_121.f1 = 0; (g_121.f1 >= 14); g_121.f1 = safe_add_func_int64_t_s_s(g_121.f1, 3))
                { /* block id: 46 */
                    int8_t l_157 = 0L;
                    int8_t l_162 = 1L;
                    struct S1 l_170 = {0x613543D0L,20,166};
                    for (g_121.f0 = 0; (g_121.f0 <= 27); ++g_121.f0)
                    { /* block id: 49 */
                        uint8_t l_134[1];
                        int32_t *l_135 = &l_91;
                        int i;
                        for (i = 0; i < 1; i++)
                            l_134[i] = 0x73L;
                        (*l_135) = (g_62 = ((safe_rshift_func_int16_t_s_s(0x5A5DL, 8)) <= l_134[0]));
                    }
                    if ((l_136 , (*g_61)))
                    { /* block id: 53 */
                        (*l_70) = &g_2;
                    }
                    else
                    { /* block id: 55 */
                        uint32_t l_156 = 4294967286UL;
                        uint64_t *l_158 = &g_159;
                        int32_t *l_164 = NULL;
                        int32_t *l_165 = &l_91;
                        int8_t *l_169 = &l_162;
                        const int16_t *l_173[5][6][8] = {{{&l_160,&g_38,&l_160,&l_160,NULL,NULL,NULL,NULL},{&l_160,&l_160,&l_160,&l_160,&g_38,&l_160,&l_160,&l_160},{NULL,&g_38,&l_160,&l_160,&g_38,&g_38,&l_160,&g_38},{&g_38,&g_38,&g_38,&l_160,&g_38,&l_160,&g_38,&g_38},{&l_160,&l_160,NULL,&g_38,&g_38,NULL,&l_160,&l_160},{&l_160,&g_38,&g_38,NULL,&l_160,&l_160,&l_160,&g_38}},{{&g_38,&g_38,&l_160,&g_38,&g_38,&g_38,&l_160,&g_38},{&l_160,&g_38,&l_160,&g_38,&l_160,NULL,&g_38,&g_38},{&l_160,&l_160,&l_160,&g_38,&g_38,&g_38,&g_38,&l_160},{&l_160,&g_38,&l_160,&g_38,&l_160,&l_160,&g_38,&g_38},{&g_38,&l_160,NULL,&l_160,&g_38,&l_160,&g_38,&g_38},{&g_38,&l_160,NULL,NULL,&g_38,NULL,NULL,&l_160}},{{&g_38,&l_160,&g_38,&l_160,&g_38,&l_160,&l_160,NULL},{&g_38,&l_160,&g_38,&g_38,&g_38,&g_38,&l_160,&g_38},{&l_160,&g_38,&g_38,&l_160,NULL,&g_38,NULL,&g_38},{NULL,&g_38,NULL,&g_38,&l_160,&l_160,&g_38,&l_160},{NULL,&g_38,NULL,&g_38,&g_38,&g_38,&g_38,&g_38},{&g_38,&g_38,&l_160,&l_160,&l_160,&g_38,&g_38,NULL}},{{&l_160,&g_38,&l_160,&g_38,&g_38,&g_38,&l_160,&l_160},{&g_38,&l_160,&g_38,&g_38,NULL,&g_38,&l_160,&l_160},{NULL,&g_38,&g_38,&l_160,NULL,&l_160,&g_38,&l_160},{&g_38,&g_38,NULL,NULL,&l_160,&g_38,&l_160,&l_160},{&l_160,&g_38,&g_38,&g_38,&g_38,&l_160,&g_38,NULL},{&l_160,&l_160,&g_38,&l_160,&l_160,NULL,&g_38,&g_38}},{{NULL,&g_38,&g_38,&l_160,&l_160,&g_38,&g_38,NULL},{&l_160,&l_160,&g_38,&g_38,&g_38,&l_160,&g_38,&l_160},{&l_160,&g_38,&l_160,NULL,NULL,&g_38,&g_38,&l_160},{&l_160,&l_160,&g_38,&l_160,&g_38,&g_38,&g_38,&l_160},{&g_38,&g_38,&g_38,&g_38,&l_160,&l_160,&l_160,&l_160},{&l_160,&l_160,&l_160,&g_38,&l_160,&l_160,&g_38,&g_38}}};
                        uint8_t *l_183[3][2][3] = {{{&g_184,&g_184,&g_184},{&g_184,&g_184,&g_184}},{{&g_184,&g_184,&g_184},{&g_184,&g_184,&g_184}},{{&g_184,&g_184,&g_184},{&g_184,&g_184,&g_184}}};
                        int i, j, k;
                        l_166 |= (l_126 , ((*l_165) ^= (((safe_mod_func_uint8_t_u_u((+(&g_78 == ((safe_add_func_int32_t_s_s((safe_mul_func_uint8_t_u_u(((-1L) & (p_65 > (l_162 = (~(g_161 = (g_68 = (((safe_rshift_func_int8_t_s_s((+(safe_mod_func_uint16_t_u_u(l_126.f1, ((((*l_158) = ((((safe_rshift_func_uint16_t_u_u((((*l_113) = (l_151 != ((((func_24((((safe_mod_func_int16_t_s_s((l_156 = ((safe_rshift_func_uint8_t_u_s(p_64, (~0x5FL))) > 0L)), p_64)) || 0xCC89D979L) <= 0x3E2DD196261E54E0LL)) , l_126.f0) | 0x1E0ADED1L) | l_157) , (uint8_t*) NULL))) != 7UL), l_126.f0)) | l_126.f1) & (*g_61)) & p_64)) & 0x0FC352BBFD28FE82LL) | g_121.f0)))), p_64)) & 0xCEC0L) || l_160))))))), 0xACL)), l_136.f0)) , l_163))), l_157)) , &g_2) != &g_62)));
                        l_122[5].f0 |= ((*l_165) ^= (safe_add_func_int8_t_s_s(((*l_169) = g_159), (((~(l_170 , (0xDCF4L | (safe_div_func_uint8_t_u_u((((l_89 = ((*l_163) = (l_173[2][1][1] != ((safe_unary_minus_func_uint64_t_u(((safe_div_func_uint32_t_u_u((safe_div_func_uint32_t_u_u((l_179 , (p_64 & l_115)), (0xD642D507L | ((safe_mul_func_uint8_t_u_u((g_159 != 0xE52791890F00B84BLL), 255UL)) ^ p_65)))), l_89)) <= p_65))) , l_182[2])))) , p_65) , p_65), p_65))))) && 0xDB16BE7C8CA683B8LL) > g_68))));
                    }
                }
                g_187++;
            }
            else
            { /* block id: 72 */
                uint16_t l_191 = 1UL;
                if (g_187)
                    goto lbl_190;
                l_191 = 7L;
            }
            for (g_159 = 0; (g_159 <= 0); g_159 += 1)
            { /* block id: 78 */
                int32_t *l_192 = &l_91;
                uint32_t l_218 = 0xF747F287L;
                int32_t *l_219 = &l_126.f0;
                int32_t *l_220[8][10][3] = {{{NULL,&g_2,&l_89},{&l_91,&l_91,&l_115},{&g_2,&l_89,NULL},{NULL,&l_91,&l_115},{&l_126.f0,&g_121.f0,&l_89},{&l_122[5].f0,&l_126.f0,&l_91},{&l_115,NULL,&l_115},{&l_89,NULL,&l_89},{&l_89,&g_2,&l_122[5].f0},{&g_2,NULL,&l_126.f0}},{{NULL,&l_115,&g_2},{&l_91,&l_89,NULL},{NULL,NULL,NULL},{&g_2,&l_91,&g_121.f0},{&l_89,&g_121.f0,&l_91},{&l_89,NULL,NULL},{&l_115,NULL,&g_62},{&l_122[5].f0,NULL,&l_89},{&l_126.f0,&l_89,&l_89},{NULL,NULL,&l_91}},{{&g_2,&l_89,&g_2},{&l_91,NULL,&g_121.f0},{NULL,NULL,NULL},{NULL,NULL,&l_122[5].f0},{&g_121.f0,&g_121.f0,&l_115},{&g_62,&l_91,&l_126.f0},{&l_115,NULL,&l_91},{&g_121.f0,NULL,NULL},{&l_89,&g_2,&l_91},{&l_91,&l_91,NULL}},{{&l_122[5].f0,NULL,&g_2},{&g_121.f0,NULL,NULL},{&l_89,&g_121.f0,&l_89},{&l_126.f0,&g_62,&l_89},{&l_91,&l_115,NULL},{&l_122[5].f0,&g_121.f0,&l_122[5].f0},{&g_2,NULL,NULL},{&l_122[5].f0,NULL,NULL},{&l_91,&g_62,NULL},{&l_126.f0,&l_91,&l_89}},{{&l_89,NULL,NULL},{&g_121.f0,&g_121.f0,&l_91},{&l_122[5].f0,&g_121.f0,&l_89},{&l_91,NULL,&l_122[5].f0},{&l_89,&l_115,&g_62},{&g_121.f0,NULL,&g_62},{&g_2,&g_121.f0,&l_89},{&g_121.f0,&g_121.f0,NULL},{&l_115,NULL,NULL},{&l_91,&l_91,&g_121.f0}},{{&l_122[5].f0,&g_62,NULL},{&g_121.f0,NULL,NULL},{&g_62,NULL,&l_89},{&l_126.f0,&g_121.f0,NULL},{&g_2,&l_115,NULL},{&l_115,&g_62,&g_121.f0},{&g_2,&g_121.f0,NULL},{NULL,NULL,NULL},{&g_2,NULL,&l_89},{NULL,&l_91,&g_62}},{{&l_115,&g_2,&g_62},{&g_121.f0,NULL,&l_122[5].f0},{&l_115,&l_126.f0,&l_89},{NULL,&l_122[5].f0,&l_91},{&g_2,&l_115,NULL},{NULL,&l_89,&l_89},{&g_2,&l_89,NULL},{&l_115,&g_2,NULL},{&g_2,NULL,NULL},{&l_126.f0,&l_91,&l_122[5].f0}},{{&g_62,NULL,NULL},{&g_121.f0,&g_2,&l_89},{&l_122[5].f0,&l_89,&l_89},{&l_91,&l_89,NULL},{&l_115,&l_115,&g_2},{&g_121.f0,&l_122[5].f0,NULL},{&g_2,&l_126.f0,&l_91},{&g_121.f0,NULL,NULL},{&l_89,&g_2,&l_91},{&l_91,&l_91,NULL}}};
                int i, j, k;
                g_121.f0 ^= l_89;
                for (g_121.f1 = 0; (g_121.f1 <= 2); g_121.f1 += 1)
                { /* block id: 82 */
                    int16_t l_193 = 7L;
                    int32_t *l_194 = &g_62;
                    int32_t *l_195 = &l_115;
                    int32_t *l_196 = &l_115;
                    int32_t *l_197 = &l_89;
                    int32_t l_198 = 1L;
                    int32_t *l_199 = &l_89;
                    int32_t l_200 = 0xEA293CA1L;
                    int32_t *l_201[5][8] = {{&l_198,NULL,&l_89,&l_115,&l_115,&l_89,NULL,&l_198},{NULL,&l_126.f0,&l_198,&g_2,&l_198,&l_126.f0,NULL,NULL},{&l_126.f0,&g_2,&l_89,&l_89,&g_2,&l_126.f0,&l_115,&l_126.f0},{&g_2,&l_126.f0,&l_115,&l_126.f0,&g_2,&l_89,&l_115,&l_89},{NULL,&g_2,&g_2,NULL,&l_91,&l_89,&l_91,NULL}};
                    int i, j;
                    (*l_70) = l_192;
                    g_203--;
                    if (l_126.f1)
                        break;
                }
                for (l_126.f1 = 0; (l_126.f1 >= 0); l_126.f1 -= 1)
                { /* block id: 89 */
                    int64_t l_209 = (-1L);
                    for (l_126.f0 = 0; (l_126.f0 <= 0); l_126.f0 += 1)
                    { /* block id: 92 */
                        (*l_192) ^= 0xDC3F510EL;
                        (*l_70) = NULL;
                    }
                    for (g_161 = 0; (g_161 <= 5); g_161 += 1)
                    { /* block id: 98 */
                        int32_t *l_206 = &l_126.f0;
                        int i;
                        (*l_70) = l_206;
                        l_122[(l_126.f1 + 1)] = l_122[(l_126.f1 + 4)];
                        l_207 = NULL;
                        if (p_65)
                            continue;
                    }
                    for (g_121.f1 = 0; (g_121.f1 <= 2); g_121.f1 += 1)
                    { /* block id: 106 */
                        int32_t *l_210 = &l_122[5].f0;
                        int32_t *l_211 = &l_115;
                        int32_t *l_212 = &l_115;
                        int32_t *l_213 = NULL;
                        int32_t *l_214[2];
                        int i;
                        for (i = 0; i < 2; i++)
                            l_214[i] = &l_89;
                        g_215++;
                        if (l_218)
                            break;
                        (*l_211) = p_65;
                    }
                }
                --l_223;
            }
            if (((safe_div_func_int16_t_s_s((((+p_65) > ((-6L) || (safe_div_func_uint64_t_u_u(p_64, (safe_rshift_func_int8_t_s_s(((l_122[5].f0 = ((safe_mul_func_int16_t_s_s((safe_rshift_func_uint8_t_u_u(((l_91 = l_122[5].f0) , (&g_184 != (l_237 = l_163))), ((l_89 = ((safe_unary_minus_func_int8_t_s(g_38)) && (&g_208 != NULL))) < 0xE523L))), 0x8B00L)) >= p_64)) || p_64), p_65)))))) <= 0L), 9UL)) >= g_161))
            { /* block id: 118 */
                l_91 = (p_64 & (-1L));
            }
            else
            { /* block id: 120 */
                int8_t l_243 = (-1L);
                --g_244[2];
            }
            (*l_248) = l_247;
        }
    }
    else
    { /* block id: 125 */
        int16_t l_254 = 0xC2D8L;
        int32_t l_258 = 3L;
        struct S1 *l_298[4][3] = {{&g_208,&g_208,&g_208},{&g_208,&g_208,&g_208},{&g_208,&g_208,&g_208},{&g_208,&g_208,&g_208}};
        uint16_t l_306 = 0UL;
        uint32_t *l_307 = NULL;
        int32_t l_308 = (-7L);
        uint16_t l_359 = 0x98FFL;
        int i, j;
        for (g_121.f0 = 0; (g_121.f0 <= 3); g_121.f0 += 1)
        { /* block id: 128 */
            uint32_t *l_253 = &g_114;
            int32_t *l_255 = &l_91;
            int32_t *l_256 = NULL;
            int32_t *l_257 = &l_91;
            int32_t *l_259 = &l_258;
            int32_t *l_260 = &l_91;
            int32_t *l_261 = &g_62;
            int32_t *l_262 = &g_62;
            int32_t l_263[4][10][6] = {{{3L,2L,0x44646C51L,2L,3L,0x240811FDL},{2L,3L,0x240811FDL,0x240811FDL,3L,2L},{(-1L),2L,0x1456EAE4L,3L,0x1456EAE4L,2L},{0x1456EAE4L,(-1L),0x240811FDL,0x44646C51L,0x44646C51L,0x240811FDL},{0x1456EAE4L,0x1456EAE4L,0x44646C51L,3L,0x2A09282DL,3L},{(-1L),0x1456EAE4L,(-1L),0x240811FDL,0x44646C51L,0x44646C51L},{2L,(-1L),(-1L),2L,0x1456EAE4L,3L},{3L,2L,0x44646C51L,2L,3L,0x240811FDL},{2L,3L,0x240811FDL,0x240811FDL,3L,2L},{(-1L),2L,0x1456EAE4L,3L,0x1456EAE4L,2L}},{{0x1456EAE4L,(-1L),0x240811FDL,0x44646C51L,0x44646C51L,0x240811FDL},{0x1456EAE4L,0x1456EAE4L,0x44646C51L,3L,0x2A09282DL,3L},{(-1L),0x1456EAE4L,(-1L),0x240811FDL,0x44646C51L,0x44646C51L},{2L,(-1L),(-1L),2L,0x1456EAE4L,3L},{3L,2L,0x44646C51L,2L,3L,0x240811FDL},{2L,3L,0x240811FDL,0x240811FDL,3L,2L},{(-1L),2L,0x1456EAE4L,3L,0x1456EAE4L,2L},{0x1456EAE4L,(-1L),0x240811FDL,0x44646C51L,0x44646C51L,0x240811FDL},{0x1456EAE4L,0x1456EAE4L,0x44646C51L,3L,0x2A09282DL,3L},{(-1L),0x1456EAE4L,(-1L),0x240811FDL,0x44646C51L,0x44646C51L}},{{2L,(-1L),(-1L),2L,0x1456EAE4L,3L},{3L,2L,0x44646C51L,2L,3L,0x240811FDL},{2L,3L,0x240811FDL,0x240811FDL,3L,2L},{(-1L),2L,0x1456EAE4L,3L,0x1456EAE4L,2L},{0x1456EAE4L,(-1L),0x240811FDL,0x44646C51L,0x44646C51L,0x240811FDL},{0x1456EAE4L,0x1456EAE4L,0x44646C51L,3L,0x2A09282DL,3L},{(-1L),0x1456EAE4L,(-1L),0x240811FDL,0x44646C51L,0x44646C51L},{2L,(-1L),(-1L),2L,0x1456EAE4L,3L},{3L,(-1L),0x1456EAE4L,(-1L),0x240811FDL,0x44646C51L},{(-1L),0x240811FDL,0x44646C51L,0x44646C51L,0x240811FDL,(-1L)}},{{3L,(-1L),0x2A09282DL,0x240811FDL,0x2A09282DL,(-1L)},{0x2A09282DL,3L,0x44646C51L,0x1456EAE4L,0x1456EAE4L,0x44646C51L},{0x2A09282DL,0x2A09282DL,0x1456EAE4L,0x240811FDL,2L,0x240811FDL},{3L,0x2A09282DL,3L,0x44646C51L,0x1456EAE4L,0x1456EAE4L},{(-1L),3L,3L,(-1L),0x2A09282DL,0x240811FDL},{0x240811FDL,(-1L),0x1456EAE4L,(-1L),0x240811FDL,0x44646C51L},{(-1L),0x240811FDL,0x44646C51L,0x44646C51L,0x240811FDL,(-1L)},{3L,(-1L),0x2A09282DL,0x240811FDL,0x2A09282DL,(-1L)},{0x2A09282DL,3L,0x44646C51L,0x1456EAE4L,0x1456EAE4L,0x44646C51L},{0x2A09282DL,0x2A09282DL,0x1456EAE4L,0x240811FDL,2L,0x240811FDL}}};
            int32_t *l_264 = &l_91;
            int32_t *l_265 = &l_91;
            int32_t *l_266[3];
            int64_t *l_280[8][3] = {{&g_121.f1,&g_121.f1,&g_121.f1},{NULL,&g_242,&g_242},{&g_121.f1,&g_242,NULL},{NULL,NULL,NULL},{&g_121.f1,&g_121.f1,NULL},{&g_121.f1,&g_121.f1,&g_242},{NULL,&g_121.f1,&g_121.f1},{&g_242,NULL,NULL}};
            uint16_t *l_283[9][10] = {{&g_244[0],NULL,&g_68,&g_68,&g_68,&g_68,NULL,&g_244[0],&g_68,&g_68},{&g_244[0],&g_244[2],&g_68,&g_68,&g_68,&g_244[0],NULL,&g_68,&g_68,&g_68},{&g_244[0],NULL,&g_68,&g_68,&g_68,&g_68,NULL,&g_244[0],&g_68,&g_68},{&g_244[0],&g_244[2],&g_68,&g_68,&g_68,&g_244[0],NULL,&g_68,&g_68,&g_68},{&g_244[0],NULL,&g_68,&g_68,&g_68,&g_68,NULL,&g_244[0],&g_68,&g_68},{&g_244[0],&g_244[2],&g_68,&g_68,&g_68,&g_244[0],NULL,&g_68,&g_68,&g_68},{&g_244[0],NULL,&g_68,&g_68,&g_68,&g_68,NULL,&g_244[0],&g_68,&g_68},{&g_244[0],&g_244[2],&g_68,&g_68,&g_68,&g_244[0],NULL,&g_68,&g_68,&g_68},{&g_244[0],NULL,&g_68,&g_68,&g_68,&g_68,NULL,&g_244[0],&g_68,&g_68}};
            int i, j, k;
            for (i = 0; i < 3; i++)
                l_266[i] = &l_91;
            l_254 = ((safe_rshift_func_uint8_t_u_u((g_184 = (((*l_253) &= (safe_rshift_func_int8_t_s_s(g_202, 2))) > 0x48EA2435L)), p_65)) <= 1L);
            l_268--;
            (*l_259) = (!p_64);
            (*l_265) = ((((1UL || ((((safe_sub_func_uint64_t_u_u(0x55E803D2FD9BEF9FLL, (safe_add_func_int32_t_s_s((0x1127L != (safe_mod_func_uint64_t_u_u((((((0xF7L > (safe_unary_minus_func_int8_t_s(p_65))) && ((safe_div_func_uint64_t_u_u(18446744073709551615UL, (g_242 = (-1L)))) , (safe_lshift_func_uint16_t_u_s((l_258 = 0x8659L), (safe_mul_func_uint16_t_u_u(((g_121 , (int16_t*) NULL) != NULL), p_64)))))) && 3UL) > g_2) & (*l_265)), 1L))), 0x307B5E04L)))) , (*l_260)) , p_65) <= l_254)) , p_65) <= p_64) <= p_65);
            for (g_187 = 0; (g_187 <= 3); g_187 += 1)
            { /* block id: 139 */
                uint8_t l_286[9][1][3] = {{{255UL,2UL,255UL}},{{0x71L,246UL,0x12L}},{{246UL,246UL,255UL}},{{0x12L,255UL,255UL}},{{255UL,0x71L,2UL}},{{0x12L,0x71L,0x12L}},{{246UL,255UL,2UL}},{{246UL,246UL,255UL}},{{0x12L,255UL,255UL}}};
                int i, j, k;
                for (g_215 = 0; (g_215 <= 3); g_215 += 1)
                { /* block id: 142 */
                    int i;
                    for (g_68 = 0; (g_68 <= 3); g_68 += 1)
                    { /* block id: 145 */
                        l_286[7][0][1]--;
                    }
                    for (p_65 = 2; (p_65 <= 8); p_65 += 1)
                    { /* block id: 150 */
                        struct S2 *l_289 = NULL;
                        struct S2 *l_290 = &g_291[0][1];
                        (*l_290) = g_121;
                        if (p_64)
                            goto lbl_190;
                    }
                    for (g_161 = 0; (g_161 <= 3); g_161 += 1)
                    { /* block id: 156 */
                        return &g_2;
                    }
                    if (g_241[g_187])
                        continue;
                }
            }
        }
        l_258 = p_64;
        if (((safe_mul_func_uint8_t_u_u((((!((safe_mul_func_uint8_t_u_u((p_65 | ((!(safe_rshift_func_uint8_t_u_u(((-3L) | (p_64 || (&g_208 == l_298[3][2]))), 5))) && g_242)), (((safe_mod_func_uint16_t_u_u((l_308 = (safe_mul_func_uint16_t_u_u(((l_258 |= (safe_mod_func_int8_t_s_s((-1L), ((p_65 != ((p_65 | l_305) , 0x0DA34F26F14F79CFLL)) || l_306)))) , g_159), 0L))), (-1L))) , g_208) , p_65))) <= p_64)) & 1L) > 0x66L), 5L)) && 0UL))
        { /* block id: 166 */
            uint32_t **l_315 = &l_307;
            struct S2 l_320 = {0x97D02AEDL,0xD98A267DB47F5A99LL};
            uint64_t *l_321 = NULL;
            uint64_t *l_322 = &g_159;
            uint16_t *l_324 = &g_161;
            l_258 = (safe_mod_func_int32_t_s_s(((!(safe_add_func_uint16_t_u_u(g_203, ((p_65 == (safe_mul_func_int8_t_s_s(((((((((((p_65 != (((*l_315) = &g_114) == NULL)) , ((*l_324) = (((*l_237) = (safe_mul_func_int16_t_s_s((g_68 != ((safe_mod_func_int32_t_s_s((g_208.f2 && ((*l_322) = ((l_320 , (l_320.f1 > 1L)) || g_2))), g_121.f0)) >= (*g_61))), g_323))) & 0xD4L))) <= g_2) || (-2L)) , 0xF4L) & 255UL) , 1L) & p_65) , 0xFE222A196B499643LL) && p_65), p_64))) , p_64)))) , 0x7C957AF7L), (-1L)));
        }
        else
        { /* block id: 172 */
            uint32_t *l_329[8] = {NULL,&l_268,&l_268,NULL,&l_268,&l_268,NULL,&l_268};
            int32_t l_349 = 2L;
            int32_t l_357 = 0x3309E014L;
            struct S2 l_362 = {0L,-4L};
            int i;
            for (g_215 = 0; (g_215 != 12); ++g_215)
            { /* block id: 175 */
                int32_t l_332 = 0x995CAD86L;
                uint32_t *l_333 = &g_215;
                struct S2 l_334[8][3] = {{{0x249C85D9L,0L},{0x249C85D9L,0L},{0x249C85D9L,0L}},{{-1L,0L},{-1L,0L},{-1L,0L}},{{0x249C85D9L,0L},{0x249C85D9L,0L},{0x249C85D9L,0L}},{{-1L,0L},{-1L,0L},{-1L,0L}},{{0x249C85D9L,0L},{0x249C85D9L,0L},{0x249C85D9L,0L}},{{-1L,0L},{-1L,0L},{-1L,0L}},{{0x249C85D9L,0L},{0x249C85D9L,0L},{0x249C85D9L,0L}},{{-1L,0L},{-1L,0L},{-1L,0L}}};
                struct S2 *l_335 = &g_291[0][5];
                int32_t *l_336 = &l_258;
                int32_t *l_337 = &l_332;
                int32_t *l_338 = &l_258;
                int32_t *l_339 = &l_267;
                int32_t *l_340 = &l_308;
                int32_t *l_341 = &g_62;
                int32_t *l_342 = NULL;
                int32_t *l_343 = &l_267;
                int32_t *l_344 = &l_267;
                int32_t *l_345 = &l_308;
                int32_t *l_346 = &l_332;
                int32_t *l_347 = &g_291[0][1].f0;
                int32_t *l_348 = NULL;
                int32_t *l_350 = &l_332;
                int32_t *l_351 = &l_258;
                int32_t *l_352 = &g_291[0][1].f0;
                int32_t *l_353 = &g_291[0][1].f0;
                int32_t *l_354 = &g_62;
                int32_t *l_355[7];
                int i, j;
                for (i = 0; i < 7; i++)
                    l_355[i] = &l_334[1][0].f0;
                (*l_335) = (g_208 , (((((safe_add_func_int64_t_s_s(g_242, (1L || p_65))) | (l_329[7] == ((((safe_sub_func_int8_t_s_s((~g_208.f0), (+l_258))) > ((p_65 ^ l_332) , 3UL)) , g_121.f0) , l_333))) || g_215) <= l_332) , l_334[1][0]));
                ++l_359;
                (*l_335) = l_362;
            }
            for (l_306 = 0; (l_306 >= 25); ++l_306)
            { /* block id: 182 */
                return &g_62;
            }
            return &g_2;
        }
        for (g_323 = 0; (g_323 < 1); g_323 = safe_add_func_uint8_t_u_u(g_323, 5))
        { /* block id: 189 */
            int32_t *l_367 = &g_62;
            int32_t *l_368 = NULL;
            int32_t l_369 = 0x32767108L;
            int32_t *l_370 = &l_258;
            int32_t *l_371 = &l_356;
            int32_t *l_372 = &l_258;
            int32_t *l_373 = &g_291[0][1].f0;
            int32_t *l_374[4];
            int i;
            for (i = 0; i < 4; i++)
                l_374[i] = &l_308;
            --l_375;
        }
    }
    (*l_381) = ((*l_380) = g_378[3]);
    return &g_2;
}




/* ---------------------------------------- */
int main (int argc, char* argv[])
{
    int i, j;
    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);
    transparent_crc(g_27, "g_27", print_hash_value);
    transparent_crc(g_38, "g_38", print_hash_value);
    transparent_crc(g_62, "g_62", print_hash_value);
    transparent_crc(g_68, "g_68", print_hash_value);
    transparent_crc(g_78, "g_78", print_hash_value);
    transparent_crc(g_114, "g_114", print_hash_value);
    transparent_crc(g_121.f0, "g_121.f0", print_hash_value);
    transparent_crc(g_121.f1, "g_121.f1", print_hash_value);
    transparent_crc(g_159, "g_159", print_hash_value);
    transparent_crc(g_161, "g_161", print_hash_value);
    transparent_crc(g_184, "g_184", print_hash_value);
    transparent_crc(g_187, "g_187", print_hash_value);
    transparent_crc(g_202, "g_202", print_hash_value);
    transparent_crc(g_203, "g_203", print_hash_value);
    transparent_crc(g_208.f0, "g_208.f0", print_hash_value);
    transparent_crc(g_208.f1, "g_208.f1", print_hash_value);
    transparent_crc(g_208.f2, "g_208.f2", print_hash_value);
    transparent_crc(g_215, "g_215", print_hash_value);
    transparent_crc(g_239, "g_239", print_hash_value);
    transparent_crc(g_240, "g_240", print_hash_value);
    for (i = 0; i < 4; i++)
    {
        transparent_crc(g_241[i], "g_241[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

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

    }
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 6; j++)
        {
            transparent_crc(g_291[i][j].f0, "g_291[i][j].f0", print_hash_value);
            transparent_crc(g_291[i][j].f1, "g_291[i][j].f1", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

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

    }
    transparent_crc(g_408.f0, "g_408.f0", print_hash_value);
    transparent_crc(g_408.f1, "g_408.f1", print_hash_value);
    transparent_crc(g_408.f2, "g_408.f2", print_hash_value);
    transparent_crc(g_408.f3, "g_408.f3", print_hash_value);
    transparent_crc(g_408.f4, "g_408.f4", print_hash_value);
    transparent_crc(g_408.f5, "g_408.f5", print_hash_value);
    transparent_crc(g_408.f6, "g_408.f6", print_hash_value);
    transparent_crc(g_408.f7, "g_408.f7", print_hash_value);
    transparent_crc(g_467, "g_467", print_hash_value);
    transparent_crc(g_468, "g_468", print_hash_value);
    transparent_crc(g_476, "g_476", print_hash_value);
    transparent_crc(g_565, "g_565", print_hash_value);
    transparent_crc(g_605.f0, "g_605.f0", print_hash_value);
    transparent_crc(g_605.f1, "g_605.f1", print_hash_value);
    transparent_crc(g_605.f2, "g_605.f2", print_hash_value);
    transparent_crc(g_605.f3, "g_605.f3", print_hash_value);
    transparent_crc(g_605.f4, "g_605.f4", print_hash_value);
    transparent_crc(g_605.f5, "g_605.f5", print_hash_value);
    transparent_crc(g_605.f6, "g_605.f6", print_hash_value);
    transparent_crc(g_605.f7, "g_605.f7", print_hash_value);
    transparent_crc(g_706, "g_706", print_hash_value);
    transparent_crc(g_721, "g_721", print_hash_value);
    for (i = 0; i < 5; i++)
    {
        transparent_crc(g_732[i], "g_732[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

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

/************************ statistics *************************
XXX max struct depth: 1
breakdown:
   depth: 0, occurrence: 213
   depth: 1, occurrence: 18
XXX total union variables: 0

XXX non-zero bitfields defined in structs: 9
XXX zero bitfields defined in structs: 0
XXX const bitfields defined in structs: 1
XXX volatile bitfields defined in structs: 0
XXX structs with bitfields in the program: 19
breakdown:
   indirect level: 0, occurrence: 8
   indirect level: 1, occurrence: 7
   indirect level: 2, occurrence: 4
XXX full-bitfields structs in the program: 0
breakdown:
XXX times a bitfields struct's address is taken: 18
XXX times a bitfields struct on LHS: 0
XXX times a bitfields struct on RHS: 15
XXX times a single bitfield on LHS: 0
XXX times a single bitfield on RHS: 14

XXX max expression depth: 40
breakdown:
   depth: 1, occurrence: 150
   depth: 2, occurrence: 38
   depth: 4, occurrence: 3
   depth: 7, occurrence: 1
   depth: 15, occurrence: 1
   depth: 18, occurrence: 3
   depth: 19, occurrence: 1
   depth: 21, occurrence: 3
   depth: 22, occurrence: 1
   depth: 23, occurrence: 1
   depth: 24, occurrence: 1
   depth: 25, occurrence: 3
   depth: 31, occurrence: 1
   depth: 33, occurrence: 1
   depth: 34, occurrence: 1
   depth: 35, occurrence: 1
   depth: 40, occurrence: 1

XXX total number of pointers: 223

XXX times a variable address is taken: 543
XXX times a pointer is dereferenced on RHS: 51
breakdown:
   depth: 1, occurrence: 34
   depth: 2, occurrence: 17
XXX times a pointer is dereferenced on LHS: 78
breakdown:
   depth: 1, occurrence: 78
XXX times a pointer is compared with null: 11
XXX times a pointer is compared with address of another variable: 4
XXX times a pointer is compared with another pointer: 3
XXX times a pointer is qualified to be dereferenced: 3931

XXX max dereference level: 2
breakdown:
   level: 0, occurrence: 0
   level: 1, occurrence: 316
   level: 2, occurrence: 69
XXX number of pointers point to pointers: 42
XXX number of pointers point to scalars: 163
XXX number of pointers point to structs: 18
XXX percent of pointers has null in alias set: 23.3
XXX average alias set size: 1.38

XXX times a non-volatile is read: 508
XXX times a non-volatile is write: 276
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: 0
XXX backward jumps: 2

XXX stmts: 141
XXX max block depth: 5
breakdown:
   depth: 0, occurrence: 30
   depth: 1, occurrence: 13
   depth: 2, occurrence: 19
   depth: 3, occurrence: 25
   depth: 4, occurrence: 21
   depth: 5, occurrence: 33

XXX percentage a fresh-made variable is used: 17.8
XXX percentage an existing variable is used: 82.2
FYI: the random generator makes assumptions about the integer size. See platform.info for more details.
********************* end of statistics **********************/

