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

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

#include "csmith.h"


static long __undefined;

/* --- Struct/Union Declarations --- */
union U0 {
   uint32_t  f0;
   uint32_t  f1;
   uint16_t  f2;
   int32_t  f3;
   int16_t  f4;
};

union U1 {
   int32_t  f0;
   int8_t  f1;
};

union U2 {
   signed f0 : 31;
   uint8_t  f1;
};

/* --- GLOBAL VARIABLES --- */
static union U2 g_9[5] = {{5L},{5L},{5L},{5L},{5L}};
static int32_t g_11 = 0xE5C285CEL;
static const int32_t *g_16 = &g_11;
static uint8_t g_66[1] = {0xC8L};
static uint8_t g_71 = 255UL;
static int32_t g_75 = 0xD78BEA8EL;
static int8_t g_76[5] = {0x1AL,0x1AL,0x1AL,0x1AL,0x1AL};
static int16_t g_77 = 0x065BL;
static uint32_t g_78[7][9] = {{0x1A9F1398L,0xB1F15F1DL,0x4BD9F5B6L,0x1A9F1398L,0x8559CE79L,0xA768FB0CL,0xB1AAE879L,4294967293UL,0x8559CE79L},{0x8327BC4AL,0xF31BC463L,8UL,7UL,1UL,7UL,1UL,0x00823388L,1UL},{0x9C36DE1FL,0x19045039L,0xA768FB0CL,0x9C36DE1FL,0xB1F15F1DL,4294967293UL,4294967293UL,0x7078C3FCL,0x8559CE79L},{0x6E6AF575L,0x6E6AF575L,1UL,0x8327BC4AL,7UL,1UL,0x00823388L,0x00823388L,1UL},{0x8559CE79L,0x19045039L,0x9C36DE1FL,0x1A9F1398L,4294967293UL,0x9C36DE1FL,4294967291UL,4294967293UL,0xB1F15F1DL},{0x6E6AF575L,1UL,0x8327BC4AL,0x24791A13L,0x00823388L,1UL,0x24791A13L,0x6E6AF575L,7UL},{0x19045039L,0xA768FB0CL,0x19045039L,0x7078C3FCL,0x7078C3FCL,0xB1AAE879L,0x8559CE79L,0x7078C3FCL,0xA768FB0CL}};
static int32_t *g_83[8][10] = {{&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11},{&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11},{&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11},{&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11},{&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11},{&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11},{&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11},{&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11}};
static int32_t **g_82 = &g_83[0][9];
static int32_t g_102 = 0xFD02F95CL;
static uint16_t g_135 = 65534UL;
static int32_t g_144 = 0x2D1F4F54L;
static const uint16_t g_160 = 1UL;
static union U0 g_181 = {4294967292UL};
static union U0 *g_183 = &g_181;
static union U1 g_202 = {0xD13A1308L};
static union U1 *g_201 = &g_202;
static int16_t g_209 = 2L;
static int32_t g_211 = 0xAD8558D5L;
static uint16_t g_231 = 65527UL;
static union U1 *g_261 = &g_202;
static union U2 *g_282 = (void*)0;
static union U2 **g_281 = &g_282;
static const int16_t g_328 = 2L;
static int8_t g_390 = 0x65L;
static int32_t g_468 = 0x425A7515L;
static int32_t **g_537 = &g_83[6][2];
static uint32_t g_547 = 0UL;
static const uint32_t g_573 = 4294967288UL;
static const uint32_t g_575 = 4294967291UL;
static const uint32_t *g_574 = &g_575;
static int16_t g_582 = 0x5594L;
static union U0 **g_587 = &g_183;
static union U0 ***g_586 = &g_587;
static uint16_t *g_593 = &g_231;
static uint16_t **g_592 = &g_593;
static const union U1 g_649 = {-1L};
static const union U1 *g_648 = &g_649;
static int16_t g_666 = 0xB689L;
static uint32_t g_668 = 2UL;
static union U2 ***g_691 = &g_281;
static union U2 *** const *g_690 = &g_691;
static int32_t g_756 = 0x25866B22L;
static uint8_t g_860 = 0x3DL;
static uint16_t g_894 = 0xD1D4L;
static const int32_t g_947 = 2L;
static uint16_t g_966[5][3] = {{1UL,1UL,0x3378L},{1UL,1UL,1UL},{65535UL,0x3378L,1UL},{1UL,1UL,0x3378L},{1UL,0x3378L,65535UL}};
static int8_t *g_1030 = (void*)0;
static int8_t **g_1029 = &g_1030;
static union U1 g_1059[9][9] = {{{2L},{9L},{1L},{9L},{2L},{2L},{2L},{1L},{1L}},{{5L},{0x9B1D2FFCL},{0x256D147CL},{0x9B1D2FFCL},{5L},{0x9B1D2FFCL},{5L},{0x256D147CL},{0x256D147CL}},{{9L},{2L},{2L},{2L},{9L},{1L},{9L},{2L},{9L}},{{0x9B1D2FFCL},{5L},{5L},{5L},{0x9B1D2FFCL},{0x256D147CL},{0x256D147CL},{5L},{0x9B1D2FFCL}},{{1L},{9L},{1L},{9L},{2L},{2L},{2L},{9L},{1L}},{{5L},{0x9B1D2FFCL},{0x256D147CL},{0x9B1D2FFCL},{5L},{5L},{5L},{0x256D147CL},{0x256D147CL}},{{9L},{1L},{2L},{2L},{9L},{1L},{9L},{2L},{2L}},{{0x9B1D2FFCL},{5L},{5L},{5L},{0x9B1D2FFCL},{0x256D147CL},{0x9B1D2FFCL},{5L},{0x9B1D2FFCL}},{{1L},{9L},{9L},{9L},{2L},{2L},{2L},{9L},{1L}}};
static int32_t g_1124 = 0L;
static int16_t g_1254 = 5L;
static int32_t g_1294 = 0x5FC158E7L;
static uint32_t *g_1326 = &g_78[4][2];
static int16_t *g_1346[7] = {&g_209,&g_582,&g_209,&g_582,&g_1254,&g_1254,&g_1254};
static union U0 *g_1354 = &g_181;
static uint16_t g_1418 = 0x7548L;
static int8_t * const **g_1432 = (void*)0;
static union U1 **g_1483[6] = {&g_261,&g_261,&g_261,&g_261,&g_261,&g_261};
static int8_t g_1501 = (-1L);
static const int8_t *g_1582[8] = {(void*)0,(void*)0,(void*)0,&g_1059[4][2].f1,(void*)0,(void*)0,(void*)0,(void*)0};
static const int8_t **g_1581 = &g_1582[6];
static const int8_t ***g_1580 = &g_1581;
static uint8_t g_1597 = 1UL;
static int32_t g_1613 = 0L;
static uint8_t **g_1628 = (void*)0;
static int32_t ** const *g_1630 = &g_82;
static int32_t ** const **g_1629 = &g_1630;
static int16_t g_1665[1] = {(-8L)};


/* --- FORWARD DECLARATIONS --- */
static int16_t  func_1(void);
static const int32_t * func_2(uint8_t  p_3, union U2  p_4, int32_t * p_5, union U0  p_6, const union U1  p_7);
static int32_t  func_19(int32_t  p_20);
static const union U1  func_23(const int32_t * p_24, int8_t  p_25, uint8_t  p_26, const union U0  p_27, const int32_t * p_28);
static const int32_t * func_29(int32_t ** p_30, int32_t * p_31, int32_t * p_32, uint32_t  p_33);
static int32_t * func_36(int32_t ** p_37);
static int32_t ** func_38(int16_t  p_39, int8_t  p_40, union U2  p_41, union U0  p_42);
static int8_t  func_45(uint8_t  p_46, uint16_t  p_47, union U2  p_48, int32_t ** p_49, const uint32_t  p_50);
static int8_t  func_55(uint8_t  p_56, union U1  p_57, int32_t * p_58, uint8_t  p_59);
static int32_t * func_61(int16_t  p_62, const int32_t ** p_63);


/* --- FUNCTIONS --- */
/* ------------------------------------------ */
/* 
 * reads : g_9 g_9.f0 g_11 g_16 g_66 g_71 g_78 g_82 g_77 g_181.f4 g_209 g_202.f0 g_181.f2 g_144 g_83 g_201 g_202 g_537 g_102 g_76 g_231 g_582 g_586 g_575 g_592 g_593 g_468 g_202.f1 g_261 g_649.f0 g_183 g_181 g_574 g_547 g_666 g_668 g_894 g_1124 g_587 g_181.f0 g_1630 g_281 g_282 g_690 g_691
 * writes: g_16 g_66 g_71 g_78 g_76 g_181.f4 g_144 g_547 g_390 g_135 g_83 g_75 g_102 g_11 g_574 g_586 g_231 g_468 g_77 g_209 g_648 g_1124 g_181.f0 g_183 g_282 g_202
 */
static int16_t  func_1(void)
{ /* block id: 0 */
    int8_t l_8 = 0xD2L;
    int32_t *l_10 = &g_11;
    union U0 l_12[3] = {{0xC63C4078L},{0xC63C4078L},{0xC63C4078L}};
    const union U1 l_13 = {0x54DBBE56L};
    const int32_t *l_15 = &l_12[2].f3;
    const int32_t **l_14[1];
    union U2 **l_1476[1];
    union U1 ** const l_1484 = &g_261;
    int16_t l_1489 = (-3L);
    int32_t l_1490[4][9][7] = {{{0x7722092EL,0xE7360E5FL,0x6D151BE1L,6L,(-5L),8L,0x348F7672L},{0x09844A68L,(-1L),(-9L),1L,0xFFB9EB74L,0xB7C332CFL,0x6178C1E9L},{0L,0x4AEF49C4L,0x579BFEBAL,0x1115582EL,0x1724644DL,1L,0x9A5CF446L},{0xB336F930L,1L,1L,0L,0x3AF81339L,9L,0xB12F7DAAL},{0x61FAFD88L,6L,9L,0xA08F10A1L,0x06B6F60EL,0xFFB9EB74L,0xEAFC93F5L},{6L,0xA08F10A1L,0x06B6F60EL,(-8L),(-7L),0xB12F7DAAL,0xB4CB5279L},{(-5L),(-2L),0xBA853D88L,(-8L),0L,0xDE8A14BCL,0xE7360E5FL},{0xF7A455E7L,0x579BFEBAL,0xEAFC93F5L,0xA08F10A1L,0x1DE7A7EEL,0x348F7672L,(-1L)},{0x579BFEBAL,(-2L),0xDE8A14BCL,0L,0xCC05669DL,0xCC05669DL,0x1E6C6902L}},{{0x3AF81339L,(-7L),(-1L),0x1115582EL,(-2L),0xCB6A97FAL,(-5L)},{3L,(-1L),(-2L),1L,0xEAFC93F5L,0x781D787BL,0x85A2F7F1L},{0x1E6C6902L,0x781D787BL,(-9L),6L,1L,(-7L),1L},{0x579BFEBAL,8L,0x09844A68L,0xE7360E5FL,0x6178C1E9L,0x3AF81339L,1L},{0x348F7672L,(-1L),(-9L),0x566121C2L,4L,0x06B6F60EL,0xCC05669DL},{1L,0x9A5CF446L,(-2L),0L,0x1115582EL,0x1724644DL,0x1115582EL},{0x09844A68L,0x579BFEBAL,(-1L),0x1724644DL,0xC388F8C3L,0xF7A455E7L,0L},{9L,0xA34E9BADL,0xDE8A14BCL,0L,0xF7A455E7L,0x29ABAF8CL,(-1L)},{(-1L),1L,0xEAFC93F5L,1L,1L,2L,9L}},{{(-1L),0x1DE7A7EEL,3L,0x7BF25D80L,(-7L),9L,0x348F7672L},{0xEAFC93F5L,0x1DE7A7EEL,0x7722092EL,0xA34E9BADL,8L,9L,2L},{(-1L),1L,0x0CEE732EL,6L,2L,0x9E61483AL,0x9E61483AL},{0xBA853D88L,0xA34E9BADL,0x6EC18B86L,0xCE872C2BL,0xA34E9BADL,(-1L),0x3AF81339L},{(-7L),0x579BFEBAL,0L,5L,0xEB035C34L,0x6EC18B86L,0x7722092EL},{0x6D151BE1L,0xBBCB4E5FL,0xA34E9BADL,(-1L),(-1L),0xEAFC93F5L,9L},{1L,0x9E61483AL,0xB336F930L,0xAA26BCE5L,0x566121C2L,0x9E61483AL,0xEB035C34L},{2L,0x85A2F7F1L,0xEAC2EEC8L,0xEAFC93F5L,0xBBCB4E5FL,0xB4CB5279L,0x1E6C6902L},{1L,0xFFB9EB74L,0x7722092EL,(-1L),0x96B34700L,0x1FBA7239L,0xB336F930L}},{{0x6D151BE1L,0xC388F8C3L,0x1579862BL,0x06B6F60EL,0x1E6C6902L,0x06B6F60EL,2L},{(-7L),0x09844A68L,2L,0xB4CB5279L,5L,1L,(-1L)},{3L,2L,(-1L),0xEB035C34L,(-1L),0xC388F8C3L,0x85A2F7F1L},{0x4EC6A0E7L,0L,1L,0x3AF81339L,0x7BF25D80L,(-1L),0L},{(-1L),(-1L),0x3AF81339L,(-8L),4L,0x61FAFD88L,0L},{4L,0x929F3853L,0xCB6A97FAL,0L,0xAA26BCE5L,0xCE872C2BL,0x85A2F7F1L},{0x566121C2L,0x4AEF49C4L,6L,0x4EC6A0E7L,(-1L),(-1L),(-1L)},{0x61FAFD88L,0x29ABAF8CL,0xE7360E5FL,0xE7360E5FL,0L,(-2L),2L},{0xB4CB5279L,(-2L),0x1DE7A7EEL,0xE7360E5FL,0xDE8A14BCL,0L,(-8L)}}};
    int32_t l_1499 = 0L;
    int32_t l_1503 = 1L;
    uint32_t l_1505[3][5][2] = {{{4294967289UL,1UL},{0UL,1UL},{4294967289UL,1UL},{0UL,1UL},{4294967289UL,1UL}},{{0UL,1UL},{4294967289UL,1UL},{0UL,1UL},{4294967289UL,1UL},{0UL,1UL}},{{4294967289UL,1UL},{0UL,1UL},{4294967289UL,1UL},{0UL,1UL},{4294967289UL,1UL}}};
    int32_t l_1530 = (-3L);
    int32_t l_1550 = 5L;
    int32_t l_1557 = 5L;
    union U1 *l_1563 = &g_1059[6][4];
    uint32_t l_1622 = 0x24618042L;
    uint16_t l_1656 = 1UL;
    uint8_t *l_1682[9][4] = {{&g_66[0],&g_66[0],&g_66[0],&g_66[0]},{&g_66[0],&g_66[0],&g_66[0],&g_66[0]},{&g_66[0],&g_66[0],&g_66[0],&g_66[0]},{&g_66[0],&g_66[0],&g_66[0],&g_66[0]},{&g_66[0],&g_66[0],&g_66[0],&g_66[0]},{&g_66[0],&g_66[0],&g_66[0],&g_66[0]},{&g_66[0],&g_66[0],&g_66[0],&g_66[0]},{&g_66[0],&g_66[0],&g_66[0],&g_66[0]},{&g_66[0],&g_66[0],&g_66[0],&g_66[0]}};
    uint8_t **l_1681 = &l_1682[8][2];
    int32_t l_1684 = 0L;
    int i, j, k;
    for (i = 0; i < 1; i++)
        l_14[i] = &l_15;
    for (i = 0; i < 1; i++)
        l_1476[i] = (void*)0;
    g_16 = func_2(l_8, g_9[0], l_10, l_12[2], l_13);
    for (l_8 = 0; (l_8 < 3); l_8 = safe_add_func_int16_t_s_s(l_8, 8))
    { /* block id: 6 */
        int32_t l_1456 = 0L;
        int32_t l_1493 = (-5L);
        int32_t l_1494 = 0xCC45616AL;
        int32_t l_1498 = 0xF676537EL;
        int32_t l_1502[5];
        int8_t l_1525 = (-1L);
        const int8_t l_1562 = 8L;
        const uint32_t **l_1594 = &g_574;
        union U1 l_1610 = {1L};
        union U2 l_1654 = {2L};
        uint32_t l_1685 = 0x72C9CEDCL;
        int i;
        for (i = 0; i < 5; i++)
            l_1502[i] = (-1L);
        if (func_19(g_9[0].f0))
        { /* block id: 926 */
            int8_t l_1454 = 0xD7L;
            int32_t l_1457[6][4] = {{0x7FED4B30L,1L,0x7FED4B30L,1L},{0x7FED4B30L,1L,0x7FED4B30L,1L},{0x7FED4B30L,1L,0x7FED4B30L,1L},{0x7FED4B30L,1L,0x7FED4B30L,1L},{0x7FED4B30L,1L,0x7FED4B30L,1L},{0x7FED4B30L,1L,0x7FED4B30L,1L}};
            const int32_t *l_1466 = &g_468;
            uint16_t l_1488[6];
            union U2 ***l_1529[9] = {&l_1476[0],&l_1476[0],&l_1476[0],&l_1476[0],&l_1476[0],&l_1476[0],&l_1476[0],&l_1476[0],&l_1476[0]};
            int16_t l_1546 = 0x676EL;
            const union U0 l_1565 = {4294967292UL};
            union U1 *l_1571 = &g_1059[4][2];
            uint32_t *l_1591 = &l_1505[0][0][0];
            int8_t l_1658 = 3L;
            int16_t l_1659 = 0xE414L;
            uint32_t l_1660 = 0x579CC0EBL;
            uint32_t l_1666 = 0xE040432BL;
            uint32_t l_1671 = 0xF8DE41A5L;
            union U1 *l_1672 = (void*)0;
            union U1 *l_1673[3];
            union U1 *l_1674 = &g_202;
            int i, j;
            for (i = 0; i < 6; i++)
                l_1488[i] = 8UL;
            for (i = 0; i < 3; i++)
                l_1673[i] = (void*)0;
            for (g_144 = 0; (g_144 <= 0); g_144 += 1)
            { /* block id: 929 */
                int16_t *l_1455[10] = {&l_12[2].f4,&l_12[2].f4,&l_12[2].f4,&l_12[2].f4,&l_12[2].f4,&l_12[2].f4,&l_12[2].f4,&l_12[2].f4,&l_12[2].f4,&l_12[2].f4};
                uint8_t *l_1463 = &g_860;
                const int32_t **l_1487 = &l_15;
                int32_t l_1496 = (-2L);
                int32_t l_1497 = 0xC7FAF769L;
                union U2 l_1538 = {-1L};
                const int8_t l_1539[6][6][7] = {{{0L,0x75L,2L,(-6L),(-6L),0xD3L,0x75L},{0x84L,0L,0x69L,0L,0x84L,0xF4L,7L},{0L,0L,0x75L,0xD3L,(-6L),0L,0x75L},{0xC1L,0x6CL,0x92L,0xF4L,0xC1L,0xF4L,0x92L},{1L,2L,0x75L,0L,(-6L),0xD3L,0xD3L},{0x84L,0L,7L,0xF4L,7L,0x6CL,0x84L}},{{1L,1L,0x75L,2L,0L,0L,0x75L},{0L,0L,0x92L,0x6CL,0L,0L,0L},{1L,0x75L,0xD3L,0L,(-6L),0x75L,0xD3L},{0x84L,0xF4L,0x84L,0L,0x84L,0L,7L},{(-6L),1L,0x75L,0x75L,0L,0L,2L},{0x92L,0x6CL,0xC1L,0L,0xC1L,0x6CL,0L}},{{(-6L),0xD3L,0xD3L,0L,1L,0x75L,0xD3L},{0x69L,0x6CL,7L,0x6CL,0x69L,0x6CL,0x69L},{(-6L),1L,2L,0x75L,0L,(-6L),0xD3L},{0L,0L,0L,0x6CL,0x92L,0x6CL,0xC1L},{0L,0xD3L,0xD3L,(-6L),0L,0x75L,0x75L},{7L,0xF4L,0x69L,0x6CL,0x84L,0xF4L,0x69L}},{{(-6L),0L,2L,0x75L,(-6L),1L,2L},{0x92L,0xF4L,0xC1L,0xF4L,0x92L,0xF4L,0x92L},{0L,0xD3L,0x75L,1L,1L,2L,2L},{0x69L,0L,0x69L,0xF4L,7L,0xF4L,0x69L},{1L,0L,2L,2L,1L,(-6L),0xD3L},{0xC1L,0L,0x92L,0xF4L,0L,0L,0x92L}},{{0L,0x75L,2L,(-6L),0L,0xD3L,0x75L},{0x84L,0L,0x84L,0L,7L,0xF4L,7L},{1L,0L,0xD3L,0xD3L,(-6L),1L,0x75L},{0x92L,0x6CL,0x92L,0L,0xC1L,0L,0x92L},{(-6L),0x75L,0x75L,1L,(-6L),2L,0xD3L},{0x84L,0x6CL,7L,0L,7L,0x6CL,7L}},{{1L,(-6L),0x75L,2L,1L,0L,0xD3L},{0L,0x6CL,0L,0x6CL,0xC1L,0L,0xC1L},{(-6L),0x75L,2L,0L,0L,0xD3L,0xD3L},{7L,0xF4L,7L,0L,0x84L,0x6CL,7L},{0L,1L,0xD3L,0xD3L,0L,1L,2L},{0L,0xF4L,0xC1L,0x6CL,0xC1L,0xF4L,0xC1L}}};
                union U1 *l_1570 = &g_1059[4][2];
                union U0 l_1593 = {1UL};
                int i, j, k;
            }
            if ((*g_16))
            { /* block id: 1007 */
                union U1 *l_1599 = &g_1059[4][2];
                int32_t l_1604 = 0L;
                union U2 l_1625 = {0x22466E4EL};
                uint8_t *l_1627 = (void*)0;
                uint8_t **l_1626 = &l_1627;
                uint32_t l_1631[4][8] = {{4294967287UL,1UL,4294967288UL,0x1CF551D9L,4294967287UL,0xFC67C7A4L,0UL,1UL},{4294967288UL,4294967288UL,0xD89884B8L,0x1CF551D9L,0xD89884B8L,4294967288UL,0xD89884B8L,4294967287UL},{0UL,0xFC67C7A4L,4294967287UL,4294967287UL,0xD89884B8L,0x8D4BD049L,1UL,4294967288UL},{0x8D4BD049L,4294967287UL,4294967287UL,1UL,0xFC67C7A4L,1UL,4294967287UL,1UL}};
                int i, j;
                for (g_71 = 0; (g_71 != 40); ++g_71)
                { /* block id: 1010 */
                    const int32_t l_1606 = 1L;
                }
            }
            else
            { /* block id: 1031 */
                int8_t l_1655 = 0x2AL;
                union U2 l_1661 = {-9L};
                int32_t *l_1662 = &l_12[2].f3;
                int32_t *l_1663[9] = {&l_1493,&l_1493,&l_1493,&l_1493,&l_1493,&l_1493,&l_1493,&l_1493,&l_1493};
                int32_t l_1664 = 0L;
                int i;
                for (g_181.f0 = (-24); (g_181.f0 <= 30); ++g_181.f0)
                { /* block id: 1034 */
                    uint16_t l_1641 = 65535UL;
                    int8_t *l_1642[7] = {&l_1610.f1,(void*)0,&g_1059[4][2].f1,&g_1059[4][2].f1,&g_1059[4][2].f1,&l_1610.f1,&l_1610.f1};
                    int32_t l_1643 = 4L;
                    uint8_t *l_1657 = &l_1654.f1;
                    int i;
                    (*g_587) = &l_12[0];
                    g_16 = func_2(((((((void*)0 == (*g_1630)) >= (safe_mul_func_int8_t_s_s((l_1643 = l_1641), (((((safe_add_func_uint32_t_u_u((0L < ((safe_add_func_uint16_t_u_u((*g_593), 0xF41FL)) != (safe_sub_func_uint8_t_u_u(((*l_1657) = ((safe_div_func_uint16_t_u_u(((((func_45(l_1641, l_1493, (l_1654 = l_1654), &l_10, (*l_1466)) ^ l_1655) || 0x95L) >= l_1656) < (*g_593)), l_1610.f0)) == 0x3CL)), l_1658)))), l_1493)) , 6L) , (*l_15)) && l_1659) || l_1641)))) , l_1654.f1) , l_1502[1]) <= l_1660), l_1661, &l_1530, l_12[2], (*g_201));
                    if (l_1641)
                        continue;
                }
                (*l_10) ^= (*l_1466);
                l_1666++;
                if ((*l_10))
                    break;
            }
            for (g_547 = 0; (g_547 == 3); g_547 = safe_add_func_uint8_t_u_u(g_547, 8))
            { /* block id: 1048 */
                (***g_690) = (*g_281);
                l_1493 ^= l_1494;
            }
            g_16 = func_2(l_1671, l_1654, &l_1503, l_12[2], ((*l_1674) = l_1610));
        }
        else
        { /* block id: 1054 */
            int8_t l_1683 = 0x9CL;
            l_1502[1] = (safe_div_func_int32_t_s_s((safe_sub_func_int8_t_s_s(l_1562, (safe_rshift_func_uint16_t_u_u((1UL | (((void*)0 == l_1681) | (+l_1683))), 2)))), l_1684));
            if (l_1610.f1)
                continue;
        }
        return l_1685;
    }
    return (*l_10);
}


/* ------------------------------------------ */
/* 
 * reads :
 * writes:
 */
static const int32_t * func_2(uint8_t  p_3, union U2  p_4, int32_t * p_5, union U0  p_6, const union U1  p_7)
{ /* block id: 1 */
    return &g_11;
}


/* ------------------------------------------ */
/* 
 * reads : g_9.f0 g_11 g_16 g_66 g_71 g_78 g_9 g_82 g_77 g_181.f4 g_209 g_202.f0 g_181.f2 g_144 g_83 g_201 g_202 g_537 g_75 g_102 g_76 g_231 g_582 g_586 g_575 g_592 g_593 g_468 g_202.f1 g_261 g_649.f0 g_183 g_181 g_574 g_666 g_668 g_894 g_1124 g_587 g_547
 * writes: g_16 g_66 g_71 g_78 g_76 g_181.f4 g_144 g_547 g_390 g_135 g_83 g_75 g_102 g_11 g_574 g_586 g_231 g_468 g_77 g_209 g_648 g_1124
 */
static int32_t  func_19(int32_t  p_20)
{ /* block id: 7 */
    int32_t *l_35 = &g_11;
    int32_t **l_34 = &l_35;
    union U1 l_60 = {0xAD4F6C55L};
    int8_t *l_84 = &g_76[2];
    union U2 l_85 = {-1L};
    union U0 l_86 = {4294967295UL};
    int32_t *l_1453 = &g_1124;
    (*l_1453) |= ((safe_mod_func_uint8_t_u_u((func_23(func_29(l_34, (p_20 , func_36(func_38(g_9[0].f0, ((*l_84) = ((safe_mul_func_int16_t_s_s((((**l_34) && func_45(p_20, (safe_mod_func_uint32_t_u_u(((safe_lshift_func_int8_t_s_s(0xC8L, (func_55(p_20, l_60, func_61((((*g_16) && 0x04518073L) > 0x36L), &g_16), g_11) , (-1L)))) , p_20), g_9[0].f0)), g_9[3], g_82, p_20)) , (**l_34)), g_77)) || (**l_34))), l_85, l_86))), &g_468, p_20), p_20, p_20, l_86, (*l_34)) , 249UL), g_894)) > p_20);
    (*l_35) = p_20;
    (*g_537) = ((***g_586) , (*g_82));
    return (*g_16);
}


/* ------------------------------------------ */
/* 
 * reads : g_201 g_202
 * writes:
 */
static const union U1  func_23(const int32_t * p_24, int8_t  p_25, uint8_t  p_26, const union U0  p_27, const int32_t * p_28)
{ /* block id: 460 */
    uint16_t l_675 = 0UL;
    uint8_t *l_684 = &g_9[0].f1;
    union U2 l_685 = {0x88367F2CL};
    int32_t **l_686 = (void*)0;
    int8_t *l_687[7];
    int32_t l_688 = 0xF0B46BC5L;
    union U0 ****l_689 = (void*)0;
    const union U2 *l_695[6] = {&l_685,&l_685,&l_685,&l_685,&l_685,&l_685};
    const union U2 **l_694 = &l_695[5];
    const union U2 ***l_693 = &l_694;
    const union U2 ****l_692 = &l_693;
    int32_t *l_696 = &g_11;
    int32_t *l_697 = &l_688;
    union U0 **l_709 = &g_183;
    int8_t * const *l_716 = (void*)0;
    union U0 l_718 = {4294967292UL};
    const union U1 l_725 = {0xCF474642L};
    union U2 l_762 = {-3L};
    union U0 l_770 = {4294967292UL};
    int32_t l_810 = 0x0514C231L;
    int32_t l_851[10] = {0L,0L,0L,0L,0L,0L,0L,0L,0L,0L};
    int32_t l_867[5][10][3] = {{{0x9279772DL,(-1L),2L},{0x08D29043L,0xE1F44506L,0x08D29043L},{0xAAC8A26EL,0xE1B3EFFAL,(-3L)},{0xE1F44506L,1L,0x87B510FDL},{0x6D1F2783L,(-3L),0L},{0x27ECB6E8L,0xE8274EACL,0x08D29043L},{0x6D1F2783L,0xC659668AL,0xDCD37698L},{0x8C0733A2L,0x87B510FDL,6L},{0x2820589CL,0xB311FE06L,0x97A0EB8CL},{(-1L),0x4EAB465CL,0xB3893D4FL}},{{(-3L),(-1L),(-1L)},{0x411C5323L,0xBDBD4C74L,1L},{0xB311FE06L,0xDCD37698L,0xDCD37698L},{0x411C5323L,0x8C0733A2L,0xF779865EL},{0x2E256168L,2L,(-5L)},{0x63F4CD2EL,0xBDBD4C74L,0xF779865EL},{0xAAC8A26EL,1L,(-1L)},{1L,0x4EAB465CL,0x8C0733A2L},{(-1L),0xAAC8A26EL,(-1L)},{0x87B510FDL,(-2L),0xEEE97BECL}},{{(-3L),4L,0xC659668AL},{0x27ECB6E8L,0x903B8919L,(-1L)},{6L,(-7L),0xC659668AL},{0xE8274EACL,0xE1F44506L,0x4EAB465CL},{4L,0xC659668AL,0x7F0FCA53L},{0x27ECB6E8L,0x8C0733A2L,1L},{(-1L),0xAAC8A26EL,(-3L)},{(-2L),6L,0x4ED03EDAL},{0x124AF2F5L,(-3L),(-1L)},{1L,(-8L),0xEEE97BECL}},{{0x9279772DL,(-1L),0x9279772DL},{(-1L),0x87B510FDL,1L},{(-1L),0x7F0FCA53L,0L},{0x633BE4BDL,0x27ECB6E8L,0L},{0xAAC8A26EL,(-3L),(-5L)},{0x633BE4BDL,0x903B8919L,0x0402175AL},{2L,(-7L),(-1L)},{0xB3893D4FL,0xC995347EL,0x411C5323L},{(-3L),0x97A0EB8CL,0xDCD37698L},{4L,(-8L),0xB3893D4FL}},{{0xE1B3EFFAL,0xC659668AL,0x7F0FCA53L},{0xC995347EL,0xBB8ED630L,0x0402175AL},{0xE1B3EFFAL,2L,6L},{4L,0xEEE97BECL,0xE1F44506L},{(-5L),0xC659668AL,0L},{(-1L),0x63F4CD2EL,0xBB8ED630L},{0x7F0FCA53L,0x6D1F2783L,2L},{0xBB8ED630L,(-1L),0x4EAB465CL},{(-7L),(-7L),0x6D1F2783L},{4L,(-2L),6L}}};
    uint8_t l_959 = 0xE4L;
    const uint16_t *l_1006[2];
    const uint16_t * const *l_1005 = &l_1006[1];
    union U2 l_1009 = {0x4A992D0AL};
    int16_t *l_1022 = &g_181.f4;
    const int16_t l_1023 = 0L;
    const uint8_t l_1024 = 0x99L;
    int8_t l_1025 = 0x25L;
    const int32_t l_1026[2][7][1] = {{{0x218A56C6L},{0L},{0x218A56C6L},{0L},{0x218A56C6L},{0L},{0x218A56C6L}},{{0L},{0x218A56C6L},{0L},{0x218A56C6L},{0L},{0x218A56C6L},{0L}}};
    uint8_t l_1035 = 3UL;
    int8_t l_1120 = (-1L);
    union U2 l_1121 = {0x9CB199ABL};
    int16_t l_1125[3];
    uint8_t l_1133 = 0xB6L;
    uint16_t l_1172 = 65535UL;
    uint16_t **l_1215 = &g_593;
    uint32_t l_1276 = 4UL;
    int16_t l_1302 = 0x0B16L;
    uint16_t l_1332 = 0x101DL;
    uint32_t * const *l_1364 = &g_1326;
    uint32_t l_1392 = 4294967295UL;
    uint32_t l_1397 = 0x52BECEE6L;
    uint8_t l_1433 = 0x91L;
    int i, j, k;
    for (i = 0; i < 7; i++)
        l_687[i] = &g_390;
    for (i = 0; i < 2; i++)
        l_1006[i] = &l_770.f2;
    for (i = 0; i < 3; i++)
        l_1125[i] = (-9L);
    return (*g_201);
}


/* ------------------------------------------ */
/* 
 * reads : g_75 g_181.f4 g_78 g_102 g_11 g_76 g_231 g_582 g_209 g_586 g_575 g_592 g_593 g_537 g_83 g_82 g_468 g_66 g_202.f1 g_71 g_77 g_16 g_261 g_202 g_649.f0 g_183 g_181 g_9 g_574 g_666 g_668 g_547
 * writes: g_75 g_181.f4 g_102 g_135 g_11 g_574 g_586 g_231 g_468 g_83 g_390 g_16 g_66 g_71 g_78 g_547 g_77 g_209 g_648
 */
static const int32_t * func_29(int32_t ** p_30, int32_t * p_31, int32_t * p_32, uint32_t  p_33)
{ /* block id: 356 */
    int32_t l_563[3];
    union U2 ***l_623[10][4][1];
    const union U1 *l_647 = &g_202;
    int32_t l_660 = 0x63F79464L;
    union U0 l_661 = {1UL};
    int32_t **l_667 = (void*)0;
    int i, j, k;
    for (i = 0; i < 3; i++)
        l_563[i] = 0xBA602EADL;
    for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 4; j++)
        {
            for (k = 0; k < 1; k++)
                l_623[i][j][k] = (void*)0;
        }
    }
    for (g_75 = (-22); (g_75 >= (-9)); g_75 = safe_add_func_int8_t_s_s(g_75, 8))
    { /* block id: 359 */
        uint32_t l_584 = 1UL;
        uint8_t l_607 = 0xA7L;
        uint16_t l_610 = 0x2FA4L;
        int32_t **l_637 = &g_83[6][8];
        const int32_t **l_638 = &g_16;
        uint16_t *l_644 = &g_135;
        union U1 *l_650 = &g_202;
        union U2 l_651 = {4L};
        for (g_181.f4 = 6; (g_181.f4 >= 2); g_181.f4 -= 1)
        { /* block id: 362 */
            union U2 *l_567 = &g_9[0];
            int32_t * const *l_581[1];
            int16_t l_585 = 0x9959L;
            const int32_t **l_599 = &g_16;
            union U1 l_633 = {0L};
            int i, j;
            for (i = 0; i < 1; i++)
                l_581[i] = &g_83[0][9];
            if (g_78[g_181.f4][g_181.f4])
            { /* block id: 363 */
                const int32_t *l_561[5];
                union U2 l_583 = {0x0E2EE145L};
                int i;
                for (i = 0; i < 5; i++)
                    l_561[i] = &g_11;
                for (g_102 = 0; (g_102 <= 6); g_102 += 1)
                { /* block id: 366 */
                    const int32_t **l_562[7][9][2] = {{{(void*)0,(void*)0},{&l_561[2],&l_561[2]},{&l_561[2],&l_561[4]},{&l_561[0],&l_561[2]},{&l_561[2],&l_561[0]},{(void*)0,&l_561[2]},{&l_561[2],&l_561[4]},{&l_561[0],(void*)0},{(void*)0,&l_561[0]}},{{&l_561[2],&l_561[2]},{&l_561[2],(void*)0},{&l_561[2],&l_561[2]},{&l_561[2],(void*)0},{&l_561[2],&l_561[2]},{&l_561[2],(void*)0},{&l_561[0],(void*)0},{&l_561[2],&l_561[4]},{&l_561[2],&l_561[2]}},{{&l_561[0],&l_561[4]},{&l_561[2],&l_561[2]},{(void*)0,&l_561[4]},{&l_561[2],&l_561[2]},{&l_561[0],(void*)0},{&l_561[0],&l_561[2]},{&l_561[2],&l_561[0]},{&l_561[2],(void*)0},{&l_561[2],&l_561[0]}},{{&l_561[2],(void*)0},{&l_561[2],&l_561[4]},{&l_561[2],(void*)0},{&l_561[0],(void*)0},{&l_561[2],&l_561[2]},{&l_561[2],&l_561[4]},{(void*)0,&l_561[2]},{&l_561[2],&l_561[0]},{&l_561[0],&l_561[2]}},{{&l_561[2],&l_561[4]},{(void*)0,(void*)0},{&l_561[0],&l_561[0]},{&l_561[2],&l_561[2]},{&l_561[2],(void*)0},{&l_561[2],&l_561[2]},{&l_561[2],(void*)0},{&l_561[2],&l_561[2]},{&l_561[2],(void*)0}},{{(void*)0,(void*)0},{&l_561[2],&l_561[0]},{&l_561[2],&l_561[2]},{(void*)0,&l_561[4]},{(void*)0,&l_561[2]},{&l_561[0],&l_561[4]},{&l_561[2],&l_561[2]},{(void*)0,(void*)0},{(void*)0,&l_561[2]}},{{&l_561[2],&l_561[0]},{&l_561[2],(void*)0},{&l_561[2],(void*)0},{&l_561[2],(void*)0},{&l_561[2],&l_561[4]},{&l_561[2],(void*)0},{(void*)0,(void*)0},{&l_561[2],&l_561[2]},{&l_561[2],&l_561[4]}}};
                    int i, j, k;
                    l_561[2] = (g_78[g_102][(g_181.f4 + 2)] , l_561[2]);
                }
                for (g_135 = 0; (g_135 <= 6); g_135 += 1)
                { /* block id: 385 */
                    uint16_t *l_578[9] = {(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0};
                    uint16_t **l_591 = &l_578[5];
                    int i;
                    if (l_563[1])
                        break;
                    if (((**p_30) = (**p_30)))
                    { /* block id: 388 */
                        const uint32_t *l_570 = (void*)0;
                        const uint32_t *l_572 = &g_573;
                        const uint32_t **l_571[7][6] = {{&l_572,&l_572,&l_572,&l_572,&l_572,&l_572},{&l_572,&l_572,&l_572,&l_572,&l_572,&l_572},{&l_572,&l_572,&l_572,&l_572,&l_572,&l_572},{&l_572,&l_572,&l_572,&l_572,&l_572,&l_572},{&l_572,&l_572,&l_572,&l_572,&l_572,&l_572},{&l_572,&l_572,&l_572,&l_572,&l_572,&l_572},{&l_572,&l_572,&l_572,&l_572,&l_572,&l_572}};
                        union U0 ****l_588 = &g_586;
                        uint8_t *l_594 = &l_583.f1;
                        union U2 l_595 = {0L};
                        int i, j;
                        l_584 = (((safe_rshift_func_uint16_t_u_s((((p_32 == (g_574 = (l_570 = &g_547))) ^ ((**p_30) = (0UL & (safe_div_func_int8_t_s_s(g_76[3], g_231))))) > g_78[g_181.f4][g_181.f4]), 1)) & (l_578[6] != (func_45((safe_mul_func_uint16_t_u_u((((l_581[0] == &p_31) >= 0x707B488DL) <= g_76[3]), p_33)), g_582, l_583, &g_83[0][9], p_33) , &g_135))) && p_33);
                        (**p_30) &= (((g_209 , 65535UL) || l_585) && (func_45((((*l_588) = g_586) == &g_587), ((*g_593) &= (((&g_82 != &p_30) ^ (l_563[0] = ((*l_594) = (safe_mul_func_int8_t_s_s(g_575, (l_591 == g_592)))))) <= 0x9676L)), l_595, &g_83[0][9], l_584) && l_563[2]));
                        return (*g_537);
                    }
                    else
                    { /* block id: 399 */
                        if (l_563[0])
                            break;
                    }
                    if ((**p_30))
                    { /* block id: 402 */
                        return (*g_82);
                    }
                    else
                    { /* block id: 404 */
                        (*p_32) = ((**p_30) &= 0L);
                    }
                }
                return (*p_30);
            }
            else
            { /* block id: 410 */
                uint32_t l_601 = 4294967293UL;
                int16_t l_606 = 0x86ADL;
                uint32_t *l_618 = &g_547;
                int16_t *l_619 = &g_77;
                union U2 * const **l_622 = (void*)0;
                union U2 ****l_624[6][1];
                int32_t l_625 = 7L;
                int i, j;
                for (i = 0; i < 6; i++)
                {
                    for (j = 0; j < 1; j++)
                        l_624[i][j] = &l_623[6][0][0];
                }
                (*g_537) = (*g_537);
                for (g_390 = 0; (g_390 <= 6); g_390 += 1)
                { /* block id: 414 */
                    const union U0 *l_596[8] = {&g_181,&g_181,&g_181,&g_181,&g_181,&g_181,&g_181,&g_181};
                    const union U0 **l_597 = &l_596[7];
                    union U1 l_598 = {0xBA0F4ADFL};
                    int32_t l_600 = (-8L);
                    const uint16_t l_604 = 0x3537L;
                    int i;
                    (*l_597) = l_596[7];
                    if (func_55(((*p_32) && 0xDACB73B6L), l_598, func_61((+(l_563[2] & p_33)), l_599), g_202.f1))
                    { /* block id: 416 */
                        uint8_t l_605 = 0x27L;
                        l_601--;
                        if (l_601)
                            break;
                        l_605 = l_604;
                    }
                    else
                    { /* block id: 420 */
                        if (l_606)
                            break;
                        if (l_607)
                            break;
                        (*p_32) = (0x66L || 251UL);
                        (**p_30) ^= (g_77 & l_584);
                    }
                    (**p_30) ^= l_563[0];
                    (**p_30) ^= (*p_32);
                }
                (**p_30) = ((safe_div_func_uint8_t_u_u(l_610, (safe_div_func_int16_t_s_s((g_209 = (safe_unary_minus_func_uint8_t_u(((safe_mod_func_int16_t_s_s(((*l_619) = (((*l_618) = (safe_add_func_uint32_t_u_u(p_33, l_606))) & (l_610 >= 254UL))), 0xFB78L)) == (*p_32))))), (safe_mul_func_int16_t_s_s((((l_622 == (l_623[2][1][0] = l_623[6][0][0])) <= 5L) , (-7L)), 0x2D99L)))))) < 0x64L);
                for (g_547 = 0; (g_547 <= 6); g_547 += 1)
                { /* block id: 436 */
                    union U1 l_634 = {0x8542DBDAL};
                    union U2 l_636 = {1L};
                    uint32_t l_639 = 0x3777B03DL;
                    for (g_71 = 0; (g_71 <= 6); g_71 += 1)
                    { /* block id: 439 */
                        l_625 = (**p_30);
                    }
                    for (g_77 = 0; (g_77 <= 6); g_77 += 1)
                    { /* block id: 444 */
                        union U2 l_626 = {0x7E9C8075L};
                        int32_t *l_635 = &g_102;
                    }
                    return (*g_82);
                }
            }
        }
        (*l_638) = func_2(((safe_mul_func_int16_t_s_s(g_231, ((((((**l_638) , (**p_30)) <= (((*l_644) = p_33) > (safe_div_func_uint32_t_u_u(func_55(g_78[6][6], (*g_261), (*l_637), ((((g_648 = l_647) == l_650) & g_582) && 1L)), (**p_30))))) >= 0x11L) != 0x1AC1L) | 4294967290UL))) , g_649.f0), l_651, (*g_82), (*g_183), (*l_650));
    }
    (**p_30) |= (func_45(((+((safe_mod_func_uint8_t_u_u(l_563[0], (safe_mul_func_int8_t_s_s((safe_add_func_int16_t_s_s((-2L), func_45((safe_mul_func_int16_t_s_s((l_660 = l_563[2]), p_33)), (*g_593), ((l_661 , (safe_add_func_uint16_t_u_u(0UL, (safe_lshift_func_uint8_t_u_u(p_33, 5))))) , (((p_33 ^ 0xBAEAL) & g_202.f1) , g_9[2])), &g_83[0][9], (*g_574)))), l_563[2])))) != 7UL)) & g_666), (**g_592), g_9[0], l_667, p_33) <= g_668);
    return (*p_30);
}


/* ------------------------------------------ */
/* 
 * reads : g_181.f4 g_209 g_202.f0 g_11 g_181.f2 g_144 g_83 g_201 g_202 g_537
 * writes: g_181.f4 g_144 g_547 g_390 g_135 g_66 g_16 g_83
 */
static int32_t * func_36(int32_t ** p_37)
{ /* block id: 342 */
    int16_t *l_541[5] = {&g_77,&g_77,&g_77,&g_77,&g_77};
    int32_t l_542 = 1L;
    int32_t l_543 = 1L;
    int32_t *l_544 = &g_144;
    union U0 l_545 = {0x4F299A70L};
    uint32_t *l_546 = &g_547;
    int8_t *l_548 = &g_390;
    uint16_t *l_549 = &g_135;
    uint32_t l_550 = 1UL;
    union U2 l_551[10][4] = {{{-1L},{-1L},{0x1487E6D1L},{0x1487E6D1L}},{{0x008F65D1L},{-1L},{0x1487E6D1L},{-1L}},{{-1L},{1L},{-1L},{7L}},{{0x9D8FA7ECL},{1L},{0x9D8FA7ECL},{-1L}},{{-1L},{0x008F65D1L},{-1L},{0x9D8FA7ECL}},{{-1L},{7L},{-1L},{-1L}},{{-1L},{0x008F65D1L},{-1L},{0x008F65D1L}},{{-1L},{1L},{0x008F65D1L},{0x1487E6D1L}},{{0x1487E6D1L},{0x1487E6D1L},{-1L},{-1L}},{{0x9D8FA7ECL},{-1L},{-1L},{-1L}}};
    int32_t *l_552[5][10] = {{&g_144,&l_543,&l_543,&l_542,&l_543,&l_543,&g_11,&l_545.f3,&l_542,&l_542},{&l_542,&l_545.f3,&l_543,&l_545.f3,&l_545.f3,&g_144,&l_545.f3,&g_468,&l_543,&l_542},{&g_468,&l_542,&g_144,&l_545.f3,&l_543,&g_468,&l_545.f3,&g_11,&l_545.f3,&g_468},{&l_542,&l_545.f3,&l_545.f3,&l_545.f3,&l_542,&l_545.f3,&g_11,&l_545.f3,&l_543,&g_144},{&l_542,&l_543,&g_468,&l_545.f3,&g_11,&g_468,&g_468,&l_545.f3,&g_144,&g_11}};
    uint32_t l_553 = 8UL;
    uint8_t *l_554 = &g_66[0];
    uint16_t l_557[3];
    int i, j;
    for (i = 0; i < 3; i++)
        l_557[i] = 3UL;
    (*l_544) = (((func_45(((safe_mod_func_int16_t_s_s((l_542 &= (g_181.f4 &= 0x1366L)), l_543)) & (l_543 | (((*l_544) = 0x6B1D3010L) == ((l_545 , 0xF9L) < (((*l_546) = l_543) >= ((65535UL >= ((*l_549) = (((*l_548) = g_209) || g_202.f0))) ^ l_550)))))), g_11, l_551[7][0], p_37, l_545.f3) || g_181.f2) == l_545.f0) == g_11);
    l_553 ^= (*l_544);
    if (g_144)
        goto lbl_558;
lbl_558:
    g_16 = func_2(((*l_554) = (*l_544)), l_551[8][3], (*p_37), (((safe_lshift_func_uint16_t_u_u((((&g_181 == (l_545 , &g_181)) == (*l_544)) <= 65526UL), 3)) ^ ((!((*l_544) | l_557[1])) <= (*l_544))) , l_545), (*g_201));
    (*g_537) = (*p_37);
    return (*g_537);
}


/* ------------------------------------------ */
/* 
 * reads : g_11 g_77 g_16 g_71 g_82
 * writes:
 */
static int32_t ** func_38(int16_t  p_39, int8_t  p_40, union U2  p_41, union U0  p_42)
{ /* block id: 19 */
    union U2 l_87 = {-6L};
    int16_t l_92 = 0x69BAL;
    int32_t *l_101[5][9][5] = {{{&g_102,&g_11,&g_11,&g_11,(void*)0},{(void*)0,&g_102,(void*)0,&g_102,&g_102},{(void*)0,(void*)0,&g_102,&g_11,&g_11},{&g_11,&g_11,(void*)0,&g_11,&g_11},{&g_102,&g_11,&g_102,&g_11,&g_102},{&g_102,&g_11,&g_102,&g_11,(void*)0},{&g_11,&g_102,(void*)0,&g_11,&g_102},{&g_102,&g_102,&g_102,(void*)0,&g_11},{&g_102,&g_102,&g_11,&g_11,(void*)0}},{{&g_102,(void*)0,&g_11,&g_11,(void*)0},{&g_102,&g_102,&g_102,&g_11,&g_11},{&g_11,&g_11,&g_11,&g_11,&g_102},{&g_11,&g_102,&g_11,&g_11,&g_102},{&g_102,&g_11,&g_102,&g_102,&g_102},{(void*)0,&g_102,&g_102,&g_11,&g_11},{&g_11,&g_102,&g_102,(void*)0,&g_11},{&g_11,&g_102,(void*)0,(void*)0,&g_11},{(void*)0,&g_102,&g_102,&g_11,&g_11}},{{&g_102,&g_11,&g_102,&g_11,&g_11},{&g_102,&g_102,&g_102,&g_102,&g_11},{&g_102,&g_102,&g_11,&g_102,&g_102},{&g_11,(void*)0,&g_102,&g_102,&g_102},{&g_11,&g_11,&g_11,&g_102,&g_102},{&g_102,&g_11,&g_102,&g_102,&g_11},{&g_102,&g_102,&g_102,&g_102,(void*)0},{&g_102,(void*)0,(void*)0,&g_11,&g_102},{&g_102,&g_102,(void*)0,(void*)0,&g_11}},{{&g_102,(void*)0,&g_11,&g_102,&g_11},{&g_102,&g_102,(void*)0,&g_102,&g_102},{&g_102,(void*)0,(void*)0,&g_11,&g_102},{&g_102,&g_11,&g_11,(void*)0,&g_11},{&g_102,(void*)0,&g_102,&g_11,(void*)0},{&g_11,&g_102,&g_102,&g_102,(void*)0},{&g_11,&g_11,&g_102,&g_102,&g_102},{&g_102,&g_11,&g_11,&g_102,&g_102},{&g_102,&g_102,&g_11,&g_11,&g_102}},{{(void*)0,&g_11,&g_102,(void*)0,&g_102},{(void*)0,&g_11,&g_102,&g_102,&g_102},{&g_102,&g_102,&g_102,&g_102,&g_11},{&g_102,&g_11,&g_102,&g_11,&g_102},{&g_11,&g_11,&g_102,&g_11,&g_102},{&g_11,&g_102,&g_102,&g_11,&g_102},{(void*)0,(void*)0,(void*)0,&g_102,&g_102},{(void*)0,&g_102,(void*)0,&g_11,&g_102},{&g_11,&g_102,&g_102,&g_102,&g_102}}};
    uint32_t l_103 = 0xBDDE1E78L;
    int8_t l_114 = 0xFAL;
    uint32_t l_158 = 7UL;
    union U0 *l_180 = &g_181;
    union U1 l_193 = {1L};
    int32_t *l_196 = &g_102;
    uint32_t l_212 = 0xCC8533B4L;
    uint16_t l_263 = 0x3F35L;
    int32_t **l_294 = (void*)0;
    int32_t ***l_295 = (void*)0;
    int32_t ***l_296 = (void*)0;
    int32_t ***l_297 = &g_82;
    const int32_t **l_298[9] = {&g_16,&g_16,&g_16,&g_16,&g_16,&g_16,&g_16,&g_16,&g_16};
    union U2 **l_324 = &g_282;
    union U2 **l_325 = &g_282;
    union U1 l_467 = {0x564CF22EL};
    uint32_t l_497 = 0xAD274BE0L;
    int32_t l_502[2];
    int16_t l_536 = 7L;
    int i, j, k;
    for (i = 0; i < 2; i++)
        l_502[i] = 1L;
    l_103 |= ((((l_87 , p_42) , p_42) , ((g_11 != g_11) != (safe_lshift_func_uint16_t_u_s((g_77 , (safe_mul_func_int8_t_s_s((l_92 < l_92), (safe_mul_func_uint16_t_u_u((safe_lshift_func_uint8_t_u_u(((safe_div_func_int32_t_s_s((safe_div_func_int16_t_s_s((((p_41.f0 = p_42.f4) | (*g_16)) == 0xF910L), g_71)), 0xBA0E3889L)) | 0UL), l_92)), l_92))))), 9)))) ^ 0x556CL);
    return (*l_297);
}


/* ------------------------------------------ */
/* 
 * reads :
 * writes:
 */
static int8_t  func_45(uint8_t  p_46, uint16_t  p_47, union U2  p_48, int32_t ** p_49, const uint32_t  p_50)
{ /* block id: 16 */
    return p_50;
}


/* ------------------------------------------ */
/* 
 * reads : g_71 g_78
 * writes: g_71 g_78
 */
static int8_t  func_55(uint8_t  p_56, union U1  p_57, int32_t * p_58, uint8_t  p_59)
{ /* block id: 12 */
    int16_t l_69 = 1L;
    int32_t *l_70[8] = {&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11,&g_11};
    int8_t l_74[4][7] = {{4L,4L,4L,4L,4L,4L,4L},{5L,(-5L),5L,(-5L),5L,(-5L),5L},{4L,4L,4L,4L,4L,4L,4L},{5L,(-5L),5L,(-5L),5L,(-5L),5L}};
    int32_t l_81 = 1L;
    int i, j;
    g_71++;
    ++g_78[2][2];
    return l_81;
}


/* ------------------------------------------ */
/* 
 * reads : g_66
 * writes: g_16 g_66
 */
static int32_t * func_61(int16_t  p_62, const int32_t ** p_63)
{ /* block id: 8 */
    int32_t *l_64 = &g_11;
    int32_t *l_65[1];
    int i;
    for (i = 0; i < 1; i++)
        l_65[i] = &g_11;
    (*p_63) = l_64;
    ++g_66[0];
    return l_64;
}




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

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

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

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

        }
    }
    transparent_crc(g_102, "g_102", print_hash_value);
    transparent_crc(g_135, "g_135", print_hash_value);
    transparent_crc(g_144, "g_144", print_hash_value);
    transparent_crc(g_160, "g_160", print_hash_value);
    transparent_crc(g_181.f2, "g_181.f2", print_hash_value);
    transparent_crc(g_181.f4, "g_181.f4", print_hash_value);
    transparent_crc(g_202.f0, "g_202.f0", print_hash_value);
    transparent_crc(g_202.f1, "g_202.f1", print_hash_value);
    transparent_crc(g_209, "g_209", print_hash_value);
    transparent_crc(g_211, "g_211", print_hash_value);
    transparent_crc(g_231, "g_231", print_hash_value);
    transparent_crc(g_328, "g_328", print_hash_value);
    transparent_crc(g_390, "g_390", print_hash_value);
    transparent_crc(g_468, "g_468", print_hash_value);
    transparent_crc(g_547, "g_547", print_hash_value);
    transparent_crc(g_573, "g_573", print_hash_value);
    transparent_crc(g_575, "g_575", print_hash_value);
    transparent_crc(g_582, "g_582", print_hash_value);
    transparent_crc(g_649.f0, "g_649.f0", print_hash_value);
    transparent_crc(g_649.f1, "g_649.f1", print_hash_value);
    transparent_crc(g_666, "g_666", print_hash_value);
    transparent_crc(g_668, "g_668", print_hash_value);
    transparent_crc(g_756, "g_756", print_hash_value);
    transparent_crc(g_860, "g_860", print_hash_value);
    transparent_crc(g_894, "g_894", print_hash_value);
    transparent_crc(g_947, "g_947", print_hash_value);
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 3; j++)
        {
            transparent_crc(g_966[i][j], "g_966[i][j]", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

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

        }
    }
    transparent_crc(g_1124, "g_1124", print_hash_value);
    transparent_crc(g_1254, "g_1254", print_hash_value);
    transparent_crc(g_1294, "g_1294", print_hash_value);
    transparent_crc(g_1418, "g_1418", print_hash_value);
    transparent_crc(g_1501, "g_1501", print_hash_value);
    transparent_crc(g_1597, "g_1597", print_hash_value);
    transparent_crc(g_1613, "g_1613", print_hash_value);
    for (i = 0; i < 1; i++)
    {
        transparent_crc(g_1665[i], "g_1665[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: 0
breakdown:
   depth: 0, occurrence: 592
XXX total union variables: 93

XXX non-zero bitfields defined in structs: 1
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: 68
breakdown:
   indirect level: 0, occurrence: 51
   indirect level: 1, occurrence: 5
   indirect level: 2, occurrence: 5
   indirect level: 3, occurrence: 5
   indirect level: 4, occurrence: 2
XXX full-bitfields structs in the program: 0
breakdown:
XXX times a bitfields struct's address is taken: 23
XXX times a bitfields struct on LHS: 4
XXX times a bitfields struct on RHS: 99
XXX times a single bitfield on LHS: 18
XXX times a single bitfield on RHS: 43

XXX max expression depth: 41
breakdown:
   depth: 1, occurrence: 83
   depth: 2, occurrence: 20
   depth: 6, occurrence: 1
   depth: 7, occurrence: 2
   depth: 9, occurrence: 1
   depth: 16, occurrence: 1
   depth: 17, occurrence: 1
   depth: 19, occurrence: 1
   depth: 20, occurrence: 1
   depth: 23, occurrence: 1
   depth: 24, occurrence: 1
   depth: 25, occurrence: 1
   depth: 26, occurrence: 1
   depth: 35, occurrence: 1
   depth: 41, occurrence: 1

XXX total number of pointers: 403

XXX times a variable address is taken: 932
XXX times a pointer is dereferenced on RHS: 354
breakdown:
   depth: 1, occurrence: 286
   depth: 2, occurrence: 54
   depth: 3, occurrence: 10
   depth: 4, occurrence: 4
XXX times a pointer is dereferenced on LHS: 297
breakdown:
   depth: 1, occurrence: 272
   depth: 2, occurrence: 21
   depth: 3, occurrence: 4
XXX times a pointer is compared with null: 26
XXX times a pointer is compared with address of another variable: 7
XXX times a pointer is compared with another pointer: 10
XXX times a pointer is qualified to be dereferenced: 6446

XXX max dereference level: 4
breakdown:
   level: 0, occurrence: 0
   level: 1, occurrence: 1057
   level: 2, occurrence: 375
   level: 3, occurrence: 48
   level: 4, occurrence: 15
XXX number of pointers point to pointers: 164
XXX number of pointers point to scalars: 201
XXX number of pointers point to structs: 0
XXX percent of pointers has null in alias set: 31
XXX average alias set size: 1.41

XXX times a non-volatile is read: 2062
XXX times a non-volatile is write: 900
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: 12

XXX stmts: 80
XXX max block depth: 5
breakdown:
   depth: 0, occurrence: 27
   depth: 1, occurrence: 4
   depth: 2, occurrence: 7
   depth: 3, occurrence: 14
   depth: 4, occurrence: 14
   depth: 5, occurrence: 14

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

