// File: /workspace/github_cpp_makefile_star2_O2/chfeder[P]turbulence_generator/./TurbGen.h
// Function: TurbGen::init_driving(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, double)
int init_driving(std::string parameter_file, const double time) {
        // ******************************************************
        // Initialise the turbulence generator and all relevant internal data structures by reading from 'parameter_file'.
        // This is used for driving turbulence (as opposed to init_single_realisation, which is for creating a single pattern).
        // ******************************************************
        if (verbose > 1) TurbGen_printf(FuncSig(__func__)+"entering.\n");
        // set parameter file
        this->parameter_file = parameter_file;
        // check if parameter file is present
        FILE * fp = fopen(parameter_file.c_str(), "r");
        if (fp == NULL) {
            std::string msg = ClassSignature+"ERROR: cannot access parameter file '%s'.\n";
            printf(msg.c_str(), parameter_file.c_str()); exit(-1);
        } else {
            fclose(fp);
        }
        // read parameter file
        std::vector<double> ret;
        double k_driv, k_min, k_max;
        // get the number of dimensions, and based on that, set the number of vector field components
        ret = read_from_parameter_file("ndim", "d"); ndim = ret[0]; // Number of spatial dimensions (1, 1.5, 2, 2.5, 3)
        set_number_of_components(); // set number of components
        std::string ncmp_str; // number of component (ncmp) as string type
        std::stringstream dummystream;
        dummystream << ncmp; dummystream >> ncmp_str; dummystream.clear();
        // read remaining parameters from file
        ret = read_from_parameter_file("L", ncmp_str+"d"); // Length of domain (box) x[y[z]]
        for (unsigned int d = 0; d < ncmp; d++) L[d] = ret[d];
        ret = read_from_parameter_file("velocity", "d"); velocity = ret[0]; // Target turbulent velocity dispersion
        ret = read_from_parameter_file("k_driv", "d"); k_driv = ret[0]; // driving wavenumber in 2pi/L; sets t_decay below
        ret = read_from_parameter_file("k_min", "d"); k_min = ret[0]; // min wavenumber in 2pi/L
        ret = read_from_parameter_file("k_max", "d"); k_max = ret[0]; // max wavenumber in 2pi/L
        ret = read_from_parameter_file("sol_weight", "d"); sol_weight = ret[0]; // solenoildal weight
        ret = read_from_parameter_file("spect_form", "i"); spect_form = (int)ret[0]; // spectral form
        ret = read_from_parameter_file("power_law_exp", "d"); power_law_exp = ret[0]; // power-law exponent (if spect_form=2)
        power_law_exp_2 = power_law_exp; // driving does not support a 2nd PL section (yet)
        ret = read_from_parameter_file("angles_exp", "d"); angles_exp = ret[0]; // angles sampling exponent (if spect_form=2)
        ret = read_from_parameter_file("ampl_factor", ncmp_str+"d"); // adjust driving amplitude by factor in x[y[z]] (to adjust to target velocity)
        for (unsigned int d = 0; d < ncmp; d++) ampl_factor[d] = ret[d];
        ret = read_from_parameter_file("ampl_auto_adjust", "i"); ampl_auto_adjust = (int)ret[0]; // automatic amplitude adjustment switch
        ret = read_from_parameter_file("random_seed", "i"); random_seed = (int)ret[0]; // random seed
        ret = read_from_parameter_file("nsteps_per_t_turb", "i"); nsteps_per_t_turb = (int)ret[0]; // number of pattern updates per t_decay
        // define derived physical quantities
        kmin = (k_min-DBL_EPSILON) * 2*M_PI / L[X]; // Minimum driving wavenumber <~  k_min * 2pi / Lx
        kmax = (k_max+DBL_EPSILON) * 2*M_PI / L[X]; // Maximum driving wavenumber >~  k_max * 2pi / Lx
        kmid = kmax; // driving does not support a 2nd PL section (yet)
        t_decay = L[X] / k_driv / velocity;             // Auto-correlation time, t_turb = Lx / k_driv / velocity;
                                                        // i.e., turbulent turnover (crossing) time; with k_driv in units of 2pi/Lx
        dt = t_decay / nsteps_per_t_turb;               // time step in OU process and for creating new driving pattern
        step = -1;                                      // set internal OU step to -1 for start-up
        seed = random_seed;                             // copy original seed into local seed;
                                                        // local seeds gets updated everytime the random number generator is called
        const double ampl_coeff = 0.15;                 // This is the default amplitude coefficient ('ampl_coeff') that often
                                                        // (based on Mach ~ 1, naturally-mixed driving) leads to a good match of the
                                                        // user-to-target velocity dispersion.
                                                        // However, the amplitudes can be adjusted via ampl_factor_in[X,Y,Z].
        energy = pow(ampl_coeff*velocity, 3.0) / L[X];  // Energy input rate => driving amplitude ~ sqrt(energy/t_decay).
                                                        // Note that energy input rate ~ velocity^3 / L_box.
        OUvar = sqrt(energy/t_decay);                   // set Ornstein-Uhlenbeck (OU) variance
        // if we auto-adjust the amplitude, we need to read the ampl_factor from the evolution file, on restart (time > 0)
        if ((ampl_auto_adjust == 1) && (time > 0.0))
            if (!read_ampl_factor_from_evol_file(time)) return -1;
        // We raise the user-set ampl_factor to the 1.5th power, so the user can more easily adjust this as a pure factor
        // of target-to-measured velocity disperion (this is because the amplitude is actually ~ velocity^1.5; see just above).
        for (unsigned int d = 0; d < ncmp; d++) ampl_factor[d] = pow(ampl_factor[d], 1.5);
        if (verbose) TurbGen_printf("===============================================================================\n");
        // set solenoidal weight normalisation
        set_solenoidal_weight_normalisation();
        // initialise modes
        init_modes();
        // initialise Ornstein-Uhlenbeck sequence
        OU_noise_init();
        // calculate solenoidal and compressive coefficients (aka, akb) from OUphases
        get_decomposition_coeffs();
        // print info
        if (verbose) print_info("driving");
        // write header of time evolution file
        if (verbose) TurbGen_printf("Writing time evolution information to file '%s'.\n", evolfile.c_str());
        if (PE == 0) {
            std::ofstream outfilestream(evolfile.c_str(), std::ios::app);
            outfilestream   << std::setw(24) << "#01_time" << std::setw(24) << "#02_time_in_t_turb"
                            << std::setw(24) << "#03_ampl_factor_x" << std::setw(24) << "#04_ampl_factor_y" << std::setw(24) << "#05_ampl_factor_z"
                            << std::setw(24) << "#06_v_turb_prev_x" << std::setw(24) << "#07_v_turb_prev_y" << std::setw(24) << "#08_v_turb_prev_z"
                            << std::endl;
            outfilestream.close();
            outfilestream.clear();
        }
        if (verbose) TurbGen_printf("===============================================================================\n");
        if (verbose > 1) TurbGen_printf(FuncSig(__func__)+"exiting.\n");
        return 0;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x888, %rsp            # imm = 0x888
movsd %xmm0, 0x30(%rsp)
movq %rsi, %r14
movq %rdi, %rbx
cmpl $0x2, (%rdi)
jl 0x547d
leaq 0x70d7(%rip), %rsi      # 0xc4ce
leaq 0x4c0(%rsp), %rdi
leaq 0x700(%rsp), %rdx
callq 0x3e22
leaq 0x70ac(%rip), %rdx      # 0xc4bf
leaq 0x500(%rsp), %rdi
leaq 0x4c0(%rsp), %rsi
callq 0x6693
leaq 0x70ac(%rip), %rdx      # 0xc4db
leaq 0x4e0(%rsp), %rdi
leaq 0x500(%rsp), %rsi
callq 0x6674
leaq 0x4e0(%rsp), %rsi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x65ac
leaq 0x4e0(%rsp), %rdi
callq 0x3120
leaq 0x500(%rsp), %rdi
callq 0x3120
leaq 0x4c0(%rsp), %rdi
callq 0x3120
leaq 0x28(%rbx), %rdi
movq %r14, %rsi
callq 0x3180
movq (%r14), %rdi
leaq 0x6ce5(%rip), %rsi      # 0xc178
callq 0x32e0
testq %rax, %rax
je 0x624f
movq %rax, %rdi
callq 0x3270
xorpd %xmm0, %xmm0
movapd %xmm0, 0x10(%rsp)
andq $0x0, 0x20(%rsp)
leaq 0x7051(%rip), %rsi      # 0xc511
leaq 0x4a0(%rsp), %rdi
leaq 0x700(%rsp), %rdx
callq 0x3e22
leaq 0x7249(%rip), %rsi      # 0xc725
leaq 0x480(%rsp), %rdi
leaq 0x40(%rsp), %rdx
callq 0x3e22
leaq 0x500(%rsp), %rdi
leaq 0x4a0(%rsp), %rdx
leaq 0x480(%rsp), %rcx
movq %rbx, %rsi
callq 0x66cc
leaq 0x10(%rsp), %r14
leaq 0x500(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x968a
movq %r15, %rdi
callq 0x539a
leaq 0x480(%rsp), %rdi
callq 0x3120
leaq 0x4a0(%rsp), %rdi
callq 0x3120
movq (%r14), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x158(%rbx)
movq %rbx, %rdi
callq 0x702e
leaq 0x50(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq 0x700(%rsp), %rdi
callq 0x31c0
leaq 0x710(%rsp), %rdi
movl 0x160(%rbx), %esi
callq 0x3450
leaq 0x700(%rsp), %r14
leaq 0x40(%rsp), %rsi
movq %r14, %rdi
callq 0x3340
movq 0x700(%rsp), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
xorl %esi, %esi
callq 0x3440
leaq 0x6f54(%rip), %rsi      # 0xc516
leaq 0x460(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e22
leaq 0x714a(%rip), %rdx      # 0xc725
leaq 0x440(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x6693
leaq 0x500(%rsp), %rdi
leaq 0x460(%rsp), %rdx
leaq 0x440(%rsp), %rcx
movq %rbx, %rsi
callq 0x66cc
leaq 0x10(%rsp), %r14
leaq 0x500(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x968a
movq %r15, %rdi
callq 0x539a
leaq 0x440(%rsp), %rdi
callq 0x3120
leaq 0x460(%rsp), %rdi
callq 0x3120
movl 0x160(%rbx), %eax
movq (%r14), %rcx
xorl %edx, %edx
cmpq %rax, %rdx
jae 0x566a
movsd (%rcx,%rdx,8), %xmm0
movsd %xmm0, 0x178(%rbx,%rdx,8)
incq %rdx
jmp 0x5652
leaq 0x6ea7(%rip), %rsi      # 0xc518
leaq 0x420(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e22
leaq 0x709b(%rip), %rsi      # 0xc725
leaq 0x400(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x3e22
leaq 0x500(%rsp), %rdi
leaq 0x420(%rsp), %rdx
leaq 0x400(%rsp), %rcx
movq %rbx, %rsi
callq 0x66cc
leaq 0x10(%rsp), %r14
leaq 0x500(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x968a
movq %r15, %rdi
callq 0x539a
leaq 0x400(%rsp), %rdi
callq 0x3120
leaq 0x420(%rsp), %rdi
callq 0x3120
movq (%r14), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x190(%rbx)
leaq 0x6e15(%rip), %rsi      # 0xc521
leaq 0x3e0(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e22
leaq 0x7000(%rip), %rsi      # 0xc725
leaq 0x3c0(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x3e22
leaq 0x500(%rsp), %rdi
leaq 0x3e0(%rsp), %rdx
leaq 0x3c0(%rsp), %rcx
movq %rbx, %rsi
callq 0x66cc
leaq 0x10(%rsp), %r14
leaq 0x500(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x968a
movq %r15, %rdi
callq 0x539a
leaq 0x3c0(%rsp), %rdi
callq 0x3120
leaq 0x3e0(%rsp), %rdi
callq 0x3120
movq (%r14), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x38(%rsp)
leaq 0x6d83(%rip), %rsi      # 0xc528
leaq 0x3a0(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e22
leaq 0x6f67(%rip), %rsi      # 0xc725
leaq 0x380(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x3e22
leaq 0x500(%rsp), %rdi
leaq 0x3a0(%rsp), %rdx
leaq 0x380(%rsp), %rcx
movq %rbx, %rsi
callq 0x66cc
leaq 0x10(%rsp), %r14
leaq 0x500(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x968a
movq %r15, %rdi
callq 0x539a
leaq 0x380(%rsp), %rdi
callq 0x3120
leaq 0x3a0(%rsp), %rdi
callq 0x3120
movq (%r14), %rax
movsd (%rax), %xmm0
movapd %xmm0, 0x70(%rsp)
leaq 0x6cf0(%rip), %rsi      # 0xc52e
leaq 0x360(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e22
leaq 0x6ece(%rip), %rsi      # 0xc725
leaq 0x340(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x3e22
leaq 0x500(%rsp), %rdi
leaq 0x360(%rsp), %rdx
leaq 0x340(%rsp), %rcx
movq %rbx, %rsi
callq 0x66cc
leaq 0x10(%rsp), %r14
leaq 0x500(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x968a
movq %r15, %rdi
callq 0x539a
leaq 0x340(%rsp), %rdi
callq 0x3120
leaq 0x360(%rsp), %rdi
callq 0x3120
movq (%r14), %rax
movsd (%rax), %xmm0
movapd %xmm0, 0x60(%rsp)
leaq 0x6c5d(%rip), %rsi      # 0xc534
leaq 0x320(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e22
leaq 0x6e35(%rip), %rsi      # 0xc725
leaq 0x300(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x3e22
leaq 0x500(%rsp), %rdi
leaq 0x320(%rsp), %rdx
leaq 0x300(%rsp), %rcx
movq %rbx, %rsi
callq 0x66cc
leaq 0x10(%rsp), %r14
leaq 0x500(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x968a
movq %r15, %rdi
callq 0x539a
leaq 0x300(%rsp), %rdi
callq 0x3120
leaq 0x320(%rsp), %rdi
callq 0x3120
movq (%r14), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x1d0(%rbx)
leaq 0x6bcd(%rip), %rsi      # 0xc53f
leaq 0x2e0(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e22
leaq 0x7058(%rip), %rsi      # 0xc9e3
leaq 0x2c0(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x3e22
leaq 0x500(%rsp), %rdi
leaq 0x2e0(%rsp), %rdx
leaq 0x2c0(%rsp), %rcx
movq %rbx, %rsi
callq 0x66cc
leaq 0x10(%rsp), %r14
leaq 0x500(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x968a
movq %r15, %rdi
callq 0x539a
leaq 0x2c0(%rsp), %rdi
callq 0x3120
leaq 0x2e0(%rsp), %rdi
callq 0x3120
movq (%r14), %rax
cvttsd2si (%rax), %eax
movl %eax, 0x16c(%rbx)
leaq 0x6b3f(%rip), %rsi      # 0xc54a
leaq 0x2a0(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e22
leaq 0x6d01(%rip), %rsi      # 0xc725
leaq 0x280(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x3e22
leaq 0x500(%rsp), %rdi
leaq 0x2a0(%rsp), %rdx
leaq 0x280(%rsp), %rcx
movq %rbx, %rsi
callq 0x66cc
leaq 0x10(%rsp), %r14
leaq 0x500(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x968a
movq %r15, %rdi
callq 0x539a
leaq 0x280(%rsp), %rdi
callq 0x3120
leaq 0x2a0(%rsp), %rdi
callq 0x3120
movq (%r14), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x1e0(%rbx)
movsd %xmm0, 0x1e8(%rbx)
leaq 0x6aaa(%rip), %rsi      # 0xc558
leaq 0x260(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e22
leaq 0x6c5e(%rip), %rsi      # 0xc725
leaq 0x240(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x3e22
leaq 0x500(%rsp), %rdi
leaq 0x260(%rsp), %rdx
leaq 0x240(%rsp), %rcx
movq %rbx, %rsi
callq 0x66cc
leaq 0x10(%rsp), %r14
leaq 0x500(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x968a
movq %r15, %rdi
callq 0x539a
leaq 0x240(%rsp), %rdi
callq 0x3120
leaq 0x260(%rsp), %rdi
callq 0x3120
movq (%r14), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x1f0(%rbx)
leaq 0x6a1a(%rip), %rsi      # 0xc563
leaq 0x220(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e22
leaq 0x6bc3(%rip), %rdx      # 0xc725
leaq 0x200(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x6693
leaq 0x500(%rsp), %rdi
leaq 0x220(%rsp), %rdx
leaq 0x200(%rsp), %rcx
movq %rbx, %rsi
callq 0x66cc
leaq 0x10(%rsp), %r14
leaq 0x500(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x968a
movq %r15, %rdi
callq 0x539a
leaq 0x200(%rsp), %rdi
callq 0x3120
leaq 0x220(%rsp), %rdi
callq 0x3120
movl 0x160(%rbx), %eax
movq (%r14), %rcx
xorl %edx, %edx
cmpq %rax, %rdx
jae 0x5bf1
movsd (%rcx,%rdx,8), %xmm0
movsd %xmm0, 0x1f8(%rbx,%rdx,8)
incq %rdx
jmp 0x5bd9
leaq 0x6977(%rip), %rsi      # 0xc56f
leaq 0x1e0(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e22
leaq 0x6dd2(%rip), %rsi      # 0xc9e3
leaq 0x1c0(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x3e22
leaq 0x500(%rsp), %rdi
leaq 0x1e0(%rsp), %rdx
leaq 0x1c0(%rsp), %rcx
movq %rbx, %rsi
callq 0x66cc
leaq 0x10(%rsp), %r14
leaq 0x500(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x968a
movq %r15, %rdi
callq 0x539a
leaq 0x1c0(%rsp), %rdi
callq 0x3120
leaq 0x1e0(%rsp), %rdi
callq 0x3120
movq (%r14), %rax
cvttsd2si (%rax), %eax
movl %eax, 0x210(%rbx)
leaq 0x68ef(%rip), %rsi      # 0xc580
leaq 0x1a0(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e22
leaq 0x6d39(%rip), %rsi      # 0xc9e3
leaq 0x180(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x3e22
leaq 0x500(%rsp), %rdi
leaq 0x1a0(%rsp), %rdx
leaq 0x180(%rsp), %rcx
movq %rbx, %rsi
callq 0x66cc
leaq 0x10(%rsp), %r14
leaq 0x500(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x968a
movq %r15, %rdi
callq 0x539a
leaq 0x180(%rsp), %rdi
callq 0x3120
leaq 0x1a0(%rsp), %rdi
callq 0x3120
movq (%r14), %rax
cvttsd2si (%rax), %eax
movl %eax, 0x164(%rbx)
leaq 0x6862(%rip), %rsi      # 0xc58c
leaq 0x160(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e22
leaq 0x6ca0(%rip), %rsi      # 0xc9e3
leaq 0x140(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x3e22
leaq 0x500(%rsp), %rdi
leaq 0x160(%rsp), %rdx
leaq 0x140(%rsp), %rcx
movq %rbx, %rsi
callq 0x66cc
leaq 0x10(%rsp), %r14
leaq 0x500(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x968a
movq %r15, %rdi
callq 0x539a
leaq 0x140(%rsp), %rdi
callq 0x3120
leaq 0x160(%rsp), %rdi
callq 0x3120
movq (%r14), %rax
movsd (%rax), %xmm1
cvttsd2si %xmm1, %eax
movl %eax, 0x170(%rbx)
movapd 0x70(%rsp), %xmm3
unpcklpd 0x60(%rsp), %xmm3       # xmm3 = xmm3[0],mem[0]
addpd 0x634c(%rip), %xmm3     # 0xc120
movsd 0x178(%rbx), %xmm2
addpd %xmm3, %xmm3
mulpd 0x6348(%rip), %xmm3     # 0xc130
movapd %xmm2, %xmm0
unpcklpd %xmm2, %xmm0            # xmm0 = xmm0[0],xmm2[0]
divpd %xmm0, %xmm3
movupd %xmm3, 0x1b8(%rbx)
movhpd %xmm3, 0x1c8(%rbx)
divsd 0x38(%rsp), %xmm2
movsd 0x190(%rbx), %xmm0
divsd %xmm0, %xmm2
cvttpd2dq %xmm1, %xmm1
movsd %xmm2, 0x198(%rbx)
cvtdq2pd %xmm1, %xmm1
divsd %xmm1, %xmm2
movsd %xmm2, 0x1a0(%rbx)
orl $-0x1, 0x174(%rbx)
movl 0x164(%rbx), %eax
movl %eax, 0x168(%rbx)
mulsd 0x620b(%rip), %xmm0     # 0xc058
movsd 0x61d3(%rip), %xmm1     # 0xc028
callq 0x3460
divsd 0x178(%rbx), %xmm0
movsd %xmm0, 0x1a8(%rbx)
divsd 0x198(%rbx), %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x5e82
sqrtsd %xmm0, %xmm0
jmp 0x5e8b
callq 0x3200
xorpd %xmm1, %xmm1
movsd %xmm0, 0x1b0(%rbx)
movsd 0x30(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x5ebe
cmpl $0x1, 0x210(%rbx)
jne 0x5ebe
movq %rbx, %rdi
movsd 0x30(%rsp), %xmm0
callq 0x712c
testb %al, %al
je 0x621b
xorl %r14d, %r14d
movl 0x160(%rbx), %eax
cmpq %rax, %r14
jae 0x5ef2
movsd 0x1f8(%rbx,%r14,8), %xmm0
movsd 0x6182(%rip), %xmm1     # 0xc060
callq 0x3460
movsd %xmm0, 0x1f8(%rbx,%r14,8)
incq %r14
jmp 0x5ec1
cmpl $0x0, (%rbx)
je 0x5f32
leaq 0x66a0(%rip), %rsi      # 0xc59e
leaq 0x120(%rsp), %rdi
leaq 0x500(%rsp), %rdx
callq 0x3e22
leaq 0x120(%rsp), %rsi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x65ac
leaq 0x120(%rsp), %rdi
callq 0x3120
movq %rbx, %rdi
callq 0x76f8
movq %rbx, %rdi
callq 0x7798
movq %rbx, %rdi
callq 0x8658
movq %rbx, %rdi
callq 0x86f6
cmpl $0x0, (%rbx)
je 0x5fdb
leaq 0x6571(%rip), %rsi      # 0xc4d3
leaq 0x100(%rsp), %rdi
leaq 0x500(%rsp), %rdx
callq 0x3e22
leaq 0x100(%rsp), %rsi
movq %rbx, %rdi
callq 0x8c34
leaq 0x100(%rsp), %rdi
callq 0x3120
cmpl $0x0, (%rbx)
je 0x5fdb
leaq 0x664f(%rip), %rsi      # 0xc5ef
leaq 0xe0(%rsp), %rdi
leaq 0x500(%rsp), %rdx
callq 0x3e22
movq 0x218(%rbx), %rdx
leaq 0xe0(%rsp), %rsi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x65ac
leaq 0xe0(%rsp), %rdi
callq 0x3120
cmpl $0x0, 0x150(%rbx)
jne 0x613a
movq 0x218(%rbx), %rsi
leaq 0x500(%rsp), %rdi
pushq $0x1
popq %rdx
callq 0x32c0
leaq 0x500(%rsp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
movq $0x18, 0x510(%rsp,%rax)
leaq 0x6600(%rip), %rsi      # 0xc621
callq 0x3260
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movq $0x18, 0x10(%rax,%rcx)
leaq 0x65ed(%rip), %rsi      # 0xc62a
movq %rax, %rdi
callq 0x3260
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movq $0x18, 0x10(%rax,%rcx)
leaq 0x65e1(%rip), %rsi      # 0xc63d
movq %rax, %rdi
callq 0x3260
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movq $0x18, 0x10(%rax,%rcx)
leaq 0x65d4(%rip), %rsi      # 0xc64f
movq %rax, %rdi
callq 0x3260
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movq $0x18, 0x10(%rax,%rcx)
leaq 0x65c7(%rip), %rsi      # 0xc661
movq %rax, %rdi
callq 0x3260
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movq $0x18, 0x10(%rax,%rcx)
leaq 0x65ba(%rip), %rsi      # 0xc673
movq %rax, %rdi
callq 0x3260
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movq $0x18, 0x10(%rax,%rcx)
leaq 0x65ad(%rip), %rsi      # 0xc685
movq %rax, %rdi
callq 0x3260
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movq $0x18, 0x10(%rax,%rcx)
leaq 0x65a0(%rip), %rsi      # 0xc697
movq %rax, %rdi
callq 0x3260
movq %rax, %rdi
callq 0x3150
leaq 0x500(%rsp), %r14
movq %r14, %rdi
callq 0x3390
movq 0x500(%rsp), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
xorl %esi, %esi
callq 0x3440
leaq 0x500(%rsp), %rdi
callq 0x33b0
cmpl $0x0, (%rbx)
je 0x6217
leaq 0x6454(%rip), %rsi      # 0xc59e
leaq 0xc0(%rsp), %rdi
leaq 0x500(%rsp), %rdx
callq 0x3e22
xorl %ebp, %ebp
leaq 0xc0(%rsp), %rsi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x65ac
leaq 0xc0(%rsp), %rdi
callq 0x3120
cmpl $0x2, (%rbx)
jl 0x621e
leaq 0x633e(%rip), %rsi      # 0xc4ce
leaq 0x80(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e22
leaq 0x6316(%rip), %rdx      # 0xc4bf
leaq 0x500(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0x6693
leaq 0x64e4(%rip), %rdx      # 0xc6a9
leaq 0xa0(%rsp), %rdi
leaq 0x500(%rsp), %rsi
callq 0x6674
xorl %ebp, %ebp
leaq 0xa0(%rsp), %rsi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x65ac
leaq 0xa0(%rsp), %rdi
callq 0x3120
leaq 0x500(%rsp), %rdi
callq 0x3120
leaq 0x80(%rsp), %rdi
callq 0x3120
jmp 0x621e
xorl %ebp, %ebp
jmp 0x621e
pushq $-0x1
popq %rbp
leaq 0x700(%rsp), %rdi
callq 0x31e0
leaq 0x40(%rsp), %rdi
callq 0x3120
leaq 0x10(%rsp), %rdi
callq 0x539a
movl %ebp, %eax
addq $0x888, %rsp            # imm = 0x888
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
addq $0x8, %rbx
leaq 0x628c(%rip), %rdx      # 0xc4e6
leaq 0x500(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x6693
movq (%r15), %rdi
movq (%r14), %rsi
xorl %eax, %eax
callq 0x3040
pushq $-0x1
popq %rdi
callq 0x3300
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0x3120
jmp 0x6297
movq %rax, %rbx
leaq 0x500(%rsp), %rdi
callq 0x3120
jmp 0x62a9
movq %rax, %rbx
leaq 0x80(%rsp), %rdi
jmp 0x6537
jmp 0x656d
jmp 0x656d
movq %rax, %rbx
leaq 0xe0(%rsp), %rdi
jmp 0x6537
jmp 0x656d
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
jmp 0x6537
jmp 0x656d
movq %rax, %rbx
leaq 0x100(%rsp), %rdi
jmp 0x6537
jmp 0x656d
movq %rax, %rbx
leaq 0x120(%rsp), %rdi
jmp 0x6537
jmp 0x656d
movq %rax, %rbx
leaq 0x4e0(%rsp), %rdi
callq 0x3120
jmp 0x6329
movq %rax, %rbx
leaq 0x500(%rsp), %rdi
callq 0x3120
jmp 0x633b
movq %rax, %rbx
leaq 0x4c0(%rsp), %rdi
callq 0x3120
jmp 0x6591
movq %rax, %rbx
jmp 0x6591
movq %rax, %rbx
leaq 0x140(%rsp), %rdi
callq 0x3120
jmp 0x636a
movq %rax, %rbx
leaq 0x160(%rsp), %rdi
jmp 0x6537
jmp 0x656d
movq %rax, %rbx
leaq 0x180(%rsp), %rdi
callq 0x3120
jmp 0x6391
movq %rax, %rbx
leaq 0x1a0(%rsp), %rdi
jmp 0x6537
jmp 0x656d
movq %rax, %rbx
leaq 0x1c0(%rsp), %rdi
callq 0x3120
jmp 0x63b8
movq %rax, %rbx
leaq 0x1e0(%rsp), %rdi
jmp 0x6537
jmp 0x656d
movq %rax, %rbx
leaq 0x200(%rsp), %rdi
callq 0x3120
jmp 0x63df
movq %rax, %rbx
leaq 0x220(%rsp), %rdi
jmp 0x6537
jmp 0x656d
movq %rax, %rbx
leaq 0x240(%rsp), %rdi
callq 0x3120
jmp 0x6406
movq %rax, %rbx
leaq 0x260(%rsp), %rdi
jmp 0x6537
jmp 0x656d
movq %rax, %rbx
leaq 0x280(%rsp), %rdi
callq 0x3120
jmp 0x642d
movq %rax, %rbx
leaq 0x2a0(%rsp), %rdi
jmp 0x6537
jmp 0x656d
movq %rax, %rbx
leaq 0x2c0(%rsp), %rdi
callq 0x3120
jmp 0x6454
movq %rax, %rbx
leaq 0x2e0(%rsp), %rdi
jmp 0x6537
jmp 0x656d
movq %rax, %rbx
leaq 0x300(%rsp), %rdi
callq 0x3120
jmp 0x647b
movq %rax, %rbx
leaq 0x320(%rsp), %rdi
jmp 0x6537
jmp 0x656d
movq %rax, %rbx
leaq 0x340(%rsp), %rdi
callq 0x3120
jmp 0x64a2
movq %rax, %rbx
leaq 0x360(%rsp), %rdi
jmp 0x6537
jmp 0x656d
movq %rax, %rbx
leaq 0x380(%rsp), %rdi
callq 0x3120
jmp 0x64c9
movq %rax, %rbx
leaq 0x3a0(%rsp), %rdi
jmp 0x6537
jmp 0x656d
movq %rax, %rbx
leaq 0x3c0(%rsp), %rdi
callq 0x3120
jmp 0x64ed
movq %rax, %rbx
leaq 0x3e0(%rsp), %rdi
jmp 0x6537
jmp 0x656d
movq %rax, %rbx
leaq 0x400(%rsp), %rdi
callq 0x3120
jmp 0x650e
movq %rax, %rbx
leaq 0x420(%rsp), %rdi
jmp 0x6537
jmp 0x656d
movq %rax, %rbx
leaq 0x440(%rsp), %rdi
callq 0x3120
jmp 0x652f
movq %rax, %rbx
leaq 0x460(%rsp), %rdi
callq 0x3120
jmp 0x6570
jmp 0x656d
movq %rax, %rbx
jmp 0x657d
jmp 0x6566
movq %rax, %rbx
leaq 0x480(%rsp), %rdi
callq 0x3120
jmp 0x655c
movq %rax, %rbx
leaq 0x4a0(%rsp), %rdi
jmp 0x6582
movq %rax, %rbx
jmp 0x6587
jmp 0x656d
movq %rax, %rbx
leaq 0x700(%rsp), %rdi
callq 0x31e0
leaq 0x40(%rsp), %rdi
callq 0x3120
leaq 0x10(%rsp), %rdi
callq 0x539a
movq %rbx, %rdi
callq 0x3470
movq %rax, %rbx
leaq 0x500(%rsp), %rdi
callq 0x33b0
jmp 0x6570
nop