/*
 * 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:      4209279686
 */

#include "csmith.h"


static long __undefined;

/* --- Struct/Union Declarations --- */
struct S0 {
   int8_t  f0;
   int32_t  f1;
   const int32_t  f2;
   const int32_t  f3;
   uint32_t  f4;
   uint16_t  f5;
   const uint32_t  f6;
   uint8_t  f7;
   unsigned f8 : 31;
   const int16_t  f9;
};

struct S1 {
   int8_t  f0;
   uint32_t  f1;
   unsigned f2 : 26;
   struct S0  f3;
   struct S0  f4;
   uint8_t  f5;
};

struct S2 {
   unsigned f0 : 7;
   unsigned f1 : 8;
   signed f2 : 23;
   const signed f3 : 10;
};

union U3 {
   int8_t * f0;
   const int32_t  f1;
};

union U4 {
   const uint32_t  f0;
   const uint32_t  f1;
   const int8_t  f2;
   int32_t  f3;
   int8_t * f4;
};

/* --- GLOBAL VARIABLES --- */
static uint32_t g_8 = 1UL;
static int8_t g_10 = 5L;
static int8_t *g_9 = &g_10;
static struct S2 g_17 = {9,0,-2127,15};
static struct S1 g_38 = {-5L,1UL,6440,{8L,7L,1L,0L,0xF4F6E089L,65526UL,0xECB2DECAL,0x65L,42219,2L},{0x2DL,-1L,0xF2FEC8B6L,0xE3C6AA55L,0x6935E7B0L,0x9BDDL,0xDE950740L,0x28L,44369,0L},0UL};
static union U4 g_53 = {5UL};
static int32_t g_58[5][10] = {{0xACE7FEFAL,0x13C76A60L,0xACE7FEFAL,(-3L),0xACE7FEFAL,0xC4D3BBE6L,1L,0x13C76A60L,0x13C76A60L,0x8475ADB6L},{0xCFC51725L,(-3L),0x8475ADB6L,0x8475ADB6L,0xE36C3AAFL,0L,0xE36C3AAFL,0x8475ADB6L,0xE36C3AAFL,(-3L)},{1L,0xCFC51725L,0xC4D3BBE6L,0xC4D3BBE6L,0x8475ADB6L,0L,1L,1L,(-3L),0xCFC51725L},{0xC4D3BBE6L,0xACE7FEFAL,0xACE7FEFAL,0L,0x8475ADB6L,0L,0xACE7FEFAL,0L,0xCFC51725L,(-3L)},{(-3L),1L,1L,0L,0xE36C3AAFL,0xCFC51725L,0xCFC51725L,0x13C76A60L,(-3L),0x13C76A60L}};
static int32_t g_60 = (-3L);
static union U3 g_62 = {0};
static uint32_t g_76 = 4294967295UL;
static int16_t g_84 = 0x7E28L;
static int8_t g_116 = 0xD4L;
static uint32_t g_117 = 4294967290UL;
static union U4 g_123 = {4294967295UL};
static union U4 *g_122 = &g_123;
static int16_t g_145 = 8L;
static uint8_t g_153 = 0x17L;
static int8_t g_161 = 0x08L;
static int32_t g_162 = 0x17290AB1L;
static uint8_t **g_168 = (void*)0;
static uint8_t *g_171 = &g_38.f3.f7;
static uint8_t **g_170[10][6][4] = {{{&g_171,&g_171,&g_171,(void*)0},{&g_171,&g_171,&g_171,&g_171},{&g_171,&g_171,&g_171,(void*)0},{&g_171,(void*)0,&g_171,&g_171},{&g_171,&g_171,&g_171,&g_171},{&g_171,&g_171,&g_171,&g_171}},{{&g_171,(void*)0,(void*)0,(void*)0},{&g_171,(void*)0,&g_171,(void*)0},{&g_171,(void*)0,&g_171,&g_171},{&g_171,&g_171,&g_171,&g_171},{&g_171,(void*)0,(void*)0,&g_171},{&g_171,&g_171,&g_171,(void*)0}},{{&g_171,&g_171,(void*)0,&g_171},{(void*)0,(void*)0,&g_171,&g_171},{&g_171,&g_171,&g_171,&g_171},{&g_171,&g_171,&g_171,&g_171},{&g_171,&g_171,(void*)0,(void*)0},{(void*)0,&g_171,&g_171,(void*)0}},{{&g_171,&g_171,&g_171,&g_171},{&g_171,(void*)0,&g_171,&g_171},{&g_171,&g_171,(void*)0,&g_171},{&g_171,&g_171,&g_171,&g_171},{(void*)0,&g_171,&g_171,&g_171},{&g_171,&g_171,(void*)0,&g_171}},{{&g_171,&g_171,&g_171,&g_171},{(void*)0,&g_171,&g_171,&g_171},{(void*)0,&g_171,&g_171,&g_171},{&g_171,&g_171,&g_171,&g_171},{&g_171,(void*)0,(void*)0,(void*)0},{&g_171,&g_171,&g_171,(void*)0}},{{&g_171,&g_171,&g_171,&g_171},{&g_171,&g_171,(void*)0,&g_171},{(void*)0,&g_171,&g_171,&g_171},{&g_171,&g_171,&g_171,&g_171},{&g_171,&g_171,&g_171,&g_171},{(void*)0,&g_171,&g_171,&g_171}},{{(void*)0,&g_171,&g_171,(void*)0},{&g_171,&g_171,&g_171,&g_171},{&g_171,&g_171,&g_171,&g_171},{&g_171,&g_171,(void*)0,&g_171},{&g_171,&g_171,&g_171,&g_171},{&g_171,&g_171,&g_171,(void*)0}},{{&g_171,&g_171,&g_171,&g_171},{&g_171,&g_171,&g_171,&g_171},{&g_171,&g_171,&g_171,(void*)0},{&g_171,&g_171,&g_171,&g_171},{&g_171,&g_171,&g_171,&g_171},{&g_171,&g_171,&g_171,&g_171}},{{&g_171,(void*)0,&g_171,&g_171},{&g_171,(void*)0,&g_171,&g_171},{(void*)0,(void*)0,&g_171,(void*)0},{&g_171,&g_171,&g_171,(void*)0},{(void*)0,(void*)0,&g_171,&g_171},{&g_171,&g_171,&g_171,&g_171}},{{&g_171,&g_171,&g_171,&g_171},{&g_171,&g_171,&g_171,&g_171},{(void*)0,&g_171,&g_171,&g_171},{&g_171,(void*)0,&g_171,&g_171},{&g_171,&g_171,&g_171,&g_171},{&g_171,&g_171,(void*)0,&g_171}}};
static uint32_t g_187 = 3UL;
static uint16_t g_192[3] = {0xF355L,0xF355L,0xF355L};
static struct S0 g_261 = {0x22L,1L,-9L,-7L,0UL,0x2A46L,0x8F22B6FFL,255UL,20777,0xB79CL};
static const int32_t g_287 = (-1L);
static const int32_t *g_286[10] = {&g_287,&g_287,&g_287,&g_287,&g_287,&g_287,&g_287,&g_287,&g_287,&g_287};
static uint32_t g_325 = 1UL;
static int8_t g_331 = 0L;
static uint32_t g_333 = 3UL;
static int32_t g_337 = 0x53F86A5FL;
static int32_t g_349 = 0x02F9AF2DL;
static struct S0 *g_356[3][2] = {{&g_261,&g_261},{&g_261,&g_261},{&g_261,&g_261}};
static struct S0 **g_355 = &g_356[0][0];
static int8_t g_382 = (-1L);
static union U3 g_388 = {0};
static int32_t g_409[1][1] = {{(-1L)}};
static uint8_t g_410 = 0x81L;
static uint32_t g_445[3][2][4] = {{{0xBA4605DFL,0x998E6834L,0x998E6834L,4294967287UL},{4294967295UL,7UL,4294967287UL,0x998E6834L}},{{0UL,4294967287UL,4294967287UL,4294967295UL},{4294967295UL,7UL,0xBA4605DFL,7UL}},{{4294967287UL,0xE2F7F8A9L,7UL,7UL},{7UL,7UL,0xBA4605DFL,0UL}}};
static uint16_t g_455 = 0x9FF4L;
static union U3 * const g_473 = (void*)0;
static union U3 * const *g_472 = &g_473;
static uint8_t g_483[4][3] = {{0UL,0x75L,0x75L},{0x57L,255UL,255UL},{251UL,0x75L,0UL},{0x57L,255UL,0x57L}};
static struct S1 **g_530 = (void*)0;
static const struct S1 g_533 = {6L,0xE5066F00L,1391,{0xD4L,-1L,0x0E97DB0CL,0x6CB872FAL,0x9A350A8EL,0x4A9CL,4294967295UL,0UL,10917,1L},{-1L,0xE42BE890L,0x5B335014L,6L,7UL,0x00F0L,1UL,255UL,42778,0xE162L},255UL};
static int32_t g_542 = 0x919DE0D3L;
static int8_t g_543 = 0L;
static uint8_t * const ***g_566[3] = {(void*)0,(void*)0,(void*)0};
static struct S1 g_647[2][9] = {{{0x57L,0x7E7015E1L,2488,{0x3CL,1L,0x57ACD286L,1L,0x247B06AFL,0UL,0x7FCC5974L,255UL,20003,-1L},{0x06L,0x936086E8L,5L,0x98AD5550L,0x76346C8FL,0xB046L,0x69E84237L,1UL,1918,7L},0xFDL},{0x57L,0x7E7015E1L,2488,{0x3CL,1L,0x57ACD286L,1L,0x247B06AFL,0UL,0x7FCC5974L,255UL,20003,-1L},{0x06L,0x936086E8L,5L,0x98AD5550L,0x76346C8FL,0xB046L,0x69E84237L,1UL,1918,7L},0xFDL},{0x57L,0x7E7015E1L,2488,{0x3CL,1L,0x57ACD286L,1L,0x247B06AFL,0UL,0x7FCC5974L,255UL,20003,-1L},{0x06L,0x936086E8L,5L,0x98AD5550L,0x76346C8FL,0xB046L,0x69E84237L,1UL,1918,7L},0xFDL},{0x57L,0x7E7015E1L,2488,{0x3CL,1L,0x57ACD286L,1L,0x247B06AFL,0UL,0x7FCC5974L,255UL,20003,-1L},{0x06L,0x936086E8L,5L,0x98AD5550L,0x76346C8FL,0xB046L,0x69E84237L,1UL,1918,7L},0xFDL},{0x57L,0x7E7015E1L,2488,{0x3CL,1L,0x57ACD286L,1L,0x247B06AFL,0UL,0x7FCC5974L,255UL,20003,-1L},{0x06L,0x936086E8L,5L,0x98AD5550L,0x76346C8FL,0xB046L,0x69E84237L,1UL,1918,7L},0xFDL},{0x57L,0x7E7015E1L,2488,{0x3CL,1L,0x57ACD286L,1L,0x247B06AFL,0UL,0x7FCC5974L,255UL,20003,-1L},{0x06L,0x936086E8L,5L,0x98AD5550L,0x76346C8FL,0xB046L,0x69E84237L,1UL,1918,7L},0xFDL},{0x57L,0x7E7015E1L,2488,{0x3CL,1L,0x57ACD286L,1L,0x247B06AFL,0UL,0x7FCC5974L,255UL,20003,-1L},{0x06L,0x936086E8L,5L,0x98AD5550L,0x76346C8FL,0xB046L,0x69E84237L,1UL,1918,7L},0xFDL},{0x57L,0x7E7015E1L,2488,{0x3CL,1L,0x57ACD286L,1L,0x247B06AFL,0UL,0x7FCC5974L,255UL,20003,-1L},{0x06L,0x936086E8L,5L,0x98AD5550L,0x76346C8FL,0xB046L,0x69E84237L,1UL,1918,7L},0xFDL},{0x57L,0x7E7015E1L,2488,{0x3CL,1L,0x57ACD286L,1L,0x247B06AFL,0UL,0x7FCC5974L,255UL,20003,-1L},{0x06L,0x936086E8L,5L,0x98AD5550L,0x76346C8FL,0xB046L,0x69E84237L,1UL,1918,7L},0xFDL}},{{0x92L,4294967293UL,6262,{0xD9L,0x255C6DC9L,0x1C5AC25CL,1L,0UL,65535UL,6UL,0x73L,8645,-1L},{0xF2L,0xE4C62D96L,0x8A6E76C9L,-5L,0x4824E707L,0xC203L,0xDF940BBBL,1UL,628,7L},0xC3L},{0x92L,4294967293UL,6262,{0xD9L,0x255C6DC9L,0x1C5AC25CL,1L,0UL,65535UL,6UL,0x73L,8645,-1L},{0xF2L,0xE4C62D96L,0x8A6E76C9L,-5L,0x4824E707L,0xC203L,0xDF940BBBL,1UL,628,7L},0xC3L},{0x92L,4294967293UL,6262,{0xD9L,0x255C6DC9L,0x1C5AC25CL,1L,0UL,65535UL,6UL,0x73L,8645,-1L},{0xF2L,0xE4C62D96L,0x8A6E76C9L,-5L,0x4824E707L,0xC203L,0xDF940BBBL,1UL,628,7L},0xC3L},{0x92L,4294967293UL,6262,{0xD9L,0x255C6DC9L,0x1C5AC25CL,1L,0UL,65535UL,6UL,0x73L,8645,-1L},{0xF2L,0xE4C62D96L,0x8A6E76C9L,-5L,0x4824E707L,0xC203L,0xDF940BBBL,1UL,628,7L},0xC3L},{0x92L,4294967293UL,6262,{0xD9L,0x255C6DC9L,0x1C5AC25CL,1L,0UL,65535UL,6UL,0x73L,8645,-1L},{0xF2L,0xE4C62D96L,0x8A6E76C9L,-5L,0x4824E707L,0xC203L,0xDF940BBBL,1UL,628,7L},0xC3L},{0x92L,4294967293UL,6262,{0xD9L,0x255C6DC9L,0x1C5AC25CL,1L,0UL,65535UL,6UL,0x73L,8645,-1L},{0xF2L,0xE4C62D96L,0x8A6E76C9L,-5L,0x4824E707L,0xC203L,0xDF940BBBL,1UL,628,7L},0xC3L},{0x92L,4294967293UL,6262,{0xD9L,0x255C6DC9L,0x1C5AC25CL,1L,0UL,65535UL,6UL,0x73L,8645,-1L},{0xF2L,0xE4C62D96L,0x8A6E76C9L,-5L,0x4824E707L,0xC203L,0xDF940BBBL,1UL,628,7L},0xC3L},{0x92L,4294967293UL,6262,{0xD9L,0x255C6DC9L,0x1C5AC25CL,1L,0UL,65535UL,6UL,0x73L,8645,-1L},{0xF2L,0xE4C62D96L,0x8A6E76C9L,-5L,0x4824E707L,0xC203L,0xDF940BBBL,1UL,628,7L},0xC3L},{0x92L,4294967293UL,6262,{0xD9L,0x255C6DC9L,0x1C5AC25CL,1L,0UL,65535UL,6UL,0x73L,8645,-1L},{0xF2L,0xE4C62D96L,0x8A6E76C9L,-5L,0x4824E707L,0xC203L,0xDF940BBBL,1UL,628,7L},0xC3L}}};
static struct S1 g_649 = {-9L,4UL,4663,{3L,0xE03330A8L,0x52F98FABL,-9L,0x6E906C50L,5UL,0xF6CE7D18L,255UL,12315,0x36FAL},{0x69L,5L,0x613F0BAFL,0x2234E18AL,0x90C66E64L,0UL,0x6732634EL,0xACL,5678,0x7A0DL},0x5FL};
static int8_t *g_759[10][6][2] = {{{&g_38.f4.f0,&g_382},{&g_647[0][2].f4.f0,&g_382},{&g_382,&g_261.f0},{&g_543,&g_38.f4.f0},{&g_543,&g_38.f4.f0},{&g_382,&g_647[0][2].f4.f0}},{{&g_647[0][2].f4.f0,&g_647[0][2].f4.f0},{&g_647[0][2].f4.f0,&g_38.f4.f0},{&g_261.f0,&g_382},{&g_261.f0,&g_38.f4.f0},{&g_647[0][2].f4.f0,&g_543},{&g_543,&g_543}},{{&g_647[0][2].f4.f0,&g_382},{&g_38.f4.f0,&g_647[0][2].f4.f0},{&g_38.f4.f0,&g_382},{&g_543,&g_543},{&g_261.f0,&g_261.f0},{&g_543,&g_647[0][2].f4.f0}},{{&g_38.f4.f0,&g_543},{&g_382,&g_647[0][2].f4.f0},{&g_261.f0,&g_261.f0},{&g_38.f4.f0,&g_261.f0},{&g_261.f0,&g_543},{&g_382,&g_261.f0}},{{&g_382,&g_543},{&g_38.f4.f0,&g_38.f4.f0},{&g_382,&g_38.f4.f0},{&g_38.f4.f0,&g_543},{&g_647[0][2].f4.f0,&g_38.f4.f0},{&g_647[0][2].f4.f0,&g_261.f0}},{{&g_38.f4.f0,&g_382},{&g_647[0][2].f4.f0,&g_382},{&g_382,&g_261.f0},{&g_543,&g_38.f4.f0},{&g_543,&g_38.f4.f0},{&g_382,&g_647[0][2].f4.f0}},{{&g_647[0][2].f4.f0,&g_647[0][2].f4.f0},{&g_647[0][2].f4.f0,&g_38.f4.f0},{&g_261.f0,&g_382},{&g_261.f0,&g_382},{&g_647[0][2].f4.f0,&g_543},{&g_543,&g_543}},{{&g_647[0][2].f4.f0,&g_382},{&g_38.f4.f0,&g_647[0][2].f4.f0},{&g_38.f4.f0,&g_382},{&g_543,&g_261.f0},{&g_261.f0,&g_261.f0},{&g_543,&g_647[0][2].f4.f0}},{{&g_38.f4.f0,&g_543},{&g_382,&g_647[0][2].f4.f0},{&g_261.f0,&g_261.f0},{&g_38.f4.f0,&g_38.f4.f0},{&g_261.f0,&g_543},{&g_382,&g_261.f0}},{{&g_382,&g_543},{&g_38.f4.f0,&g_38.f4.f0},{&g_382,&g_38.f4.f0},{&g_38.f4.f0,&g_261.f0},{&g_647[0][2].f4.f0,&g_38.f4.f0},{&g_647[0][2].f4.f0,&g_261.f0}}};
static uint8_t g_839[1][3][6] = {{{0x46L,0x46L,0x46L,0x46L,0x46L,0x46L},{0x46L,0x46L,0x46L,0x46L,0x46L,0x46L},{0x46L,0x46L,0x46L,0x46L,0x46L,0x46L}}};
static uint32_t g_902 = 0x179232C1L;
static const int8_t g_916[4] = {(-10L),(-10L),(-10L),(-10L)};
static const int8_t *g_915 = &g_916[0];
static struct S2 g_955 = {3,2,-1549,20};
static int16_t g_1003 = 0x39B6L;
static uint32_t g_1004 = 4294967295UL;
static uint16_t g_1048 = 0x2CDAL;
static const struct S2 g_1075 = {5,9,-679,15};
static const struct S2 *g_1074[2][3][6] = {{{&g_1075,&g_1075,(void*)0,(void*)0,(void*)0,&g_1075},{&g_1075,&g_1075,(void*)0,&g_1075,(void*)0,&g_1075},{&g_1075,&g_1075,&g_1075,&g_1075,&g_1075,&g_1075}},{{(void*)0,(void*)0,&g_1075,&g_1075,&g_1075,(void*)0},{(void*)0,(void*)0,&g_1075,&g_1075,&g_1075,(void*)0},{&g_1075,&g_1075,&g_1075,(void*)0,&g_1075,&g_1075}}};
static uint16_t g_1137 = 0x8875L;
static int16_t g_1209 = 0x3100L;
static uint32_t g_1211 = 0x04D0F574L;
static uint32_t g_1326[8] = {8UL,8UL,4294967290UL,4294967290UL,4294967290UL,8UL,4294967289UL,4294967289UL};
static int32_t *g_1335 = &g_123.f3;
static uint8_t ** const **g_1357 = (void*)0;
static union U3 *g_1430 = &g_388;
static union U3 **g_1429 = &g_1430;
static uint16_t g_1518 = 0x4317L;
static int32_t g_1530 = 0x10B7CE31L;
static uint32_t g_1531 = 0x82ACE214L;
static int8_t g_1540 = 0x58L;
static int16_t g_1541 = (-1L);
static int32_t g_1542 = 6L;
static int32_t g_1543 = 1L;
static uint32_t g_1544 = 0xBFEB1F21L;
static uint8_t *** const g_1602 = &g_168;
static uint8_t *** const *g_1601[6][10] = {{&g_1602,&g_1602,(void*)0,&g_1602,(void*)0,&g_1602,&g_1602,&g_1602,&g_1602,&g_1602},{(void*)0,&g_1602,&g_1602,&g_1602,(void*)0,&g_1602,&g_1602,&g_1602,&g_1602,&g_1602},{&g_1602,&g_1602,&g_1602,&g_1602,(void*)0,&g_1602,(void*)0,&g_1602,(void*)0,&g_1602},{&g_1602,&g_1602,&g_1602,(void*)0,&g_1602,&g_1602,&g_1602,&g_1602,&g_1602,&g_1602},{&g_1602,(void*)0,&g_1602,&g_1602,&g_1602,&g_1602,&g_1602,(void*)0,&g_1602,(void*)0},{&g_1602,&g_1602,&g_1602,&g_1602,&g_1602,&g_1602,&g_1602,(void*)0,&g_1602,&g_1602}};
static uint8_t ***g_1607 = &g_168;
static uint8_t ****g_1606 = &g_1607;
static union U3 g_1612 = {0};
static uint8_t g_1639 = 254UL;
static uint8_t ** const ***g_1719 = &g_1357;
static uint8_t *g_1730[3][3][10] = {{{&g_1639,&g_38.f5,&g_1639,&g_38.f5,&g_1639,&g_647[0][2].f3.f7,&g_1639,&g_839[0][2][5],&g_1639,&g_839[0][2][5]},{&g_1639,&g_647[0][2].f3.f7,&g_1639,&g_839[0][2][5],&g_1639,&g_647[0][2].f3.f7,&g_153,&g_647[0][2].f3.f7,&g_1639,&g_647[0][2].f3.f7},{&g_1639,&g_647[0][2].f3.f7,&g_1639,&g_38.f5,&g_1639,&g_38.f5,&g_1639,&g_647[0][2].f3.f7,&g_1639,&g_839[0][2][5]}},{{&g_1639,&g_38.f5,&g_153,&g_38.f5,&g_1639,&g_647[0][2].f3.f7,&g_1639,&g_38.f5,&g_1639,&g_38.f5},{&g_1639,&g_647[0][2].f3.f7,&g_153,&g_839[0][2][5],&g_153,&g_647[0][2].f3.f7,&g_153,&g_647[0][2].f3.f7,&g_1639,&g_839[0][2][5]},{&g_1639,&g_839[0][2][5],&g_1639,&g_38.f5,&g_153,&g_38.f5,&g_1639,&g_647[0][2].f3.f7,&g_1639,&g_38.f5}},{{&g_1639,&g_647[0][2].f3.f7,&g_153,&g_38.f5,&g_1639,&g_647[0][2].f3.f7,&g_1639,&g_38.f5,&g_1639,&g_38.f5},{&g_1639,&g_839[0][2][5],&g_153,&g_38.f5,&g_153,&g_647[0][2].f3.f7,&g_1639,&g_647[0][2].f3.f7,&g_153,&g_839[0][2][5]},{&g_1639,&g_839[0][2][5],&g_1639,&g_647[0][2].f3.f7,&g_153,&g_38.f5,&g_1639,&g_647[0][2].f3.f7,&g_1639,&g_38.f5}}};
static uint8_t ** const g_1729 = &g_1730[1][1][4];
static uint8_t ** const *g_1728 = &g_1729;
static uint8_t ** const ** const g_1727 = &g_1728;
static uint8_t ** const ** const *g_1726[4] = {&g_1727,&g_1727,&g_1727,&g_1727};
static union U4 g_1737[1][6][9] = {{{{0xE1638B33L},{1UL},{1UL},{0xEFD37DBAL},{0x58F7CE95L},{1UL},{4294967290UL},{0x9E3275E6L},{4294967290UL}},{{0xAE6C9E42L},{4294967291UL},{0x81417FBDL},{0x81417FBDL},{0x6CB37FA1L},{0x4BDA5DD8L},{0x81417FBDL},{0xAE6C9E42L},{0x7EE91463L}},{{0UL},{0x58F7CE95L},{0UL},{0x58AD4931L},{0x58AD4931L},{1UL},{0xE1638B33L},{0x58AD4931L},{0x58F7CE95L}},{{0x6CB37FA1L},{0x88A64734L},{0x92C7FD6FL},{0x4BDA5DD8L},{0x6CB37FA1L},{0x6CB37FA1L},{4294967291UL},{0xAE6C9E42L},{0x6CB37FA1L}},{{0xE1638B33L},{0x90C43057L},{0x9E3275E6L},{1UL},{4294967290UL},{0x90C43057L},{0x90C43057L},{0x58F7CE95L},{0x58AD4931L}},{{0xF4C3EAE7L},{0x81417FBDL},{0xF4C3EAE7L},{4294967291UL},{8UL},{4294967291UL},{0xF4C3EAE7L},{0xF4C3EAE7L},{0x6CB37FA1L}}}};


/* --- FORWARD DECLARATIONS --- */
static struct S2  func_1(void);
static int32_t  func_2(int16_t  p_3, uint32_t  p_4, union U4  p_5, union U3  p_6, int8_t * p_7);
static union U4  func_11(struct S2  p_12, struct S1  p_13, int8_t  p_14, struct S0  p_15, const int8_t * p_16);
static uint32_t  func_18(struct S1  p_19, int32_t  p_20);
static struct S1  func_21(int32_t  p_22, const int16_t  p_23, uint16_t  p_24);
static int32_t  func_25(int8_t * p_26);
static int8_t * func_27(const union U3  p_28, const union U3  p_29, int8_t * p_30, int8_t * p_31, int8_t  p_32);
static union U3  func_33(int16_t  p_34, struct S1  p_35, int8_t * p_36, int16_t  p_37);
static int8_t * func_39(const int8_t * p_40, int8_t * const  p_41, int8_t  p_42, uint32_t  p_43, union U3  p_44);
static const int8_t * func_45(int8_t * p_46, int32_t  p_47, uint32_t  p_48, union U4  p_49, int8_t  p_50);


/* --- FUNCTIONS --- */
/* ------------------------------------------ */
/* 
 * reads : g_8 g_17 g_38 g_53 g_58 g_53.f3 g_60 g_62 g_76 g_84 g_10 g_117 g_145 g_153 g_168 g_170 g_123.f3 g_187 g_192 g_123.f1 g_123.f2 g_53.f2 g_261.f6 g_261.f7 g_171 g_122 g_123 g_261.f4 g_325 g_333 g_445 g_455 g_388 g_337 g_472 g_116 g_483 g_355 g_356 g_261 g_53.f1 g_349 g_409 g_530 g_533.f3.f7 g_161 g_566 g_533.f3.f6 g_331 g_533.f3.f2 g_533.f5 g_542 g_647.f4.f8 g_533.f4.f1 g_647.f0 g_287 g_647.f3.f3 g_649.f3.f8 g_649.f5 g_649.f4.f0 g_162 g_647.f4.f0 g_647.f5 g_647.f3.f1 g_839 g_382 g_902 g_543 g_649.f3.f0 g_649.f4.f1 g_647.f1 g_647.f4.f5 g_647.f3.f0 g_647.f3.f8 g_647.f2 g_533.f4.f3 g_533 g_1004 g_1048 g_647.f3.f6 g_649.f4.f5 g_647.f3.f7 g_1137 g_649.f4.f9 g_123.f0 g_1211 g_915 g_916 g_649 g_647.f4.f9 g_1003 g_647.f4.f4 g_1326 g_473 g_1335 g_1357 g_1429 g_647.f4.f1 g_1518 g_1531 g_1544
 * writes: g_9 g_53.f3 g_58 g_60 g_76 g_84 g_38.f4.f7 g_38.f4.f1 g_117 g_122 g_38.f3.f1 g_38.f1 g_153 g_168 g_123.f3 g_38.f3.f5 g_38.f4.f0 g_187 g_192 g_10 g_261.f1 g_286 g_145 g_325 g_333 g_38.f3.f7 g_337 g_261.f5 g_445 g_116 g_472 g_483 g_349 g_261.f4 g_38.f5 g_38.f4.f5 g_161 g_542 g_331 g_647.f0 g_649.f3.f1 g_649.f3.f4 g_649.f5 g_649.f4.f1 g_647.f3.f1 g_839 g_38.f0 g_647.f4.f1 g_647.f3.f5 g_647.f5 g_382 g_902 g_543 g_915 g_647.f4.f5 g_647.f3.f0 g_1004 g_759 g_1048 g_38.f4.f4 g_1074 g_649.f4.f8 g_1137 g_649.f4.f0 g_1003 g_1211 g_455 g_356 g_1209 g_647.f4.f4 g_1357 g_1518 g_1531 g_649.f3.f5 g_1430 g_1544 g_261.f7 g_1541 g_170 g_261.f0 g_162 g_1326 g_649.f1 g_1719 g_1726
 */
static struct S2  func_1(void)
{ /* block id: 0 */
    int8_t *l_51 = &g_38.f4.f0;
    int8_t *l_52 = &g_10;
    int32_t l_54 = 0x41C0C234L;
    const union U3 l_458 = {0};
    struct S1 l_1440 = {0xC1L,0xA4EF7133L,1085,{0x91L,0xB7E4206FL,0x52D2BAD0L,0x79A6336AL,4294967295UL,65535UL,0xA95E2E66L,255UL,28318,0xE167L},{0x61L,0xDD2AEFD9L,0x0C8174C7L,6L,0xFA3FE255L,0xBB2BL,0xA1F00002L,255UL,20524,0x4A78L},251UL};
    uint32_t l_1441 = 4294967295UL;
    int32_t l_1689 = (-10L);
    int32_t l_1690 = 2L;
    int32_t l_1691 = 0xA216FC33L;
    int32_t l_1696 = 0xF3B5A903L;
    uint8_t ** const ***l_1717 = (void*)0;
    union U4 *l_1736 = &g_1737[0][1][0];
    struct S2 l_1741 = {5,10,620,-30};
    if (func_2(g_8, (!((g_9 = (void*)0) == &g_10)), func_11(g_17, (func_18(func_21(func_25(func_27(func_33(g_17.f3, g_38, func_39(func_45(&g_10, (l_51 != l_52), g_17.f0, g_53, l_54), &g_10, g_17.f2, l_54, g_62), l_54), l_458, &g_331, &g_331, l_54)), g_17.f1, g_533.f3.f7), g_647[0][2].f4.f8) , l_1440), l_1441, l_1440.f4, l_52), l_458, l_51))
    { /* block id: 1124 */
        uint32_t l_1692[10][8][3] = {{{2UL,0x2A6744A7L,9UL},{4294967295UL,4294967292UL,0xE4BF79A9L},{0x92A921F8L,8UL,0x22FB3882L},{0x10B0DE98L,4294967292UL,2UL},{4294967295UL,0x2A6744A7L,4294967286UL},{8UL,0x0C2E5B72L,8UL},{4294967291UL,0x0B531676L,0UL},{2UL,0xFBD00D1CL,2UL}},{{0xFBD00D1CL,4294967289UL,0x8B968E40L},{0xFBD00D1CL,4294967295UL,0xE4BF79A9L},{2UL,0xFBD00D1CL,0x0C2E5B72L},{0x8B968E40L,2UL,8UL},{0UL,4294967286UL,0x92A921F8L},{0x2A6744A7L,9UL,0x8B968E40L},{0x0B531676L,0x8B968E40L,0x6684DA42L},{9UL,8UL,0x8B968E40L}},{{4294967292UL,0x1AC94F22L,0x22FB3882L},{0x350F2DA1L,4294967289UL,0UL},{2UL,0x6684DA42L,2UL},{0x10B0DE98L,4294967286UL,0x390EA4EDL},{4294967292UL,0UL,0xFBD00D1CL},{2UL,0UL,4294967289UL},{0x0B531676L,4294967286UL,0x390EA4EDL},{0x1AC94F22L,9UL,4294967291UL}},{{2UL,0x92A921F8L,8UL},{0x22FB3882L,4294967292UL,0x92A921F8L},{2UL,8UL,0xE4BF79A9L},{9UL,0x529FBD41L,0x2A6744A7L},{2UL,2UL,7UL},{0x6684DA42L,0x0B531676L,0xFBD00D1CL},{7UL,0xDA94BC70L,8UL},{4294967292UL,8UL,8UL}},{{1UL,2UL,4294967295UL},{0x529FBD41L,4294967286UL,4294967295UL},{0xDA94BC70L,8UL,8UL},{1UL,4294967286UL,0UL},{0x8B968E40L,0x92A921F8L,4294967286UL},{4294967295UL,2UL,0x8B968E40L},{0x22FB3882L,4294967286UL,8UL},{0x0B531676L,0x529FBD41L,1UL}},{{4294967286UL,4294967286UL,9UL},{4294967291UL,0xFBD00D1CL,2UL},{0x529FBD41L,0x22FB3882L,0x529FBD41L},{0UL,2UL,0x2A6744A7L},{4294967295UL,0x0C2E5B72L,9UL},{0x0C2E5B72L,0x10B0DE98L,8UL},{0x0C2E5B72L,4294967291UL,8UL},{4294967295UL,0x0C2E5B72L,0x22FB3882L}},{{8UL,9UL,0x529FBD41L},{0x350F2DA1L,9UL,0x0B531676L},{2UL,2UL,8UL},{2UL,8UL,1UL},{4294967295UL,0UL,8UL},{4294967286UL,0x6684DA42L,0x390EA4EDL},{4294967292UL,0x10B0DE98L,0x350F2DA1L},{4294967286UL,1UL,9UL}},{{4294967286UL,9UL,0UL},{4294967286UL,0x2A6744A7L,0x0C2E5B72L},{4294967295UL,0x2A6744A7L,0x10B0DE98L},{2UL,9UL,0UL},{0x6684DA42L,4294967295UL,0UL},{4294967286UL,0x0B531676L,0xDA94BC70L},{0x390EA4EDL,4294967286UL,0xE4BF79A9L},{4294967295UL,0xDA94BC70L,8UL}},{{4294967295UL,0x0C2E5B72L,2UL},{4294967295UL,4294967286UL,8UL},{0x390EA4EDL,2UL,0x0C2E5B72L},{8UL,0xE4BF79A9L,4294967292UL},{4294967286UL,0UL,0xDA94BC70L},{7UL,4294967286UL,0x92A921F8L},{0x1AC94F22L,9UL,0x92A921F8L},{0xE4BF79A9L,0xDA94BC70L,0xDA94BC70L}},{{7UL,0xFBD00D1CL,4294967289UL},{8UL,0xE4BF79A9L,2UL},{0x92A921F8L,4294967295UL,8UL},{0x0B531676L,9UL,0x529FBD41L},{2UL,0x1AC94F22L,0UL},{0xFBD00D1CL,9UL,4294967295UL},{0UL,4294967295UL,9UL},{0x1AC94F22L,0x390EA4EDL,0x1AC94F22L}}};
        int i, j, k;
        for (g_162 = 0; (g_162 == 1); g_162++)
        { /* block id: 1127 */
            int32_t *l_1687 = &l_1440.f3.f1;
            int32_t *l_1688[2];
            int i;
            for (i = 0; i < 2; i++)
                l_1688[i] = &l_1440.f4.f1;
            l_1692[5][4][0]++;
        }
        (*g_1335) = 0x95FF514FL;
    }
    else
    { /* block id: 1131 */
        uint32_t *l_1697 = &g_1326[0];
        uint32_t *l_1698 = (void*)0;
        uint32_t *l_1699 = &g_649.f1;
        int32_t l_1707 = 0x7787FDE2L;
        int32_t l_1708 = 0xCE41E461L;
        int32_t l_1709[10] = {(-3L),0xF4835AB5L,(-10L),1L,0xF4835AB5L,0xF4835AB5L,(-10L),0L,(-3L),(-10L)};
        uint32_t l_1710 = 0x55C6EA2EL;
        union U3 *l_1716 = &g_1612;
        int i;
        if ((safe_unary_minus_func_uint32_t_u(((*l_1699) ^= ((*l_1697) = l_1696)))))
        { /* block id: 1134 */
            int32_t *l_1700 = &g_647[0][2].f4.f1;
            int32_t *l_1701 = &g_261.f1;
            int32_t *l_1702 = &g_38.f4.f1;
            int32_t *l_1703 = &g_38.f3.f1;
            int32_t *l_1704 = &l_1691;
            int32_t *l_1705 = &g_38.f4.f1;
            int32_t *l_1706[7][10][3] = {{{&g_261.f1,&g_261.f1,&g_349},{(void*)0,&g_38.f4.f1,&g_349},{&l_54,(void*)0,&g_38.f4.f1},{(void*)0,&g_38.f4.f1,&g_349},{(void*)0,&g_349,&g_261.f1},{&l_54,&g_261.f1,&g_349},{(void*)0,&g_261.f1,&g_38.f4.f1},{(void*)0,&g_349,(void*)0},{(void*)0,&l_54,(void*)0},{&g_261.f1,&l_54,&l_54}},{{&g_38.f4.f1,&g_261.f1,(void*)0},{&l_54,(void*)0,&g_349},{&g_261.f1,&g_261.f1,(void*)0},{&g_38.f4.f1,&g_261.f1,&g_261.f1},{(void*)0,(void*)0,&g_38.f4.f1},{&g_38.f4.f1,&g_261.f1,&g_38.f4.f1},{&g_349,&g_261.f1,&g_261.f1},{&g_261.f1,&g_261.f1,&g_38.f4.f1},{&g_261.f1,(void*)0,(void*)0},{&g_349,(void*)0,&g_38.f4.f1}},{{&l_54,(void*)0,&g_261.f1},{&l_54,&g_38.f4.f1,&l_54},{&g_261.f1,&g_349,&g_261.f1},{(void*)0,&g_261.f1,&g_349},{&g_261.f1,(void*)0,&l_54},{&g_261.f1,&l_54,&g_38.f4.f1},{(void*)0,(void*)0,&l_54},{&g_261.f1,(void*)0,(void*)0},{&g_261.f1,&l_54,&g_261.f1},{&g_261.f1,(void*)0,&g_261.f1}},{{(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,&g_261.f1},{(void*)0,&g_261.f1,&g_261.f1},{&g_38.f4.f1,&g_38.f4.f1,&g_261.f1},{&g_349,&l_54,(void*)0},{&g_261.f1,&g_261.f1,&g_349},{(void*)0,&g_38.f4.f1,&g_349},{&l_54,(void*)0,&g_38.f4.f1},{(void*)0,&g_38.f4.f1,&g_349},{(void*)0,&g_349,&g_261.f1}},{{&l_54,&g_261.f1,&g_349},{(void*)0,&g_261.f1,&g_38.f4.f1},{(void*)0,&g_349,(void*)0},{(void*)0,&l_54,(void*)0},{&g_261.f1,&l_54,&l_54},{&g_38.f4.f1,&g_261.f1,(void*)0},{&l_54,(void*)0,&g_349},{&g_261.f1,&g_261.f1,(void*)0},{&g_38.f4.f1,&g_261.f1,&g_261.f1},{(void*)0,(void*)0,&g_38.f4.f1}},{{&g_38.f4.f1,&g_261.f1,&g_38.f4.f1},{&g_349,&g_261.f1,&g_261.f1},{&g_261.f1,&g_261.f1,&g_38.f4.f1},{&g_261.f1,(void*)0,(void*)0},{&g_349,(void*)0,&g_38.f4.f1},{&l_54,(void*)0,&g_261.f1},{&l_54,&g_38.f4.f1,&l_54},{&g_261.f1,&g_349,&g_261.f1},{(void*)0,&g_261.f1,&g_349},{&g_261.f1,(void*)0,&l_54}},{{&g_261.f1,&l_54,&g_38.f4.f1},{(void*)0,(void*)0,&l_54},{&g_261.f1,(void*)0,(void*)0},{&g_261.f1,&l_54,&g_261.f1},{&g_261.f1,(void*)0,&g_261.f1},{(void*)0,(void*)0,(void*)0},{&g_349,(void*)0,&g_261.f1},{(void*)0,&g_261.f1,&l_54},{&g_38.f4.f1,&g_38.f4.f1,&g_261.f1},{&g_349,&g_38.f4.f1,(void*)0}}};
            struct S2 l_1713 = {4,4,484,-3};
            int i, j, k;
            l_1710--;
            return l_1713;
        }
        else
        { /* block id: 1137 */
            for (g_261.f1 = 20; (g_261.f1 != 23); ++g_261.f1)
            { /* block id: 1140 */
                uint8_t ** const ****l_1718[5] = {&l_1717,&l_1717,&l_1717,&l_1717,&l_1717};
                uint8_t *l_1725 = &g_647[0][2].f3.f7;
                uint8_t ** const l_1724 = &l_1725;
                uint8_t ** const *l_1723 = &l_1724;
                uint8_t ** const ** const l_1722 = &l_1723;
                uint8_t ** const ** const *l_1721 = &l_1722;
                uint8_t ** const ** const **l_1720[10][4] = {{&l_1721,&l_1721,&l_1721,&l_1721},{&l_1721,&l_1721,&l_1721,&l_1721},{&l_1721,&l_1721,&l_1721,&l_1721},{&l_1721,&l_1721,&l_1721,(void*)0},{&l_1721,&l_1721,&l_1721,&l_1721},{&l_1721,&l_1721,&l_1721,&l_1721},{&l_1721,&l_1721,&l_1721,&l_1721},{&l_1721,&l_1721,&l_1721,&l_1721},{&l_1721,&l_1721,&l_1721,&l_1721},{&l_1721,&l_1721,&l_1721,&l_1721}};
                int i, j;
                (*g_1429) = l_1716;
                (*g_1335) ^= (((g_1719 = l_1717) == (g_1726[1] = &g_1357)) & (safe_add_func_uint8_t_u_u((g_145 || (g_533.f5 < 8UL)), 0xA5L)));
            }
        }
    }
    for (l_1440.f4.f4 = 0; (l_1440.f4.f4 == 9); l_1440.f4.f4 = safe_add_func_uint16_t_u_u(l_1440.f4.f4, 9))
    { /* block id: 1150 */
        union U4 **l_1735[5] = {&g_122,&g_122,&g_122,&g_122,&g_122};
        int32_t l_1740[8] = {0xFC73E1D4L,0xFC73E1D4L,0xFC73E1D4L,0xFC73E1D4L,0xFC73E1D4L,0xFC73E1D4L,0xFC73E1D4L,0xFC73E1D4L};
        int i;
        l_1736 = &g_53;
        (*g_1335) &= (safe_rshift_func_int8_t_s_u(l_1441, l_1740[3]));
    }
    return l_1741;
}


/* ------------------------------------------ */
/* 
 * reads : g_409 g_649.f4.f5 g_647.f0 g_17.f1 g_261.f5 g_915 g_331 g_916 g_171 g_38.f3.f7 g_84 g_483 g_1335 g_38.f4.f0 g_123.f3 g_1518 g_1531 g_1429 g_153 g_1544 g_261.f0 g_839 g_649.f3.f1 g_261.f8 g_1137
 * writes: g_331 g_84 g_38.f4.f4 g_145 g_483 g_286 g_123.f3 g_38.f3.f5 g_1518 g_1531 g_649.f3.f5 g_1430 g_153 g_1544 g_261.f7 g_117 g_1541 g_170 g_261.f0 g_839 g_649.f3.f1 g_1137
 */
static int32_t  func_2(int16_t  p_3, uint32_t  p_4, union U4  p_5, union U3  p_6, int8_t * p_7)
{ /* block id: 961 */
    int32_t l_1461 = 0xAFB1BEA9L;
    int32_t l_1466 = 0L;
    int32_t l_1467 = 0L;
    struct S2 l_1477 = {4,13,-1491,31};
    int32_t l_1489[7][2] = {{0x9EFD9BBBL,0xCA0AE120L},{0xCA0AE120L,0xA234F30FL},{1L,0xCA0AE120L},{1L,0xA234F30FL},{0x9EFD9BBBL,0x9EFD9BBBL},{1L,0x9EFD9BBBL},{0x9EFD9BBBL,0xCA0AE120L}};
    int32_t *l_1514 = &g_38.f3.f1;
    int32_t l_1517[1][6] = {{0xCC1674BFL,1L,0xCC1674BFL,0x5EA4E9F3L,0xCC1674BFL,0x5EA4E9F3L}};
    int32_t l_1538 = 0L;
    int32_t l_1539[5][1];
    int8_t **l_1551 = &g_9;
    union U3 l_1593 = {0};
    int8_t l_1610 = 0x6FL;
    struct S0 l_1625 = {1L,0x0BB1CD48L,1L,2L,0UL,65535UL,0xB93E2ECEL,0x47L,12556,-5L};
    uint32_t l_1636 = 0x578E5FF5L;
    uint8_t ***l_1653 = &g_170[7][2][3];
    int i, j;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 1; j++)
            l_1539[i][j] = 1L;
    }
    for (p_4 = 0; (p_4 <= 0); p_4 += 1)
    { /* block id: 964 */
        const uint8_t l_1460 = 0xB8L;
        int32_t l_1463[10][1][1] = {{{(-1L)}},{{9L}},{{(-1L)}},{{9L}},{{(-1L)}},{{9L}},{{(-1L)}},{{9L}},{{(-1L)}},{{9L}}};
        int32_t l_1565 = 1L;
        int32_t *l_1586[3];
        int32_t l_1587 = (-8L);
        uint32_t l_1588[7] = {4294967291UL,4294967291UL,4294967291UL,4294967291UL,4294967291UL,4294967291UL,4294967291UL};
        struct S2 * const l_1600 = &g_955;
        struct S1 *l_1632 = &g_649;
        int16_t l_1633 = 7L;
        int32_t l_1634 = 1L;
        int i, j, k;
        for (i = 0; i < 3; i++)
            l_1586[i] = (void*)0;
        for (g_331 = 0; (g_331 <= 2); g_331 += 1)
        { /* block id: 967 */
            uint8_t l_1458 = 0x87L;
            int32_t l_1468[3][3][7] = {{{(-6L),5L,(-2L),(-1L),0x8E0A04E9L,0xC75362A1L,0xBD5F5C25L},{0xC75362A1L,0xAD8E0FC0L,(-1L),1L,0x8E0A04E9L,0xBD5F5C25L,0x8E0A04E9L},{(-6L),0L,0xBD5F5C25L,0L,0L,0L,0xBD82D250L}},{{0x83B8F5DAL,0x8E0A04E9L,0L,(-1L),(-6L),0xAD8E0FC0L,0L},{0xBD82D250L,(-1L),0L,5L,(-1L),5L,0x83B8F5DAL},{(-1L),(-1L),(-1L),(-1L),(-1L),0xC75362A1L,0xAD8E0FC0L}},{{0L,(-1L),(-2L),0L,0x83B8F5DAL,0x4F47A865L,(-6L)},{0L,(-6L),0x4F47A865L,(-1L),0x4F47A865L,(-6L),0xBD82D250L},{0x4F47A865L,0xBD82D250L,(-1L),(-1L),0L,(-2L),0xAD8E0FC0L}}};
            int32_t l_1528 = 0xB122EC6DL;
            int32_t **l_1536 = &l_1514;
            int i, j, k;
            for (g_84 = 0; (g_84 <= 0); g_84 += 1)
            { /* block id: 970 */
                uint32_t *l_1459 = &g_38.f4.f4;
                int32_t l_1464 = 0x59056E1AL;
                int32_t l_1465 = (-3L);
                int32_t l_1469[10] = {0x104B07B6L,0x104B07B6L,0L,3L,(-1L),(-1L),(-1L),(-5L),0L,3L};
                uint8_t l_1511 = 0x50L;
                int i, j;
                if ((((((safe_mod_func_uint16_t_u_u(g_409[p_4][p_4], (safe_mod_func_uint32_t_u_u((safe_lshift_func_uint8_t_u_s((((((*l_1459) = ((0xCAC1CD73L > ((safe_mul_func_int16_t_s_s(g_649.f4.f5, (p_5.f1 >= l_1458))) & 0x25L)) >= p_4)) ^ l_1458) , ((-4L) != p_3)) || 0x48AC096FL), l_1460)), l_1461)))) , g_647[0][2].f0) , p_5.f1) < p_5.f0) || l_1458))
                { /* block id: 972 */
                    int32_t *l_1462[3][6] = {{&g_38.f4.f1,(void*)0,(void*)0,&g_60,&g_38.f4.f1,&g_38.f4.f1},{(void*)0,&g_60,(void*)0,&g_38.f4.f1,(void*)0,&g_38.f4.f1},{&g_60,&g_60,&g_60,(void*)0,(void*)0,(void*)0}};
                    uint16_t l_1470 = 0x5209L;
                    int16_t *l_1478 = &g_145;
                    int i, j;
                    l_1470--;
                    if ((safe_add_func_int8_t_s_s((safe_sub_func_int8_t_s_s(0x17L, ((l_1477 , (((g_483[g_84][g_331] |= (((*l_1459) = (((*l_1478) = g_17.f1) >= (safe_div_func_uint8_t_u_u((0x75L <= ((safe_sub_func_int16_t_s_s((safe_mod_func_uint32_t_u_u((safe_mul_func_uint16_t_u_u(g_261.f5, (safe_rshift_func_uint16_t_u_u(l_1489[1][1], 4)))), (safe_rshift_func_int8_t_s_u((*g_915), (p_6 , (p_5 , 0x16L)))))), p_5.f3)) | p_4)), (*g_171))))) & 0x7D335349L)) < 0x17L) , 0x750BBD16L)) , (-1L)))), 0x7CL)))
                    { /* block id: 977 */
                        g_286[7] = l_1462[1][4];
                        if (l_1466)
                            break;
                    }
                    else
                    { /* block id: 980 */
                        (*g_1335) = l_1489[1][1];
                    }
                }
                else
                { /* block id: 983 */
                    int32_t l_1494 = 0x74364BECL;
                    (*g_1335) = (safe_mod_func_int8_t_s_s(((*p_7) , l_1494), (safe_sub_func_uint8_t_u_u(l_1468[2][0][3], ((safe_add_func_uint8_t_u_u((safe_mod_func_uint16_t_u_u(0x91AAL, 0x74C9L)), 0x99L)) && ((void*)0 != &l_1463[8][0][0]))))));
                }
                for (g_38.f3.f5 = 0; (g_38.f3.f5 <= 0); g_38.f3.f5 += 1)
                { /* block id: 988 */
                    int32_t *l_1516 = &l_1468[2][0][3];
                    int32_t l_1527[6];
                    int8_t l_1529[1];
                    int i;
                    for (i = 0; i < 6; i++)
                        l_1527[i] = 0xE537A27DL;
                    for (i = 0; i < 1; i++)
                        l_1529[i] = 0x07L;
                    if ((*g_1335))
                    { /* block id: 989 */
                        int32_t *l_1503 = &l_1464;
                        int32_t *l_1504 = &l_1463[8][0][0];
                        int32_t *l_1505 = &l_1463[8][0][0];
                        int32_t *l_1506 = &l_1464;
                        int32_t *l_1507 = &g_38.f4.f1;
                        int32_t *l_1508 = (void*)0;
                        int32_t *l_1509 = &g_349;
                        int32_t *l_1510[1][9][2] = {{{(void*)0,(void*)0},{(void*)0,(void*)0},{(void*)0,(void*)0},{(void*)0,(void*)0},{(void*)0,(void*)0},{(void*)0,(void*)0},{(void*)0,(void*)0},{(void*)0,(void*)0},{(void*)0,(void*)0}}};
                        int32_t **l_1515[8] = {&l_1505,&l_1503,&l_1505,&l_1503,&l_1505,&l_1503,&l_1505,&l_1503};
                        int i, j, k;
                        l_1511--;
                        l_1516 = (l_1514 = (void*)0);
                        if (l_1469[4])
                            break;
                        ++g_1518;
                    }
                    else
                    { /* block id: 995 */
                        int32_t *l_1521 = (void*)0;
                        int32_t *l_1522 = &g_38.f4.f1;
                        int32_t *l_1523 = &l_1468[0][2][0];
                        int32_t *l_1524 = &g_649.f4.f1;
                        int32_t *l_1525 = &l_1467;
                        int32_t *l_1526[6];
                        int i;
                        for (i = 0; i < 6; i++)
                            l_1526[i] = &g_123.f3;
                        --g_1531;
                        (*l_1523) = (p_5.f3 = (safe_rshift_func_uint8_t_u_u((l_1465 && l_1468[2][0][3]), 2)));
                    }
                    for (g_649.f3.f5 = 0; (g_649.f3.f5 <= 2); g_649.f3.f5 += 1)
                    { /* block id: 1002 */
                        if ((*g_1335))
                            break;
                        p_5.f3 = 0x2C72DB93L;
                        l_1536 = (p_6 , &l_1514);
                        (*l_1536) = &g_60;
                    }
                    (*g_1429) = &p_6;
                }
                for (g_153 = 0; (g_153 <= 0); g_153 += 1)
                { /* block id: 1012 */
                    int32_t *l_1537[4] = {&l_1469[5],&l_1469[5],&l_1469[5],&l_1469[5]};
                    int i;
                    g_1544++;
                    for (g_261.f7 = 0; g_261.f7 < 10; g_261.f7 += 1)
                    {
                        for (g_117 = 0; g_117 < 6; g_117 += 1)
                        {
                            for (g_1541 = 0; g_1541 < 4; g_1541 += 1)
                            {
                                g_170[g_261.f7][g_117][g_1541] = (void*)0;
                            }
                        }
                    }
                    for (g_261.f0 = 0; (g_261.f0 <= 0); g_261.f0 += 1)
                    { /* block id: 1017 */
                        struct S0 *l_1555 = &g_649.f4;
                        struct S0 ** const l_1554 = &l_1555;
                        struct S0 ** const *l_1553 = &l_1554;
                        struct S0 ** const **l_1552 = &l_1553;
                        int i, j, k;
                        (*g_1335) ^= (l_1517[p_4][(g_153 + 3)] < (((((p_5.f1 > (*p_7)) ^ (++g_839[g_84][(g_84 + 2)][(g_153 + 1)])) != p_5.f3) > ((p_4 , l_1551) == (p_4 , &p_7))) ^ (((*l_1552) = &g_355) != &g_355)));
                    }
                    if (l_1511)
                    { /* block id: 1022 */
                        (*g_1335) = l_1463[8][0][0];
                    }
                    else
                    { /* block id: 1024 */
                        uint16_t l_1556 = 65535UL;
                        (*g_1335) ^= p_5.f2;
                        l_1556++;
                    }
                }
            }
            if ((*g_1335))
                continue;
            for (g_649.f3.f1 = 0; (g_649.f3.f1 <= 2); g_649.f3.f1 += 1)
            { /* block id: 1033 */
                int8_t l_1559 = 0L;
                int32_t *l_1564[10];
                int i;
                for (i = 0; i < 10; i++)
                    l_1564[i] = &g_53.f3;
                p_5.f3 = (l_1468[0][2][0] ^= ((((((*g_1335) = p_5.f1) < l_1559) & 0x9EL) <= ((p_5.f3 == g_916[0]) & (*p_7))) > (safe_div_func_uint32_t_u_u((l_1559 , ((safe_sub_func_int32_t_s_s((p_5.f0 >= 0x8144L), 0xEE724EF8L)) | p_5.f2)), g_261.f8))));
                for (g_1137 = 0; (g_1137 <= 0); g_1137 += 1)
                { /* block id: 1039 */
                    int8_t l_1566[5];
                    int32_t l_1570 = (-8L);
                    uint32_t l_1572 = 0xC321B895L;
                    int16_t l_1575 = 3L;
                    int32_t l_1577 = 0xFAA972D2L;
                    int32_t l_1580[6][9][1] = {{{(-1L)},{(-1L)},{0L},{0L},{0x4AC32553L},{3L},{(-8L)},{0L},{0L}},{{0L},{0x86A44D05L},{0x49675262L},{(-1L)},{0L},{0x86A44D05L},{(-1L)},{0L},{0x4AC32553L}},{{8L},{8L},{(-1L)},{0x86A44D05L},{3L},{(-8L)},{1L},{(-1L)},{0L}},{{0xF523460DL},{0x4AC32553L},{(-1L)},{0L},{3L},{8L},{0L},{0L},{0xF523460DL}},{{0xF523460DL},{(-1L)},{0x86A44D05L},{0L},{(-1L)},{8L},{0x49675262L},{8L},{(-1L)}},{{(-8L)},{(-1L)},{0L},{1L},{1L},{0x49675262L},{0x49675262L},{0xF523460DL},{(-1L)}}};
                    uint32_t l_1583 = 0x72B7531BL;
                    int i, j, k;
                    for (i = 0; i < 5; i++)
                        l_1566[i] = (-6L);
                    if (l_1565)
                    { /* block id: 1040 */
                        uint32_t l_1567 = 0x70C56CA8L;
                        int32_t l_1571 = 0x9C298983L;
                        --l_1567;
                        l_1572++;
                    }
                    else
                    { /* block id: 1043 */
                        int32_t l_1576 = 0x128FAAB6L;
                        int32_t l_1578 = 0L;
                        int32_t l_1579 = 0x4DD76C26L;
                        int32_t l_1581 = 1L;
                        int32_t l_1582 = 0xC5B4927FL;
                        if (p_5.f3)
                            break;
                        if (l_1566[2])
                            break;
                        if (l_1575)
                            break;
                        ++l_1583;
                    }
                }
            }
        }
        if ((*g_1335))
            break;
        l_1588[3]++;
        for (g_1544 = 0; (g_1544 <= 2); g_1544 += 1)
        { /* block id: 1056 */
            uint8_t **l_1605 = (void*)0;
            uint8_t *** const l_1604 = &l_1605;
            uint8_t *** const *l_1603[2][5];
            uint8_t ****l_1608 = &g_1607;
            int32_t l_1609 = (-10L);
            int32_t l_1615 = 0xA243D01EL;
            int32_t l_1618 = 1L;
            struct S2 *l_1630[3][9] = {{&g_955,&g_955,&g_955,(void*)0,&l_1477,&l_1477,&g_955,(void*)0,&g_955},{&g_17,&g_955,&g_17,&l_1477,&l_1477,&l_1477,&g_955,&g_955,&g_955},{&l_1477,&l_1477,&l_1477,&g_955,(void*)0,(void*)0,&l_1477,&g_955,&l_1477}};
            struct S2 **l_1629 = &l_1630[1][2];
            union U3 l_1642 = {0};
            int32_t l_1645 = 0xA6054A11L;
            int32_t l_1646 = 0xBDF295F5L;
            int16_t l_1665 = (-1L);
            int i, j;
            for (i = 0; i < 2; i++)
            {
                for (j = 0; j < 5; j++)
                    l_1603[i][j] = &l_1604;
            }
        }
    }
    return p_5.f2;
}


/* ------------------------------------------ */
/* 
 * reads : g_1335 g_123.f3 g_647.f4.f1
 * writes: g_647.f4.f1 g_123.f3
 */
static union U4  func_11(struct S2  p_12, struct S1  p_13, int8_t  p_14, struct S0  p_15, const int8_t * p_16)
{ /* block id: 951 */
    int32_t *l_1442 = (void*)0;
    int32_t *l_1443 = &g_647[0][2].f4.f1;
    int32_t **l_1444 = (void*)0;
    int32_t **l_1445 = &l_1442;
    union U4 l_1449 = {4294967295UL};
    (*l_1443) &= (*g_1335);
    (*l_1445) = l_1443;
    for (p_13.f3.f0 = 16; (p_13.f3.f0 != (-10)); p_13.f3.f0--)
    { /* block id: 956 */
        struct S1 *l_1448 = (void*)0;
        (*g_1335) = ((l_1448 = &p_13) == (void*)0);
    }
    return l_1449;
}


/* ------------------------------------------ */
/* 
 * reads : g_60 g_472 g_116 g_445 g_483 g_331 g_355 g_356 g_261 g_192 g_17 g_53.f1 g_171 g_38.f3.f7 g_349 g_409 g_38.f4.f9 g_38.f3.f4 g_530 g_533.f3.f6 g_38.f4.f0 g_533.f4.f1 g_647.f0 g_287 g_647.f3.f3 g_649.f3.f8 g_38.f3.f1 g_533.f3.f2 g_649.f5 g_84 g_122 g_53 g_123 g_161 g_123.f3 g_10 g_566 g_38.f4.f1 g_38.f3.f3 g_533.f5 g_38.f3.f9 g_542 g_38.f3.f8 g_38.f4.f7 g_58 g_117 g_38.f3.f6 g_53.f3 g_145 g_153 g_168 g_170 g_649.f4.f0 g_187 g_38.f3 g_123.f1 g_38.f4.f2 g_123.f2 g_38.f1 g_38.f5 g_38.f4.f8 g_53.f2 g_38 g_62 g_325 g_333 g_455 g_388 g_76 g_162 g_647.f4.f0 g_647.f5 g_647.f3.f1 g_839 g_382 g_902 g_543 g_649.f3.f0 g_649.f4.f1 g_647.f1 g_647.f4.f5 g_647.f3.f0 g_647.f3.f8 g_647.f2 g_533.f4.f3 g_533 g_1004 g_1048 g_647.f3.f6 g_649.f4.f5 g_647.f3.f7 g_1137 g_337 g_649.f4.f9 g_647.f4.f8 g_123.f0 g_1211 g_915 g_916 g_649 g_647.f4.f9 g_1003 g_647.f4.f4 g_1326 g_473 g_1335 g_1357 g_1429
 * writes: g_60 g_337 g_38.f4.f0 g_153 g_472 g_116 g_192 g_483 g_331 g_349 g_261.f1 g_261.f4 g_38.f5 g_261.f5 g_647.f0 g_649.f3.f1 g_649.f3.f4 g_333 g_649.f5 g_84 g_38.f4.f5 g_161 g_123.f3 g_10 g_542 g_38.f4.f1 g_286 g_145 g_649.f4.f1 g_38.f4.f7 g_117 g_122 g_38.f3.f1 g_38.f1 g_53.f3 g_168 g_38.f3.f5 g_187 g_325 g_38.f3.f7 g_445 g_76 g_647.f3.f1 g_839 g_38.f0 g_647.f4.f1 g_647.f3.f5 g_647.f5 g_382 g_902 g_543 g_915 g_647.f4.f5 g_647.f3.f0 g_1004 g_759 g_1048 g_38.f4.f4 g_1074 g_649.f4.f8 g_1137 g_649.f4.f0 g_1003 g_1211 g_455 g_356 g_1209 g_647.f4.f4 g_1357
 */
static uint32_t  func_18(struct S1  p_19, int32_t  p_20)
{ /* block id: 458 */
    uint32_t l_658[1][2];
    int8_t *l_682 = &g_647[0][2].f0;
    int32_t l_692 = (-1L);
    int32_t l_693 = 2L;
    uint8_t l_694 = 9UL;
    struct S0 l_716 = {3L,0x5D477098L,0L,-9L,0xD47F27D6L,1UL,4294967286UL,4UL,22858,0xE484L};
    struct S2 l_739 = {4,4,-2171,26};
    const union U3 l_757 = {0};
    struct S1 l_758 = {0x74L,4294967289UL,7337,{0x53L,0x6B9AB7C8L,1L,0x60D2B8F5L,4294967295UL,0x8A6EL,0xBE5D2111L,0x33L,18365,0x4BA7L},{0xB8L,0xEA78045BL,0xE43A86F5L,-7L,4294967290UL,0x1651L,1UL,9UL,14106,1L},0x5EL};
    uint8_t *l_795[5] = {&g_647[0][2].f5,&g_647[0][2].f5,&g_647[0][2].f5,&g_647[0][2].f5,&g_647[0][2].f5};
    uint32_t l_876 = 0xD3F3E3F7L;
    struct S0 ** const *l_928 = &g_355;
    union U3 *l_930 = &g_388;
    union U3 **l_929 = &l_930;
    int32_t l_945 = 0xDCD46FD5L;
    int32_t l_997 = 2L;
    int32_t l_998 = 7L;
    int32_t l_999 = 0L;
    int32_t l_1000 = 4L;
    int32_t l_1001 = 1L;
    struct S0 ***l_1033 = (void*)0;
    uint32_t l_1242[6] = {1UL,1UL,1UL,1UL,1UL,1UL};
    int32_t l_1304 = 0x11423609L;
    struct S1 *l_1438 = &g_647[1][2];
    int i, j;
    for (i = 0; i < 1; i++)
    {
        for (j = 0; j < 2; j++)
            l_658[i][j] = 0x5750E93FL;
    }
    for (p_20 = 0; (p_20 != (-19)); p_20 = safe_sub_func_int32_t_s_s(p_20, 4))
    { /* block id: 461 */
        uint32_t l_656 = 0xCDCD6142L;
        uint16_t *l_657 = &g_261.f5;
        const int8_t *l_665 = &g_116;
        int8_t *l_673[1][2];
        int32_t l_678 = 0x196B3C6CL;
        int16_t l_681 = 0xE642L;
        int32_t l_683 = (-5L);
        int32_t l_707 = 7L;
        const union U3 l_760 = {0};
        const union U3 l_767 = {0};
        int32_t **l_798 = (void*)0;
        int32_t *l_800[7][5] = {{&l_758.f4.f1,&g_38.f4.f1,&g_647[0][2].f3.f1,(void*)0,(void*)0},{&g_647[0][2].f3.f1,(void*)0,&l_716.f1,&l_692,(void*)0},{&l_692,&l_758.f4.f1,&l_692,&g_38.f4.f1,&g_38.f3.f1},{&g_38.f3.f1,&l_716.f1,&l_716.f1,&l_692,&g_647[0][2].f4.f1},{&g_38.f3.f1,(void*)0,&g_647[0][2].f3.f1,&g_647[0][2].f4.f1,(void*)0},{&l_692,&g_38.f4.f1,&g_38.f3.f1,&l_692,&l_692},{&g_647[0][2].f3.f1,&g_38.f4.f1,&l_692,&g_38.f4.f1,&l_716.f1}};
        int32_t **l_799 = &l_800[2][0];
        int32_t **l_801 = (void*)0;
        int32_t *l_803 = &g_123.f3;
        int32_t **l_802[4][1][7] = {{{&l_803,(void*)0,(void*)0,&l_803,&l_803,&l_803,&l_803}},{{(void*)0,&l_803,(void*)0,&l_803,&l_803,&l_803,&l_803}},{{&l_803,(void*)0,(void*)0,&l_803,(void*)0,&l_803,&l_803}},{{&l_803,(void*)0,(void*)0,(void*)0,(void*)0,&l_803,(void*)0}}};
        int32_t *l_804 = &l_758.f4.f1;
        int16_t *l_805 = &g_84;
        int16_t *l_806 = &g_145;
        int16_t *l_807[3][9][2];
        int i, j, k;
        for (i = 0; i < 1; i++)
        {
            for (j = 0; j < 2; j++)
                l_673[i][j] = &g_38.f4.f0;
        }
        for (i = 0; i < 3; i++)
        {
            for (j = 0; j < 9; j++)
            {
                for (k = 0; k < 2; k++)
                    l_807[i][j][k] = &l_681;
            }
        }
        if (((((!(+(safe_mul_func_int16_t_s_s((p_19.f3.f7 != (l_656 >= (func_25(&g_331) , ((*l_657) &= p_19.f4.f6)))), l_658[0][1])))) ^ l_656) | (safe_lshift_func_uint8_t_u_u((safe_mul_func_uint16_t_u_u(0UL, g_533.f3.f6)), 2))) ^ p_19.f4.f7))
        { /* block id: 463 */
            return p_19.f4.f1;
        }
        else
        { /* block id: 465 */
            const uint32_t l_671 = 4294967295UL;
            int32_t l_688 = (-1L);
            uint16_t *l_701 = &g_192[2];
            struct S1 *l_710[8];
            struct S0 l_756 = {0x4FL,-9L,0xB27B101BL,-1L,0x3C137442L,65530UL,4294967289UL,0x56L,45415,1L};
            const union U3 l_768[4] = {{0},{0},{0},{0}};
            int8_t *l_773 = &g_649.f4.f0;
            uint16_t l_775 = 0x8EBFL;
            int16_t *l_783 = (void*)0;
            int16_t *l_784 = &g_84;
            uint8_t *l_794 = &g_647[0][2].f5;
            uint8_t **l_793[3];
            int16_t l_796 = (-6L);
            int32_t *l_797 = &l_716.f1;
            int i;
            for (i = 0; i < 8; i++)
                l_710[i] = &g_647[1][1];
            for (i = 0; i < 3; i++)
                l_793[i] = &l_794;
            for (p_19.f3.f1 = 23; (p_19.f3.f1 < 15); p_19.f3.f1--)
            { /* block id: 468 */
                int8_t * const l_666 = (void*)0;
                int16_t l_672 = (-5L);
                int8_t **l_674 = &l_673[0][1];
                int32_t *l_675 = (void*)0;
                int32_t *l_676 = &g_60;
                int32_t *l_677[8];
                uint32_t *l_704 = &g_649.f3.f4;
                int8_t l_742 = 0xADL;
                int32_t *l_745 = &g_649.f4.f1;
                const union U3 l_755 = {0};
                int i;
                for (i = 0; i < 8; i++)
                    l_677[i] = &g_123.f3;
                l_678 = (p_19.f4.f6 & ((((*l_676) = (0x3BA2L && (((func_25(&g_331) && ((func_25(((*l_674) = l_673[0][1])) , (void*)0) == &g_473)) < g_533.f4.f1) ^ p_19.f4.f7))) ^ 0xE368407DL) == 0xF457L));
                if (((safe_mod_func_uint32_t_u_u(0x1C594E6EL, l_681)) || func_25(l_682)))
                { /* block id: 472 */
                    return g_38.f4.f9;
                }
                else
                { /* block id: 474 */
                    uint32_t l_684 = 4294967295UL;
                    int32_t l_690 = 7L;
                    int32_t l_691[4][5] = {{0xF74D99E4L,(-8L),0xFA86F321L,0xFA86F321L,0x31F9E346L},{0xC9638F01L,0L,(-8L),0xFA86F321L,(-10L)},{0xFA86F321L,0xFA86F321L,(-10L),0xC9638F01L,0x31F9E346L},{0xFA86F321L,0xC9638F01L,0xC9638F01L,0xF74D99E4L,(-8L)}};
                    int i, j;
                    ++l_684;
                    for (g_649.f3.f1 = 1; (g_649.f3.f1 <= 9); g_649.f3.f1 += 1)
                    { /* block id: 478 */
                        uint8_t l_687 = 255UL;
                        int32_t l_689[9][4][1] = {{{0xD72A769DL},{0xD72A769DL},{0xD72A769DL},{1L}},{{0x3C8189ADL},{0xBCE55E60L},{1L},{(-10L)}},{{1L},{3L},{0xBCE55E60L},{(-10L)}},{{0L},{(-10L)},{(-2L)},{0xD72A769DL}},{{0x3C8189ADL},{0xBCE55E60L},{1L},{3L}},{{0L},{0x3C8189ADL},{1L},{1L}},{{1L},{0x3C8189ADL},{(-10L)},{0xD72A769DL}},{{0x3C8189ADL},{3L},{0xCD68F5ECL},{1L}},{{0xD72A769DL},{(-2L)},{(-2L)},{(-2L)}}};
                        int i, j, k;
                        (*l_676) |= l_684;
                        l_687 ^= l_671;
                        l_694--;
                    }
                    for (p_19.f1 = 0; (p_19.f1 < 52); p_19.f1++)
                    { /* block id: 485 */
                        return p_20;
                    }
                }
                if ((safe_rshift_func_uint16_t_u_s((((l_701 == &g_455) >= (~(func_25((*l_674)) ^ (0x7DAE9B49L >= (safe_rshift_func_int8_t_s_u((3L | (((l_693 = (p_19.f1 && ((*l_704) = ((l_678 &= 0x05L) , l_656)))) , g_287) | l_681)), p_19.f3.f3)))))) || 0x2696L), g_647[0][2].f3.f3)))
                { /* block id: 492 */
                    int32_t *l_714[7];
                    int i;
                    for (i = 0; i < 7; i++)
                        l_714[i] = &g_38.f3.f1;
                    (*l_676) = (safe_sub_func_uint32_t_u_u(p_19.f4.f9, l_707));
                    for (p_19.f0 = (-4); (p_19.f0 == (-25)); p_19.f0--)
                    { /* block id: 496 */
                        g_60 ^= p_19.f3.f4;
                    }
                    if ((l_710[7] == (void*)0))
                    { /* block id: 499 */
                        uint32_t l_711 = 0x38AD3B8CL;
                        int32_t *l_715 = &l_693;
                        uint32_t *l_721 = &g_333;
                        uint8_t *l_743 = &g_649.f5;
                        int16_t *l_744 = &g_84;
                        l_711++;
                        p_19.f4.f1 = p_19.f3.f2;
                        l_715 = l_714[0];
                        (*l_676) = (func_21((l_716 , g_649.f3.f8), ((*l_744) |= (safe_sub_func_uint8_t_u_u(((safe_div_func_uint8_t_u_u(((*l_743) &= (((*l_721) = ((*l_704) = 0UL)) & (p_19.f3.f0 || (l_683 = ((safe_add_func_uint8_t_u_u(((l_716.f8 || (safe_lshift_func_uint8_t_u_s((safe_unary_minus_func_uint32_t_u((safe_sub_func_int32_t_s_s((safe_mul_func_int16_t_s_s((safe_add_func_uint8_t_u_u((safe_rshift_func_uint8_t_u_u((*l_715), (safe_sub_func_int8_t_s_s(p_19.f1, (safe_lshift_func_uint8_t_u_s((+(l_739 , (safe_mul_func_uint8_t_u_u((*g_171), 0x10L)))), p_19.f3.f7)))))), l_656)), l_688)), g_533.f3.f2)))), l_716.f9))) , l_742), 0x09L)) != 0x29L))))), l_688)) <= l_688), p_19.f3.f6))), l_658[0][1]) , (*l_715));
                    }
                    else
                    { /* block id: 509 */
                        int32_t **l_746 = &l_714[4];
                        int32_t **l_747 = (void*)0;
                        int32_t **l_748 = &l_675;
                        (*l_676) = 1L;
                        (*l_748) = ((*l_746) = l_745);
                    }
                    g_38.f4.f1 &= func_25(&g_331);
                }
                else
                { /* block id: 515 */
                    uint8_t l_761 = 0x9DL;
                    int32_t l_776 = (-8L);
                    for (g_153 = 2; (g_153 <= 7); g_153 += 1)
                    { /* block id: 518 */
                        int32_t l_751 = 7L;
                        uint32_t l_752 = 4294967295UL;
                        int i;
                        (*l_745) = (safe_sub_func_uint32_t_u_u(((*l_704) = p_20), g_161));
                        (*l_676) &= (-9L);
                        --l_752;
                    }
                    l_678 |= (((((*l_745) = func_25(func_27(l_755, (l_756 , l_757), func_27(l_755, l_760, l_682, l_673[0][0], l_761), &g_331, p_19.f1))) >= p_19.f3.f3) >= p_19.f4.f7) != l_758.f3.f1);
                    (*l_676) &= p_19.f4.f8;
                    if ((g_261.f1 = p_19.f2))
                    { /* block id: 528 */
                        return l_756.f9;
                    }
                    else
                    { /* block id: 530 */
                        const union U3 l_766 = {0};
                        int32_t l_774 = (-6L);
                        l_776 = (safe_mod_func_uint8_t_u_u((safe_add_func_int16_t_s_s((func_25((l_739 , func_27(l_755, l_766, func_39(func_27(l_766, l_767, func_27(l_768[1], func_33(((246UL != (safe_lshift_func_int16_t_s_s(g_261.f2, (((((safe_mul_func_int8_t_s_s(0x5DL, 0xE3L)) , l_755) , (-1L)) && 0xB0L) >= 4294967295UL)))) , 0x0312L), l_758, l_773, l_774), l_673[0][1], l_673[0][0], l_683), l_773, l_775), l_682, p_19.f3.f4, l_774, l_766), (*l_674), l_707))) > p_20), p_19.f4.f6)), p_19.f3.f1));
                        return l_656;
                    }
                }
            }
            l_678 ^= (safe_mul_func_uint16_t_u_u(((((safe_div_func_int16_t_s_s(((*l_784) = (safe_rshift_func_int8_t_s_s(func_25(l_682), 7))), g_162)) & ((safe_lshift_func_uint16_t_u_s((safe_div_func_int16_t_s_s((l_707 <= (safe_sub_func_uint32_t_u_u(((l_795[1] = func_27(l_768[1], l_768[1], &g_331, l_673[0][1], (safe_lshift_func_int8_t_s_u(p_20, 1)))) == l_665), p_19.f1))), (-9L))), g_261.f2)) >= p_19.f3.f5)) | l_796) ^ 4294967295UL), g_261.f0));
            (*l_797) &= (l_656 && ((l_756 , (p_19.f4.f5 <= ((p_19.f4.f7 = (g_58[2][6] || ((6UL ^ p_19.f4.f4) >= ((func_25(func_27(l_767, l_757, l_673[0][1], &g_10, p_19.f4.f0)) != l_756.f4) ^ (-6L))))) || 1UL))) & p_19.f3.f9));
        }
        l_804 = ((*l_799) = &p_20);
        p_19.f3.f1 ^= ((l_692 = (((((*l_806) = ((*l_805) = p_19.f4.f1)) & (0x5AA9L == (l_758.f3.f1 = p_19.f3.f4))) && (p_19.f3.f4 >= p_19.f2)) >= (((*l_657) = (g_647[0][2].f4.f0 < p_19.f3.f0)) >= p_19.f3.f2))) , (safe_mod_func_int8_t_s_s(0x1AL, 0xA1L)));
        for (g_38.f3.f7 = 15; (g_38.f3.f7 <= 15); g_38.f3.f7 = safe_add_func_int16_t_s_s(g_38.f3.f7, 8))
        { /* block id: 552 */
            if (p_19.f3.f2)
                break;
        }
    }
    if (((l_739 , &l_739) == (void*)0))
    { /* block id: 556 */
        int32_t l_820 = 0x4C27233AL;
        union U3 l_821 = {0};
        const struct S0 l_827 = {0xCAL,0xC3908190L,1L,0x2F706558L,0UL,1UL,0xD3690E4AL,0xEAL,30645,3L};
        int8_t *l_844 = &g_38.f0;
        uint16_t l_871[4] = {0UL,0UL,0UL,0UL};
        int32_t l_899 = (-4L);
        int32_t l_948[3];
        struct S2 l_1032 = {3,2,-2693,-0};
        int32_t l_1128 = (-7L);
        int i;
        for (i = 0; i < 3; i++)
            l_948[i] = 4L;
lbl_879:
        for (l_716.f7 = 20; (l_716.f7 < 44); l_716.f7 = safe_add_func_uint8_t_u_u(l_716.f7, 9))
        { /* block id: 559 */
            int32_t *l_822 = &g_123.f3;
            (*l_822) ^= (safe_mul_func_int16_t_s_s(l_739.f2, ((safe_rshift_func_uint8_t_u_u(((safe_rshift_func_int8_t_s_u(l_820, 2)) & 0xA18EL), p_19.f3.f5)) , (0x545E8495L <= (0UL & ((((p_19 , l_821) , (-5L)) , p_19.f3.f0) , p_19.f3.f4))))));
        }
        for (l_758.f3.f7 = 0; (l_758.f3.f7 != 45); l_758.f3.f7++)
        { /* block id: 564 */
            union U3 *l_830 = &g_62;
            union U3 **l_829 = &l_830;
            union U3 *** const l_828 = &l_829;
            int32_t *l_832 = &l_758.f4.f1;
            int32_t *l_845 = &g_647[0][2].f4.f1;
            uint16_t *l_846 = &g_647[0][2].f3.f5;
            for (l_758.f3.f5 = 0; (l_758.f3.f5 != 21); l_758.f3.f5++)
            { /* block id: 567 */
                int32_t *l_831 = &g_647[0][2].f3.f1;
                (*l_831) &= (p_19.f3.f5 == ((l_827 , ((p_19.f4.f0 , l_828) == &l_829)) || g_647[0][2].f5));
            }
            l_832 = &p_20;
            for (l_694 = (-5); (l_694 < 7); l_694++)
            { /* block id: 573 */
                struct S2 *l_836 = (void*)0;
                struct S2 **l_835 = &l_836;
                int32_t *l_837 = (void*)0;
                int32_t *l_838[2];
                int i;
                for (i = 0; i < 2; i++)
                    l_838[i] = &l_758.f4.f1;
                (**l_828) = (void*)0;
                (*l_832) ^= l_716.f2;
                (*l_835) = &g_17;
                g_839[0][2][5]++;
            }
            (*l_832) = ((safe_add_func_uint32_t_u_u(4294967295UL, (*l_832))) >= (((*l_846) = (func_25(l_844) != ((*l_845) = l_716.f4))) | 0x7909L));
        }
        for (g_649.f5 = 0; (g_649.f5 == 58); g_649.f5 = safe_add_func_int32_t_s_s(g_649.f5, 1))
        { /* block id: 585 */
            const union U3 l_857 = {0};
            int8_t * const l_858 = (void*)0;
            int8_t *l_861 = &g_647[0][2].f3.f0;
            int32_t l_862 = 0x087338C6L;
            int32_t l_895 = 0x30A8AD6AL;
            int32_t l_901 = 0x875CFB11L;
            const union U3 l_920[2][9][10] = {{{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}}},{{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}}}};
            int32_t l_995 = 1L;
            int32_t l_996[1][5];
            uint32_t l_1042 = 4294967294UL;
            const struct S2 *l_1071 = &l_739;
            struct S0 l_1096 = {0x19L,-1L,0x3243B482L,0x6699A28CL,0x2A0FE804L,0x7798L,0xECF10168L,1UL,46076,0x2600L};
            int32_t *l_1109 = &l_1001;
            struct S1 l_1116 = {5L,5UL,5135,{0L,0x0A2D2E68L,0x3144BF2EL,9L,4294967290UL,0x9613L,9UL,0x32L,1519,1L},{-3L,0xB88176E2L,-1L,0xCBF54D7BL,4294967286UL,0x7AEBL,0x0FE1CB94L,0xADL,26793,-9L},255UL};
            uint8_t l_1134 = 0UL;
            int i, j, k;
            for (i = 0; i < 1; i++)
            {
                for (j = 0; j < 5; j++)
                    l_996[i][j] = 0L;
            }
            if (((safe_mod_func_uint8_t_u_u((safe_rshift_func_int16_t_s_s((p_20 < 0x8DF9B692L), 5)), (safe_lshift_func_int8_t_s_s((safe_mul_func_int8_t_s_s(func_25(func_27(l_857, func_33(func_25(l_795[1]), p_19, l_795[3], p_19.f4.f3), l_861, l_844, l_862)), p_19.f3.f9)), 5)))) && g_10))
            { /* block id: 586 */
                uint16_t l_872 = 0xC991L;
                int8_t l_874 = (-1L);
                struct S2 l_878 = {4,4,546,-4};
                int32_t l_890 = 4L;
                int32_t l_891 = 5L;
                int32_t l_894 = 0x5D4E5021L;
                int32_t l_896 = 1L;
                int32_t l_898 = (-1L);
                int32_t l_900 = 1L;
                struct S2 *l_912 = (void*)0;
                struct S2 **l_911 = &l_912;
                if (p_19.f4.f1)
                { /* block id: 587 */
                    struct S1 l_863 = {0L,4294967295UL,3940,{0L,0x9EF8E51CL,-5L,0x09381873L,2UL,0xEBC9L,1UL,0x09L,30388,0x7AAFL},{1L,0x2BF43DACL,0x4E690341L,1L,4294967295UL,9UL,1UL,0xD6L,13923,0x5B33L},7UL};
                    int8_t *l_868[7];
                    uint8_t l_873 = 0xC2L;
                    uint32_t *l_875 = &l_716.f4;
                    int32_t *l_877 = &g_38.f3.f1;
                    int32_t l_892 = 0x00BDE7CAL;
                    int32_t l_897[1][9] = {{0x003A0088L,0x003A0088L,0x003A0088L,0x003A0088L,0x003A0088L,0x003A0088L,0x003A0088L,0x003A0088L,0x003A0088L}};
                    int8_t *l_921 = &g_543;
                    int i, j;
                    for (i = 0; i < 7; i++)
                        l_868[i] = &g_382;
                    (*l_877) = ((((*l_875) |= (l_863 , (safe_add_func_int32_t_s_s(func_25(func_39(func_39(l_861, &g_331, ((((func_25(((safe_lshift_func_int8_t_s_s(l_758.f2, 7)) , l_868[1])) < (safe_rshift_func_uint8_t_u_u((l_827.f4 ^ p_19.f4.f2), 1))) < ((((((l_872 = (~(l_863.f4.f6 || l_871[1]))) || 0UL) , l_873) && l_862) > p_19.f1) != p_19.f4.f6)) != 0x3400L) ^ l_739.f3), l_874, l_857), l_844, l_758.f1, l_739.f1, l_757)), 0xDA6D45ACL)))) <= 4294967292UL) , l_876);
                    if ((l_878 , ((void*)0 == &p_20)))
                    { /* block id: 591 */
                        int32_t *l_884 = &g_38.f4.f1;
                        int32_t *l_885 = (void*)0;
                        int32_t *l_886 = (void*)0;
                        int32_t *l_887 = (void*)0;
                        int32_t *l_888 = &g_649.f3.f1;
                        int32_t *l_889[5][3][4] = {{{&g_542,&l_863.f3.f1,&l_863.f3.f1,(void*)0},{(void*)0,&g_38.f3.f1,&l_716.f1,&g_647[0][2].f3.f1},{&l_716.f1,(void*)0,&l_716.f1,&l_716.f1}},{{&l_863.f4.f1,&l_716.f1,&l_716.f1,(void*)0},{&g_647[0][2].f3.f1,&l_863.f4.f1,&l_716.f1,&g_38.f3.f1},{&g_38.f4.f1,&l_863.f3.f1,&l_716.f1,&l_716.f1}},{{&l_863.f3.f1,&g_38.f4.f1,&l_863.f3.f1,&g_647[0][2].f3.f1},{&l_863.f3.f1,&g_647[0][2].f3.f1,&l_716.f1,&g_542},{&l_716.f1,&l_863.f4.f1,(void*)0,&g_647[0][2].f3.f1}},{{&g_542,&l_716.f1,(void*)0,&l_716.f1},{&g_38.f3.f1,(void*)0,&g_647[0][2].f3.f1,&g_38.f3.f1},{&g_337,&g_542,(void*)0,(void*)0}},{{&g_337,&l_716.f1,&g_542,&l_716.f1},{&g_337,&l_863.f4.f1,&l_863.f4.f1,&g_647[0][2].f3.f1},{&g_38.f3.f1,&l_716.f1,&g_337,(void*)0}}};
                        int8_t l_893 = 0xCCL;
                        int i, j, k;
                        if (g_17.f2)
                            goto lbl_879;
                        (*l_877) = (safe_sub_func_uint8_t_u_u((((((safe_add_func_int16_t_s_s(((*g_171) ^ func_25(&g_10)), (p_19 , p_19.f4.f0))) ^ (l_862 & p_19.f3.f1)) , 0UL) && l_827.f9) == (*l_877)), l_827.f7));
                        g_902++;
                        if (p_19.f3.f0)
                            break;
                    }
                    else
                    { /* block id: 596 */
                        uint8_t l_913[9][7] = {{254UL,255UL,253UL,0x51L,4UL,0x16L,252UL},{0x34L,254UL,0xC8L,0x4EL,0x51L,1UL,0xDEL},{252UL,0x4EL,0x39L,253UL,0x16L,0x34L,0UL},{6UL,0x39L,252UL,0x64L,252UL,0x00L,0xDEL},{0x4EL,0UL,3UL,7UL,0x67L,0UL,0x64L},{0x76L,255UL,0x67L,0xA9L,0x67L,7UL,0x4EL},{0xDEL,253UL,0x76L,0x65L,0x51L,7UL,253UL},{7UL,3UL,1UL,0x16L,0xA9L,7UL,252UL},{4UL,0xA7L,0UL,7UL,0xC8L,0x4EL,252UL}};
                        const int8_t **l_914[4];
                        int8_t * const l_917 = &l_758.f4.f0;
                        int8_t *l_922 = &l_716.f0;
                        int32_t l_923 = (-1L);
                        int i, j;
                        for (i = 0; i < 4; i++)
                            l_914[i] = (void*)0;
                        (*l_877) |= (safe_sub_func_int16_t_s_s((p_19.f3.f1 >= (l_913[6][6] = (safe_add_func_int8_t_s_s(func_25(&g_543), (g_649.f3.f0 < (safe_rshift_func_int16_t_s_s(l_758.f4.f8, (l_872 < (l_911 == (void*)0))))))))), 1L));
                        l_923 ^= (g_38.f3.f6 & func_25(func_39(func_27(func_33(p_19.f3.f8, p_19, func_39((g_915 = &g_331), l_917, (safe_div_func_uint8_t_u_u(255UL, 1L)), g_483[1][2], l_857), g_649.f4.f1), l_920[0][2][2], l_921, l_922, l_871[1]), &l_874, p_19.f3.f7, l_692, l_920[0][2][2])));
                    }
                    (*l_877) = (safe_sub_func_uint16_t_u_u(g_647[0][2].f1, (0x0AL != p_19.f4.f0)));
                }
                else
                { /* block id: 603 */
                    union U3 **l_931[8][3][8] = {{{&l_930,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930},{&l_930,(void*)0,&l_930,&l_930,&l_930,(void*)0,(void*)0,&l_930},{&l_930,&l_930,&l_930,(void*)0,&l_930,&l_930,&l_930,&l_930}},{{&l_930,(void*)0,&l_930,&l_930,&l_930,&l_930,&l_930,(void*)0},{&l_930,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930},{(void*)0,&l_930,&l_930,&l_930,&l_930,&l_930,(void*)0,&l_930}},{{&l_930,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930},{&l_930,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930},{&l_930,&l_930,(void*)0,&l_930,&l_930,&l_930,&l_930,(void*)0}},{{&l_930,&l_930,(void*)0,(void*)0,&l_930,&l_930,(void*)0,&l_930},{&l_930,&l_930,&l_930,(void*)0,&l_930,&l_930,&l_930,&l_930},{(void*)0,&l_930,&l_930,(void*)0,&l_930,&l_930,&l_930,&l_930}},{{&l_930,(void*)0,&l_930,(void*)0,(void*)0,(void*)0,&l_930,(void*)0},{&l_930,&l_930,&l_930,&l_930,(void*)0,&l_930,&l_930,&l_930},{&l_930,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930}},{{&l_930,(void*)0,&l_930,&l_930,&l_930,(void*)0,&l_930,&l_930},{&l_930,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930},{&l_930,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930}},{{&l_930,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930},{&l_930,&l_930,&l_930,(void*)0,&l_930,&l_930,&l_930,&l_930},{(void*)0,&l_930,&l_930,&l_930,&l_930,(void*)0,&l_930,&l_930}},{{&l_930,(void*)0,&l_930,&l_930,&l_930,&l_930,&l_930,(void*)0},{&l_930,(void*)0,&l_930,&l_930,&l_930,&l_930,&l_930,&l_930},{&l_930,(void*)0,&l_930,(void*)0,(void*)0,&l_930,(void*)0,&l_930}}};
                    const struct S0 *l_934 = &g_649.f3;
                    const struct S0 **l_933 = &l_934;
                    const struct S0 ***l_932 = &l_933;
                    uint16_t *l_935 = &g_647[0][2].f4.f5;
                    int8_t **l_936[7][10][1] = {{{&g_759[7][4][0]},{&l_844},{&l_861},{&l_861},{&g_759[5][5][0]},{&l_861},{(void*)0},{&l_844},{&g_759[7][3][0]},{&g_759[5][5][0]}},{{&g_759[0][0][1]},{&g_759[7][3][0]},{&g_759[7][3][0]},{&g_759[7][3][0]},{&l_861},{&g_759[5][5][0]},{(void*)0},{&g_759[7][3][0]},{&g_759[7][3][0]},{&l_861}},{{&g_759[7][3][0]},{&g_759[7][3][0]},{&l_844},{&g_759[7][3][0]},{&l_861},{&l_844},{&g_759[7][3][0]},{&g_759[7][3][0]},{&g_759[3][2][0]},{&l_844}},{{&l_861},{&g_759[7][3][0]},{&g_759[7][3][0]},{&g_759[7][3][0]},{&g_759[0][0][1]},{&l_844},{&l_861},{&g_759[7][3][0]},{(void*)0},{&g_759[7][4][0]}},{{(void*)0},{&l_861},{&l_861},{&l_861},{&l_682},{(void*)0},{&l_682},{&g_759[3][2][0]},{&g_759[5][5][0]},{&g_759[7][3][0]}},{{&l_844},{(void*)0},{&g_759[3][2][0]},{(void*)0},{&l_861},{&l_861},{&g_759[0][0][1]},{&l_861},{&g_759[7][3][0]},{&l_682}},{{&l_844},{&g_759[7][3][0]},{&g_759[7][3][0]},{&l_844},{(void*)0},{&g_759[7][3][0]},{&g_759[7][3][0]},{&g_759[7][3][0]},{(void*)0},{&l_844}}};
                    int32_t *l_937 = &l_900;
                    uint32_t l_949 = 0x87C0B725L;
                    int i, j, k;
                    (*l_937) &= (safe_lshift_func_uint16_t_u_u(l_758.f4.f8, func_25((l_861 = (func_21(func_25(l_795[4]), ((g_839[0][2][5] >= 1L) == (&g_17 != (void*)0)), ((*l_935) ^= (l_928 == ((l_929 == l_931[6][1][4]) , l_932)))) , l_861)))));
                    for (l_758.f1 = (-5); (l_758.f1 >= 22); l_758.f1 = safe_add_func_int8_t_s_s(l_758.f1, 5))
                    { /* block id: 609 */
                        int32_t *l_940 = &g_542;
                        int32_t *l_941 = &g_38.f3.f1;
                        int32_t *l_942 = &l_898;
                        int32_t *l_943 = &l_900;
                        int32_t *l_944 = &l_891;
                        int32_t *l_946 = &l_693;
                        int32_t *l_947[8][6] = {{&l_896,&l_896,&g_123.f3,&l_896,&l_896,&l_758.f4.f1},{&g_123.f3,&g_123.f3,&l_693,&l_896,(void*)0,(void*)0},{&l_758.f4.f1,(void*)0,(void*)0,&l_693,(void*)0,&l_894},{(void*)0,&g_123.f3,&g_123.f3,&l_693,&l_896,(void*)0},{&l_894,&l_758.f4.f1,&l_896,&l_896,&l_693,&l_896},{&l_894,&l_758.f4.f1,&l_894,&l_693,(void*)0,&l_693},{(void*)0,&l_758.f4.f1,&l_693,&g_123.f3,&g_123.f3,&l_894},{&l_693,&l_693,&l_693,&l_693,&l_758.f4.f1,&g_123.f3}};
                        int i, j;
                        --l_949;
                    }
                    if (l_895)
                        break;
                }
                for (l_716.f0 = 0; (l_716.f0 != 7); l_716.f0++)
                { /* block id: 616 */
                    struct S2 *l_954 = &g_955;
                    l_954 = &g_17;
                }
                for (g_543 = 1; (g_543 >= 0); g_543 -= 1)
                { /* block id: 621 */
                    int32_t *l_967 = &l_758.f4.f1;
                    uint16_t *l_972 = &g_647[0][2].f4.f5;
                    int32_t l_992 = 0L;
                    int32_t l_993 = 0xA1FDC560L;
                    int32_t l_994 = (-1L);
                    int32_t l_1002 = 0L;
                    l_948[2] = ((*l_967) = (((safe_mod_func_int16_t_s_s(g_647[0][2].f3.f8, p_19.f3.f7)) , p_20) , (safe_add_func_uint8_t_u_u(((safe_mod_func_int32_t_s_s((-1L), (g_647[0][2].f2 & p_19.f4.f0))) | ((safe_unary_minus_func_uint16_t_u((safe_mod_func_uint8_t_u_u((*g_171), (safe_sub_func_uint16_t_u_u(p_19.f3.f4, g_533.f4.f3)))))) , p_19.f3.f1)), l_874))));
                    (*l_967) = (safe_mul_func_uint8_t_u_u(((*g_171) = l_692), (((l_896 = p_19.f3.f8) && (--p_19.f4.f7)) <= (p_19.f4.f0 <= ((g_17 , (((*l_972) = 5UL) <= (safe_div_func_uint32_t_u_u((5UL == (safe_div_func_uint16_t_u_u(g_38.f5, ((p_19.f3.f9 || (g_60 = (g_533 , l_716.f4))) ^ 0L)))), p_19.f4.f6)))) , p_19.f3.f9)))));
                    p_20 &= ((safe_div_func_int16_t_s_s(l_878.f1, 0xB70CL)) == (g_38.f3.f2 >= g_123.f3));
                    for (l_758.f3.f1 = 0; (l_758.f3.f1 <= 1); l_758.f3.f1 += 1)
                    { /* block id: 633 */
                        int32_t *l_979 = &l_716.f1;
                        int32_t *l_980 = &l_716.f1;
                        int32_t *l_981 = (void*)0;
                        int32_t *l_982 = &l_693;
                        int32_t *l_983 = (void*)0;
                        int32_t *l_984 = &l_900;
                        int32_t *l_985 = (void*)0;
                        int32_t *l_986 = &l_758.f4.f1;
                        int32_t *l_987 = &l_900;
                        int32_t *l_988 = &g_647[0][2].f4.f1;
                        int32_t *l_989 = &l_901;
                        int32_t *l_990 = &l_862;
                        int32_t *l_991[9][8][3] = {{{(void*)0,&g_647[0][2].f4.f1,&g_542},{&l_758.f4.f1,&l_898,&g_647[0][2].f3.f1},{&l_899,&l_898,&g_649.f3.f1},{&l_948[2],&l_758.f3.f1,&l_948[2]},{&l_692,(void*)0,&l_898},{&l_948[2],&g_542,&g_647[0][2].f4.f1},{(void*)0,&l_894,(void*)0},{&l_900,&l_948[2],&l_890}},{{&g_349,(void*)0,&g_123.f3},{(void*)0,&l_948[2],&g_542},{&g_542,&l_894,&l_899},{&l_758.f3.f1,&g_542,(void*)0},{(void*)0,(void*)0,(void*)0},{&g_542,&g_542,&l_948[2]},{&l_894,&g_60,&l_901},{(void*)0,&l_898,&g_647[0][2].f4.f1}},{{&l_758.f4.f1,(void*)0,(void*)0},{(void*)0,&l_898,&l_895},{&g_647[0][2].f4.f1,&g_123.f3,&l_898},{&l_890,&l_900,(void*)0},{(void*)0,&g_542,&g_542},{&g_542,&l_948[2],(void*)0},{&g_60,(void*)0,&l_899},{&l_898,&g_542,&l_758.f4.f1}},{{&l_901,&g_649.f3.f1,&l_899},{(void*)0,&l_758.f4.f1,(void*)0},{&l_692,(void*)0,&g_542},{(void*)0,&g_337,&l_758.f4.f1},{&g_60,(void*)0,&g_542},{&l_948[2],&l_692,&l_948[2]},{(void*)0,&l_692,(void*)0},{&g_542,&g_649.f4.f1,(void*)0}},{{&g_649.f3.f1,&l_692,(void*)0},{&l_758.f4.f1,&l_758.f3.f1,&l_898},{(void*)0,&l_758.f4.f1,&g_649.f3.f1},{&g_647[0][2].f3.f1,&g_647[0][2].f3.f1,&l_895},{&l_758.f4.f1,(void*)0,(void*)0},{&l_758.f3.f1,&l_758.f4.f1,&g_337},{&l_692,(void*)0,&g_542},{&g_649.f4.f1,&l_890,&g_649.f4.f1}},{{&l_692,&g_649.f3.f1,(void*)0},{&l_758.f3.f1,&l_900,(void*)0},{&l_758.f4.f1,&g_647[0][2].f4.f1,&g_647[0][2].f4.f1},{&g_649.f4.f1,&l_758.f4.f1,&l_758.f4.f1},{&l_758.f4.f1,&g_542,&l_692},{&l_692,&l_895,&l_898},{(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0}},{{&g_649.f3.f1,&g_349,&l_898},{&l_900,&g_647[0][2].f3.f1,&l_758.f4.f1},{&g_647[0][2].f4.f1,&l_899,&g_349},{&l_758.f4.f1,&g_649.f4.f1,&l_758.f4.f1},{&g_542,(void*)0,&g_123.f3},{&l_948[2],&l_900,&l_948[2]},{&l_758.f4.f1,&g_60,&g_60},{&g_647[0][2].f4.f1,&l_900,&g_647[0][2].f3.f1}},{{(void*)0,(void*)0,&g_649.f3.f1},{&g_647[0][2].f3.f1,&g_649.f4.f1,&g_647[0][2].f4.f1},{&l_899,&l_899,&g_123.f3},{&g_649.f4.f1,&g_649.f4.f1,&l_895},{(void*)0,&l_901,&g_542},{&l_900,&l_948[2],&l_758.f4.f1},{&g_60,(void*)0,&g_60},{(void*)0,(void*)0,&l_948[2]}},{{(void*)0,&l_894,&g_647[0][2].f4.f1},{&l_948[2],&l_758.f3.f1,&l_758.f3.f1},{&g_60,(void*)0,(void*)0},{&g_649.f4.f1,&l_758.f4.f1,(void*)0},{&l_901,(void*)0,&g_649.f3.f1},{&l_948[2],&g_649.f4.f1,&l_890},{(void*)0,&l_898,&g_649.f3.f1},{(void*)0,&l_890,(void*)0}}};
                        uint32_t *l_1019 = &g_325;
                        int i, j, k;
                        g_1004++;
                        (*l_979) = 8L;
                        g_261.f1 = (safe_mul_func_int16_t_s_s(g_647[0][2].f0, (safe_mod_func_uint32_t_u_u(((safe_add_func_int16_t_s_s((safe_add_func_int32_t_s_s(l_739.f0, ((*l_1019) = (p_19.f4.f3 & ((((*l_987) = (g_38.f3.f3 | ((l_948[2] &= p_19.f2) || 0x2AA23E55L))) > (safe_mul_func_uint16_t_u_u(((p_19.f4.f7 &= (*g_171)) || (*l_967)), (safe_lshift_func_uint8_t_u_u(p_19.f3.f9, l_995))))) <= g_839[0][2][5]))))), 0x9BBAL)) < 0x458AL), (*l_967)))));
                        (*l_989) ^= p_19.f3.f2;
                    }
                }
                return g_1004;
            }
            else
            { /* block id: 645 */
                uint8_t l_1020[8][4][5] = {{{0x8CL,253UL,9UL,0x28L,248UL},{6UL,0x85L,0UL,0x3EL,0UL},{0xBDL,1UL,255UL,0x9CL,0x58L},{0xEDL,9UL,0x58L,0x3EL,1UL}},{{0x9CL,0xB9L,0xB9L,1UL,0UL},{3UL,1UL,248UL,248UL,6UL},{8UL,8UL,0xCDL,6UL,0x28L},{1UL,253UL,0xB7L,0xEDL,0x30L}},{{0x43L,0UL,6UL,255UL,0x30L},{252UL,0xD5L,252UL,246UL,1UL},{1UL,9UL,0x3EL,255UL,0x28L},{1UL,8UL,0x25L,1UL,5UL}},{{9UL,255UL,1UL,252UL,0UL},{0xCAL,1UL,0xEDL,255UL,255UL},{0x30L,255UL,1UL,0UL,0x58L},{0xCAL,0xB9L,0xB7L,0xB7L,0x0EL}},{{9UL,0x85L,250UL,8UL,0x45L},{1UL,252UL,0xCAL,0x43L,255UL},{0UL,255UL,8UL,255UL,253UL},{0xCDL,1UL,252UL,8UL,255UL}},{{3UL,1UL,9UL,0xCDL,252UL},{253UL,255UL,6UL,0xCAL,1UL},{248UL,255UL,1UL,0x43L,255UL},{0UL,3UL,0x9CL,1UL,0x30L}},{{0UL,0x43L,0x0EL,6UL,3UL},{1UL,0UL,0x3EL,0x9CL,1UL},{255UL,0xCAL,0xB9L,0xB7L,0xB7L},{0x3EL,0xEDL,0x3EL,0x8CL,255UL}},{{1UL,255UL,0x3EL,0x25L,1UL},{0x1BL,0x8BL,0x28L,9UL,0x3EL},{0UL,5UL,8UL,253UL,252UL},{0x8BL,252UL,255UL,253UL,9UL}}};
                int32_t *l_1021 = &g_647[0][2].f3.f1;
                const int32_t **l_1022 = &g_286[9];
                const union U3 l_1037 = {0};
                int8_t *l_1038[4] = {&g_38.f4.f0,&g_38.f4.f0,&g_38.f4.f0,&g_38.f4.f0};
                int32_t l_1046[3];
                uint8_t l_1054 = 0x2CL;
                int32_t l_1078 = (-8L);
                union U4 **l_1081[5][4] = {{&g_122,&g_122,&g_122,&g_122},{&g_122,&g_122,&g_122,&g_122},{&g_122,&g_122,&g_122,&g_122},{&g_122,&g_122,&g_122,&g_122},{&g_122,&g_122,&g_122,&g_122}};
                int i, j, k;
                for (i = 0; i < 3; i++)
                    l_1046[i] = (-9L);
                (*l_1021) = (l_1020[6][3][2] & 0x0B1E74EEL);
                (*l_1021) = 0x760BF5A6L;
                (*l_1022) = &g_287;
                for (l_758.f4.f5 = 0; (l_758.f4.f5 > 3); l_758.f4.f5 = safe_add_func_uint16_t_u_u(l_758.f4.f5, 6))
                { /* block id: 651 */
                    uint8_t l_1029 = 0xEDL;
                    struct S0 ****l_1034 = (void*)0;
                    struct S0 ****l_1035 = &l_1033;
                    int16_t *l_1036 = &g_84;
                    int8_t **l_1039 = (void*)0;
                    int8_t **l_1040 = (void*)0;
                    int8_t **l_1041 = &g_759[7][3][0];
                    int32_t l_1047[10][4] = {{0xA4219068L,0xC697727CL,0x14E6613EL,(-7L)},{1L,6L,6L,0x4D2B8984L},{0xE9FB831BL,0xA4219068L,0x8EE6138EL,6L},{(-1L),0x8EE6138EL,0x8EE6138EL,(-7L)},{0x4D2B8984L,0x67D86386L,0x8EE6138EL,6L},{0xEE538D5FL,8L,6L,0xE9FB831BL},{8L,0x8EE6138EL,0x14E6613EL,0x4D2B8984L},{0x67D86386L,0x4D2B8984L,0xE9FB831BL,0x4D2B8984L},{0x8EE6138EL,0xEE538D5FL,0xD19C07C1L,0x4D2B8984L},{(-7L),0xE9FB831BL,1L,0xC697727CL}};
                    int i, j;
                    (*l_1021) = (safe_div_func_uint8_t_u_u((safe_add_func_uint8_t_u_u(l_1029, (safe_rshift_func_int16_t_s_u((func_25(func_39((p_19.f1 , (l_1032 , l_682)), l_861, (((*l_1036) = (l_928 != ((*l_1035) = l_1033))) != (((func_25(((*l_1041) = (l_844 = func_27(l_1037, (**l_929), &g_10, l_1038[2], l_862)))) != 0x30L) < l_1042) & p_19.f4.f5)), l_997, l_821)) & p_19.f5), p_19.f3.f5)))), 0x07L));
                    for (l_998 = 0; (l_998 > 21); ++l_998)
                    { /* block id: 659 */
                        int32_t *l_1045[6][4];
                        int i, j;
                        for (i = 0; i < 6; i++)
                        {
                            for (j = 0; j < 4; j++)
                                l_1045[i][j] = &g_123.f3;
                        }
                        ++g_1048;
                    }
                    for (g_38.f4.f4 = (-8); (g_38.f4.f4 != 1); g_38.f4.f4++)
                    { /* block id: 664 */
                        int32_t *l_1053[10] = {(void*)0,&l_948[2],(void*)0,(void*)0,(void*)0,&l_948[2],(void*)0,&l_948[2],&l_948[2],&l_948[2]};
                        const struct S2 **l_1072 = (void*)0;
                        const struct S2 **l_1073[8] = {(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0};
                        int32_t l_1079 = 0x2F43FF97L;
                        uint32_t *l_1080 = &g_261.f4;
                        int i;
                        --l_1054;
                        l_948[2] &= (safe_mod_func_uint32_t_u_u(((safe_sub_func_uint8_t_u_u(p_19.f3.f2, (safe_div_func_int8_t_s_s(((!(safe_sub_func_int32_t_s_s(((p_19.f4.f7 = (((*l_1080) = (safe_add_func_int8_t_s_s(l_827.f4, (safe_add_func_uint8_t_u_u((safe_mod_func_int16_t_s_s((((((g_1074[0][0][2] = l_1071) == (void*)0) ^ (((safe_div_func_int8_t_s_s((((*l_1021) = p_19.f4.f3) < func_25(((*l_1041) = l_861))), (p_19.f4.f4 | ((l_901 && l_827.f0) != 1L)))) > p_19.f3.f6) <= 0x17ADL)) != l_1078) , 0x116BL), 0x5151L)), l_1079))))) > 0x153595DBL)) || l_895), p_19.f3.f6))) , (*l_1021)), p_19.f3.f1)))) < 4UL), l_827.f6));
                        (*l_1021) = ((void*)0 == l_1081[2][1]);
                        g_647[0][2].f4.f1 = ((safe_rshift_func_uint8_t_u_u(((*g_171) = 7UL), (safe_sub_func_int16_t_s_s(l_1042, (&l_871[1] == &l_871[1]))))) && (safe_div_func_int32_t_s_s(((*l_1021) = (safe_mod_func_uint16_t_u_u(g_647[0][2].f3.f6, g_261.f4))), g_649.f4.f5)));
                    }
                    for (g_261.f1 = 0; (g_261.f1 <= 2); g_261.f1 += 1)
                    { /* block id: 679 */
                        struct S2 *l_1091 = &g_955;
                        struct S2 **l_1090 = &l_1091;
                        int i, j, k;
                        (*l_1090) = (void*)0;
                        (*l_1021) = (safe_add_func_int32_t_s_s(0xD3BA7D74L, l_1020[(g_261.f1 + 3)][(g_261.f1 + 1)][(g_261.f1 + 1)]));
                        p_20 = ((void*)0 != &g_337);
                    }
                }
            }
            for (g_261.f4 = 18; (g_261.f4 != 2); --g_261.f4)
            { /* block id: 688 */
                union U4 *l_1112 = (void*)0;
                const union U3 l_1120 = {0};
                int32_t l_1121 = 3L;
                int32_t l_1133 = 1L;
                if ((l_1032 , 0L))
                { /* block id: 689 */
                    int8_t *l_1117 = &l_758.f0;
                    uint32_t *l_1122 = (void*)0;
                    for (g_38.f3.f7 = 0; (g_38.f3.f7 <= 2); g_38.f3.f7 += 1)
                    { /* block id: 692 */
                        int32_t *l_1097 = &l_758.f4.f1;
                        int32_t **l_1106[10] = {&l_1097,&l_1097,&l_1097,&l_1097,&l_1097,&l_1097,&l_1097,&l_1097,&l_1097,&l_1097};
                        int i;
                        (*l_1097) |= ((l_1032 , l_1096) , (g_647[0][2].f3.f6 < g_647[0][2].f3.f7));
                        (*l_1097) |= (safe_lshift_func_int16_t_s_s((safe_div_func_int8_t_s_s(p_19.f4.f6, (safe_div_func_uint8_t_u_u(p_19.f4.f1, ((*l_861) = (safe_div_func_uint16_t_u_u(p_19.f4.f5, p_19.f4.f9))))))), p_19.f3.f9));
                        g_286[9] = &p_20;
                    }
                    for (p_19.f4.f0 = 0; (p_19.f4.f0 <= (-6)); --p_19.f4.f0)
                    { /* block id: 700 */
                        int32_t *l_1111 = (void*)0;
                        int32_t **l_1110 = &l_1111;
                        union U4 **l_1113[7];
                        int8_t *l_1118 = &g_331;
                        union U3 l_1119 = {0};
                        int i;
                        for (i = 0; i < 7; i++)
                            l_1113[i] = &l_1112;
                        (*l_1110) = (l_1109 = &p_20);
                        g_122 = l_1112;
                        (*l_1111) = ((safe_rshift_func_int16_t_s_u((*l_1109), ((l_1120 , 4294967294UL) && l_1121))) <= 0x414FL);
                    }
                    (*l_1109) = ((g_649.f4.f8 = p_19.f3.f9) | ((safe_div_func_int32_t_s_s(p_19.f4.f2, 0x59CADDC3L)) , 0UL));
                }
                else
                { /* block id: 708 */
                    struct S1 l_1125 = {-7L,0x02B4988DL,622,{0L,-1L,0x06A61F61L,-5L,0x0FBE2CFEL,65534UL,0UL,0xB6L,27286,-1L},{0xF1L,5L,0xBD36395BL,2L,4294967292UL,65534UL,5UL,0UL,19642,0xDA76L},5UL};
                    (*l_1109) = ((*g_171) > (l_1125 , (safe_mul_func_uint8_t_u_u((l_1128 = 1UL), p_19.f4.f0))));
                    if (l_1121)
                    { /* block id: 711 */
                        return p_19.f1;
                    }
                    else
                    { /* block id: 713 */
                        return l_1121;
                    }
                }
                if (p_19.f3.f3)
                { /* block id: 717 */
                    const struct S0 l_1130 = {-3L,0x0E8EA95CL,2L,0x6FA3F0D1L,1UL,65533UL,0x2932AD5FL,1UL,14192,-3L};
                    for (l_1116.f4.f4 = 0; (l_1116.f4.f4 <= 4); l_1116.f4.f4 += 1)
                    { /* block id: 720 */
                        const int32_t **l_1129 = &g_286[9];
                        (*l_1129) = &g_287;
                    }
                    (*l_1109) = ((l_1130 , p_19) , 1L);
                }
                else
                { /* block id: 724 */
                    for (l_1116.f3.f1 = 0; (l_1116.f3.f1 <= 2); l_1116.f3.f1 += 1)
                    { /* block id: 727 */
                        int32_t **l_1131 = &l_1109;
                        int32_t *l_1132[9][5] = {{&l_758.f3.f1,&g_349,&l_999,(void*)0,&g_349},{&l_996[0][3],&g_53.f3,&l_999,&g_337,&g_53.f3},{(void*)0,&l_758.f3.f1,(void*)0,&l_758.f3.f1,&l_758.f3.f1},{&l_999,&l_996[0][3],&g_337,&l_996[0][3],&l_996[0][3]},{(void*)0,(void*)0,&g_349,&l_999,(void*)0},{&g_337,&l_999,&g_53.f3,&l_996[0][3],&l_999},{&g_349,(void*)0,&l_999,(void*)0,(void*)0},{&l_996[0][3],&g_337,&l_996[0][3],&g_337,&g_337},{&l_999,&g_349,(void*)0,&g_349,&g_349}};
                        int i, j;
                        (*l_1131) = &l_999;
                        l_1134++;
                        if (g_483[(l_1116.f3.f1 + 1)][l_1116.f3.f1])
                            break;
                        (*l_1109) &= ((g_1137 <= p_19.f1) < l_871[1]);
                    }
                }
                (*l_1109) = p_19.f3.f5;
            }
            return p_19.f4.f2;
        }
    }
    else
    { /* block id: 738 */
        uint16_t l_1143 = 6UL;
        int32_t l_1144 = 0xC34EB222L;
        struct S2 l_1147 = {8,14,2852,7};
        int8_t l_1148 = 0L;
        int32_t l_1178 = 9L;
        uint8_t l_1180 = 2UL;
        int32_t l_1205 = (-1L);
        int32_t l_1207[6][2] = {{0xC64684D3L,0xEB9B98CCL},{9L,0xEB9B98CCL},{9L,0xC64684D3L},{9L,0xC64684D3L},{0xEB9B98CCL,0xC64684D3L},{9L,9L}};
        int8_t **l_1260 = &l_682;
        struct S1 l_1278 = {-9L,0x5D60330CL,2276,{7L,0x8E4F35ECL,-1L,0x18DD381CL,4294967295UL,65528UL,2UL,249UL,32173,0L},{0L,0xB02AB65DL,-7L,6L,1UL,0x4FD1L,0x8E0216F8L,1UL,42655,3L},3UL};
        int32_t *l_1310 = &l_1001;
        int i, j;
        for (g_1137 = 0; (g_1137 == 57); g_1137++)
        { /* block id: 741 */
            int32_t *l_1140 = &g_337;
            (*l_1140) |= l_945;
            (*l_1140) = 1L;
        }
        p_19.f4.f1 &= p_19.f3.f7;
        if ((((safe_div_func_int8_t_s_s(((*l_682) = func_25(l_795[1])), (l_1144 ^= l_1143))) && (((safe_sub_func_int8_t_s_s(((((*l_682) = p_19.f3.f2) < ((((p_19.f3.f9 , l_739) , l_1147) , (((l_1148 = l_1147.f3) < (p_19.f4.f7 = p_19.f3.f7)) == g_1137)) == 1UL)) != (-1L)), p_19.f3.f2)) , 0xC215D138L) | 0x363ACD71L)) | g_649.f4.f9))
        { /* block id: 751 */
            int8_t *l_1151 = &g_649.f4.f0;
            int32_t l_1152 = 0x3A6E25C1L;
            uint32_t l_1224 = 4294967294UL;
            const struct S2 * const l_1225 = &l_739;
            int32_t *l_1239 = &g_649.f4.f1;
            int32_t *l_1240 = &l_1000;
            int32_t *l_1241[9];
            int32_t l_1245 = 0x0C03241EL;
            uint16_t l_1263 = 1UL;
            union U4 l_1269 = {0UL};
            uint32_t l_1305 = 0xF526EBC9L;
            int i;
            for (i = 0; i < 9; i++)
                l_1241[i] = &l_1000;
            if ((safe_mod_func_uint16_t_u_u(g_647[0][2].f4.f8, func_25(l_1151))))
            { /* block id: 752 */
                const int32_t l_1156 = 0L;
                int32_t l_1179 = 0x691B0629L;
                for (g_649.f4.f1 = 0; (g_649.f4.f1 <= 4); g_649.f4.f1 += 1)
                { /* block id: 755 */
                    int32_t *l_1153 = &g_337;
                    int32_t *l_1171 = &l_997;
                    int32_t *l_1172 = &l_1001;
                    int32_t *l_1173 = &g_123.f3;
                    int32_t *l_1174 = &l_758.f4.f1;
                    int32_t *l_1175 = &g_53.f3;
                    int32_t *l_1176 = &l_693;
                    int32_t *l_1177[5][9] = {{&l_692,&l_692,(void*)0,&l_1000,&l_692,&l_692,&l_997,&l_692,(void*)0},{&g_38.f3.f1,(void*)0,&g_38.f3.f1,&l_1144,&l_1144,&l_997,&l_1144,&l_1152,&l_1144},{(void*)0,&l_997,&l_692,&l_1000,&l_692,&l_692,&l_692,&l_1000,(void*)0},{&l_1152,&l_1152,(void*)0,&l_1144,&l_1152,&l_1152,(void*)0,&g_38.f3.f1,&l_1144},{&l_997,&l_997,(void*)0,&l_997,&l_997,&l_692,(void*)0,(void*)0,(void*)0}};
                    struct S0 *l_1183 = &g_649.f4;
                    int16_t l_1206 = (-1L);
                    int i, j;
                    (*l_1153) = ((l_1143 ^ l_1152) == p_19.f2);
                    for (l_758.f4.f5 = 0; (l_758.f4.f5 <= 4); l_758.f4.f5 += 1)
                    { /* block id: 759 */
                        int8_t **l_1169 = &g_759[7][3][0];
                        int8_t **l_1170 = &l_682;
                        int i;
                        (*l_1153) = (safe_rshift_func_int8_t_s_u(l_1156, (safe_add_func_uint8_t_u_u(0UL, ((*l_1151) &= (p_19.f4.f0 = (safe_mod_func_uint16_t_u_u((l_1148 <= (safe_mul_func_uint16_t_u_u((safe_div_func_int32_t_s_s(l_1147.f2, ((safe_mul_func_uint8_t_u_u((safe_add_func_int32_t_s_s(l_1148, func_25(((l_739 , p_19.f5) , ((*l_1170) = ((*l_1169) = l_795[g_649.f4.f1])))))), p_19.f3.f3)) , g_123.f0))), p_19.f1))), 1UL))))))));
                        g_38.f3.f1 ^= 0x11C9B3ABL;
                    }
                    l_1180++;
                    for (g_331 = 0; (g_331 <= 3); g_331 += 1)
                    { /* block id: 770 */
                        p_20 = (l_1179 = ((((void*)0 == l_1183) && (safe_div_func_int16_t_s_s((safe_div_func_uint16_t_u_u((safe_sub_func_uint8_t_u_u(((safe_rshift_func_uint8_t_u_s(p_19.f4.f8, 3)) | p_19.f4.f1), p_19.f3.f8)), (safe_lshift_func_uint8_t_u_u(255UL, ((*g_171) = (((p_19.f3.f3 | (p_19.f4.f3 ^ p_19.f4.f3)) && (*g_171)) <= p_19.f3.f6)))))), p_19.f4.f5))) || p_19.f3.f1));
                    }
                    for (p_19.f0 = 0; (p_19.f0 <= 3); p_19.f0 += 1)
                    { /* block id: 777 */
                        struct S2 l_1196 = {5,14,-631,-30};
                        int16_t *l_1204 = &g_1003;
                        int32_t l_1208 = 0xB107A3B4L;
                        int32_t l_1210 = 0x6388050BL;
                        (*l_1172) = (safe_rshift_func_uint8_t_u_s(3UL, (p_19.f4.f0 |= ((l_1196 , g_533.f1) < ((safe_unary_minus_func_int32_t_s((3UL && (p_19.f3.f0 == (((((*l_1151) = ((safe_add_func_uint8_t_u_u(((*g_171)--), (safe_mul_func_int16_t_s_s((l_999 = ((*l_1204) = p_19.f3.f2)), g_647[0][2].f3.f6)))) == l_1178)) ^ 1L) == 0xEEFDL) || l_1144))))) != p_19.f5)))));
                        --g_1211;
                        (*l_1172) = ((safe_add_func_uint32_t_u_u(((safe_mul_func_int16_t_s_s(((p_19.f3 , (safe_mod_func_uint32_t_u_u((p_19.f4.f4 <= (safe_mul_func_uint16_t_u_u((((safe_sub_func_uint32_t_u_u(p_19.f2, p_19.f4.f6)) , (l_758 , &g_84)) != &g_84), g_649.f4.f0))), p_19.f4.f9))) && (*g_915)), p_19.f4.f3)) || l_1152), l_1224)) ^ l_758.f4.f8);
                        (*l_1173) = p_19.f0;
                    }
                }
                g_649.f3.f1 = p_19.f0;
                for (g_455 = 0; (g_455 <= 1); g_455 += 1)
                { /* block id: 792 */
                    for (l_1179 = 1; (l_1179 >= 0); l_1179 -= 1)
                    { /* block id: 795 */
                        int i, j;
                        return l_1207[(l_1179 + 2)][g_455];
                    }
                }
            }
            else
            { /* block id: 799 */
                int32_t *l_1226 = &g_261.f1;
                (*g_355) = (void*)0;
                if (((*l_1226) = (p_19.f3.f1 = (l_1225 == (g_649 , l_1225)))))
                { /* block id: 803 */
                    int32_t l_1233[3];
                    int i;
                    for (i = 0; i < 3; i++)
                        l_1233[i] = (-3L);
                    for (l_758.f3.f7 = (-13); (l_758.f3.f7 <= 27); l_758.f3.f7++)
                    { /* block id: 806 */
                        (*l_1226) = (safe_rshift_func_uint16_t_u_u(g_533.f5, 9));
                    }
                    for (l_758.f3.f4 = (-25); (l_758.f3.f4 != 4); ++l_758.f3.f4)
                    { /* block id: 811 */
                        int32_t **l_1234 = &l_1226;
                        if (l_1233[1])
                            break;
                        (*l_1234) = &g_60;
                        (*l_1226) |= (safe_mul_func_int8_t_s_s((p_19.f0 |= ((((void*)0 == &g_116) == ((*l_682) ^= 0x79L)) > 247UL)), 247UL));
                    }
                }
                else
                { /* block id: 818 */
                    struct S1 *l_1238 = &g_649;
                    struct S1 **l_1237 = &l_1238;
                    (*l_1237) = &p_19;
                }
                (*l_1226) = ((void*)0 != l_1151);
                for (l_716.f4 = 0; l_716.f4 < 1; l_716.f4 += 1)
                {
                    for (p_19.f3.f1 = 0; p_19.f3.f1 < 3; p_19.f3.f1 += 1)
                    {
                        for (g_331 = 0; g_331 < 6; g_331 += 1)
                        {
                            g_839[l_716.f4][p_19.f3.f1][g_331] = 255UL;
                        }
                    }
                }
            }
            l_1242[5]--;
            if ((p_19.f4.f3 >= p_19.f3.f2))
            { /* block id: 825 */
                uint32_t l_1246[3][4] = {{0x0E8AAD32L,0x0E8AAD32L,0x0E8AAD32L,0x0E8AAD32L},{0x0E8AAD32L,0x0E8AAD32L,0x0E8AAD32L,0x0E8AAD32L},{0x0E8AAD32L,0x0E8AAD32L,0x0E8AAD32L,0x0E8AAD32L}};
                int i, j;
                ++l_1246[1][1];
            }
            else
            { /* block id: 827 */
                const uint16_t l_1249 = 65535UL;
                int16_t *l_1261 = &g_1209;
                uint8_t l_1262 = 255UL;
                struct S1 l_1266 = {0xA5L,0xE5DF3B3CL,832,{-1L,1L,0x67D42FBDL,0xE3476D55L,0xDAEF557CL,0x68EEL,0xFA514F3AL,0UL,5745,-1L},{0x90L,0x7E1333B4L,0x9E0967EAL,1L,0x200F1C1FL,65535UL,4294967291UL,0UL,10990,0x8B62L},0xF1L};
                struct S2 *l_1309 = &g_955;
                struct S2 **l_1308[4] = {&l_1309,&l_1309,&l_1309,&l_1309};
                int i;
                for (g_38.f4.f0 = 3; (g_38.f4.f0 >= 1); g_38.f4.f0 -= 1)
                { /* block id: 830 */
                    int16_t l_1250 = 1L;
                    (*l_1239) = l_1249;
                    (*l_1239) = l_1250;
                    for (p_19.f3.f0 = 0; (p_19.f3.f0 <= 0); p_19.f3.f0 += 1)
                    { /* block id: 835 */
                        uint16_t *l_1255 = &l_758.f3.f5;
                        int16_t *l_1259[7] = {&l_1250,&l_1250,&g_1003,&g_1209,&g_1209,&l_1250,&g_1003};
                        int i, j;
                        (*l_1240) = (((((g_38.f4.f7 , (((safe_add_func_uint16_t_u_u(65535UL, (l_716.f1 = (safe_rshift_func_uint16_t_u_u((p_19.f3.f5 = ((*l_1255) = l_692)), (((l_658[p_19.f3.f0][(p_19.f3.f0 + 1)] ^= 0x2C8A95F1L) | (((safe_unary_minus_func_int16_t_s((l_1178 & ((g_84 |= 8L) > g_647[0][2].f4.f9)))) , l_1260) != (void*)0)) ^ 3L)))))) , l_1261) == (void*)0)) != l_1262) | p_19.f3.f0) > l_1263) ^ l_1250);
                        g_286[6] = &p_20;
                    }
                }
                for (g_1003 = 0; (g_1003 > (-28)); --g_1003)
                { /* block id: 847 */
                    int8_t *l_1275 = &l_758.f0;
                    int32_t l_1296[2][2][3];
                    int32_t **l_1303 = &l_1240;
                    int i, j, k;
                    for (i = 0; i < 2; i++)
                    {
                        for (j = 0; j < 2; j++)
                        {
                            for (k = 0; k < 3; k++)
                                l_1296[i][j][k] = 0x27093157L;
                        }
                    }
                    (*l_1239) = (l_1266 , (p_19.f2 ^ (!g_533.f4.f8)));
                    if (((*l_1239) |= p_19.f3.f3))
                    { /* block id: 850 */
                        uint8_t l_1270 = 0xC3L;
                        int32_t **l_1276[7][5] = {{&l_1241[8],(void*)0,&l_1241[8],(void*)0,&l_1241[8]},{&l_1239,&l_1239,&l_1239,&l_1239,&l_1239},{&l_1241[8],(void*)0,&l_1241[8],(void*)0,&l_1241[8]},{&l_1239,&l_1239,&l_1239,&l_1239,&l_1239},{&l_1241[8],(void*)0,&l_1241[8],(void*)0,&l_1241[8]},{&l_1239,&l_1239,&l_1239,&l_1239,&l_1239},{&l_1241[8],(void*)0,&l_1241[8],(void*)0,&l_1241[8]}};
                        int i, j;
                        (*l_1239) |= ((p_19.f4.f0 = ((0x8C061D61L && 0x17338171L) , (safe_div_func_uint32_t_u_u(g_38.f4.f9, ((+(l_1269 , ((((*l_1261) = (p_19.f3.f6 | l_1270)) < g_261.f9) < (safe_lshift_func_uint8_t_u_s((safe_mod_func_uint32_t_u_u((*l_1240), p_19.f4.f7)), 1))))) ^ 0x36L))))) & p_19.f3.f8);
                        l_1240 = (p_19 , &g_542);
                    }
                    else
                    { /* block id: 855 */
                        int32_t **l_1277[5] = {&l_1241[7],&l_1241[7],&l_1241[7],&l_1241[7],&l_1241[7]};
                        uint16_t *l_1283 = &g_1048;
                        uint32_t *l_1299 = &g_647[0][2].f4.f4;
                        const int32_t **l_1302 = &g_286[9];
                        int i;
                        l_1240 = &p_20;
                        p_19.f3.f1 &= (func_33(l_1266.f4.f5, l_1278, &g_543, g_38.f4.f9) , p_19.f4.f1);
                        (*l_1239) |= (g_53.f3 &= (safe_sub_func_int8_t_s_s(((safe_add_func_int16_t_s_s(g_1211, ((*g_171) , ((*l_1283) = g_649.f3.f9)))) , 0xD8L), (p_19.f3.f8 != ((safe_sub_func_uint16_t_u_u((safe_rshift_func_uint16_t_u_u((safe_lshift_func_int8_t_s_u((safe_add_func_uint8_t_u_u(l_758.f3.f2, (((safe_rshift_func_uint8_t_u_u(l_1296[1][1][1], 7)) & ((safe_rshift_func_uint8_t_u_u(((--(*l_1299)) <= p_19.f4.f5), 0)) || l_1296[1][1][0])) ^ 0x4B48L))), p_19.f3.f1)), 7)), (-3L))) >= p_19.f4.f2)))));
                        (*l_1302) = &g_287;
                    }
                    (*l_1303) = &l_1207[5][0];
                    if (l_1304)
                    { /* block id: 865 */
                        (*l_1240) = l_1148;
                        (*g_355) = (*g_355);
                    }
                    else
                    { /* block id: 868 */
                        l_1305--;
                    }
                }
                g_1074[0][0][2] = &l_739;
            }
            l_1310 = &g_349;
        }
        else
        { /* block id: 875 */
            int32_t **l_1311 = &l_1310;
            (*l_1311) = (void*)0;
            p_19.f3.f1 = p_19.f3.f4;
            (*l_1311) = &g_60;
        }
    }
    for (g_649.f4.f1 = (-9); (g_649.f4.f1 > 12); ++g_649.f4.f1)
    { /* block id: 883 */
        int32_t *l_1315 = (void*)0;
        int32_t **l_1314 = &l_1315;
        (*l_1314) = &g_349;
    }
    for (g_455 = 0; (g_455 <= 1); g_455 += 1)
    { /* block id: 888 */
        struct S1 l_1325 = {0x07L,4294967295UL,5208,{-2L,-1L,2L,0x2A5A2472L,0UL,0UL,2UL,0x4EL,8479,-1L},{0L,0x30263B2FL,0x4700AD23L,1L,4294967287UL,65528UL,4294967295UL,0x5AL,38245,0x4C90L},255UL};
        int8_t **l_1362[7][3][5] = {{{&l_682,&g_759[7][3][0],(void*)0,&g_759[7][3][0],&g_759[7][3][0]},{&g_759[9][4][0],&g_759[6][0][1],&g_759[2][1][1],&l_682,&g_759[6][0][1]},{&g_759[7][3][0],&l_682,&g_759[7][3][0],&l_682,&l_682}},{{&g_759[2][1][1],&g_759[3][0][1],&l_682,&g_759[9][4][0],&g_759[9][4][0]},{&g_759[7][3][0],&g_759[7][3][0],&g_759[7][3][0],(void*)0,&g_759[7][3][0]},{&l_682,&g_759[2][1][1],&g_759[9][4][0],&g_759[3][0][1],&g_759[2][1][1]}},{{&l_682,&g_759[7][3][0],(void*)0,&g_759[7][3][0],&g_759[7][3][0]},{&g_759[9][4][0],&l_682,&g_759[3][0][1],&l_682,&l_682},{(void*)0,&l_682,&g_759[7][3][0],&g_759[7][3][0],&l_682}},{{&g_759[3][0][1],&g_759[9][4][0],&l_682,&g_759[6][0][1],&g_759[9][4][0]},{&g_759[7][3][0],(void*)0,&g_759[7][3][0],&l_682,(void*)0},{&l_682,&g_759[3][0][1],&g_759[6][0][1],&g_759[3][0][1],&g_759[3][0][1]}},{{&g_759[7][3][0],&g_759[7][3][0],&l_682,&g_759[7][3][0],&g_759[7][3][0]},{&g_759[6][0][1],&l_682,&g_759[9][4][0],&g_759[2][1][1],&l_682},{&l_682,&g_759[7][3][0],&g_759[7][3][0],&g_759[7][3][0],&g_759[7][3][0]}},{{&g_759[3][0][1],&g_759[6][0][1],&g_759[2][1][1],&g_759[6][0][1],&g_759[6][0][1]},{&g_759[7][3][0],&l_682,&g_759[7][3][0],&l_682,&l_682},{&g_759[2][1][1],&g_759[3][0][1],&l_682,&g_759[9][4][0],&g_759[3][0][1]}},{{&g_759[7][3][0],&g_759[7][3][0],&l_682,(void*)0,&g_759[7][3][0]},{&g_759[6][0][1],&g_759[2][1][1],&g_759[9][4][0],&g_759[3][0][1],&g_759[2][1][1]},{&l_682,&g_759[7][3][0],(void*)0,&g_759[7][3][0],&g_759[7][3][0]}}};
        int8_t ***l_1361[7] = {&l_1362[6][0][3],&l_1362[6][0][3],&l_1362[6][0][3],&l_1362[6][0][3],&l_1362[2][0][0],&l_1362[2][0][0],&l_1362[2][0][0]};
        union U4 l_1409 = {0x11131204L};
        uint16_t l_1432 = 0xB3EEL;
        int i, j, k;
        if ((safe_lshift_func_int16_t_s_s(p_19.f3.f5, 15)))
        { /* block id: 889 */
            uint32_t l_1320 = 0x76C312A9L;
            int8_t *l_1348 = &g_161;
            uint16_t *l_1349 = (void*)0;
            uint16_t *l_1350 = (void*)0;
            uint16_t *l_1351 = (void*)0;
            uint16_t *l_1352[1][2];
            int i, j;
            for (i = 0; i < 1; i++)
            {
                for (j = 0; j < 2; j++)
                    l_1352[i][j] = (void*)0;
            }
            for (p_19.f5 = 0; (p_19.f5 <= 1); p_19.f5 += 1)
            { /* block id: 892 */
                int32_t *l_1318 = &g_123.f3;
                int32_t *l_1319[10];
                int i;
                for (i = 0; i < 10; i++)
                    l_1319[i] = &g_123.f3;
                l_1320++;
                if ((safe_rshift_func_uint16_t_u_u(65532UL, g_543)))
                { /* block id: 894 */
                    g_38.f3.f1 |= ((*l_1318) ^= ((((p_19 , (l_1325 , g_1326[0])) , (safe_sub_func_int32_t_s_s(p_19.f4.f4, (safe_lshift_func_uint8_t_u_s((((p_19.f2 > p_19.f5) >= (((*g_171) |= (safe_mul_func_uint16_t_u_u((p_19.f3.f7 , g_916[0]), (safe_mod_func_int32_t_s_s((((void*)0 == (*g_472)) == (*g_915)), g_647[0][2].f3.f0))))) >= l_1320)) == (-3L)), l_758.f3.f2))))) == p_19.f3.f0) , p_19.f4.f9));
                }
                else
                { /* block id: 898 */
                    int32_t **l_1336[8];
                    const struct S2 ***l_1337 = (void*)0;
                    const struct S2 **l_1339 = &g_1074[1][0][1];
                    const struct S2 ***l_1338 = &l_1339;
                    int i;
                    for (i = 0; i < 8; i++)
                        l_1336[i] = &g_1335;
                    if (l_1320)
                        break;
                    g_286[9] = g_1335;
                    for (g_325 = 0; (g_325 <= 1); g_325 += 1)
                    { /* block id: 903 */
                        (*g_1335) = l_1320;
                        (*g_1335) &= 1L;
                    }
                    (*l_1338) = &g_1074[1][1][2];
                }
                return p_19.f4.f1;
            }
            (*g_1335) = (safe_mul_func_uint16_t_u_u(((-10L) >= (safe_div_func_uint32_t_u_u((safe_div_func_uint16_t_u_u(l_1320, l_1325.f4.f5)), (safe_add_func_int16_t_s_s(0x16C4L, (l_1325.f4.f1 = g_58[2][2])))))), 5UL));
        }
        else
        { /* block id: 913 */
            (*g_1335) &= l_758.f4.f6;
        }
        for (g_325 = 0; (g_325 <= 1); g_325 += 1)
        { /* block id: 918 */
            uint8_t ** const ***l_1358 = &g_1357;
            const union U3 l_1370 = {0};
            struct S2 l_1371 = {1,14,1414,-4};
            int8_t *l_1372 = &l_758.f3.f0;
            union U3 **l_1425 = &l_930;
            if ((0L <= (((*l_1358) = ((safe_div_func_uint32_t_u_u(0x7B6C844AL, (*g_1335))) , g_1357)) != ((safe_sub_func_uint16_t_u_u((((void*)0 == l_1361[6]) >= l_1325.f4.f9), (safe_mod_func_uint16_t_u_u(0x6EDDL, p_20)))) , (void*)0))))
            { /* block id: 920 */
                int8_t *l_1367 = &g_38.f0;
                uint8_t l_1379 = 255UL;
                int32_t l_1399 = 0xA4663E91L;
                uint16_t l_1400[4][10] = {{0UL,0xAF0DL,65535UL,65535UL,65535UL,1UL,0UL,0xAF0DL,1UL,0xAF0DL},{0x0095L,65535UL,0UL,0x0095L,0x0095L,65535UL,0xAF0DL,65535UL,65535UL,65535UL},{0xAF0DL,0UL,0xAF0DL,0xAF0DL,0xAF0DL,0x0095L,1UL,0UL,0x0095L,0UL},{65535UL,0xAF0DL,1UL,65535UL,65535UL,0xAF0DL,0UL,0xAF0DL,0xAF0DL,0xAF0DL}};
                uint8_t l_1420 = 0xFDL;
                union U3 **l_1431 = &l_930;
                int i, j;
                if (((p_19.f4 , (safe_rshift_func_int16_t_s_s(l_1325.f4.f3, p_19.f3.f9))) >= ((~(safe_mul_func_int8_t_s_s(p_19.f0, 0xE9L))) != (*g_915))))
                { /* block id: 922 */
                    int32_t *l_1373 = &g_649.f3.f1;
                    int32_t *l_1374 = &l_692;
                    int32_t *l_1375 = (void*)0;
                    int32_t *l_1376 = &g_123.f3;
                    int32_t *l_1377 = &g_649.f4.f1;
                    int32_t *l_1378[3][3][9] = {{{&l_997,&g_261.f1,&g_261.f1,(void*)0,(void*)0,&l_997,&g_261.f1,(void*)0,&l_997},{&l_716.f1,&l_758.f3.f1,&l_758.f3.f1,&l_999,(void*)0,&l_716.f1,&l_758.f3.f1,&l_999,&l_716.f1},{(void*)0,(void*)0,&l_997,&l_997,(void*)0,&l_997,(void*)0,&l_997,&g_60}},{{(void*)0,&l_716.f1,&l_716.f1,(void*)0,&l_1325.f4.f1,(void*)0,&l_716.f1,(void*)0,&g_38.f3.f1},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,&g_60,&g_60,&g_261.f1},{&l_1325.f4.f1,(void*)0,(void*)0,&g_38.f4.f1,&l_999,&g_38.f4.f1,&g_38.f3.f1,&g_38.f3.f1,&l_758.f3.f1}},{{(void*)0,(void*)0,(void*)0,&g_261.f1,&l_997,(void*)0,(void*)0,&g_261.f1,(void*)0},{&l_999,&l_1325.f4.f1,&l_1325.f4.f1,&l_758.f3.f1,(void*)0,&l_999,&l_1325.f4.f1,&l_758.f3.f1,&l_716.f1},{&l_997,&l_997,(void*)0,(void*)0,(void*)0,(void*)0,&l_997,(void*)0,(void*)0}}};
                    int i, j, k;
                    --l_1379;
                }
                else
                { /* block id: 924 */
                    int32_t l_1382 = (-1L);
                    int32_t *l_1383 = &l_758.f3.f1;
                    int32_t *l_1384 = &g_38.f4.f1;
                    int32_t *l_1385 = &l_693;
                    int32_t *l_1386 = (void*)0;
                    int32_t *l_1387 = (void*)0;
                    int32_t *l_1388 = (void*)0;
                    int32_t *l_1389 = &l_758.f4.f1;
                    int32_t *l_1390 = &g_647[0][2].f4.f1;
                    int32_t *l_1391 = &l_716.f1;
                    int32_t *l_1392 = &g_337;
                    int32_t *l_1393 = (void*)0;
                    int32_t *l_1394 = &g_542;
                    int32_t *l_1395 = &g_337;
                    int32_t *l_1396 = &l_758.f4.f1;
                    int32_t *l_1397 = &g_337;
                    int32_t *l_1398[1];
                    uint16_t *l_1406 = &l_1325.f4.f5;
                    int i;
                    for (i = 0; i < 1; i++)
                        l_1398[i] = &g_38.f4.f1;
                    (*g_1335) = l_1382;
                    if (p_19.f1)
                        break;
                    ++l_1400[3][5];
                    if ((9UL || (safe_unary_minus_func_uint16_t_u(((*l_1406) = 0UL)))))
                    { /* block id: 929 */
                        uint32_t l_1426[9][8][3] = {{{4294967295UL,4294967295UL,0x4BB5D0D3L},{0x9C29707CL,0x4BB5D0D3L,0x9C29707CL},{0x9C29707CL,0xD94D2CD1L,0xD94D2CD1L},{4294967295UL,0x4BB5D0D3L,0xD94D2CD1L},{0xB06D31A0L,4294967295UL,0x9C29707CL},{4294967295UL,0xD94D2CD1L,0x4BB5D0D3L},{0x9C29707CL,0x9C29707CL,0x9C29707CL},{0x9C29707CL,0x4BB5D0D3L,0xD94D2CD1L}},{{4294967295UL,0x9C29707CL,0xD94D2CD1L},{0xB06D31A0L,0xD94D2CD1L,0x9C29707CL},{4294967295UL,0xD94D2CD1L,0x4BB5D0D3L},{0x9C29707CL,0x9C29707CL,0x9C29707CL},{0xB06D31A0L,0x4BB5D0D3L,0xD94D2CD1L},{0xD94D2CD1L,0x9C29707CL,0xD94D2CD1L},{4294967295UL,0xD94D2CD1L,0x9C29707CL},{0xD94D2CD1L,0xD94D2CD1L,0x4BB5D0D3L}},{{0xB06D31A0L,0x9C29707CL,0x9C29707CL},{0xB06D31A0L,0x4BB5D0D3L,0xD94D2CD1L},{0xD94D2CD1L,0x9C29707CL,0x4BB5D0D3L},{4294967295UL,0xD94D2CD1L,0xB06D31A0L},{0xD94D2CD1L,0xD94D2CD1L,0x9C29707CL},{0xB06D31A0L,0x9C29707CL,0xB06D31A0L},{0xB06D31A0L,0x4BB5D0D3L,0x4BB5D0D3L},{0xD94D2CD1L,0x9C29707CL,0x4BB5D0D3L}},{{4294967295UL,0xD94D2CD1L,0xB06D31A0L},{0xD94D2CD1L,0xD94D2CD1L,0x9C29707CL},{0xB06D31A0L,0xB06D31A0L,0xB06D31A0L},{0xB06D31A0L,0x9C29707CL,0x4BB5D0D3L},{0xD94D2CD1L,0xB06D31A0L,0x4BB5D0D3L},{4294967295UL,0x4BB5D0D3L,0xB06D31A0L},{0xD94D2CD1L,0x4BB5D0D3L,0x9C29707CL},{0xB06D31A0L,0xB06D31A0L,0xB06D31A0L}},{{0xB06D31A0L,0x9C29707CL,0x4BB5D0D3L},{0xD94D2CD1L,0xB06D31A0L,0x4BB5D0D3L},{0xD94D2CD1L,0x4BB5D0D3L,0xB06D31A0L},{0x4BB5D0D3L,0x4BB5D0D3L,0x9C29707CL},{4294967295UL,0xB06D31A0L,0xB06D31A0L},{4294967295UL,0x9C29707CL,0x4BB5D0D3L},{0x4BB5D0D3L,0xB06D31A0L,0x4BB5D0D3L},{0xD94D2CD1L,0x4BB5D0D3L,0xB06D31A0L}},{{0x4BB5D0D3L,0x4BB5D0D3L,0x9C29707CL},{4294967295UL,0xB06D31A0L,0xB06D31A0L},{4294967295UL,0x9C29707CL,0x9C29707CL},{0x4BB5D0D3L,0xB06D31A0L,0x9C29707CL},{0xD94D2CD1L,0x4BB5D0D3L,4294967295UL},{0x4BB5D0D3L,0x4BB5D0D3L,0xB06D31A0L},{4294967295UL,0xB06D31A0L,4294967295UL},{4294967295UL,0x9C29707CL,0x9C29707CL}},{{0x4BB5D0D3L,0xB06D31A0L,0x9C29707CL},{0xD94D2CD1L,0x4BB5D0D3L,4294967295UL},{0x4BB5D0D3L,0x4BB5D0D3L,0xB06D31A0L},{4294967295UL,4294967295UL,4294967295UL},{4294967295UL,0xB06D31A0L,0x9C29707CL},{0x4BB5D0D3L,4294967295UL,0x9C29707CL},{0xD94D2CD1L,0x9C29707CL,4294967295UL},{0x4BB5D0D3L,0x9C29707CL,0xB06D31A0L}},{{4294967295UL,4294967295UL,4294967295UL},{4294967295UL,0xB06D31A0L,0x9C29707CL},{0x4BB5D0D3L,4294967295UL,0x9C29707CL},{0xD94D2CD1L,0x9C29707CL,4294967295UL},{0x9C29707CL,0x9C29707CL,0xB06D31A0L},{0xD94D2CD1L,4294967295UL,4294967295UL},{0xD94D2CD1L,0xB06D31A0L,0x9C29707CL},{0x9C29707CL,4294967295UL,0x9C29707CL}},{{0x4BB5D0D3L,0x9C29707CL,4294967295UL},{0x9C29707CL,0x9C29707CL,0xB06D31A0L},{0xD94D2CD1L,4294967295UL,4294967295UL},{0xD94D2CD1L,0xB06D31A0L,0x9C29707CL},{0x9C29707CL,4294967295UL,0x9C29707CL},{0x4BB5D0D3L,0x9C29707CL,0xD94D2CD1L},{0x9C29707CL,0x9C29707CL,4294967295UL},{0xD94D2CD1L,4294967295UL,0xD94D2CD1L}}};
                        int i, j, k;
                        (*g_1335) |= ((safe_lshift_func_uint16_t_u_u(1UL, 0)) | (252UL || ((((l_1409 , (((safe_add_func_uint8_t_u_u(((0x32L > (((g_533.f4.f9 > (p_19.f3.f8 | (safe_lshift_func_uint16_t_u_s(0x5B8DL, (p_19.f4.f6 < 0x7DACD0DBL))))) , g_1003) < 1UL)) <= p_19.f3.f5), (*l_1391))) , (*l_1391)) == g_916[0])) && p_19.f3.f1) ^ g_533.f3.f3) , p_19.f4.f8)));
                        (*l_1395) = (((safe_rshift_func_uint16_t_u_s(((*l_1406) = (safe_mul_func_int8_t_s_s(((l_1400[3][5] < (-1L)) > ((*g_171) = (((+(safe_lshift_func_int16_t_s_s((l_1420 = ((void*)0 == &g_473)), 14))) >= (safe_rshift_func_int8_t_s_u((safe_lshift_func_int8_t_s_u(((p_19.f3.f9 >= ((void*)0 == l_1425)) & ((p_19.f4.f3 & 0x5AA9156EL) > l_1426[3][1][2])), 1)), (*g_171)))) , 0x2DL))), 4UL))), g_445[0][0][2])) , &g_1209) != &g_84);
                    }
                    else
                    { /* block id: 935 */
                        uint32_t l_1435[4];
                        struct S1 **l_1439 = &l_1438;
                        int i;
                        for (i = 0; i < 4; i++)
                            l_1435[i] = 1UL;
                        (*g_1335) = ((l_1371.f2 = (((g_649.f4.f9 && (safe_lshift_func_uint8_t_u_u((~((l_1431 = g_1429) != (void*)0)), 0))) , (l_1432 && ((*l_682) = (&p_19 == ((l_739.f1 && p_19.f2) , &l_758))))) == (safe_sub_func_int16_t_s_s(((((*l_1383) = 0xA56CF2CBL) == 0xD49EB02FL) , (-5L)), 0x23A2L)))) >= 0x05L);
                        l_1435[0]--;
                        (*l_1439) = l_1438;
                    }
                }
            }
            else
            { /* block id: 945 */
                return l_1325.f4.f5;
            }
        }
    }
    return l_716.f5;
}


/* ------------------------------------------ */
/* 
 * reads : g_355 g_356 g_122 g_53 g_123 g_60 g_472 g_116 g_445 g_483 g_161 g_261 g_192 g_17 g_53.f1 g_171 g_38.f3.f7 g_349 g_409 g_38.f4.f9 g_38.f3.f4 g_530 g_123.f3 g_10 g_566 g_533.f3.f6 g_38.f4.f1 g_38.f3.f3 g_533.f3.f2 g_533.f5 g_38.f3.f9 g_542 g_331 g_38.f4.f0
 * writes: g_38.f4.f5 g_60 g_337 g_38.f4.f0 g_153 g_472 g_116 g_192 g_483 g_161 g_349 g_261.f1 g_261.f4 g_38.f5 g_123.f3 g_10 g_542 g_331 g_38.f4.f1 g_286 g_145 g_261.f5
 */
static struct S1  func_21(int32_t  p_22, const int16_t  p_23, uint16_t  p_24)
{ /* block id: 382 */
    uint32_t l_535[2][8][5] = {{{0x138D0E76L,0x2C1E8844L,0xB970581EL,0xB970581EL,0xD8D52754L},{4294967295UL,0x138D0E76L,0x688BD7B9L,1UL,0xF3548984L},{3UL,4294967292UL,0xF3548984L,0x1A3AF077L,4294967295UL},{4294967286UL,0x0F6E1B43L,0x0F6E1B43L,0x9F444DF5L,1UL},{4294967291UL,0x138D0E76L,4294967295UL,1UL,0x1A3AF077L},{0x67F50868L,4294967295UL,1UL,4294967295UL,0x0F6E1B43L},{0xABEC7593L,1UL,0xB970581EL,4294967295UL,1UL},{4294967291UL,4294967286UL,0x138D0E76L,0x138D0E76L,0xF3548984L}},{{0xD8D52754L,4294967291UL,1UL,0x08E3A866L,4294967289UL},{0x524DE3EEL,0x67F50868L,4294967289UL,0x2C1E8844L,1UL},{4294967295UL,0xABEC7593L,0xABEC7593L,1UL,4294967292UL},{0x688BD7B9L,4294967291UL,7UL,0x27CF7B8FL,0x2C1E8844L},{4294967291UL,0xD8D52754L,0x9F444DF5L,0xD8D52754L,0xABEC7593L},{4294967292UL,4294967295UL,0x138D0E76L,1UL,0x08E3A866L},{0x688BD7B9L,4294967295UL,4294967291UL,4294967291UL,4294967289UL},{0xF3548984L,0x688BD7B9L,0x9F444DF5L,0x13E5E833L,4294967295UL}}};
    int32_t *l_538[3];
    int32_t l_539 = 0xE1FA355EL;
    int16_t l_540 = (-1L);
    int16_t l_541 = 0x68BAL;
    uint32_t l_544 = 0x97ABB548L;
    uint16_t *l_549 = &g_38.f4.f5;
    int8_t *l_550 = &g_161;
    const union U3 l_553 = {0};
    const struct S2 *l_555 = &g_17;
    const struct S2 **l_554 = &l_555;
    uint32_t l_556 = 0x4E9A72CCL;
    uint8_t l_559[5];
    union U4 l_561 = {0xAADE27DFL};
    struct S0 l_586[10][1][9] = {{{{0xCCL,0x3FDD2CD8L,0L,0x9158A8A8L,7UL,8UL,0UL,0x3AL,24382,0xC4AAL},{0xCCL,0x3FDD2CD8L,0L,0x9158A8A8L,7UL,8UL,0UL,0x3AL,24382,0xC4AAL},{0x4BL,1L,-1L,-1L,0x786B0F65L,0x78DFL,4294967295UL,248UL,16939,0L},{0xFEL,0x0BFA526BL,-8L,1L,0x3894B361L,2UL,0x087212DFL,0x6BL,3272,0x8E37L},{0x0EL,0xFF548897L,1L,6L,0x306758FAL,8UL,4294967286UL,8UL,44897,-1L},{0x0EL,0xFF548897L,1L,6L,0x306758FAL,8UL,4294967286UL,8UL,44897,-1L},{0xBDL,-9L,0x725E32BDL,0xD5EE398FL,1UL,0x0B2FL,0x76880E89L,3UL,26335,4L},{0x0EL,0xFF548897L,1L,6L,0x306758FAL,8UL,4294967286UL,8UL,44897,-1L},{0L,0x1C548EF4L,0x63D3046DL,0x32D395BFL,0x497E50DFL,0x6DE9L,4294967287UL,1UL,32538,0xA0D0L}}},{{{0xB2L,-6L,0x596AE4D3L,0xB60EA2C0L,0x4240F8DEL,65527UL,0x1C58568BL,0xA6L,25025,0x9C95L},{0xFBL,0x1178E9E6L,0x1E1EF8C0L,5L,0xD898B59BL,0x2D50L,0x948699B4L,0x57L,36453,0xF7B0L},{0x4DL,0xAC8A0B1FL,1L,0x3EB669A9L,0xF6A65A4FL,5UL,1UL,0x09L,30655,0x0778L},{0xE9L,1L,0xF218C628L,1L,4294967286UL,0x2B8AL,0x2D65247EL,3UL,45823,-2L},{1L,-1L,-1L,0xCF58B35EL,0xB9E44CDBL,7UL,2UL,0x79L,15233,-1L},{1L,0L,1L,0xE853B4DFL,0x5152E0C5L,0xF1A3L,4UL,0x23L,9215,0x9EA2L},{1L,-1L,-1L,0xCF58B35EL,0xB9E44CDBL,7UL,2UL,0x79L,15233,-1L},{0xF3L,2L,-3L,2L,4294967287UL,0x1045L,0UL,0xC5L,38900,0x7159L},{1L,-1L,-1L,0xCF58B35EL,0xB9E44CDBL,7UL,2UL,0x79L,15233,-1L}}},{{{0L,0x1C548EF4L,0x63D3046DL,0x32D395BFL,0x497E50DFL,0x6DE9L,4294967287UL,1UL,32538,0xA0D0L},{0xBDL,-9L,0x725E32BDL,0xD5EE398FL,1UL,0x0B2FL,0x76880E89L,3UL,26335,4L},{0x0EL,0xFF548897L,1L,6L,0x306758FAL,8UL,4294967286UL,8UL,44897,-1L},{0xFEL,0x0BFA526BL,-8L,1L,0x3894B361L,2UL,0x087212DFL,0x6BL,3272,0x8E37L},{0x4FL,-2L,0xB2C9FCE8L,-3L,0xC8E50863L,0xA6C6L,0x6A2A7A2EL,6UL,6105,1L},{0x0EL,0xFF548897L,1L,6L,0x306758FAL,8UL,4294967286UL,8UL,44897,-1L},{0x0EL,0xFF548897L,1L,6L,0x306758FAL,8UL,4294967286UL,8UL,44897,-1L},{0xFEL,0x0BFA526BL,-8L,1L,0x3894B361L,2UL,0x087212DFL,0x6BL,3272,0x8E37L},{0xCCL,0x3FDD2CD8L,0L,0x9158A8A8L,7UL,8UL,0UL,0x3AL,24382,0xC4AAL}}},{{{0x20L,0L,0x63A82AA4L,-1L,0x4649D3F3L,1UL,0x40EAAE73L,249UL,774,0x3A93L},{9L,0xC452084CL,0x59266262L,-1L,0x29FD75BCL,1UL,0xF5147CA6L,8UL,21574,0L},{0xB2L,-6L,0x596AE4D3L,0xB60EA2C0L,0x4240F8DEL,65527UL,0x1C58568BL,0xA6L,25025,0x9C95L},{0xE9L,1L,0xF218C628L,1L,4294967286UL,0x2B8AL,0x2D65247EL,3UL,45823,-2L},{0xB2L,-6L,0x596AE4D3L,0xB60EA2C0L,0x4240F8DEL,65527UL,0x1C58568BL,0xA6L,25025,0x9C95L},{1L,-1L,0x03351643L,0x8B9FFD1CL,4294967293UL,0x2B43L,0x19E5B642L,0UL,34982,0x98ECL},{1L,0x82D348C4L,-4L,0x43578E83L,0UL,0x3ECEL,4294967295UL,255UL,26684,0x5F8CL},{0L,0x46D5632EL,0xE85D8307L,0L,0x7400BFC1L,0UL,0x2FB38577L,0UL,24281,0x9D81L},{0x20L,0L,0x63A82AA4L,-1L,0x4649D3F3L,1UL,0x40EAAE73L,249UL,774,0x3A93L}}},{{{0xBDL,-9L,0x725E32BDL,0xD5EE398FL,1UL,0x0B2FL,0x76880E89L,3UL,26335,4L},{0xBDL,-9L,0x725E32BDL,0xD5EE398FL,1UL,0x0B2FL,0x76880E89L,3UL,26335,4L},{0xCCL,0x3FDD2CD8L,0L,0x9158A8A8L,7UL,8UL,0UL,0x3AL,24382,0xC4AAL},{0xBDL,-9L,0x725E32BDL,0xD5EE398FL,1UL,0x0B2FL,0x76880E89L,3UL,26335,4L},{0xFEL,0x0BFA526BL,-8L,1L,0x3894B361L,2UL,0x087212DFL,0x6BL,3272,0x8E37L},{0xBDL,-9L,0x725E32BDL,0xD5EE398FL,1UL,0x0B2FL,0x76880E89L,3UL,26335,4L},{0L,0x1C548EF4L,0x63D3046DL,0x32D395BFL,0x497E50DFL,0x6DE9L,4294967287UL,1UL,32538,0xA0D0L},{0xCCL,0x3FDD2CD8L,0L,0x9158A8A8L,7UL,8UL,0UL,0x3AL,24382,0xC4AAL},{0xCCL,0x3FDD2CD8L,0L,0x9158A8A8L,7UL,8UL,0UL,0x3AL,24382,0xC4AAL}}},{{{0x52L,-1L,0xFF7E7FFCL,-1L,0xBEAF8D3DL,9UL,4294967289UL,4UL,23323,0x5593L},{0xFBL,0x1178E9E6L,0x1E1EF8C0L,5L,0xD898B59BL,0x2D50L,0x948699B4L,0x57L,36453,0xF7B0L},{1L,0x91C5A802L,6L,0x1495CED4L,0UL,65535UL,0x13E85E88L,255UL,26219,-10L},{1L,0L,1L,0xE853B4DFL,0x5152E0C5L,0xF1A3L,4UL,0x23L,9215,0x9EA2L},{0x52L,-1L,0xFF7E7FFCL,-1L,0xBEAF8D3DL,9UL,4294967289UL,4UL,23323,0x5593L},{0xE9L,1L,0xF218C628L,1L,4294967286UL,0x2B8AL,0x2D65247EL,3UL,45823,-2L},{1L,0x82D348C4L,-4L,0x43578E83L,0UL,0x3ECEL,4294967295UL,255UL,26684,0x5F8CL},{0xFBL,0x1178E9E6L,0x1E1EF8C0L,5L,0xD898B59BL,0x2D50L,0x948699B4L,0x57L,36453,0xF7B0L},{0x4DL,0xAC8A0B1FL,1L,0x3EB669A9L,0xF6A65A4FL,5UL,1UL,0x09L,30655,0x0778L}}},{{{0x0EL,0xFF548897L,1L,6L,0x306758FAL,8UL,4294967286UL,8UL,44897,-1L},{0xCCL,0x3FDD2CD8L,0L,0x9158A8A8L,7UL,8UL,0UL,0x3AL,24382,0xC4AAL},{0xCCL,0x3FDD2CD8L,0L,0x9158A8A8L,7UL,8UL,0UL,0x3AL,24382,0xC4AAL},{0x4BL,1L,-1L,-1L,0x786B0F65L,0x78DFL,4294967295UL,248UL,16939,0L},{0xFEL,0x0BFA526BL,-8L,1L,0x3894B361L,2UL,0x087212DFL,0x6BL,3272,0x8E37L},{0x0EL,0xFF548897L,1L,6L,0x306758FAL,8UL,4294967286UL,8UL,44897,-1L},{0x0EL,0xFF548897L,1L,6L,0x306758FAL,8UL,4294967286UL,8UL,44897,-1L},{0xBDL,-9L,0x725E32BDL,0xD5EE398FL,1UL,0x0B2FL,0x76880E89L,3UL,26335,4L},{0x0EL,0xFF548897L,1L,6L,0x306758FAL,8UL,4294967286UL,8UL,44897,-1L}}},{{{1L,0x91C5A802L,6L,0x1495CED4L,0UL,65535UL,0x13E85E88L,255UL,26219,-10L},{0L,0x46D5632EL,0xE85D8307L,0L,0x7400BFC1L,0UL,0x2FB38577L,0UL,24281,0x9D81L},{0x52L,-1L,0xFF7E7FFCL,-1L,0xBEAF8D3DL,9UL,4294967289UL,4UL,23323,0x5593L},{0xF3L,2L,-3L,2L,4294967287UL,0x1045L,0UL,0xC5L,38900,0x7159L},{0xB2L,-6L,0x596AE4D3L,0xB60EA2C0L,0x4240F8DEL,65527UL,0x1C58568BL,0xA6L,25025,0x9C95L},{0xFBL,0x1178E9E6L,0x1E1EF8C0L,5L,0xD898B59BL,0x2D50L,0x948699B4L,0x57L,36453,0xF7B0L},{1L,-1L,-1L,0xCF58B35EL,0xB9E44CDBL,7UL,2UL,0x79L,15233,-1L},{9L,0xC452084CL,0x59266262L,-1L,0x29FD75BCL,1UL,0xF5147CA6L,8UL,21574,0L},{0xB2L,-6L,0x596AE4D3L,0xB60EA2C0L,0x4240F8DEL,65527UL,0x1C58568BL,0xA6L,25025,0x9C95L}}},{{{0x0EL,0xFF548897L,1L,6L,0x306758FAL,8UL,4294967286UL,8UL,44897,-1L},{0xFEL,0x0BFA526BL,-8L,1L,0x3894B361L,2UL,0x087212DFL,0x6BL,3272,0x8E37L},{0x4BL,1L,-1L,-1L,0x786B0F65L,0x78DFL,4294967295UL,248UL,16939,0L},{0x4FL,-2L,0xB2C9FCE8L,-3L,0xC8E50863L,0xA6C6L,0x6A2A7A2EL,6UL,6105,1L},{0x4FL,-2L,0xB2C9FCE8L,-3L,0xC8E50863L,0xA6C6L,0x6A2A7A2EL,6UL,6105,1L},{0L,0x1C548EF4L,0x63D3046DL,0x32D395BFL,0x497E50DFL,0x6DE9L,4294967287UL,1UL,32538,0xA0D0L},{0x4FL,-2L,0xB2C9FCE8L,-3L,0xC8E50863L,0xA6C6L,0x6A2A7A2EL,6UL,6105,1L},{0xBDL,-9L,0x725E32BDL,0xD5EE398FL,1UL,0x0B2FL,0x76880E89L,3UL,26335,4L},{0xCCL,0x3FDD2CD8L,0L,0x9158A8A8L,7UL,8UL,0UL,0x3AL,24382,0xC4AAL}}},{{{0x52L,-1L,0xFF7E7FFCL,-1L,0xBEAF8D3DL,9UL,4294967289UL,4UL,23323,0x5593L},{0xF3L,2L,-3L,2L,4294967287UL,0x1045L,0UL,0xC5L,38900,0x7159L},{1L,0x82D348C4L,-4L,0x43578E83L,0UL,0x3ECEL,4294967295UL,255UL,26684,0x5F8CL},{0xFBL,0x1178E9E6L,0x1E1EF8C0L,5L,0xD898B59BL,0x2D50L,0x948699B4L,0x57L,36453,0xF7B0L},{1L,-1L,-1L,0xCF58B35EL,0xB9E44CDBL,7UL,2UL,0x79L,15233,-1L},{0xFBL,0x1178E9E6L,0x1E1EF8C0L,5L,0xD898B59BL,0x2D50L,0x948699B4L,0x57L,36453,0xF7B0L},{0xB2L,-6L,0x596AE4D3L,0xB60EA2C0L,0x4240F8DEL,65527UL,0x1C58568BL,0xA6L,25025,0x9C95L},{0xFBL,0x1178E9E6L,0x1E1EF8C0L,5L,0xD898B59BL,0x2D50L,0x948699B4L,0x57L,36453,0xF7B0L},{1L,0x91C5A802L,6L,0x1495CED4L,0UL,65535UL,0x13E85E88L,255UL,26219,-10L}}}};
    uint16_t l_644 = 8UL;
    struct S1 l_650 = {-1L,4UL,1951,{0x86L,3L,2L,0x3EA43885L,0xF90FF822L,0xC85DL,0x8D17FC8FL,0x2AL,16340,0xDE14L},{0L,0x07D939B3L,0x85A753C2L,-1L,0x230FAFD0L,0xA0B4L,4294967295UL,0xA5L,12714,0xC07CL},0x53L};
    int i, j, k;
    for (i = 0; i < 3; i++)
        l_538[i] = &g_60;
    for (i = 0; i < 5; i++)
        l_559[i] = 0x65L;
lbl_638:
    ++l_535[0][4][3];
    ++l_544;
    l_556 ^= (((void*)0 == (*g_355)) <= (((*l_549) = (safe_lshift_func_uint16_t_u_u(0x8C33L, 12))) != (p_24 <= ((((((*g_122) , func_25(l_550)) || (p_24 , (safe_sub_func_int16_t_s_s(func_25(func_27(l_553, l_553, &g_161, &g_161, p_23)), p_22)))) , l_554) == &l_555) ^ (*g_171)))));
    for (g_349 = 4; (g_349 > (-23)); g_349 = safe_sub_func_int32_t_s_s(g_349, 2))
    { /* block id: 389 */
        uint16_t l_577 = 0x21D2L;
        int32_t l_579 = 0xB0984251L;
        struct S0 ***l_607 = &g_355;
        struct S1 l_620 = {0L,4294967287UL,4645,{0L,1L,-1L,-7L,0x3AB0026DL,5UL,5UL,0xF5L,46157,0x4C10L},{1L,-1L,-1L,0x9A2814EBL,0xA14D5F68L,1UL,0x4B6C206AL,0x46L,26688,5L},9UL};
        int32_t l_637 = 0x8F2E2D64L;
        int32_t l_640[4][9] = {{0xFC87C297L,0x5D467A11L,0x5D467A11L,0x5D467A11L,0xFC87C297L,0xC8C3BA64L,0xFC87C297L,0xFC87C297L,0xFC87C297L},{0x8BDCE455L,0xF3097EF8L,8L,0x2B4347D6L,5L,8L,8L,0x2B4347D6L,0xF3097EF8L},{0xC8C3BA64L,0xFC87C297L,0x5D467A11L,0xC8C3BA64L,0x5D467A11L,0x34852B32L,(-4L),0xFC87C297L,0x34852B32L},{5L,5L,5L,0x2B4347D6L,8L,0x8BDCE455L,0x2B4347D6L,0x8BDCE455L,0xF3097EF8L}};
        struct S1 *l_646 = &g_647[0][2];
        int i, j;
        if (l_559[4])
        { /* block id: 390 */
            struct S0 l_560 = {0x82L,0xDA7DB119L,3L,-1L,0x00E3B26DL,0x2564L,0x562F77B0L,0x0FL,2648,0L};
            g_542 = (l_560 , 0x2A272170L);
        }
        else
        { /* block id: 392 */
            const int16_t l_582[3] = {(-7L),(-7L),(-7L)};
            const int8_t *l_589 = &g_382;
            const int8_t **l_588[6][9][3] = {{{(void*)0,&l_589,&l_589},{(void*)0,(void*)0,(void*)0},{&l_589,&l_589,&l_589},{&l_589,(void*)0,&l_589},{&l_589,&l_589,&l_589},{(void*)0,(void*)0,(void*)0},{&l_589,&l_589,&l_589},{&l_589,(void*)0,&l_589},{&l_589,&l_589,&l_589}},{{(void*)0,&l_589,(void*)0},{&l_589,(void*)0,&l_589},{(void*)0,(void*)0,&l_589},{&l_589,&l_589,&l_589},{&l_589,&l_589,(void*)0},{&l_589,&l_589,&l_589},{(void*)0,&l_589,&l_589},{&l_589,&l_589,&l_589},{&l_589,(void*)0,&l_589}},{{(void*)0,(void*)0,(void*)0},{&l_589,&l_589,&l_589},{&l_589,&l_589,&l_589},{(void*)0,(void*)0,&l_589},{(void*)0,&l_589,&l_589},{(void*)0,(void*)0,(void*)0},{(void*)0,&l_589,&l_589},{(void*)0,(void*)0,&l_589},{&l_589,&l_589,&l_589}},{{&l_589,(void*)0,(void*)0},{(void*)0,&l_589,&l_589},{&l_589,(void*)0,(void*)0},{&l_589,&l_589,&l_589},{(void*)0,(void*)0,&l_589},{&l_589,&l_589,&l_589},{&l_589,(void*)0,(void*)0},{&l_589,&l_589,&l_589},{(void*)0,&l_589,(void*)0}},{{&l_589,(void*)0,&l_589},{(void*)0,(void*)0,&l_589},{&l_589,&l_589,&l_589},{&l_589,&l_589,(void*)0},{&l_589,&l_589,(void*)0},{(void*)0,&l_589,&l_589},{&l_589,&l_589,&l_589},{&l_589,(void*)0,&l_589},{(void*)0,(void*)0,&l_589}},{{&l_589,&l_589,&l_589},{&l_589,&l_589,&l_589},{(void*)0,(void*)0,&l_589},{(void*)0,&l_589,(void*)0},{(void*)0,(void*)0,(void*)0},{(void*)0,&l_589,&l_589},{(void*)0,(void*)0,&l_589},{&l_589,&l_589,&l_589},{&l_589,(void*)0,(void*)0}}};
            const int8_t ***l_587 = &l_588[3][7][2];
            int8_t ***l_591 = (void*)0;
            struct S0 l_593[5] = {{-1L,-1L,0L,0L,0xACD14E7CL,0x1233L,6UL,4UL,38128,0x51E8L},{-1L,-1L,0L,0L,0xACD14E7CL,0x1233L,6UL,4UL,38128,0x51E8L},{-1L,-1L,0L,0L,0xACD14E7CL,0x1233L,6UL,4UL,38128,0x51E8L},{-1L,-1L,0L,0L,0xACD14E7CL,0x1233L,6UL,4UL,38128,0x51E8L},{-1L,-1L,0L,0L,0xACD14E7CL,0x1233L,6UL,4UL,38128,0x51E8L}};
            struct S2 *l_616 = &g_17;
            struct S1 l_651 = {0x47L,1UL,4607,{-8L,0x3CD7FE87L,1L,-1L,4294967295UL,0xE033L,0x169016C7L,0UL,32611,0xF18EL},{0L,0x73311419L,0xFE9F5BF4L,-1L,0x4CF23DCEL,1UL,4294967288UL,250UL,8397,-1L},0x21L};
            int i, j, k;
            for (l_556 = 0; (l_556 <= 9); l_556 += 1)
            { /* block id: 395 */
                uint8_t ***l_565 = &g_168;
                uint8_t **** const l_564 = &l_565;
                int32_t l_578[1];
                struct S1 *l_648[6][1][2];
                int i, j, k;
                for (i = 0; i < 1; i++)
                    l_578[i] = 1L;
                for (i = 0; i < 6; i++)
                {
                    for (j = 0; j < 1; j++)
                    {
                        for (k = 0; k < 2; k++)
                            l_648[i][j][k] = &g_649;
                    }
                }
                if ((((!g_38.f3.f7) != (l_561 , (safe_add_func_int8_t_s_s(p_23, (l_564 == g_566[2]))))) >= (safe_rshift_func_int8_t_s_s((safe_rshift_func_int8_t_s_u((-1L), ((safe_mod_func_uint32_t_u_u(g_349, p_22)) == (safe_lshift_func_uint16_t_u_u(((((l_578[0] &= ((safe_div_func_int8_t_s_s(((*l_550) ^= ((l_577 = g_533.f3.f6) , 0xBBL)), p_22)) >= p_22)) | l_579) >= (*g_171)) & 0x71A2L), g_60))))), 4))))
                { /* block id: 399 */
                    int32_t *l_581 = (void*)0;
                    for (g_331 = 8; (g_331 >= 0); g_331 -= 1)
                    { /* block id: 402 */
                        int32_t l_580 = 4L;
                        int i;
                        g_38.f4.f1 ^= l_580;
                        if (p_24)
                            break;
                        g_286[l_556] = l_581;
                        if (l_582[1])
                            continue;
                    }
                }
                else
                { /* block id: 408 */
                    struct S0 l_585 = {-3L,0xDA105169L,1L,0x3EE0BFECL,4294967288UL,0x43F2L,0x05774C36L,0x08L,16541,-7L};
                    struct S0 ***l_606[6];
                    union U3 l_621 = {0};
                    union U3 *l_634 = &l_621;
                    union U3 **l_633[8] = {&l_634,&l_634,&l_634,&l_634,&l_634,&l_634,&l_634,&l_634};
                    union U3 ***l_632 = &l_633[5];
                    int i;
                    for (i = 0; i < 6; i++)
                        l_606[i] = &g_355;
                    for (g_10 = 1; (g_10 >= 0); g_10 -= 1)
                    { /* block id: 411 */
                        const int8_t ****l_590 = &l_587;
                        int8_t ****l_592 = &l_591;
                        struct S0 ***l_605 = &g_355;
                        struct S0 ****l_604[1][5][5] = {{{&l_605,&l_605,(void*)0,(void*)0,&l_605},{&l_605,&l_605,&l_605,&l_605,&l_605},{&l_605,&l_605,&l_605,(void*)0,&l_605},{(void*)0,&l_605,&l_605,(void*)0,(void*)0},{&l_605,&l_605,&l_605,&l_605,&l_605}}};
                        const int32_t l_610 = (-8L);
                        int32_t l_615 = (-1L);
                        int i, j, k;
                        l_579 &= (safe_mod_func_uint8_t_u_u((((l_585 , (((((*g_122) , l_586[9][0][7]) , (g_145 = l_585.f5)) , ((*l_590) = l_587)) != ((*l_592) = l_591))) <= 1L) >= (l_593[3] , (((((safe_mul_func_uint16_t_u_u((safe_mul_func_uint16_t_u_u((safe_mod_func_int16_t_s_s(0x9751L, 0xB335L)), l_593[3].f6)), 0x1989L)) | l_582[1]) && (-5L)) || (-1L)) , 254UL))), p_24));
                        l_593[3].f1 &= (g_261.f1 = (safe_mul_func_int8_t_s_s((safe_sub_func_int8_t_s_s(l_585.f8, (p_23 < ((l_606[0] = &g_355) != l_607)))), p_24)));
                        g_60 = (g_542 = (safe_div_func_uint32_t_u_u((((***l_607) , ((p_22 && l_593[3].f5) ^ (l_610 > (g_261.f5 = 0x942CL)))) ^ ((+(safe_div_func_uint16_t_u_u(p_23, ((*l_549) = g_38.f3.f4)))) | ((safe_rshift_func_int16_t_s_s(((0x5CF4F6E1L != p_23) , l_585.f6), 8)) != l_579))), g_38.f3.f3)));
                        l_615 = p_23;
                    }
                    l_616 = l_616;
                    for (g_38.f4.f0 = 1; (g_38.f4.f0 >= 0); g_38.f4.f0 -= 1)
                    { /* block id: 428 */
                        int32_t **l_617 = &l_538[1];
                        int16_t *l_635 = (void*)0;
                        int16_t *l_636[2][8][3] = {{{(void*)0,&g_84,(void*)0},{&g_84,&l_540,&g_145},{(void*)0,&l_540,&l_540},{&l_540,&l_540,&l_540},{&l_540,&g_84,&g_84},{&l_541,&l_541,&l_540},{&g_84,(void*)0,&l_540},{&g_145,&l_540,&g_145}},{{&g_84,&g_145,(void*)0},{&l_541,&l_540,&l_540},{&l_540,&g_145,&g_84},{&l_540,&l_540,&l_541},{(void*)0,(void*)0,&g_84},{&g_84,&l_541,&l_540},{(void*)0,&g_84,(void*)0},{&g_84,&l_540,&g_145}}};
                        int i, j, k;
                        (*l_617) = &g_542;
                        (**l_617) = (safe_mul_func_int16_t_s_s((((l_620 , l_621) , (safe_mod_func_uint16_t_u_u(p_23, g_409[0][0]))) <= (((safe_lshift_func_int16_t_s_u((l_637 = (safe_mod_func_int8_t_s_s((p_24 && (!((l_578[0] = (safe_div_func_uint8_t_u_u(p_22, (safe_div_func_uint16_t_u_u(((*l_549) = ((((g_533.f3.f2 < p_24) , l_632) == &g_472) != g_533.f5)), 65535UL))))) , p_24))), (*g_171)))), g_38.f3.f9)) < p_24) ^ (**l_617))), p_22));
                        if (l_585.f4)
                            goto lbl_638;
                    }
                    l_579 &= l_620.f2;
                }
                for (g_261.f1 = 0; (g_261.f1 <= 1); g_261.f1 += 1)
                { /* block id: 440 */
                    int32_t *l_639 = (void*)0;
                    union U3 *l_642 = &g_388;
                    union U3 **l_641 = &l_642;
                    union U3 ***l_643 = &l_641;
                    struct S1 *l_645 = (void*)0;
                    g_286[9] = l_639;
                    l_620.f3.f1 ^= 0x73C69CAAL;
                    (*l_643) = (l_640[1][6] , l_641);
                    if (p_24)
                    { /* block id: 444 */
                        l_648[3][0][1] = (l_646 = (l_644 , l_645));
                        return l_650;
                    }
                    else
                    { /* block id: 448 */
                        if (p_23)
                            goto lbl_638;
                        l_578[0] = p_23;
                        return l_651;
                    }
                }
            }
        }
    }
    return l_650;
}


/* ------------------------------------------ */
/* 
 * reads : g_60 g_337 g_38.f4.f0 g_153 g_472 g_116 g_445 g_483 g_10 g_355 g_356 g_261 g_192 g_17 g_53.f1 g_171 g_38.f3.f7 g_349 g_409 g_38.f4.f9 g_38.f3.f4 g_530 g_161 g_331 g_647.f0 g_38.f0 g_38.f4.f7 g_647.f5 g_382 g_543 g_647.f3.f0 g_649.f4.f0
 * writes: g_60 g_337 g_38.f4.f0 g_153 g_472 g_116 g_192 g_483 g_10 g_349 g_261.f1 g_261.f4 g_38.f5 g_161 g_331 g_647.f0 g_38.f0 g_38.f4.f7 g_647.f5 g_382 g_543 g_647.f3.f0 g_649.f4.f0
 */
static int32_t  func_25(int8_t * p_26)
{ /* block id: 319 */
    union U3 *l_465 = &g_62;
    int32_t *l_466 = &g_60;
    int32_t l_468 = (-5L);
    int16_t l_475 = 1L;
    int32_t l_488 = 9L;
    int32_t l_518 = 0x52F2CEDAL;
    (*l_466) ^= (l_465 == l_465);
    (*l_466) = (-1L);
    for (g_337 = 3; (g_337 >= 0); g_337 -= 1)
    { /* block id: 324 */
        int32_t *l_467[1];
        int32_t **l_469 = (void*)0;
        int32_t **l_470 = &l_467[0];
        int8_t ***l_494[2];
        struct S2 * const l_496 = (void*)0;
        int i;
        for (i = 0; i < 1; i++)
            l_467[i] = &g_261.f1;
        for (i = 0; i < 2; i++)
            l_494[i] = (void*)0;
        l_468 &= ((*l_466) & (*l_466));
        (*l_470) = &g_349;
        for (g_38.f4.f0 = 0; (g_38.f4.f0 <= 2); g_38.f4.f0 += 1)
        { /* block id: 329 */
            int32_t l_471 = 0x1EFA3EBFL;
            (*l_466) = (-5L);
            if (l_471)
                continue;
            for (g_153 = 0; (g_153 <= 1); g_153 += 1)
            { /* block id: 334 */
                union U3 * const **l_474 = &g_472;
                (*l_470) = &g_349;
                (*l_474) = g_472;
            }
        }
        for (g_116 = 2; (g_116 >= 0); g_116 -= 1)
        { /* block id: 341 */
            int16_t l_476[4][5][2] = {{{0xB52BL,0L},{0L,(-4L)},{0x8068L,0x9CA8L},{0x763FL,0x494DL},{0x204CL,1L}},{{0x911BL,0L},{0x4BD5L,(-9L)},{0x911BL,0xFB04L},{0x9201L,0x911BL},{0x911BL,0x8068L}},{{(-9L),0xA260L},{0x9201L,0x3483L},{0xA260L,(-9L)},{0xA260L,0x494DL},{0x911BL,0x204CL}},{{1L,0x494DL},{0x8068L,0x3483L},{0x8068L,0x4BD5L},{0x494DL,0L},{0x9201L,0x3483L}}};
            int32_t l_481 = 1L;
            int32_t l_482 = 0xDECFF41DL;
            int16_t l_519 = 0x3750L;
            int i, j, k;
            for (g_60 = 1; (g_60 >= 0); g_60 -= 1)
            { /* block id: 344 */
                int32_t l_512 = 0x137184F0L;
                struct S2 l_527 = {8,3,-2222,-10};
                int i, j, k;
                if (((+(g_192[g_116] = g_445[g_116][g_60][(g_116 + 1)])) != l_475))
                { /* block id: 346 */
                    uint16_t l_477 = 65527UL;
                    int32_t l_480[10] = {0xDEFA6D99L,0x9C6922C2L,0xDEFA6D99L,0x9C6922C2L,0xDEFA6D99L,0x9C6922C2L,0xDEFA6D99L,0x9C6922C2L,0xDEFA6D99L,0x9C6922C2L};
                    int16_t *l_491 = &l_476[1][3][0];
                    int i, j, k;
                    l_477++;
                    --g_483[1][2];
                    if ((safe_rshift_func_int8_t_s_u(((*p_26) = (l_488 && (safe_sub_func_int16_t_s_s((*l_466), ((*l_491) &= (*l_466)))))), 2)))
                    { /* block id: 351 */
                        uint32_t l_495 = 0x87EFFBB7L;
                        struct S2 *l_498 = &g_17;
                        struct S2 **l_497[3][10] = {{(void*)0,(void*)0,(void*)0,&l_498,&l_498,&l_498,&l_498,&l_498,&l_498,(void*)0},{(void*)0,&l_498,(void*)0,&l_498,&l_498,&l_498,&l_498,(void*)0,&l_498,(void*)0},{&l_498,&l_498,(void*)0,&l_498,&l_498,&l_498,(void*)0,(void*)0,&l_498,&l_498}};
                        struct S2 **l_499 = &l_498;
                        int i, j;
                        l_495 &= (l_477 ^ (+((**l_470) = (safe_lshift_func_uint8_t_u_s((l_494[1] == (void*)0), (*p_26))))));
                        (*l_499) = ((**g_355) , l_496);
                    }
                    else
                    { /* block id: 355 */
                        uint32_t l_500 = 4294967295UL;
                        ++l_500;
                    }
                    g_261.f1 = ((safe_unary_minus_func_uint16_t_u(g_192[g_116])) || (g_17 , (safe_div_func_int16_t_s_s(g_60, ((g_53.f1 && l_481) && ((safe_rshift_func_uint16_t_u_u((+(safe_sub_func_uint32_t_u_u((safe_mul_func_int16_t_s_s((l_476[1][3][0] || (l_512 = ((l_480[1] & (&l_467[0] != &g_286[9])) , l_481))), g_17.f1)), l_476[1][3][0]))), 14)) || (*l_466)))))));
                }
                else
                { /* block id: 360 */
                    uint16_t l_517 = 4UL;
                    (**l_470) |= (safe_mul_func_int8_t_s_s((safe_lshift_func_uint8_t_u_u((*g_171), 5)), (l_517 , (*l_466))));
                }
                (**l_470) ^= ((*l_466) && (((*l_466) == g_409[0][0]) , l_518));
                l_518 = (l_519 ^ l_519);
                for (g_349 = (-26); (g_349 == (-2)); g_349 = safe_add_func_uint32_t_u_u(g_349, 2))
                { /* block id: 367 */
                    uint8_t l_522[5][1][5] = {{{0UL,0UL,0UL,255UL,0xBAL}},{{0x6AL,254UL,0x6AL,9UL,0x40L}},{{0xBAL,0xF4L,0xF4L,0UL,0x75L}},{{0x40L,0x40L,0x40L,254UL,0xD5L}},{{0x75L,255UL,0x75L,0xF4L,0UL}}};
                    const struct S1 *l_532 = &g_533;
                    const struct S1 ** const l_531 = &l_532;
                    int32_t l_534 = (-1L);
                    int i, j, k;
                    l_522[2][0][0]++;
                    for (g_261.f4 = (-26); (g_261.f4 == 13); ++g_261.f4)
                    { /* block id: 371 */
                        uint8_t *l_528 = (void*)0;
                        uint8_t *l_529 = &g_38.f5;
                        l_534 ^= (l_481 = ((l_519 , (((0xD9L && ((((((l_527 , ((*p_26) = (((g_38.f3.f7 != (((*l_529) = 0UL) & 1L)) >= (*l_466)) < ((g_116 ^ ((*l_466) && g_38.f4.f9)) > (*p_26))))) != (*l_466)) >= g_349) > l_512) >= g_38.f3.f4) , (*l_466))) , 0L) , g_530)) != l_531));
                    }
                }
            }
        }
    }
    return (*l_466);
}


/* ------------------------------------------ */
/* 
 * reads : g_123.f3
 * writes: g_123.f3
 */
static int8_t * func_27(const union U3  p_28, const union U3  p_29, int8_t * p_30, int8_t * p_31, int8_t  p_32)
{ /* block id: 314 */
    union U3 *l_459 = &g_62;
    union U3 *l_461 = &g_62;
    union U3 **l_460 = &l_461;
    int32_t l_462 = 0x5FFEF395L;
    int32_t *l_463 = &g_123.f3;
    int8_t *l_464 = &g_10;
    (*l_460) = (l_459 = l_459);
    (*l_463) &= l_462;
    return l_464;
}


/* ------------------------------------------ */
/* 
 * reads : g_38.f3.f8 g_38.f4.f1 g_38.f4.f7 g_58 g_117 g_17.f3 g_38.f3.f6 g_60 g_38.f3.f9 g_38.f3.f1 g_38.f1 g_53.f3 g_145 g_153 g_168 g_170 g_123.f3 g_10 g_38.f3.f5 g_38.f4.f0 g_187 g_192 g_38.f3 g_123.f1 g_38.f4.f2 g_123.f2 g_38.f5 g_38.f4.f8 g_53.f2 g_17.f2 g_261.f6 g_261.f7 g_38 g_171 g_62 g_122 g_123 g_17.f0 g_261.f4 g_325 g_333 g_445 g_455 g_388 g_84 g_649.f4.f0 g_53 g_647.f5 g_543
 * writes: g_60 g_38.f4.f7 g_38.f4.f1 g_84 g_117 g_122 g_38.f3.f1 g_38.f1 g_53.f3 g_153 g_168 g_123.f3 g_38.f3.f5 g_38.f4.f0 g_187 g_192 g_10 g_261.f1 g_286 g_145 g_325 g_333 g_38.f3.f7 g_337 g_261.f5 g_445 g_116
 */
static union U3  func_33(int16_t  p_34, struct S1  p_35, int8_t * p_36, int16_t  p_37)
{ /* block id: 15 */
    uint32_t l_87 = 0UL;
    int32_t l_110 = (-4L);
    int32_t l_115 = 5L;
    union U4 l_134 = {4294967294UL};
    int8_t * const l_146 = &g_116;
    uint8_t **l_173 = &g_171;
    int32_t l_185 = 1L;
    int32_t l_186 = 0x4994AC54L;
    uint8_t ***l_216 = &l_173;
    uint8_t ****l_215 = &l_216;
    uint8_t ****l_218 = &l_216;
    const int8_t *l_222[10];
    struct S2 l_244[3][2][8] = {{{{2,11,-2548,-25},{4,10,-1618,16},{2,11,-2548,-25},{4,10,-1618,16},{2,14,-84,-7},{4,10,-1618,16},{2,14,-84,-7},{2,11,-2548,-25}},{{2,11,-2548,-25},{2,11,-2548,-25},{2,11,-2548,-25},{4,10,-1618,16},{4,10,-1618,16},{4,10,-1618,16},{2,14,-84,-7},{2,14,-84,-7}}},{{{2,11,-2548,-25},{2,11,-2548,-25},{2,14,-84,-7},{4,10,-1618,16},{4,10,-1618,16},{2,11,-2548,-25},{2,14,-84,-7},{2,14,-84,-7}},{{2,14,-84,-7},{2,11,-2548,-25},{2,14,-84,-7},{2,11,-2548,-25},{4,10,-1618,16},{2,11,-2548,-25},{4,10,-1618,16},{2,14,-84,-7}}},{{{2,14,-84,-7},{2,14,-84,-7},{2,14,-84,-7},{2,11,-2548,-25},{2,11,-2548,-25},{2,11,-2548,-25},{4,10,-1618,16},{4,10,-1618,16}},{{2,14,-84,-7},{2,14,-84,-7},{4,10,-1618,16},{2,11,-2548,-25},{2,11,-2548,-25},{2,14,-84,-7},{4,10,-1618,16},{4,10,-1618,16}}}};
    uint8_t l_249 = 0x37L;
    uint32_t l_256[1][2][10] = {{{0xF4C96F0BL,0UL,0xF4C96F0BL,0UL,0x0B358BC2L,0UL,0x0B358BC2L,0xF4C96F0BL,0x0B358BC2L,0xF4C96F0BL},{0UL,0UL,0xF4C96F0BL,0x0B358BC2L,0x0B358BC2L,0xF4C96F0BL,0xF4C96F0BL,0xF4C96F0BL,0UL,0UL}}};
    int8_t * const l_265 = &g_261.f0;
    int8_t * const *l_264[3][7] = {{&l_265,&l_265,&l_265,&l_265,&l_265,&l_265,&l_265},{&l_265,&l_265,&l_265,&l_265,&l_265,&l_265,&l_265},{&l_265,&l_265,&l_265,&l_265,&l_265,&l_265,&l_265}};
    const int32_t *l_363[9][3][1] = {{{&l_110},{&g_337},{&l_186}},{{&l_186},{&l_110},{&g_337}},{{&g_337},{&l_186},{&l_110}},{{&l_110},{&g_337},{&l_186}},{{&l_186},{&l_110},{&g_337}},{{&g_337},{&l_186},{&l_110}},{{&l_110},{&g_337},{&l_186}},{{&l_186},{&l_110},{&g_337}},{{&g_337},{&l_186},{&l_110}}};
    union U3 *l_385 = (void*)0;
    int8_t l_442 = 0x40L;
    int32_t l_443 = 0x9A7CB5F4L;
    int32_t l_444 = 0x61A537AAL;
    int8_t l_454 = 0x8FL;
    int32_t *l_457 = &l_110;
    int32_t **l_456 = &l_457;
    int i, j, k;
    for (i = 0; i < 10; i++)
        l_222[i] = &g_38.f4.f0;
    if (l_87)
    { /* block id: 16 */
        int32_t l_111 = 0x598B098BL;
        int32_t l_112 = 0x4FF7E3BCL;
        int32_t l_113[9] = {0L,0L,0L,0L,0L,0L,0L,0L,0L};
        int32_t l_114[2][10] = {{0x57937C94L,0x306FF473L,0x57937C94L,0x0149EDFFL,0x57937C94L,0x57937C94L,0x306FF473L,0x0149EDFFL,0x0149EDFFL,0x57937C94L},{0x306FF473L,0x57937C94L,0x57937C94L,0x57937C94L,0x0149EDFFL,0x0149EDFFL,0x0149EDFFL,0x306FF473L,0x306FF473L,0x306FF473L}};
        uint32_t l_132 = 0xB1A2BFF1L;
        const uint32_t *l_133[7][7][1] = {{{&g_38.f1},{&g_38.f3.f4},{&g_38.f4.f4},{&g_117},{(void*)0},{&g_117},{&g_38.f3.f4}},{{(void*)0},{(void*)0},{(void*)0},{&g_117},{&g_38.f1},{&g_38.f1},{&g_76}},{{&g_38.f1},{(void*)0},{&g_38.f4.f4},{&g_76},{&g_38.f4.f4},{&g_38.f1},{(void*)0}},{{&g_38.f3.f4},{&g_38.f3.f4},{&g_38.f3.f4},{&g_76},{&g_38.f1},{&g_38.f3.f4},{&g_38.f1}},{{&g_38.f3.f4},{&g_38.f4.f4},{&g_117},{(void*)0},{&g_117},{&g_38.f3.f4},{(void*)0}},{{(void*)0},{(void*)0},{&g_117},{&g_38.f1},{&g_38.f1},{&g_38.f1},{&g_38.f1}},{{(void*)0},{&g_38.f3.f4},{&g_76},{&g_38.f4.f4},{&g_38.f1},{(void*)0},{&g_38.f3.f4}}};
        uint8_t l_138[3][8][6] = {{{0xD2L,0UL,0x5BL,0x18L,0x18L,0UL},{0x5BL,0x5BL,0x96L,255UL,0x82L,0xB2L},{0xBCL,0x3CL,0x18L,255UL,0xF4L,0x34L},{255UL,0UL,252UL,0x4DL,0x55L,0x34L},{0x96L,0x82L,0x18L,0xF4L,0x96L,0xB2L},{0xD2L,0x06L,0x96L,0UL,0xBCL,0UL},{0x55L,1UL,0x5BL,0x8BL,0xF4L,255UL},{0xB2L,252UL,0x06L,255UL,255UL,1UL}},{{0xB2L,0xB2L,252UL,0x8BL,0x50L,0x50L},{0x55L,0xF4L,0xF4L,0UL,0x34L,0x41L},{0xD2L,0x41L,0xA5L,0xF4L,255UL,0UL},{0x96L,0x82L,0x3CL,0x4DL,0xF4L,255UL},{255UL,0x82L,255UL,255UL,255UL,0xF4L},{0xBCL,0x41L,0UL,255UL,0x34L,0UL},{0x5BL,0xF4L,255UL,0x18L,0x50L,0x8BL},{0xD2L,0xB2L,252UL,0x06L,255UL,255UL}},{{0x3CL,252UL,252UL,0x01L,0xF4L,0x8BL},{0x41L,1UL,255UL,255UL,0xBCL,0UL},{0x01L,0xBCL,0UL,0x96L,1UL,0xF4L},{0x82L,0xF4L,255UL,255UL,252UL,0x4DL},{0x96L,255UL,0x50L,255UL,0xB2L,255UL},{0x82L,0x50L,0x82L,0x96L,0xF4L,255UL},{0x01L,0x34L,0xB2L,0x01L,0x41L,0x18L},{255UL,255UL,0UL,0x3CL,0xF4L,0x06L}}};
        union U4 *l_156[5];
        uint32_t l_205 = 1UL;
        uint8_t ****l_217 = &l_216;
        struct S0 l_219 = {0x69L,0L,0L,0L,0x29A4367DL,0xB8A6L,4294967289UL,0xBFL,9895,0xAA54L};
        int32_t *l_221 = &g_38.f3.f1;
        int i, j, k;
        for (i = 0; i < 5; i++)
            l_156[i] = (void*)0;
        for (p_35.f3.f0 = 0; (p_35.f3.f0 <= 4); p_35.f3.f0 += 1)
        { /* block id: 19 */
            int8_t l_92[3][2][3] = {{{0x54L,0x30L,0x54L},{0xA4L,0L,0xA4L}},{{0x30L,0x43L,0x30L},{0L,0xEBL,0L}},{{0x43L,0x54L,0x43L},{0xEBL,0xA4L,0xEBL}}};
            int32_t *l_93 = (void*)0;
            int32_t *l_94 = &g_60;
            int i, j, k;
            p_35.f3.f1 &= (0xE99DL == (safe_sub_func_int8_t_s_s(((((*l_94) = (safe_mod_func_uint32_t_u_u(g_38.f3.f8, l_92[1][0][0]))) > 0xBAF8CB8FL) >= (g_38.f4.f1 ^ (g_38.f4.f7 = (safe_rshift_func_uint16_t_u_u(0x75BEL, 10))))), 0UL)));
            for (g_38.f4.f1 = 4; (g_38.f4.f1 >= 0); g_38.f4.f1 -= 1)
            { /* block id: 25 */
                uint8_t *l_99 = &g_38.f4.f7;
                int16_t *l_104 = &g_84;
                int i, j;
                (*l_94) = (safe_lshift_func_uint8_t_u_u(((*l_99)++), (safe_lshift_func_uint8_t_u_u((g_58[p_35.f3.f0][(g_38.f4.f1 + 3)] >= ((*l_104) = ((g_58[g_38.f4.f1][(g_38.f4.f1 + 2)] , g_58[g_38.f4.f1][(g_38.f4.f1 + 3)]) > l_87))), 2))));
            }
        }
        for (g_38.f4.f7 = (-10); (g_38.f4.f7 <= 13); g_38.f4.f7 = safe_add_func_int32_t_s_s(g_38.f4.f7, 1))
        { /* block id: 33 */
            int32_t *l_107 = &g_38.f4.f1;
            int32_t *l_108 = (void*)0;
            int32_t *l_109[1][6][10] = {{{&g_38.f4.f1,&g_60,&g_53.f3,&g_38.f4.f1,&g_38.f4.f1,&g_38.f4.f1,&g_38.f3.f1,&g_38.f4.f1,&g_38.f4.f1,&g_38.f4.f1},{&g_60,&g_53.f3,&g_53.f3,&g_38.f4.f1,&g_38.f4.f1,&g_38.f4.f1,&g_38.f4.f1,&g_60,&g_60,&g_38.f3.f1},{&g_38.f4.f1,&g_38.f4.f1,&g_38.f3.f1,&g_38.f4.f1,&g_60,&g_38.f4.f1,&g_38.f3.f1,&g_53.f3,&g_38.f4.f1,&g_38.f4.f1},{&g_38.f4.f1,&g_53.f3,&g_53.f3,&g_60,&g_38.f4.f1,&g_38.f4.f1,&g_53.f3,&g_60,&g_60,&g_53.f3},{&g_38.f4.f1,&g_38.f4.f1,&g_53.f3,&g_38.f4.f1,&g_60,&g_38.f4.f1,&g_38.f3.f1,&g_53.f3,&g_60,&g_38.f4.f1},{&g_38.f4.f1,&g_38.f4.f1,&g_53.f3,&g_60,&g_60,&g_38.f4.f1,&g_53.f3,&g_38.f4.f1,&g_60,&g_38.f4.f1}}};
            union U4 *l_120 = &g_53;
            union U4 **l_121[1][9];
            int i, j, k;
            for (i = 0; i < 1; i++)
            {
                for (j = 0; j < 9; j++)
                    l_121[i][j] = &l_120;
            }
            --g_117;
            g_122 = l_120;
            l_114[0][1] = (p_35.f3.f1 = (g_38.f3.f1 = ((*l_107) = (l_111 & l_111))));
        }
        if ((((safe_rshift_func_int8_t_s_u((safe_mul_func_uint16_t_u_u(((safe_lshift_func_uint16_t_u_u(((((safe_add_func_int32_t_s_s(0x6E06CC3FL, l_132)) , l_133[3][5][0]) == (l_134 , &g_76)) < ((safe_unary_minus_func_int8_t_s((&p_37 == &g_84))) , (((safe_rshift_func_int8_t_s_u((-10L), 2)) && l_87) , g_17.f3))), 5)) & l_134.f1), 1L)), l_138[0][6][2])) ^ g_38.f3.f6) != 0x6AL))
        { /* block id: 41 */
            int16_t l_139[7] = {0x9F0FL,0x9F0FL,0x9F0FL,0x9F0FL,0x9F0FL,0x9F0FL,0x9F0FL};
            int32_t *l_149 = &l_134.f3;
            int32_t *l_150 = &l_134.f3;
            int32_t *l_151 = &g_123.f3;
            int32_t *l_152[10] = {&g_38.f4.f1,&l_113[0],&l_114[1][4],&l_114[1][4],&g_38.f4.f1,&g_53.f3,&g_38.f4.f1,&g_38.f4.f1,&g_38.f4.f1,&l_115};
            union U4 **l_157 = &l_156[1];
            int i;
            for (g_60 = 0; (g_60 <= 2); g_60 += 1)
            { /* block id: 44 */
                int32_t *l_140 = &g_38.f3.f1;
                union U3 l_148 = {0};
                (*l_140) ^= (l_139[1] , g_38.f3.f9);
                for (g_38.f1 = 0; (g_38.f1 <= 2); g_38.f1 += 1)
                { /* block id: 48 */
                    int32_t *l_147 = &g_53.f3;
                    (*l_147) = (safe_add_func_uint8_t_u_u((g_53.f3 , p_35.f3.f7), (((*l_140) = ((safe_rshift_func_uint8_t_u_u(g_145, (l_112 ^ 252UL))) == (p_35 , (l_146 == l_146)))) && (+p_35.f4.f9))));
                    if (p_35.f0)
                        break;
                    return l_148;
                }
            }
            --g_153;
            (*l_157) = l_156[1];
        }
        else
        { /* block id: 57 */
            uint32_t l_163 = 0x8B299F90L;
            uint8_t *l_167 = &l_138[2][7][4];
            uint8_t **l_166 = &l_167;
            int32_t l_177 = (-1L);
            int32_t l_184[2];
            uint8_t * const *l_196 = &g_171;
            uint8_t * const **l_195[8][2][6] = {{{&l_196,&l_196,&l_196,&l_196,&l_196,&l_196},{&l_196,&l_196,(void*)0,(void*)0,&l_196,&l_196}},{{&l_196,&l_196,&l_196,&l_196,(void*)0,&l_196},{&l_196,&l_196,&l_196,&l_196,&l_196,&l_196}},{{&l_196,(void*)0,&l_196,&l_196,&l_196,&l_196},{(void*)0,(void*)0,&l_196,&l_196,(void*)0,&l_196}},{{(void*)0,&l_196,&l_196,(void*)0,&l_196,&l_196},{(void*)0,(void*)0,&l_196,&l_196,&l_196,&l_196}},{{(void*)0,&l_196,&l_196,&l_196,&l_196,&l_196},{&l_196,&l_196,&l_196,(void*)0,&l_196,&l_196}},{{&l_196,&l_196,(void*)0,(void*)0,(void*)0,&l_196},{(void*)0,&l_196,&l_196,(void*)0,&l_196,&l_196}},{{&l_196,&l_196,&l_196,(void*)0,&l_196,&l_196},{&l_196,&l_196,&l_196,&l_196,&l_196,&l_196}},{{&l_196,(void*)0,(void*)0,(void*)0,&l_196,&l_196},{&l_196,&l_196,(void*)0,&l_196,&l_196,&l_196}}};
            int32_t *l_220 = &l_134.f3;
            int i, j, k;
            for (i = 0; i < 2; i++)
                l_184[i] = 0xC020D4C6L;
            if (l_113[3])
            { /* block id: 58 */
                int32_t *l_158 = &l_134.f3;
                int32_t *l_159 = &g_38.f4.f1;
                int32_t *l_160[6][3] = {{&g_123.f3,&g_123.f3,&g_123.f3},{&g_38.f3.f1,&g_38.f3.f1,&g_38.f3.f1},{&g_123.f3,&g_123.f3,&g_123.f3},{&g_38.f3.f1,&g_38.f3.f1,&g_38.f3.f1},{&g_123.f3,&g_123.f3,&g_123.f3},{&g_38.f3.f1,&g_38.f3.f1,&g_38.f3.f1}};
                int i, j;
                ++l_163;
                l_166 = (void*)0;
            }
            else
            { /* block id: 61 */
                uint8_t ***l_169 = &g_168;
                uint8_t ***l_172[2][6][4];
                int32_t *l_174[1];
                union U3 l_180 = {0};
                int i, j, k;
                for (i = 0; i < 2; i++)
                {
                    for (j = 0; j < 6; j++)
                    {
                        for (k = 0; k < 4; k++)
                            l_172[i][j][k] = (void*)0;
                    }
                }
                for (i = 0; i < 1; i++)
                    l_174[i] = &g_53.f3;
                g_123.f3 |= (((*l_169) = g_168) == (l_173 = g_170[6][1][0]));
                l_177 ^= (safe_rshift_func_uint8_t_u_s(p_35.f4.f4, (*p_36)));
                for (g_38.f3.f5 = 1; (g_38.f3.f5 <= 4); g_38.f3.f5 += 1)
                { /* block id: 68 */
                    uint32_t l_181[9][2][1] = {{{0x142A211DL},{0x2C0B9176L}},{{0x2C0B9176L},{0UL}},{{0UL},{1UL}},{{0UL},{1UL}},{{0x142A211DL},{0x142A211DL}},{{0UL},{5UL}},{{5UL},{0x2C0B9176L}},{{0x2C0B9176L},{0x142A211DL}},{{0x2C0B9176L},{0x142A211DL}}};
                    int i, j, k;
                    l_177 = (((safe_add_func_int16_t_s_s(l_87, (((!((g_145 , l_180) , (l_163 | p_35.f4.f8))) ^ l_181[3][0][0]) & (safe_add_func_int16_t_s_s((((p_35.f4.f4 ^ (&l_156[g_38.f3.f5] != &l_156[g_38.f3.f5])) >= l_113[5]) & g_10), 0xACF0L))))) , l_163) ^ 0x1EFB2649L);
                    for (g_38.f4.f0 = 4; (g_38.f4.f0 >= 1); g_38.f4.f0 -= 1)
                    { /* block id: 72 */
                        int16_t l_190 = (-1L);
                        int32_t l_191 = 1L;
                        uint8_t * const ***l_197 = &l_195[1][1][1];
                        int i, j;
                        --g_187;
                        --g_192[2];
                        g_38.f4.f1 = (&g_168 == ((*l_197) = l_195[2][0][4]));
                        g_60 = ((safe_mul_func_uint32_t_u_u(((p_35 , (g_58[g_38.f4.f0][g_38.f4.f0] || p_35.f4.f8)) >= p_37), ((safe_div_func_int16_t_s_s(((void*)0 != l_167), (safe_mul_func_int16_t_s_s((((1L <= ((g_38.f3 , (safe_unary_minus_func_int8_t_s(0xB8L))) != 0xCE43L)) ^ (-6L)) && l_184[0]), l_87)))) < (-1L)))) , l_190);
                    }
                }
                l_205++;
            }
            (*l_220) = (safe_div_func_int16_t_s_s(((g_123.f1 , (safe_lshift_func_int8_t_s_u((*p_36), (((0x2A3CL & (safe_add_func_int8_t_s_s((safe_unary_minus_func_int8_t_s(1L)), (*p_36)))) , (l_217 = l_215)) == l_218)))) ^ (((l_219 , g_38.f4.f2) , &g_161) == &g_10)), p_35.f2));
        }
        (*l_221) |= l_115;
    }
    else
    { /* block id: 86 */
        const int8_t **l_223 = &l_222[4];
        struct S0 l_224[2] = {{-10L,5L,7L,0xB3B3D443L,0xF4879BB8L,1UL,1UL,0x9EL,26012,5L},{-10L,5L,7L,0xB3B3D443L,0xF4879BB8L,1UL,1UL,0x9EL,26012,5L}};
        int16_t l_229 = 0xF760L;
        uint16_t *l_232 = (void*)0;
        uint16_t *l_233[2];
        int32_t *l_250 = (void*)0;
        int32_t *l_251 = &l_115;
        union U3 l_285 = {0};
        int32_t l_294 = 8L;
        int32_t l_295 = 0x849D8FB3L;
        int32_t l_296 = 0xA7A4D2B8L;
        int i;
        for (i = 0; i < 2; i++)
            l_233[i] = &g_38.f4.f5;
lbl_262:
        g_53.f3 ^= ((((p_35.f4.f1 || (((p_35.f4 , (((*l_223) = l_222[1]) != (l_224[1] , p_36))) , (safe_rshift_func_uint16_t_u_u((+(((safe_lshift_func_uint16_t_u_s((g_123.f2 != p_35.f5), (l_229 != (safe_add_func_uint16_t_u_u((p_35.f3.f5 = l_134.f1), p_35.f3.f4))))) , (void*)0) == &g_122)), l_224[1].f5))) > (*p_36))) < 0xDDL) && p_35.f4.f8) ^ p_35.f4.f8);
lbl_328:
        (*l_251) |= (safe_sub_func_uint16_t_u_u(((l_224[1].f5 != (safe_sub_func_uint8_t_u_u(0UL, (((g_38.f3.f4 , l_134.f0) , ((safe_add_func_uint16_t_u_u(65533UL, g_58[2][2])) != ((safe_lshift_func_int8_t_s_u(((p_35.f3.f0 == (((safe_rshift_func_int8_t_s_s(((l_244[0][1][0] , (((safe_unary_minus_func_int16_t_s((safe_unary_minus_func_int8_t_s((safe_lshift_func_uint8_t_u_s(p_35.f3.f3, l_229)))))) == l_249) , 0L)) ^ g_38.f1), 4)) , p_35.f4.f1) || 4UL)) && 0xF589D1E2L), 2)) ^ (-7L)))) | 0xC9580029L)))) ^ 0x042B92E4L), p_35.f3.f9));
lbl_330:
        for (p_35.f1 = 0; (p_35.f1 <= 9); p_35.f1 += 1)
        { /* block id: 93 */
            int32_t *l_257 = &g_123.f3;
            struct S0 *l_260 = &g_261;
            (*l_251) = (((((safe_mod_func_int16_t_s_s((0xD5L & (safe_lshift_func_uint16_t_u_s((((p_35.f4.f6 < (g_38.f5 <= (p_35.f5 == (*l_251)))) ^ ((~((&p_36 != (void*)0) == (p_35.f4.f2 , 1L))) > 0x85C3L)) >= 0xF4L), p_35.f3.f1))), g_38.f4.f8)) <= (*l_251)) , l_244[0][1][0].f2) == l_256[0][1][1]) > (-1L));
            if (g_53.f2)
                continue;
            l_257 = &g_60;
            for (l_229 = 3; (l_229 >= 0); l_229 -= 1)
            { /* block id: 99 */
                struct S0 *l_258 = &g_38.f3;
                struct S0 **l_259[3];
                int32_t l_284 = 0x40E746C3L;
                int i;
                for (i = 0; i < 3; i++)
                    l_259[i] = &l_258;
                if (p_35.f4.f6)
                    break;
                l_260 = l_258;
                if (l_87)
                    goto lbl_262;
                for (g_10 = 0; (g_10 <= 9); g_10 += 1)
                { /* block id: 105 */
                    int8_t ***l_263[7] = {(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0};
                    const int32_t l_282 = 7L;
                    int16_t l_283 = 0x402EL;
                    int i;
                    l_264[1][1] = (void*)0;
                    for (g_117 = 0; (g_117 <= 9); g_117 += 1)
                    { /* block id: 109 */
                        int i, j, k;
                        g_261.f1 = (safe_mul_func_int16_t_s_s(g_17.f2, ((safe_rshift_func_int8_t_s_u((g_261.f6 || (((g_192[2] = g_261.f7) & (safe_lshift_func_int8_t_s_s((safe_add_func_uint8_t_u_u((g_38 , (*g_171)), (safe_lshift_func_uint8_t_u_s((((p_35.f3.f5 | ((safe_mod_func_int32_t_s_s((0xF47FL ^ p_35.f3.f4), (safe_mul_func_int16_t_s_s((safe_mod_func_int16_t_s_s(l_244[0][1][0].f3, l_282)), p_35.f3.f4)))) != 0xB868E2F5L)) , l_283) == 65535UL), l_283)))), l_284))) >= 0x12C776FCL)), 0)) <= 0xE3A977B0L)));
                    }
                    return g_62;
                }
            }
        }
        if ((l_285 , p_35.f3.f6))
        { /* block id: 117 */
            uint8_t l_297 = 0x94L;
            int32_t l_322 = 0L;
            union U3 l_329[6][3][7] = {{{{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0}}},{{{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0}}},{{{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0}}},{{{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0}}},{{{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0}}},{{{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0}},{{0},{0},{0},{0},{0},{0},{0}}}};
            int32_t l_332 = 0xEB4B96B0L;
            struct S0 **l_357 = &g_356[2][0];
            struct S0 **l_359 = &g_356[0][0];
            int i, j, k;
lbl_341:
            for (g_38.f4.f7 = 0; (g_38.f4.f7 <= 0); g_38.f4.f7 += 1)
            { /* block id: 120 */
                const int32_t *l_289 = &l_186;
                const int32_t **l_288 = &l_289;
                int32_t *l_290 = &l_134.f3;
                int32_t *l_291 = &g_60;
                int32_t *l_292 = &l_185;
                int32_t *l_293[5] = {(void*)0,(void*)0,(void*)0,(void*)0,(void*)0};
                int i;
                (*l_288) = (g_286[9] = (void*)0);
                ++l_297;
                if ((*l_291))
                { /* block id: 124 */
                    int16_t l_317 = 0x34A4L;
                    (*l_292) ^= (*l_251);
                    for (p_35.f3.f7 = 0; (p_35.f3.f7 <= 0); p_35.f3.f7 += 1)
                    { /* block id: 128 */
                        int16_t *l_310 = &g_84;
                        int16_t *l_311[7] = {(void*)0,&l_229,(void*)0,&l_229,(void*)0,&l_229,(void*)0};
                        struct S1 *l_313 = &g_38;
                        struct S1 **l_312 = &l_313;
                        struct S1 **l_314 = (void*)0;
                        struct S1 *l_316 = &g_38;
                        struct S1 **l_315 = &l_316;
                        int i;
                        (*l_292) = ((p_35.f3.f6 & (((safe_add_func_uint8_t_u_u((safe_rshift_func_uint8_t_u_s(l_297, l_297)), ((safe_rshift_func_int16_t_s_u((g_145 |= ((safe_add_func_uint32_t_u_u(((*g_122) , (l_297 < p_35.f1)), g_261.f6)) >= (safe_rshift_func_uint16_t_u_s(((g_10 <= ((*l_310) = 0x1273L)) || l_297), g_17.f0)))), 6)) , p_35.f3.f0))) ^ (*p_36)) != l_297)) != p_35.f3.f0);
                        (*l_315) = ((*l_312) = &p_35);
                        return g_62;
                    }
                    if (l_134.f3)
                        continue;
                    if (l_317)
                    { /* block id: 137 */
                        (*l_291) = (safe_lshift_func_uint16_t_u_u(l_317, 2));
                    }
                    else
                    { /* block id: 139 */
                        int16_t l_323 = 0L;
                        int32_t l_324 = (-1L);
                        (*l_291) ^= p_35.f1;
                        (*l_251) &= ((*l_292) &= p_37);
                        g_60 = ((*l_290) = (safe_rshift_func_uint16_t_u_s(g_145, g_261.f4)));
                        --g_325;
                    }
                }
                else
                { /* block id: 147 */
                    if (p_35.f4.f0)
                    { /* block id: 148 */
                        (*l_288) = &g_287;
                        if (p_35.f3.f1)
                            continue;
                        if (p_37)
                            goto lbl_328;
                    }
                    else
                    { /* block id: 152 */
                        return l_329[3][0][4];
                    }
                    if (l_297)
                        continue;
                }
                (*l_291) &= p_35.f3.f9;
                for (l_185 = 0; (l_185 >= 0); l_185 -= 1)
                { /* block id: 160 */
                    int32_t l_336 = (-1L);
                    for (p_35.f3.f4 = 0; (p_35.f3.f4 <= 0); p_35.f3.f4 += 1)
                    { /* block id: 163 */
                        if (g_38.f3.f8)
                            goto lbl_330;
                        ++g_333;
                    }
                    (*l_291) ^= (l_134.f0 && p_35.f3.f9);
                    (*l_290) |= ((*l_291) = p_35.f2);
                    for (g_84 = 0; (g_84 >= 0); g_84 -= 1)
                    { /* block id: 172 */
                        (*l_291) |= l_244[0][1][0].f0;
                    }
                    for (g_38.f3.f7 = 0; (g_38.f3.f7 <= 0); g_38.f3.f7 += 1)
                    { /* block id: 177 */
                        uint16_t l_338[10][7] = {{0x2767L,0x2767L,65532UL,0x2C97L,65532UL,65532UL,65532UL},{65532UL,0x2C97L,1UL,0x2C97L,0x2C97L,0x2C97L,0x2767L},{1UL,0x2C97L,65532UL,1UL,65532UL,65526UL,0x2767L},{65526UL,1UL,0x2767L,1UL,65532UL,0x2C97L,65526UL},{1UL,0x2767L,0x2767L,65532UL,0x2C97L,65532UL,65532UL},{1UL,1UL,65526UL,0x2767L,65526UL,65526UL,65526UL},{65526UL,0x2767L,65532UL,0x2767L,0x2C97L,0x2767L,1UL},{65532UL,0x2767L,65526UL,65532UL,65526UL,0x2C97L,1UL},{0x2C97L,65532UL,1UL,65532UL,65526UL,0x2767L,65526UL},{65532UL,1UL,1UL,65526UL,0x2767L,65526UL,65526UL}};
                        int i, j;
                        l_338[6][3]++;
                        l_332 |= (g_123.f3 ^= p_34);
                        g_53.f3 = (g_337 = l_332);
                    }
                }
            }
            for (l_297 = 0; (l_297 <= 0); l_297 += 1)
            { /* block id: 188 */
                struct S1 *l_343 = &g_38;
                struct S1 **l_342 = &l_343;
                struct S1 *l_344 = (void*)0;
                int32_t l_345 = 1L;
                for (l_110 = 9; (l_110 >= 0); l_110 -= 1)
                { /* block id: 191 */
                    if (g_38.f3.f5)
                        goto lbl_341;
                    return g_62;
                }
                l_344 = ((*l_342) = (void*)0);
                for (p_35.f3.f1 = 0; (p_35.f3.f1 <= 3); p_35.f3.f1 += 1)
                { /* block id: 199 */
                    (*l_251) = l_297;
                    for (g_261.f5 = 0; (g_261.f5 <= 0); g_261.f5 += 1)
                    { /* block id: 203 */
                        int32_t **l_346[7][3][6] = {{{&l_250,(void*)0,&l_251,&l_251,&l_250,&l_250},{&l_250,&l_251,&l_251,&l_251,&l_250,(void*)0},{&l_251,&l_250,&l_251,(void*)0,&l_251,&l_251}},{{&l_250,&l_250,(void*)0,&l_251,&l_250,(void*)0},{&l_251,&l_251,&l_251,&l_250,&l_250,&l_250},{&l_250,&l_250,&l_251,&l_251,&l_251,&l_250}},{{&l_250,&l_251,&l_250,&l_251,&l_251,&l_250},{(void*)0,&l_251,&l_250,&l_251,&l_251,&l_251},{&l_251,&l_251,&l_250,&l_250,(void*)0,&l_251}},{{&l_250,&l_251,&l_251,(void*)0,&l_251,&l_251},{&l_251,(void*)0,(void*)0,(void*)0,&l_251,&l_251},{&l_250,&l_251,&l_251,&l_250,&l_251,&l_251}},{{&l_251,&l_251,&l_251,&l_251,&l_250,&l_251},{&l_251,&l_250,&l_250,&l_251,(void*)0,&l_251},{&l_251,(void*)0,&l_250,&l_250,&l_250,&l_251}},{{(void*)0,(void*)0,&l_251,(void*)0,&l_250,&l_251},{&l_250,&l_250,&l_251,&l_250,&l_251,&l_250},{(void*)0,&l_250,&l_251,&l_251,&l_251,&l_251}},{{&l_250,&l_251,&l_250,&l_251,&l_250,&l_250},{&l_250,&l_251,&l_251,&l_250,&l_250,&l_251},{&l_251,&l_250,&l_250,&l_250,&l_251,&l_250}}};
                        int i, j, k;
                        l_345 |= 0x5F0BBE29L;
                        g_286[9] = &l_296;
                    }
                }
                for (g_325 = 0; (g_325 <= 0); g_325 += 1)
                { /* block id: 210 */
                    uint32_t l_350 = 4294967291UL;
                    struct S0 *l_354 = &g_38.f4;
                    struct S0 **l_353 = &l_354;
                }
            }
            (*l_251) ^= (p_35.f4.f1 ^= (-2L));
        }
        else
        { /* block id: 237 */
            const int32_t **l_361 = (void*)0;
            const int32_t **l_362[2];
            int i;
            for (i = 0; i < 2; i++)
                l_362[i] = &g_286[9];
            l_363[0][2][0] = &g_287;
        }
    }
    if (p_35.f4.f7)
    { /* block id: 241 */
        return g_62;
    }
    else
    { /* block id: 243 */
        union U4 l_368 = {0xD2D93F7CL};
        int32_t *l_384[3];
        int16_t l_405 = 0x504DL;
        int i;
        for (i = 0; i < 3; i++)
            l_384[i] = &l_368.f3;
        for (l_249 = (-20); (l_249 <= 16); l_249 = safe_add_func_uint32_t_u_u(l_249, 7))
        { /* block id: 246 */
            uint16_t *l_375[2];
            uint8_t ** const *l_377 = &g_170[6][1][0];
            uint8_t ** const **l_376 = &l_377;
            int32_t *l_378 = &g_38.f3.f1;
            int32_t l_396 = 0x91E4A1E3L;
            int32_t l_404 = 0x62E02450L;
            int32_t l_406 = 9L;
            int32_t l_408 = 0L;
            uint32_t l_438 = 0xBF89C8AAL;
            int i;
            for (i = 0; i < 2; i++)
                l_375[i] = (void*)0;
        }
        ++g_445[1][1][1];
        p_35.f4.f1 = (safe_sub_func_uint8_t_u_u((*g_171), ((~g_38.f3.f5) , ((*l_146) = (*p_36)))));
        g_123.f3 = ((3L && ((*p_36) >= ((((g_123.f2 ^ (((safe_mul_func_uint16_t_u_u(((((safe_sub_func_int32_t_s_s(p_35.f4.f9, ((((*l_146) = l_454) , (((&g_286[3] != &l_363[7][2][0]) == p_35.f3.f7) | 0x3CC708BAL)) != p_35.f4.f7))) || p_34) >= p_35.f4.f4) | (-3L)), g_455)) & p_35.f3.f4) , 0x1116D29EL)) <= (*p_36)) ^ p_35.f4.f2) < p_35.f1))) | 0x3DL);
    }
    (*l_456) = &g_337;
    l_385 = &g_388;
    return (*l_385);
}


/* ------------------------------------------ */
/* 
 * reads : g_76 g_38.f3.f9 g_38.f4.f7 g_84 g_10 g_647.f0 g_331 g_38.f0 g_647.f3.f0
 * writes: g_76 g_84
 */
static int8_t * func_39(const int8_t * p_40, int8_t * const  p_41, int8_t  p_42, uint32_t  p_43, union U3  p_44)
{ /* block id: 7 */
    int32_t *l_65[7] = {&g_38.f4.f1,&g_38.f4.f1,&g_38.f4.f1,&g_38.f4.f1,&g_38.f4.f1,&g_38.f4.f1,&g_38.f4.f1};
    int32_t **l_66 = &l_65[3];
    int32_t l_67 = 0xDE09DF94L;
    int32_t l_74 = 0x400D3BC8L;
    uint32_t *l_75 = &g_76;
    int16_t *l_81 = (void*)0;
    int16_t *l_82 = (void*)0;
    int16_t *l_83 = &g_84;
    int32_t *l_85 = &l_74;
    int32_t l_86 = 0x510E35A5L;
    int i;
    l_86 ^= ((*l_85) = (((safe_rshift_func_int8_t_s_s(((((*l_83) |= ((((l_67 = (((*l_66) = l_65[3]) == &g_60)) ^ ((safe_add_func_int16_t_s_s((safe_rshift_func_uint8_t_u_s(((safe_add_func_int16_t_s_s(l_74, ((p_42 == ((*l_75)++)) < (safe_add_func_uint8_t_u_u(p_42, (l_66 == ((p_43 | 0x29BAL) , l_66))))))) > 0x7FL), 6)), g_38.f3.f9)) || g_38.f4.f7)) && p_43) & 0x27L)) != p_43) <= 0x4DE6L), (*p_41))) < 0x02L) > 0x57L));
    return &g_10;
}


/* ------------------------------------------ */
/* 
 * reads : g_38.f3.f3 g_58 g_53.f3 g_60
 * writes: g_53.f3 g_58 g_60
 */
static const int8_t * func_45(int8_t * p_46, int32_t  p_47, uint32_t  p_48, union U4  p_49, int8_t  p_50)
{ /* block id: 2 */
    int32_t *l_57 = &g_53.f3;
    int32_t *l_59 = &g_60;
    const int8_t *l_61 = &g_38.f3.f0;
    g_58[2][2] ^= ((*l_57) = (safe_rshift_func_uint8_t_u_s(g_38.f3.f3, 2)));
    (*l_59) ^= (*l_57);
    return l_61;
}




/* ---------------------------------------- */
int main (int argc, char* argv[])
{
    int i, j, k;
    int print_hash_value = 0;
    if (argc == 2 && strcmp(argv[1], "1") == 0) print_hash_value = 1;
    platform_main_begin();
    crc32_gentab();
    func_1();
    transparent_crc(g_8, "g_8", print_hash_value);
    transparent_crc(g_10, "g_10", print_hash_value);
    transparent_crc(g_17.f0, "g_17.f0", print_hash_value);
    transparent_crc(g_17.f1, "g_17.f1", print_hash_value);
    transparent_crc(g_17.f2, "g_17.f2", print_hash_value);
    transparent_crc(g_17.f3, "g_17.f3", print_hash_value);
    transparent_crc(g_38.f0, "g_38.f0", print_hash_value);
    transparent_crc(g_38.f1, "g_38.f1", print_hash_value);
    transparent_crc(g_38.f2, "g_38.f2", print_hash_value);
    transparent_crc(g_38.f3.f0, "g_38.f3.f0", print_hash_value);
    transparent_crc(g_38.f3.f1, "g_38.f3.f1", print_hash_value);
    transparent_crc(g_38.f3.f2, "g_38.f3.f2", print_hash_value);
    transparent_crc(g_38.f3.f3, "g_38.f3.f3", print_hash_value);
    transparent_crc(g_38.f3.f4, "g_38.f3.f4", print_hash_value);
    transparent_crc(g_38.f3.f5, "g_38.f3.f5", print_hash_value);
    transparent_crc(g_38.f3.f6, "g_38.f3.f6", print_hash_value);
    transparent_crc(g_38.f3.f7, "g_38.f3.f7", print_hash_value);
    transparent_crc(g_38.f3.f8, "g_38.f3.f8", print_hash_value);
    transparent_crc(g_38.f3.f9, "g_38.f3.f9", print_hash_value);
    transparent_crc(g_38.f4.f0, "g_38.f4.f0", print_hash_value);
    transparent_crc(g_38.f4.f1, "g_38.f4.f1", print_hash_value);
    transparent_crc(g_38.f4.f2, "g_38.f4.f2", print_hash_value);
    transparent_crc(g_38.f4.f3, "g_38.f4.f3", print_hash_value);
    transparent_crc(g_38.f4.f4, "g_38.f4.f4", print_hash_value);
    transparent_crc(g_38.f4.f5, "g_38.f4.f5", print_hash_value);
    transparent_crc(g_38.f4.f6, "g_38.f4.f6", print_hash_value);
    transparent_crc(g_38.f4.f7, "g_38.f4.f7", print_hash_value);
    transparent_crc(g_38.f4.f8, "g_38.f4.f8", print_hash_value);
    transparent_crc(g_38.f4.f9, "g_38.f4.f9", print_hash_value);
    transparent_crc(g_38.f5, "g_38.f5", print_hash_value);
    transparent_crc(g_53.f0, "g_53.f0", print_hash_value);
    transparent_crc(g_53.f1, "g_53.f1", print_hash_value);
    transparent_crc(g_53.f2, "g_53.f2", print_hash_value);
    transparent_crc(g_53.f3, "g_53.f3", print_hash_value);
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 10; j++)
        {
            transparent_crc(g_58[i][j], "g_58[i][j]", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

        }
    }
    transparent_crc(g_60, "g_60", print_hash_value);
    transparent_crc(g_76, "g_76", print_hash_value);
    transparent_crc(g_84, "g_84", print_hash_value);
    transparent_crc(g_116, "g_116", print_hash_value);
    transparent_crc(g_117, "g_117", print_hash_value);
    transparent_crc(g_123.f0, "g_123.f0", print_hash_value);
    transparent_crc(g_123.f1, "g_123.f1", print_hash_value);
    transparent_crc(g_123.f2, "g_123.f2", print_hash_value);
    transparent_crc(g_123.f3, "g_123.f3", print_hash_value);
    transparent_crc(g_145, "g_145", print_hash_value);
    transparent_crc(g_153, "g_153", print_hash_value);
    transparent_crc(g_161, "g_161", print_hash_value);
    transparent_crc(g_162, "g_162", print_hash_value);
    transparent_crc(g_187, "g_187", print_hash_value);
    for (i = 0; i < 3; i++)
    {
        transparent_crc(g_192[i], "g_192[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_261.f0, "g_261.f0", print_hash_value);
    transparent_crc(g_261.f1, "g_261.f1", print_hash_value);
    transparent_crc(g_261.f2, "g_261.f2", print_hash_value);
    transparent_crc(g_261.f3, "g_261.f3", print_hash_value);
    transparent_crc(g_261.f4, "g_261.f4", print_hash_value);
    transparent_crc(g_261.f5, "g_261.f5", print_hash_value);
    transparent_crc(g_261.f6, "g_261.f6", print_hash_value);
    transparent_crc(g_261.f7, "g_261.f7", print_hash_value);
    transparent_crc(g_261.f8, "g_261.f8", print_hash_value);
    transparent_crc(g_261.f9, "g_261.f9", print_hash_value);
    transparent_crc(g_287, "g_287", print_hash_value);
    transparent_crc(g_325, "g_325", print_hash_value);
    transparent_crc(g_331, "g_331", print_hash_value);
    transparent_crc(g_333, "g_333", print_hash_value);
    transparent_crc(g_337, "g_337", print_hash_value);
    transparent_crc(g_349, "g_349", print_hash_value);
    transparent_crc(g_382, "g_382", print_hash_value);
    for (i = 0; i < 1; i++)
    {
        for (j = 0; j < 1; j++)
        {
            transparent_crc(g_409[i][j], "g_409[i][j]", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

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

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

        }
    }
    transparent_crc(g_533.f0, "g_533.f0", print_hash_value);
    transparent_crc(g_533.f1, "g_533.f1", print_hash_value);
    transparent_crc(g_533.f2, "g_533.f2", print_hash_value);
    transparent_crc(g_533.f3.f0, "g_533.f3.f0", print_hash_value);
    transparent_crc(g_533.f3.f1, "g_533.f3.f1", print_hash_value);
    transparent_crc(g_533.f3.f2, "g_533.f3.f2", print_hash_value);
    transparent_crc(g_533.f3.f3, "g_533.f3.f3", print_hash_value);
    transparent_crc(g_533.f3.f4, "g_533.f3.f4", print_hash_value);
    transparent_crc(g_533.f3.f5, "g_533.f3.f5", print_hash_value);
    transparent_crc(g_533.f3.f6, "g_533.f3.f6", print_hash_value);
    transparent_crc(g_533.f3.f7, "g_533.f3.f7", print_hash_value);
    transparent_crc(g_533.f3.f8, "g_533.f3.f8", print_hash_value);
    transparent_crc(g_533.f3.f9, "g_533.f3.f9", print_hash_value);
    transparent_crc(g_533.f4.f0, "g_533.f4.f0", print_hash_value);
    transparent_crc(g_533.f4.f1, "g_533.f4.f1", print_hash_value);
    transparent_crc(g_533.f4.f2, "g_533.f4.f2", print_hash_value);
    transparent_crc(g_533.f4.f3, "g_533.f4.f3", print_hash_value);
    transparent_crc(g_533.f4.f4, "g_533.f4.f4", print_hash_value);
    transparent_crc(g_533.f4.f5, "g_533.f4.f5", print_hash_value);
    transparent_crc(g_533.f4.f6, "g_533.f4.f6", print_hash_value);
    transparent_crc(g_533.f4.f7, "g_533.f4.f7", print_hash_value);
    transparent_crc(g_533.f4.f8, "g_533.f4.f8", print_hash_value);
    transparent_crc(g_533.f4.f9, "g_533.f4.f9", print_hash_value);
    transparent_crc(g_533.f5, "g_533.f5", print_hash_value);
    transparent_crc(g_542, "g_542", print_hash_value);
    transparent_crc(g_543, "g_543", print_hash_value);
    for (i = 0; i < 2; i++)
    {
        for (j = 0; j < 9; j++)
        {
            transparent_crc(g_647[i][j].f0, "g_647[i][j].f0", print_hash_value);
            transparent_crc(g_647[i][j].f1, "g_647[i][j].f1", print_hash_value);
            transparent_crc(g_647[i][j].f2, "g_647[i][j].f2", print_hash_value);
            transparent_crc(g_647[i][j].f3.f0, "g_647[i][j].f3.f0", print_hash_value);
            transparent_crc(g_647[i][j].f3.f1, "g_647[i][j].f3.f1", print_hash_value);
            transparent_crc(g_647[i][j].f3.f2, "g_647[i][j].f3.f2", print_hash_value);
            transparent_crc(g_647[i][j].f3.f3, "g_647[i][j].f3.f3", print_hash_value);
            transparent_crc(g_647[i][j].f3.f4, "g_647[i][j].f3.f4", print_hash_value);
            transparent_crc(g_647[i][j].f3.f5, "g_647[i][j].f3.f5", print_hash_value);
            transparent_crc(g_647[i][j].f3.f6, "g_647[i][j].f3.f6", print_hash_value);
            transparent_crc(g_647[i][j].f3.f7, "g_647[i][j].f3.f7", print_hash_value);
            transparent_crc(g_647[i][j].f3.f8, "g_647[i][j].f3.f8", print_hash_value);
            transparent_crc(g_647[i][j].f3.f9, "g_647[i][j].f3.f9", print_hash_value);
            transparent_crc(g_647[i][j].f4.f0, "g_647[i][j].f4.f0", print_hash_value);
            transparent_crc(g_647[i][j].f4.f1, "g_647[i][j].f4.f1", print_hash_value);
            transparent_crc(g_647[i][j].f4.f2, "g_647[i][j].f4.f2", print_hash_value);
            transparent_crc(g_647[i][j].f4.f3, "g_647[i][j].f4.f3", print_hash_value);
            transparent_crc(g_647[i][j].f4.f4, "g_647[i][j].f4.f4", print_hash_value);
            transparent_crc(g_647[i][j].f4.f5, "g_647[i][j].f4.f5", print_hash_value);
            transparent_crc(g_647[i][j].f4.f6, "g_647[i][j].f4.f6", print_hash_value);
            transparent_crc(g_647[i][j].f4.f7, "g_647[i][j].f4.f7", print_hash_value);
            transparent_crc(g_647[i][j].f4.f8, "g_647[i][j].f4.f8", print_hash_value);
            transparent_crc(g_647[i][j].f4.f9, "g_647[i][j].f4.f9", print_hash_value);
            transparent_crc(g_647[i][j].f5, "g_647[i][j].f5", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

        }
    }
    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_649.f2, "g_649.f2", print_hash_value);
    transparent_crc(g_649.f3.f0, "g_649.f3.f0", print_hash_value);
    transparent_crc(g_649.f3.f1, "g_649.f3.f1", print_hash_value);
    transparent_crc(g_649.f3.f2, "g_649.f3.f2", print_hash_value);
    transparent_crc(g_649.f3.f3, "g_649.f3.f3", print_hash_value);
    transparent_crc(g_649.f3.f4, "g_649.f3.f4", print_hash_value);
    transparent_crc(g_649.f3.f5, "g_649.f3.f5", print_hash_value);
    transparent_crc(g_649.f3.f6, "g_649.f3.f6", print_hash_value);
    transparent_crc(g_649.f3.f7, "g_649.f3.f7", print_hash_value);
    transparent_crc(g_649.f3.f8, "g_649.f3.f8", print_hash_value);
    transparent_crc(g_649.f3.f9, "g_649.f3.f9", print_hash_value);
    transparent_crc(g_649.f4.f0, "g_649.f4.f0", print_hash_value);
    transparent_crc(g_649.f4.f1, "g_649.f4.f1", print_hash_value);
    transparent_crc(g_649.f4.f2, "g_649.f4.f2", print_hash_value);
    transparent_crc(g_649.f4.f3, "g_649.f4.f3", print_hash_value);
    transparent_crc(g_649.f4.f4, "g_649.f4.f4", print_hash_value);
    transparent_crc(g_649.f4.f5, "g_649.f4.f5", print_hash_value);
    transparent_crc(g_649.f4.f6, "g_649.f4.f6", print_hash_value);
    transparent_crc(g_649.f4.f7, "g_649.f4.f7", print_hash_value);
    transparent_crc(g_649.f4.f8, "g_649.f4.f8", print_hash_value);
    transparent_crc(g_649.f4.f9, "g_649.f4.f9", print_hash_value);
    transparent_crc(g_649.f5, "g_649.f5", print_hash_value);
    for (i = 0; i < 1; i++)
    {
        for (j = 0; j < 3; j++)
        {
            for (k = 0; k < 6; k++)
            {
                transparent_crc(g_839[i][j][k], "g_839[i][j][k]", print_hash_value);
                if (print_hash_value) printf("index = [%d][%d][%d]\n", i, j, k);

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

    }
    transparent_crc(g_955.f0, "g_955.f0", print_hash_value);
    transparent_crc(g_955.f1, "g_955.f1", print_hash_value);
    transparent_crc(g_955.f2, "g_955.f2", print_hash_value);
    transparent_crc(g_955.f3, "g_955.f3", print_hash_value);
    transparent_crc(g_1003, "g_1003", print_hash_value);
    transparent_crc(g_1004, "g_1004", print_hash_value);
    transparent_crc(g_1048, "g_1048", print_hash_value);
    transparent_crc(g_1075.f0, "g_1075.f0", print_hash_value);
    transparent_crc(g_1075.f1, "g_1075.f1", print_hash_value);
    transparent_crc(g_1075.f2, "g_1075.f2", print_hash_value);
    transparent_crc(g_1075.f3, "g_1075.f3", print_hash_value);
    transparent_crc(g_1137, "g_1137", print_hash_value);
    transparent_crc(g_1209, "g_1209", print_hash_value);
    transparent_crc(g_1211, "g_1211", print_hash_value);
    for (i = 0; i < 8; i++)
    {
        transparent_crc(g_1326[i], "g_1326[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_1518, "g_1518", print_hash_value);
    transparent_crc(g_1530, "g_1530", print_hash_value);
    transparent_crc(g_1531, "g_1531", print_hash_value);
    transparent_crc(g_1540, "g_1540", print_hash_value);
    transparent_crc(g_1541, "g_1541", print_hash_value);
    transparent_crc(g_1542, "g_1542", print_hash_value);
    transparent_crc(g_1543, "g_1543", print_hash_value);
    transparent_crc(g_1544, "g_1544", print_hash_value);
    transparent_crc(g_1639, "g_1639", print_hash_value);
    for (i = 0; i < 1; i++)
    {
        for (j = 0; j < 6; j++)
        {
            for (k = 0; k < 9; k++)
            {
                transparent_crc(g_1737[i][j][k].f0, "g_1737[i][j][k].f0", print_hash_value);
                transparent_crc(g_1737[i][j][k].f1, "g_1737[i][j][k].f1", print_hash_value);
                transparent_crc(g_1737[i][j][k].f2, "g_1737[i][j][k].f2", print_hash_value);
                transparent_crc(g_1737[i][j][k].f3, "g_1737[i][j][k].f3", print_hash_value);
                if (print_hash_value) printf("index = [%d][%d][%d]\n", i, j, k);

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

/************************ statistics *************************
XXX max struct depth: 2
breakdown:
   depth: 0, occurrence: 492
   depth: 1, occurrence: 24
   depth: 2, occurrence: 12
XXX total union variables: 30

XXX non-zero bitfields defined in structs: 6
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: 72
breakdown:
   indirect level: 0, occurrence: 36
   indirect level: 1, occurrence: 20
   indirect level: 2, occurrence: 10
   indirect level: 3, occurrence: 6
XXX full-bitfields structs in the program: 12
breakdown:
   indirect level: 0, occurrence: 12
XXX times a bitfields struct's address is taken: 65
XXX times a bitfields struct on LHS: 0
XXX times a bitfields struct on RHS: 82
XXX times a single bitfield on LHS: 2
XXX times a single bitfield on RHS: 63

XXX max expression depth: 40
breakdown:
   depth: 1, occurrence: 492
   depth: 2, occurrence: 134
   depth: 3, occurrence: 17
   depth: 4, occurrence: 8
   depth: 5, occurrence: 6
   depth: 6, occurrence: 5
   depth: 7, occurrence: 3
   depth: 8, occurrence: 4
   depth: 9, occurrence: 1
   depth: 10, occurrence: 3
   depth: 11, occurrence: 2
   depth: 12, occurrence: 3
   depth: 13, occurrence: 2
   depth: 14, occurrence: 5
   depth: 15, occurrence: 3
   depth: 16, occurrence: 3
   depth: 17, occurrence: 5
   depth: 18, occurrence: 7
   depth: 19, occurrence: 4
   depth: 20, occurrence: 4
   depth: 21, occurrence: 6
   depth: 22, occurrence: 4
   depth: 24, occurrence: 1
   depth: 26, occurrence: 1
   depth: 28, occurrence: 1
   depth: 29, occurrence: 2
   depth: 33, occurrence: 1
   depth: 38, occurrence: 1
   depth: 40, occurrence: 1

XXX total number of pointers: 539

XXX times a variable address is taken: 1073
XXX times a pointer is dereferenced on RHS: 96
breakdown:
   depth: 1, occurrence: 92
   depth: 2, occurrence: 3
   depth: 3, occurrence: 1
XXX times a pointer is dereferenced on LHS: 267
breakdown:
   depth: 1, occurrence: 261
   depth: 2, occurrence: 6
XXX times a pointer is compared with null: 19
XXX times a pointer is compared with address of another variable: 4
XXX times a pointer is compared with another pointer: 10
XXX times a pointer is qualified to be dereferenced: 6217

XXX max dereference level: 3
breakdown:
   level: 0, occurrence: 0
   level: 1, occurrence: 2752
   level: 2, occurrence: 320
   level: 3, occurrence: 6
XXX number of pointers point to pointers: 169
XXX number of pointers point to scalars: 315
XXX number of pointers point to structs: 37
XXX percent of pointers has null in alias set: 30.4
XXX average alias set size: 1.56

XXX times a non-volatile is read: 1340
XXX times a non-volatile is write: 887
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: 7

XXX stmts: 464
XXX max block depth: 5
breakdown:
   depth: 0, occurrence: 36
   depth: 1, occurrence: 41
   depth: 2, occurrence: 57
   depth: 3, occurrence: 72
   depth: 4, occurrence: 111
   depth: 5, occurrence: 147

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

