Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Segfault with iteration #1310

Closed
jgreener64 opened this issue Feb 27, 2024 · 11 comments
Closed

Segfault with iteration #1310

jgreener64 opened this issue Feb 27, 2024 · 11 comments
Labels
gc garbage collection segfault

Comments

@jgreener64
Copy link
Contributor

I am on Enzyme main (e8ede63), StaticArrays 1.9.2, Julia 1.10.1 and Linux. The following works when n_atoms = 200 but gives a segfault for higher values like 1000. It could be an OOM error but ideally it wouldn't segfault. Sometimes to trigger the segfault I had to run with julia -i and it would crash when I tried to type something into the REPL.

using Enzyme, StaticArrays, LinearAlgebra

const T = Float64

struct StillingerWeber{T}
    A::T
    B::T
    p::Int
    q::Int
    a::T
    λ::T
    γ::T
    σ::T
    ϵ::T
end

Base.zero(::StillingerWeber) = StillingerWeber{T}(0.0, 0.0, 0, 0, 0.0, 0.0, 0.0, 0.0, 0.0)

function Base.:+(sw1::StillingerWeber, sw2::StillingerWeber)
    StillingerWeber(
        sw1.A + sw2.A,
        sw1.B + sw2.B,
        sw1.p + sw2.p,
        sw1.q + sw2.q,
        sw1.a + sw2.a,
        sw1.λ + sw2.λ,
        sw1.γ + sw2.γ,
        sw1.σ + sw2.σ,
        sw1.ϵ + sw2.ϵ,
    )
end

sw = StillingerWeber{T}(7.049556277, 0.6022245584, 4, 0, 1.80, 21.0, 1.20, 0.14, 200.0)

function forces!(fs_chunks, sw, coords, neighbors, n_threads)
    A, B, p, q, a, λ, γ, σ, ϵ = sw.A, sw.B, sw.p, sw.q, sw.a, sw.λ, sw.γ, sw.σ, sw.ϵ
    n_atoms = length(coords)

    n_chunks = n_threads
    Threads.@threads for chunk_i in 1:n_chunks
        @inbounds for ni in chunk_i:n_chunks:length(neighbors)
            i, j = neighbors[ni]
            dr = coords[i] - coords[j]
            rij = norm(dr)
            r = rij / σ
            if r < a
                df_dr = -A * exp(inv(r - a)) * (B * p * inv(r^(p+1)) + (B * inv(r^p) - 1) * inv((r - a)^2))
                f = -ϵ * df_dr * inv(σ)
                fdr = f * dr / rij
                fs_chunks[chunk_i][i] -= fdr
                fs_chunks[chunk_i][j] += fdr
            end

            trip_cutoff = a * σ
            trip_cutoff_2 = 2 * trip_cutoff
            for k in (j + 1):n_atoms
                dr_ik = coords[i] - coords[k]
                norm_dr_ik = norm(dr_ik)
                (norm_dr_ik > trip_cutoff_2) && continue
                dr_jk = coords[j] - coords[k]
                norm_dr_jk = norm(dr_jk)
                ((norm_dr_ik < trip_cutoff) || (norm_dr_jk < trip_cutoff)) || continue
                dr_ij, norm_dr_ij = dr, rij
                ndr_ij, ndr_ik, ndr_jk = dr_ij / norm_dr_ij, dr_ik / norm_dr_ik, dr_jk / norm_dr_jk
                dot_ij_ik, dot_ji_jk, dot_ki_kj = dot(dr_ij, dr_ik), dot(-dr_ij, dr_jk), dot(dr_ik, dr_jk)
                rij_trip = r
                rik_trip = norm_dr_ik / σ
                rjk_trip = norm_dr_jk / σ

                if rij_trip < a && rik_trip < a
                    cos_θ_jik = dot_ij_ik / (norm_dr_ij * norm_dr_ik)
                    exp_term = exp* inv(rij_trip - a) + γ * inv(rik_trip - a))
                    cos_term = cos_θ_jik + T(1/3)
                    dh_term = λ * cos_term^2 * -γ * exp_term
                    dh_drij = inv((rij_trip - a)^2) * dh_term
                    dh_drik = inv((rik_trip - a)^2) * dh_term
                    dh_dcosθjik = 2 * λ * exp_term * cos_term
                    dcosθ_drj = (dr_ik * norm_dr_ij^2 - dr_ij * dot_ij_ik) / (norm_dr_ij^3 * norm_dr_ik)
                    dcosθ_drk = (dr_ij * norm_dr_ik^2 - dr_ik * dot_ij_ik) / (norm_dr_ik^3 * norm_dr_ij)
                    fj = -ϵ * (dh_drij * ndr_ij / σ + dh_dcosθjik * dcosθ_drj)
                    fk = -ϵ * (dh_drik * ndr_ik / σ + dh_dcosθjik * dcosθ_drk)
                    fs_chunks[chunk_i][i] -= fj + fk
                    fs_chunks[chunk_i][j] += fj
                    fs_chunks[chunk_i][k] += fk
                end
                if rij_trip < a && rjk_trip < a
                    cos_θ_ijk = dot_ji_jk / (norm_dr_ij * norm_dr_jk)
                    exp_term = exp* inv(rij_trip - a) + γ * inv(rjk_trip - a))
                    cos_term = cos_θ_ijk + T(1/3)
                    dh_term = λ * cos_term^2 * -γ * exp_term
                    dh_drij = inv((rij_trip - a)^2) * dh_term
                    dh_drjk = inv((rjk_trip - a)^2) * dh_term
                    dh_dcosθijk = 2 * λ * exp_term * cos_term
                    dcosθ_dri = ( dr_jk * norm_dr_ij^2 + dr_ij * dot_ji_jk) / (norm_dr_ij^3 * norm_dr_jk)
                    dcosθ_drk = (-dr_ij * norm_dr_jk^2 - dr_jk * dot_ji_jk) / (norm_dr_jk^3 * norm_dr_ij)
                    fi = -ϵ * (dh_drij * -ndr_ij / σ + dh_dcosθijk * dcosθ_dri)
                    fk = -ϵ * (dh_drjk *  ndr_jk / σ + dh_dcosθijk * dcosθ_drk)
                    fs_chunks[chunk_i][j] -= fi + fk
                    fs_chunks[chunk_i][i] += fi
                    fs_chunks[chunk_i][k] += fk
                end
                if rik_trip < a && rjk_trip < a
                    cos_θ_ikj = dot_ki_kj / (norm_dr_ik * norm_dr_jk)
                    exp_term = exp* inv(rik_trip - a) + γ * inv(rjk_trip - a))
                    cos_term = cos_θ_ikj + T(1/3)
                    dh_term = λ * cos_term^2 * -γ * exp_term
                    dh_drik = inv((rik_trip - a)^2) * dh_term
                    dh_drjk = inv((rjk_trip - a)^2) * dh_term
                    dh_dcosθikj = 2 * λ * exp_term * cos_term
                    dcosθ_dri = (-dr_jk * norm_dr_ik^2 + dr_ik * dot_ki_kj) / (norm_dr_ik^3 * norm_dr_jk)
                    dcosθ_drj = (-dr_ik * norm_dr_jk^2 + dr_jk * dot_ki_kj) / (norm_dr_jk^3 * norm_dr_ik)
                    fi = -ϵ * (dh_drik * -ndr_ik / σ + dh_dcosθikj * dcosθ_dri)
                    fj = -ϵ * (dh_drjk * -ndr_jk / σ + dh_dcosθikj * dcosθ_drj)
                    fs_chunks[chunk_i][k] -= fi + fj
                    fs_chunks[chunk_i][i] += fi
                    fs_chunks[chunk_i][j] += fj
                end
            end
        end
    end

    return nothing
end

n_atoms = 1000
coords = rand(SVector{3, T}, n_atoms) .* T(1.784)
neighbors = Tuple{Int, Int}[]
for i in 1:n_atoms, j in (i+1):n_atoms
    if norm(coords[i] - coords[j]) < T(0.6)
        push!(neighbors, (i, j))
    end
end

function forces(sw, coords, neighbors, n_threads)
    fs_chunks = [zero(coords) for _ in 1:n_threads]
    forces!(fs_chunks, sw, coords, neighbors, n_threads)
    return sum(fs_chunks)
end

n_threads = Threads.nthreads()
println(forces(sw, coords, neighbors, n_threads))
println("Got here")

fs_chunks = [zero(coords) for _ in 1:n_threads]
d_fs = rand(SVector{3, T}, length(coords))
d_fs_chunks = [deepcopy(d_fs) for _ in 1:n_threads]
d_coords = zero(coords)

grads = autodiff(
    Enzyme.Reverse,
    forces!,
    Const,
    Duplicated(fs_chunks, d_fs_chunks),
    Active(sw),
    Duplicated(coords, d_coords),
    Const(neighbors),
    Const(n_threads),
)[1]
[2836832] signal (11.1): Segmentation fault
in expression starting at /home/jgreener/dms/molly_dev/enzyme_err33.jl:154
Allocations: 58379556 (Pool: 58232441; Big: 147115); GC: 69
Segmentation fault (core dumped)

The printall_error.txt is attached.

@jgreener64 jgreener64 changed the title Segfault with threading Segfault with iteration Feb 28, 2024
@jgreener64
Copy link
Contributor Author

Actually this segfaults without Threads.@threads too.

@wsmoses
Copy link
Member

wsmoses commented May 12, 2024




[1455207] signal (11.1): Segmentation fault
in expression starting at REPL[21]:1
gc_setmark_pool_ at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/gc.c:875 [inlined]
gc_setmark_pool at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/gc.c:895 [inlined]
gc_setmark at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/gc.c:902 [inlined]
gc_mark_outrefs at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/gc.c:2617 [inlined]
gc_mark_loop_serial_ at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/gc.c:2690
gc_mark_loop_serial at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/gc.c:2713
gc_mark_loop at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/gc.c:2908 [inlined]
_jl_gc_collect at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/gc.c:3241
ijl_gc_collect at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/gc.c:3538
maybe_collect at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/gc.c:937 [inlined]
jl_gc_big_alloc_inner at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/gc.c:1008 [inlined]
jl_gc_big_alloc_noinline at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/gc.c:1045 [inlined]
jl_gc_alloc_ at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/julia_internal.h:481 [inlined]
jl_gc_alloc at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/gc.c:3590
macro expansion at /home/wmoses/.julia/packages/StaticArrays/EHHaF/src/linalg.jl:278 [inlined]
_norm at /home/wmoses/.julia/packages/StaticArrays/EHHaF/src/linalg.jl:266 [inlined]
norm at /home/wmoses/.julia/packages/StaticArrays/EHHaF/src/linalg.jl:265 [inlined]
macro expansion at ./REPL[8]:24 [inlined]
#14#threadsfor_fun#1 at ./threadingconstructs.jl:215
#14#threadsfor_fun at ./threadingconstructs.jl:182 [inlined]
referenceCaller at /home/wmoses/git/Enzyme.jl/src/rules/parallelrules.jl:45 [inlined]
augmented_julia_referenceCaller_5398wrap at /home/wmoses/git/Enzyme.jl/src/rules/parallelrules.jl:0
macro expansion at /home/wmoses/git/Enzyme.jl/src/compiler.jl:5703 [inlined]
enzyme_call at /home/wmoses/git/Enzyme.jl/src/compiler.jl:5381 [inlined]
AugmentedForwardThunk at /home/wmoses/git/Enzyme.jl/src/compiler.jl:5271 [inlined]
fwd at /home/wmoses/git/Enzyme.jl/src/rules/parallelrules.jl:79 [inlined]
#1 at ./threadingconstructs.jl:154
unknown function (ip: 0x7f529e983e79)
_jl_invoke at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/gf.c:2894 [inlined]
ijl_apply_generic at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/gf.c:3076
jl_apply at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
start_task at /cache/build/builder-amdci5-1/julialang/julia-release-1-dot-10/src/task.c:1238
Allocations: 65310385 (Pool: 65202878; Big: 107507); GC: 68
Segmentation fault (core dumped)

@wsmoses wsmoses added the gc garbage collection label May 12, 2024
@wsmoses
Copy link
Member

wsmoses commented Jun 15, 2024

using Enzyme, StaticArrays, LinearAlgebra

# Printing stops segfault..?
# Enzyme.API.printall!(true)

const T = Float64

function forces!(fs_chunks, coords, neighbors)
    n_atoms = 258 

    @inbounds for ni in 1:length(neighbors)
        i, j = neighbors[ni]
        dr = coords[i]
        for k in (j + 1):n_atoms
            fs_chunks[1][i] = dr
        end
    end

    return nothing
end

n_atoms = 300
coords = rand(SVector{2, T}, n_atoms) .* T(1.784)

neighbors = [(1, 6), (1, 13), (1, 17), (1, 18), (1, 27), (1, 32), (1, 37), (1, 40), (1, 42), (1, 43), (1, 46), (1, 48), (1, 55), (1, 56), (1, 59), (1, 64), (1, 73), (1, 75), (1, 83), (1, 87), (1, 89), (1, 94), (1, 97), (1, 101), (1, 102), (1, 114), (1, 115), (1, 118), (1, 121), (1, 132), (1, 135), (1, 136), (1, 149), (1, 150), (1, 161), (1, 163), (1, 169), (1, 177), (1, 179), (1, 180), (1, 182), (1, 183), (1, 185), (1, 187), (1, 192), (1, 195), (1, 196), (1, 204), (1, 205), (1, 218), (1, 224), (1, 230), (1, 233), (1, 236), (1, 256), (1, 258), (1, 259), (1, 261), (1, 264), (1, 270), (1, 276), (1, 278), (1, 279), (1, 280), (1, 295), (1, 299), (2, 5), (2, 14), (2, 20), (2, 22), (2, 24), (2, 45), (2, 54), (2, 60), (2, 63), (2, 68), (2, 70), (2, 71), (2, 72), (2, 76), (2, 81), (2, 82), (2, 86), (2, 91), (2, 92), (2, 93), (2, 106), (2, 108), (2, 109), (2, 111), (2, 113), (2, 119), (2, 120), (2, 129), (2, 138), (2, 142), (2, 146), (2, 147), (2, 152), (2, 158), (2, 164), (2, 165), (2, 168), (2, 170), (2, 174), (2, 178), (2, 186), (2, 191), (2, 199), (2, 200), (2, 201), (2, 207), (2, 208), (2, 209), (2, 212), (2, 214), (2, 215), (2, 217), (2, 220), (2, 221), (2, 222), (2, 226), (2, 237), (2, 238), (2, 239), (2, 241), (2, 245), (2, 246), (2, 248), (2, 250), (2, 255), (2, 277), (2, 281), (2, 286), (2, 290), (2, 291), (2, 292), (3, 4), (3, 7), (3, 8), (3, 11), (3, 14), (3, 19), (3, 20), (3, 22), (3, 23), (3, 29), (3, 33), (3, 34), (3, 36), (3, 37), (3, 39), (3, 41), (3, 45), (3, 50), (3, 53), (3, 54), (3, 58), (3, 60), (3, 63), (3, 65), (3, 67), (3, 69), (3, 70), (3, 72), (3, 74), (3, 76), (3, 77), (3, 80), (3, 81), (3, 88), (3, 90), (3, 91), (3, 95), (3, 98), (3, 102), (3, 103), (3, 104), (3, 106), (3, 108), (3, 116), (3, 124), (3, 128), (3, 131), (3, 133), (3, 136), (3, 137), (3, 140), (3, 141), (3, 143), (3, 144), (3, 148), (3, 154), (3, 157), (3, 160), (3, 162), (3, 164), (3, 166), (3, 170), (3, 172), (3, 173), (3, 174), (3, 175), (3, 181), (3, 186), (3, 189), (3, 192), (3, 194), (3, 197), (3, 198), (3, 199), (3, 200), (3, 206), (3, 210), (3, 211), (3, 212), (3, 216), (3, 219), (3, 222), (3, 223), (3, 224), (3, 226), (3, 232), (3, 234), (3, 242), (3, 244), (3, 245), (3, 251), (3, 252), (3, 262), (3, 264), (3, 266), (3, 267), (3, 268), (3, 274), (3, 275), (3, 277), (3, 281), (3, 283), (3, 286), (3, 292), (3, 293), (3, 294), (3, 296), (3, 298), (3, 299), (3, 300), (4, 6), (4, 8), (4, 9), (4, 11), (4, 13), (4, 14), (4, 17), (4, 19), (4, 22), (4, 23), (4, 27), (4, 29), (4, 32), (4, 36), (4, 37), (4, 39), (4, 41), (4, 42), (4, 44), (4, 45), (4, 47), (4, 50), (4, 54), (4, 56), (4, 59), (4, 63), (4, 69), (4, 70), (4, 75), (4, 77), (4, 79), (4, 81), (4, 88), (4, 94), (4, 95), (4, 98), (4, 102), (4, 121), (4, 126), (4, 127), (4, 128), (4, 131), (4, 136), (4, 137), (4, 140), (4, 141), (4, 143), (4, 144), (4, 148), (4, 149), (4, 150), (4, 153), (4, 154), (4, 157), (4, 160), (4, 162), (4, 163), (4, 166), (4, 171), (4, 172), (4, 174), (4, 179), (4, 180), (4, 181), (4, 183), (4, 184), (4, 186), (4, 187), (4, 192), (4, 196), (4, 197), (4, 198), (4, 199), (4, 200), (4, 204), (4, 206), (4, 210), (4, 216), (4, 222), (4, 223), (4, 224), (4, 227), (4, 232), (4, 234), (4, 236), (4, 241), (4, 244), (4, 249), (4, 251), (4, 256), (4, 257), (4, 261), (4, 262), (4, 264), (4, 266), (4, 267), (4, 268), (4, 271), (4, 275), (4, 279), (4, 281), (4, 283), (4, 285), (4, 287), (4, 288), (4, 289), (4, 292), (4, 293), (4, 294), (4, 296), (4, 299), (4, 300), (5, 20), (5, 24), (5, 60), (5, 68), (5, 70), (5, 71), (5, 72), (5, 76), (5, 82), (5, 86), (5, 92), (5, 93), (5, 108), (5, 109), (5, 111), (5, 113), (5, 119), (5, 120), (5, 129), (5, 138), (5, 142), (5, 147), (5, 152), (5, 158), (5, 164), (5, 165), (5, 168), (5, 174), (5, 178), (5, 191), (5, 200), (5, 201), (5, 207), (5, 208), (5, 209), (5, 212), (5, 214), (5, 215), (5, 217), (5, 220), (5, 221), (5, 222), (5, 226), (5, 238), (5, 239), (5, 241), (5, 245), (5, 246), (5, 248), (5, 255), (5, 277), (5, 290), (5, 291), (6, 8), (6, 9), (6, 11), (6, 13), (6, 15), (6, 17), (6, 19), (6, 29), (6, 32), (6, 37), (6, 42), (6, 43), (6, 44), (6, 47), (6, 56), (6, 59), (6, 62), (6, 77), (6, 78), (6, 83), (6, 87), (6, 88), (6, 94), (6, 98), (6, 102), (6, 118), (6, 121), (6, 126), (6, 127), (6, 128), (6, 132), (6, 136), (6, 137), (6, 140), (6, 144), (6, 145), (6, 148), (6, 149), (6, 150), (6, 153), (6, 156), (6, 157), (6, 160), (6, 162), (6, 163), (6, 169), (6, 171), (6, 172), (6, 179), (6, 180), (6, 181), (6, 183), (6, 184), (6, 185), (6, 187), (6, 192), (6, 196), (6, 197), (6, 198), (6, 202), (6, 204), (6, 205), (6, 216), (6, 218), (6, 224), (6, 227), (6, 230), (6, 233), (6, 236), (6, 240), (6, 244), (6, 251), (6, 256), (6, 257), (6, 259), (6, 261), (6, 266), (6, 268), (6, 269), (6, 270), (6, 271), (6, 273), (6, 275), (6, 276), (6, 279), (6, 280), (6, 282), (6, 285), (6, 287), (6, 288), (6, 293), (6, 296), (6, 299), (6, 300), (7, 10), (7, 16), (7, 23), (7, 25), (7, 26), (7, 28), (7, 30), (7, 33), (7, 34), (7, 35), (7, 52), (7, 53), (7, 58), (7, 65), (7, 67), (7, 69), (7, 74), (7, 80), (7, 84), (7, 85), (7, 90), (7, 91), (7, 95), (7, 96), (7, 99), (7, 103), (7, 104), (7, 106), (7, 110), (7, 116), (7, 117), (7, 122), (7, 123), (7, 124), (7, 131), (7, 133), (7, 134), (7, 139), (7, 141), (7, 143), (7, 146), (7, 154), (7, 155), (7, 159), (7, 166), (7, 167), (7, 170), (7, 173), (7, 175), (7, 186), (7, 189), (7, 193), (7, 194), (7, 199), (7, 203), (7, 206), (7, 210), (7, 211), (7, 219), (7, 223), (7, 228), (7, 231), (7, 232), (7, 234), (7, 237), (7, 242), (7, 243), (7, 250), (7, 252), (7, 253), (7, 254), (7, 262), (7, 265), (7, 272), (7, 274), (7, 281), (7, 286), (7, 297), (7, 298), (8, 9), (8, 11), (8, 14), (8, 15), (8, 17), (8, 19), (8, 21), (8, 29), (8, 38), (8, 39), (8, 41), (8, 42), (8, 44), (8, 45), (8, 47), (8, 49), (8, 50), (8, 54), (8, 56), (8, 57), (8, 61), (8, 62), (8, 63), (8, 68), (8, 70), (8, 77), (8, 78), (8, 79), (8, 81), (8, 88), (8, 98), (8, 102), (8, 121), (8, 126), (8, 127), (8, 128), (8, 136), (8, 137), (8, 140), (8, 144), (8, 145), (8, 148), (8, 149), (8, 151), (8, 153), (8, 154), (8, 156), (8, 157), (8, 160), (8, 163), (8, 171), (8, 176), (8, 180), (8, 181), (8, 183), (8, 184), (8, 188), (8, 190), (8, 192), (8, 197), (8, 198), (8, 200), (8, 202), (8, 213), (8, 217), (8, 221), (8, 227), (8, 229), (8, 240), (8, 241), (8, 244), (8, 249), (8, 251), (8, 256), (8, 257), (8, 261), (8, 266), (8, 268), (8, 269), (8, 271), (8, 273), (8, 275), (8, 282), (8, 284), (8, 285), (8, 287), (8, 288), (8, 289), (8, 292), (8, 293), (8, 296), (8, 300), (9, 14), (9, 15), (9, 21), (9, 29), (9, 38), (9, 41), (9, 42), (9, 44), (9, 47), (9, 49), (9, 54), (9, 57), (9, 61), (9, 62), (9, 68), (9, 70), (9, 77), (9, 78), (9, 79), (9, 81), (9, 88), (9, 98), (9, 100), (9, 107), (9, 126), (9, 127), (9, 137), (9, 138), (9, 144), (9, 145), (9, 149), (9, 151), (9, 153), (9, 156), (9, 157), (9, 171), (9, 176), (9, 183), (9, 184), (9, 188), (9, 190), (9, 192), (9, 197), (9, 198), (9, 202), (9, 213), (9, 217), (9, 221), (9, 227), (9, 229), (9, 240), (9, 241), (9, 244), (9, 249), (9, 257), (9, 260), (9, 261), (9, 266), (9, 268), (9, 269), (9, 271), (9, 273), (9, 275), (9, 282), (9, 284), (9, 285), (9, 287), (9, 288), (9, 289), (9, 290), (10, 16), (10, 24), (10, 26), (10, 33), (10, 34), (10, 35), (10, 53), (10, 58), (10, 74), (10, 85), (10, 90), (10, 91), (10, 93), (10, 103), (10, 104), (10, 106), (10, 110), (10, 111), (10, 113), (10, 116), (10, 117), (10, 120), (10, 124), (10, 129), (10, 133), (10, 139), (10, 142), (10, 146), (10, 170), (10, 175), (10, 178), (10, 186), (10, 193), (10, 194), (10, 199), (10, 201), (10, 211), (10, 212), (10, 228), (10, 231), (10, 234), (10, 237), (10, 238), (10, 239), (10, 245), (10, 250), (10, 253), (10, 262), (10, 272), (10, 274), (10, 281), (10, 286), (11, 13), (11, 14), (11, 17), (11, 19), (11, 22), (11, 23), (11, 27), (11, 29), (11, 34), (11, 36), (11, 37), (11, 39), (11, 41), (11, 45), (11, 50), (11, 53), (11, 54), (11, 56), (11, 59), (11, 60), (11, 63), (11, 64), (11, 65), (11, 67), (11, 69), (11, 70), (11, 74), (11, 75), (11, 76), (11, 77), (11, 80), (11, 81), (11, 88), (11, 89), (11, 94), (11, 95), (11, 98), (11, 102), (11, 103), (11, 104), (11, 108), (11, 121), (11, 124), (11, 125), (11, 126), (11, 127), (11, 128), (11, 130), (11, 131), (11, 133), (11, 136), (11, 137), (11, 140), (11, 141), (11, 143), (11, 144), (11, 148), (11, 149), (11, 150), (11, 153), (11, 154), (11, 157), (11, 160), (11, 162), (11, 163), (11, 166), (11, 170), (11, 172), (11, 173), (11, 174), (11, 175), (11, 181), (11, 183), (11, 184), (11, 186), (11, 189), (11, 192), (11, 196), (11, 197), (11, 198), (11, 199), (11, 200), (11, 204), (11, 206), (11, 210), (11, 211), (11, 216), (11, 222), (11, 223), (11, 224), (11, 226), (11, 232), (11, 234), (11, 244), (11, 251), (11, 252), (11, 262), (11, 264), (11, 266), (11, 267), (11, 268), (11, 274), (11, 275), (11, 279), (11, 281), (11, 283), (11, 285), (11, 286), (11, 287), (11, 292), (11, 293), (11, 294), (11, 296), (11, 298), (11, 299), (11, 300), (12, 13), (12, 18), (12, 27), (12, 31), (12, 36), (12, 37), (12, 40), (12, 46), (12, 48), (12, 51), (12, 55), (12, 64), (12, 66), (12, 67), (12, 73), (12, 75), (12, 89), (12, 94), (12, 96), (12, 97), (12, 101), (12, 105), (12, 112), (12, 114), (12, 115), (12, 118), (12, 123), (12, 125), (12, 130), (12, 161), (12, 162), (12, 173), (12, 177), (12, 182), (12, 187), (12, 195), (12, 196), (12, 204), (12, 205), (12, 210), (12, 225), (12, 235), (12, 247), (12, 258), (12, 263), (12, 264), (12, 267), (12, 270), (12, 278), (12, 279), (12, 283), (12, 295), (12, 298), (13, 17), (13, 18), (13, 19), (13, 27), (13, 31), (13, 32), (13, 36), (13, 37), (13, 40), (13, 46), (13, 48), (13, 51), (13, 55), (13, 56), (13, 59), (13, 64), (13, 67), (13, 73), (13, 75), (13, 83), (13, 87), (13, 89), (13, 94), (13, 95), (13, 97), (13, 98), (13, 101), (13, 102), (13, 105), (13, 114), (13, 115), (13, 118), (13, 121), (13, 125), (13, 128), (13, 130), (13, 132), (13, 135), (13, 136), (13, 140), (13, 149), (13, 150), (13, 160), (13, 161), (13, 162), (13, 163), (13, 169), (13, 172), (13, 173), (13, 177), (13, 179), (13, 180), (13, 182), (13, 183), (13, 185), (13, 187), (13, 192), (13, 195), (13, 196), (13, 198), (13, 204), (13, 205), (13, 206), (13, 210), (13, 216), (13, 218), (13, 223), (13, 224), (13, 225), (13, 230), (13, 233), (13, 235), (13, 236), (13, 247), (13, 256), (13, 258), (13, 259), (13, 264), (13, 267), (13, 270), (13, 276), (13, 278), (13, 279), (13, 280), (13, 283), (13, 293), (13, 294), (13, 295), (13, 296), (13, 298), (13, 299), (13, 300), (14, 19), (14, 20), (14, 22), (14, 23), (14, 24), (14, 29), (14, 34), (14, 39), (14, 41), (14, 44), (14, 45), (14, 47), (14, 50), (14, 53), (14, 54), (14, 60), (14, 61), (14, 63), (14, 68), (14, 69), (14, 70), (14, 72), (14, 74), (14, 76), (14, 77), (14, 79), (14, 81), (14, 82), (14, 88), (14, 91), (14, 98), (14, 102), (14, 106), (14, 108), (14, 109), (14, 119), (14, 120), (14, 126), (14, 127), (14, 128), (14, 133), (14, 136), (14, 137), (14, 138), (14, 140), (14, 141), (14, 143), (14, 144), (14, 148), (14, 153), (14, 154), (14, 157), (14, 160), (14, 164), (14, 165), (14, 166), (14, 170), (14, 172), (14, 174), (14, 181), (14, 184), (14, 186), (14, 191), (14, 192), (14, 197), (14, 198), (14, 199), (14, 200), (14, 207), (14, 208), (14, 209), (14, 212), (14, 213), (14, 215), (14, 216), (14, 217), (14, 221), (14, 222), (14, 226), (14, 232), (14, 234), (14, 239), (14, 241), (14, 244), (14, 245), (14, 249), (14, 251), (14, 262), (14, 266), (14, 268), (14, 271), (14, 274), (14, 275), (14, 277), (14, 281), (14, 284), (14, 285), (14, 286), (14, 287), (14, 288), (14, 289), (14, 290), (14, 291), (14, 292), (14, 293), (14, 296), (14, 300), (15, 21), (15, 29), (15, 38), (15, 41), (15, 42), (15, 44), (15, 47), (15, 49), (15, 57), (15, 61), (15, 62), (15, 77), (15, 78), (15, 79), (15, 88), (15, 98), (15, 100), (15, 107), (15, 126), (15, 127), (15, 137), (15, 144), (15, 145), (15, 149), (15, 151), (15, 153), (15, 156), (15, 157), (15, 171), (15, 176), (15, 183), (15, 184), (15, 188), (15, 190), (15, 197), (15, 198), (15, 202), (15, 213), (15, 227), (15, 229), (15, 240), (15, 241), (15, 249), (15, 257), (15, 260), (15, 261), (15, 266), (15, 268), (15, 269), (15, 271), (15, 273), (15, 275), (15, 282), (15, 284), (15, 285), (15, 287), (15, 288), (15, 289), (16, 25), (16, 26), (16, 28), (16, 30), (16, 33), (16, 35), (16, 52), (16, 58), (16, 65), (16, 74), (16, 80), (16, 84), (16, 85), (16, 90), (16, 99), (16, 103), (16, 104), (16, 110), (16, 116), (16, 117), (16, 124), (16, 133), (16, 134), (16, 139), (16, 155), (16, 159), (16, 167), (16, 175), (16, 193), (16, 194), (16, 203), (16, 211), (16, 219), (16, 228), (16, 231), (16, 242), (16, 243), (16, 250), (16, 252), (16, 253), (16, 254), (16, 265), (16, 272), (16, 297), (17, 19), (17, 27), (17, 29), (17, 32), (17, 37), (17, 42), (17, 43), (17, 44), (17, 46), (17, 56), (17, 59), (17, 62), (17, 64), (17, 73), (17, 77), (17, 83), (17, 87), (17, 88), (17, 94), (17, 98), (17, 102), (17, 115), (17, 118), (17, 121), (17, 126), (17, 127), (17, 128), (17, 132), (17, 135), (17, 136), (17, 137), (17, 140), (17, 144), (17, 148), (17, 149), (17, 150), (17, 153), (17, 156), (17, 157), (17, 160), (17, 161), (17, 162), (17, 163), (17, 169), (17, 172), (17, 179), (17, 180), (17, 181), (17, 183), (17, 184), (17, 185), (17, 187), (17, 192), (17, 196), (17, 197), (17, 198), (17, 202), (17, 204), (17, 205), (17, 216), (17, 218), (17, 224), (17, 227), (17, 230), (17, 233), (17, 236), (17, 244), (17, 256), (17, 257), (17, 259), (17, 261), (17, 264), (17, 266), (17, 268), (17, 269), (17, 270), (17, 273), (17, 276), (17, 279), (17, 280), (17, 282), (17, 285), (17, 287), (17, 288), (17, 293), (17, 294), (17, 296), (17, 299), (17, 300), (18, 27), (18, 31), (18, 36), (18, 37), (18, 40), (18, 46), (18, 48), (18, 51), (18, 55), (18, 64), (18, 73), (18, 75), (18, 83), (18, 89), (18, 94), (18, 97), (18, 101), (18, 105), (18, 112), (18, 114), (18, 115), (18, 118), (18, 125), (18, 130), (18, 135), (18, 161), (18, 177), (18, 179), (18, 182), (18, 187), (18, 195), (18, 196), (18, 204), (18, 205), (18, 225), (18, 235), (18, 247), (18, 258), (18, 259), (18, 264), (18, 270), (18, 276), (18, 278), (18, 279), (18, 280), (18, 295), (19, 22), (19, 23), (19, 27), (19, 29), (19, 32), (19, 34), (19, 36), (19, 37), (19, 39), (19, 41), (19, 42), (19, 44), (19, 45), (19, 50), (19, 54), (19, 56), (19, 59), (19, 63), (19, 64), (19, 67), (19, 69), (19, 75), (19, 77), (19, 81), (19, 83), (19, 88), (19, 89), (19, 94), (19, 95), (19, 97), (19, 98), (19, 102), (19, 121), (19, 125), (19, 126), (19, 127), (19, 128), (19, 131), (19, 136), (19, 137), (19, 140), (19, 141), (19, 143), (19, 144), (19, 148), (19, 149), (19, 150), (19, 153), (19, 154), (19, 157), (19, 160), (19, 162), (19, 163), (19, 166), (19, 172), (19, 173), (19, 179), (19, 180), (19, 181), (19, 183), (19, 184), (19, 186), (19, 187), (19, 192), (19, 196), (19, 197), (19, 198), (19, 199), (19, 204), (19, 205), (19, 206), (19, 210), (19, 216), (19, 223), (19, 224), (19, 227), (19, 232), (19, 234), (19, 236), (19, 244), (19, 249), (19, 251), (19, 256), (19, 257), (19, 261), (19, 262), (19, 264), (19, 266), (19, 267), (19, 268), (19, 271), (19, 274), (19, 275), (19, 279), (19, 281), (19, 283), (19, 285), (19, 287), (19, 288), (19, 289), (19, 292), (19, 293), (19, 294), (19, 296), (19, 298), (19, 299), (19, 300), (20, 22), (20, 23), (20, 24), (20, 34), (20, 39), (20, 41), (20, 45), (20, 50), (20, 53), (20, 54), (20, 60), (20, 63), (20, 68), (20, 70), (20, 71), (20, 72), (20, 76), (20, 79), (20, 81), (20, 82), (20, 86), (20, 91), (20, 92), (20, 93), (20, 106), (20, 108), (20, 109), (20, 111), (20, 113), (20, 119), (20, 120), (20, 129), (20, 138), (20, 141), (20, 142), (20, 143), (20, 147), (20, 152), (20, 154), (20, 157), (20, 158), (20, 164), (20, 165), (20, 168), (20, 170), (20, 174), (20, 178), (20, 186), (20, 191), (20, 199), (20, 200), (20, 201), (20, 207), (20, 208), (20, 209), (20, 212), (20, 213), (20, 214), (20, 215), (20, 217), (20, 220), (20, 221), (20, 222), (20, 226), (20, 232), (20, 234), (20, 239), (20, 241), (20, 244), (20, 245), (20, 246), (20, 248), (20, 249), (20, 255), (20, 275), (20, 277), (20, 281), (20, 286), (20, 289), (20, 290), (20, 291), (20, 292), (21, 38), (21, 44), (21, 47), (21, 49), (21, 57), (21, 61), (21, 78), (21, 79), (21, 100), (21, 107), (21, 127), (21, 138), (21, 145), (21, 151), (21, 153), (21, 156), (21, 171), (21, 176), (21, 184), (21, 188), (21, 190), (21, 202), (21, 213), (21, 217), (21, 221), (21, 227), (21, 229), (21, 240), (21, 241), (21, 249), (21, 257), (21, 260), (21, 266), (21, 271), (21, 273), (21, 282), (21, 284), (21, 287), (21, 288), (21, 289), (22, 23), (22, 24), (22, 29), (22, 33), (22, 34), (22, 35), (22, 39), (22, 41), (22, 45), (22, 50), (22, 53), (22, 54), (22, 58), (22, 60), (22, 63), (22, 68), (22, 69), (22, 70), (22, 72), (22, 74), (22, 76), (22, 77), (22, 81), (22, 82), (22, 85), (22, 88), (22, 90), (22, 91), (22, 93), (22, 95), (22, 98), (22, 102), (22, 103), (22, 104), (22, 106), (22, 108), (22, 111), (22, 113), (22, 119), (22, 120), (22, 124), (22, 128), (22, 131), (22, 133), (22, 140), (22, 141), (22, 143), (22, 144), (22, 146), (22, 148), (22, 154), (22, 157), (22, 160), (22, 164), (22, 166), (22, 170), (22, 172), (22, 174), (22, 175), (22, 178), (22, 181), (22, 186), (22, 191), (22, 199), (22, 200), (22, 201), (22, 206), (22, 209), (22, 211), (22, 212), (22, 215), (22, 216), (22, 220), (22, 221), (22, 222), (22, 223), (22, 226), (22, 232), (22, 234), (22, 237), (22, 239), (22, 241), (22, 244), (22, 245), (22, 249), (22, 250), (22, 251), (22, 253), (22, 262), (22, 266), (22, 274), (22, 275), (22, 277), (22, 281), (22, 286), (22, 289), (22, 290), (22, 291), (22, 292), (22, 293), (22, 294), (22, 296), (22, 300), (23, 29), (23, 33), (23, 34), (23, 35), (23, 36), (23, 39), (23, 41), (23, 45), (23, 50), (23, 53), (23, 54), (23, 58), (23, 60), (23, 63), (23, 65), (23, 67), (23, 68), (23, 69), (23, 70), (23, 72), (23, 74), (23, 76), (23, 77), (23, 80), (23, 81), (23, 85), (23, 88), (23, 90), (23, 91), (23, 95), (23, 98), (23, 102), (23, 103), (23, 104), (23, 106), (23, 108), (23, 111), (23, 116), (23, 117), (23, 119), (23, 120), (23, 124), (23, 128), (23, 131), (23, 133), (23, 136), (23, 140), (23, 141), (23, 143), (23, 144), (23, 148), (23, 154), (23, 157), (23, 160), (23, 162), (23, 164), (23, 166), (23, 170), (23, 172), (23, 173), (23, 174), (23, 175), (23, 181), (23, 186), (23, 189), (23, 192), (23, 194), (23, 198), (23, 199), (23, 200), (23, 201), (23, 206), (23, 210), (23, 211), (23, 212), (23, 216), (23, 219), (23, 222), (23, 223), (23, 226), (23, 232), (23, 234), (23, 237), (23, 239), (23, 242), (23, 243), (23, 244), (23, 245), (23, 250), (23, 251), (23, 252), (23, 253), (23, 262), (23, 266), (23, 267), (23, 272), (23, 274), (23, 275), (23, 277), (23, 281), (23, 283), (23, 286), (23, 292), (23, 293), (23, 294), (23, 296), (23, 298), (23, 300), (24, 33), (24, 34), (24, 35), (24, 45), (24, 53), (24, 54), (24, 58), (24, 60), (24, 63), (24, 68), (24, 70), (24, 71), (24, 72), (24, 76), (24, 81), (24, 82), (24, 86), (24, 91), (24, 92), (24, 93), (24, 104), (24, 106), (24, 108), (24, 109), (24, 111), (24, 113), (24, 119), (24, 120), (24, 129), (24, 133), (24, 141), (24, 142), (24, 146), (24, 147), (24, 152), (24, 158), (24, 164), (24, 165), (24, 168), (24, 170), (24, 174), (24, 178), (24, 186), (24, 191), (24, 199), (24, 200), (24, 201), (24, 207), (24, 208), (24, 209), (24, 212), (24, 214), (24, 215), (24, 220), (24, 221), (24, 222), (24, 226), (24, 237), (24, 238), (24, 239), (24, 245), (24, 246), (24, 248), (24, 250), (24, 253), (24, 255), (24, 277), (24, 281), (24, 286), (24, 290), (24, 291), (24, 292), (25, 26), (25, 28), (25, 30), (25, 52), (25, 65), (25, 66), (25, 67), (25, 80), (25, 84), (25, 95), (25, 96), (25, 99), (25, 103), (25, 105), (25, 110), (25, 112), (25, 116), (25, 122), (25, 123), (25, 124), (25, 130), (25, 131), (25, 134), (25, 139), (25, 155), (25, 159), (25, 166), (25, 167), (25, 173), (25, 175), (25, 189), (25, 194), (25, 203), (25, 206), (25, 210), (25, 211), (25, 219), (25, 223), (25, 228), (25, 242), (25, 243), (25, 247), (25, 252), (25, 254), (25, 263), (25, 265), (25, 283), (25, 297), (25, 298), (26, 28), (26, 30), (26, 33), (26, 34), (26, 35), (26, 52), (26, 53), (26, 58), (26, 65), (26, 74), (26, 80), (26, 84), (26, 85), (26, 90), (26, 99), (26, 103), (26, 104), (26, 106), (26, 110), (26, 116), (26, 117), (26, 122), (26, 124), (26, 133), (26, 134), (26, 139), (26, 146), (26, 155), (26, 159), (26, 166), (26, 167), (26, 175), (26, 189), (26, 193), (26, 194), (26, 203), (26, 211), (26, 219), (26, 228), (26, 231), (26, 242), (26, 243), (26, 250), (26, 252), (26, 253), (26, 254), (26, 262), (26, 265), (26, 272), (26, 274), (26, 286), (26, 297), (27, 31), (27, 32), (27, 36), (27, 37), (27, 40), (27, 46), (27, 48), (27, 51), (27, 55), (27, 56), (27, 59), (27, 64), (27, 65), (27, 66), (27, 67), (27, 69), (27, 73), (27, 75), (27, 80), (27, 83), (27, 89), (27, 94), (27, 95), (27, 96), (27, 97), (27, 98), (27, 102), (27, 105), (27, 112), (27, 114), (27, 115), (27, 118), (27, 121), (27, 122), (27, 123), (27, 125), (27, 128), (27, 130), (27, 131), (27, 136), (27, 140), (27, 148), (27, 150), (27, 160), (27, 161), (27, 162), (27, 163), (27, 166), (27, 172), (27, 173), (27, 177), (27, 179), (27, 181), (27, 182), (27, 187), (27, 189), (27, 192), (27, 195), (27, 196), (27, 204), (27, 205), (27, 206), (27, 210), (27, 216), (27, 218), (27, 219), (27, 223), (27, 224), (27, 225), (27, 235), (27, 242), (27, 243), (27, 247), (27, 251), (27, 252), (27, 259), (27, 263), (27, 264), (27, 267), (27, 270), (27, 279), (27, 280), (27, 283), (27, 293), (27, 294), (27, 296), (27, 298), (27, 299), (27, 300), (28, 30), (28, 52), (28, 65), (28, 66), (28, 80), (28, 84), (28, 96), (28, 99), (28, 110), (28, 116), (28, 122), (28, 123), (28, 124), (28, 134), (28, 139), (28, 155), (28, 159), (28, 167), (28, 175), (28, 189), (28, 194), (28, 203), (28, 211), (28, 219), (28, 228), (28, 242), (28, 243), (28, 252), (28, 254), (28, 263), (28, 265), (28, 297), (29, 32), (29, 34), (29, 37), (29, 39), (29, 41), (29, 42), (29, 44), (29, 45), (29, 47), (29, 50), (29, 54), (29, 56), (29, 57), (29, 59), (29, 60), (29, 61), (29, 63), (29, 68), (29, 69), (29, 70), (29, 72), (29, 76), (29, 77), (29, 79), (29, 81), (29, 88), (29, 95), (29, 98), (29, 102), (29, 108), (29, 121), (29, 126), (29, 127), (29, 128), (29, 131), (29, 136), (29, 137), (29, 140), (29, 141), (29, 143), (29, 144), (29, 148), (29, 149), (29, 150), (29, 153), (29, 154), (29, 156), (29, 157), (29, 160), (29, 162), (29, 163), (29, 166), (29, 170), (29, 171), (29, 172), (29, 174), (29, 180), (29, 181), (29, 183), (29, 184), (29, 186), (29, 192), (29, 197), (29, 198), (29, 199), (29, 200), (29, 206), (29, 210), (29, 213), (29, 216), (29, 221), (29, 222), (29, 223), (29, 224), (29, 226), (29, 227), (29, 232), (29, 234), (29, 240), (29, 241), (29, 244), (29, 249), (29, 251), (29, 257), (29, 261), (29, 262), (29, 266), (29, 268), (29, 271), (29, 275), (29, 281), (29, 285), (29, 287), (29, 288), (29, 289), (29, 292), (29, 293), (29, 294), (29, 296), (29, 299), (29, 300), (30, 36), (30, 52), (30, 65), (30, 66), (30, 67), (30, 80), (30, 84), (30, 90), (30, 95), (30, 96), (30, 99), (30, 103), (30, 105), (30, 110), (30, 112), (30, 116), (30, 122), (30, 123), (30, 124), (30, 130), (30, 131), (30, 134), (30, 139), (30, 155), (30, 159), (30, 166), (30, 167), (30, 173), (30, 175), (30, 189), (30, 194), (30, 203), (30, 206), (30, 210), (30, 211), (30, 219), (30, 223), (30, 225), (30, 228), (30, 242), (30, 243), (30, 247), (30, 252), (30, 254), (30, 263), (30, 265), (30, 267), (30, 274), (30, 283), (30, 297), (30, 298), (31, 36), (31, 37), (31, 40), (31, 46), (31, 48), (31, 51), (31, 55), (31, 59), (31, 64), (31, 66), (31, 67), (31, 73), (31, 75), (31, 83), (31, 89), (31, 94), (31, 96), (31, 97), (31, 101), (31, 105), (31, 112), (31, 114), (31, 115), (31, 118), (31, 122), (31, 123), (31, 125), (31, 130), (31, 135), (31, 161), (31, 162), (31, 173), (31, 177), (31, 179), (31, 182), (31, 187), (31, 189), (31, 195), (31, 196), (31, 204), (31, 205), (31, 210), (31, 223), (31, 224), (31, 225), (31, 235), (31, 247), (31, 258), (31, 259), (31, 263), (31, 264), (31, 267), (31, 270), (31, 278), (31, 279), (31, 280), (31, 283), (31, 294), (31, 295), (31, 298), (31, 299), (31, 300), (32, 37), (32, 40), (32, 42), (32, 43), (32, 46), (32, 55), (32, 56), (32, 59), (32, 62), (32, 64), (32, 73), (32, 75), (32, 77), (32, 83), (32, 87), (32, 88), (32, 89), (32, 94), (32, 97), (32, 98), (32, 102), (32, 114), (32, 115), (32, 118), (32, 121), (32, 126), (32, 127), (32, 128), (32, 132), (32, 135), (32, 136), (32, 137), (32, 140), (32, 144), (32, 149), (32, 150), (32, 153), (32, 160), (32, 161), (32, 162), (32, 163), (32, 169), (32, 172), (32, 179), (32, 180), (32, 183), (32, 184), (32, 185), (32, 187), (32, 192), (32, 195), (32, 196), (32, 197), (32, 198), (32, 204), (32, 205), (32, 218), (32, 224), (32, 227), (32, 230), (32, 233), (32, 236), (32, 256), (32, 258), (32, 259), (32, 261), (32, 264), (32, 268), (32, 269), (32, 270), (32, 276), (32, 279), (32, 280), (32, 282), (32, 285), (32, 293), (32, 296), (32, 299), (32, 300), (33, 34), (33, 35), (33, 39), (33, 45), (33, 50), (33, 53), (33, 58), (33, 60), (33, 63), (33, 65), (33, 69), (33, 74), (33, 76), (33, 80), (33, 84), (33, 85), (33, 90), (33, 91), (33, 93), (33, 95), (33, 103), (33, 104), (33, 106), (33, 108), (33, 110), (33, 111), (33, 113), (33, 116), (33, 117), (33, 119), (33, 120), (33, 124), (33, 131), (33, 133), (33, 139), (33, 141), (33, 142), (33, 143), (33, 146), (33, 154), (33, 155), (33, 164), (33, 166), (33, 167), (33, 170), (33, 174), (33, 175), (33, 178), (33, 186), (33, 189), (33, 193), (33, 194), (33, 199), (33, 201), (33, 206), (33, 211), (33, 212), (33, 219), (33, 222), (33, 223), (33, 226), (33, 228), (33, 231), (33, 232), (33, 234), (33, 237), (33, 238), (33, 239), (33, 242), (33, 243), (33, 245), (33, 250), (33, 252), (33, 253), (33, 262), (33, 272), (33, 274), (33, 281), (33, 286), (33, 292), (33, 297), (34, 35), (34, 39), (34, 41), (34, 45), (34, 50), (34, 53), (34, 54), (34, 58), (34, 60), (34, 63), (34, 65), (34, 67), (34, 69), (34, 70), (34, 72), (34, 74), (34, 76), (34, 80), (34, 81), (34, 84), (34, 85), (34, 90), (34, 91), (34, 93), (34, 95), (34, 103), (34, 104), (34, 106), (34, 108), (34, 111), (34, 113), (34, 116), (34, 117), (34, 119), (34, 120), (34, 122), (34, 124), (34, 128), (34, 131), (34, 133), (34, 140), (34, 141), (34, 143), (34, 146), (34, 148), (34, 154), (34, 160), (34, 162), (34, 164), (34, 166), (34, 167), (34, 170), (34, 172), (34, 174), (34, 175), (34, 181), (34, 186), (34, 189), (34, 193), (34, 194), (34, 199), (34, 200), (34, 201), (34, 206), (34, 210), (34, 211), (34, 212), (34, 216), (34, 219), (34, 222), (34, 223), (34, 226), (34, 228), (34, 231), (34, 232), (34, 234), (34, 237), (34, 238), (34, 239), (34, 242), (34, 243), (34, 244), (34, 245), (34, 250), (34, 251), (34, 252), (34, 253), (34, 262), (34, 272), (34, 274), (34, 277), (34, 281), (34, 286), (34, 292), (34, 293), (34, 294), (34, 296), (34, 298), (34, 300), (35, 53), (35, 58), (35, 65), (35, 74), (35, 84), (35, 85), (35, 90), (35, 91), (35, 93), (35, 103), (35, 104), (35, 106), (35, 108), (35, 110), (35, 111), (35, 113), (35, 116), (35, 117), (35, 119), (35, 120), (35, 124), (35, 129), (35, 133), (35, 139), (35, 141), (35, 142), (35, 143), (35, 146), (35, 164), (35, 166), (35, 170), (35, 174), (35, 175), (35, 178), (35, 186), (35, 193), (35, 194), (35, 199), (35, 201), (35, 211), (35, 212), (35, 226), (35, 228), (35, 231), (35, 232), (35, 234), (35, 237), (35, 238), (35, 239), (35, 245), (35, 250), (35, 253), (35, 262), (35, 272), (35, 274), (35, 281), (35, 286), (36, 37), (36, 40), (36, 46), (36, 48), (36, 51), (36, 55), (36, 56), (36, 59), (36, 64), (36, 65), (36, 66), (36, 67), (36, 69), (36, 75), (36, 80), (36, 83), (36, 89), (36, 94), (36, 95), (36, 96), (36, 97), (36, 98), (36, 102), (36, 105), (36, 112), (36, 114), (36, 115), (36, 118), (36, 121), (36, 122), (36, 123), (36, 124), (36, 125), (36, 128), (36, 130), (36, 131), (36, 136), (36, 140), (36, 143), (36, 148), (36, 150), (36, 154), (36, 160), (36, 161), (36, 162), (36, 166), (36, 172), (36, 173), (36, 175), (36, 177), (36, 179), (36, 181), (36, 182), (36, 187), (36, 189), (36, 192), (36, 196), (36, 198), (36, 204), (36, 205), (36, 206), (36, 210), (36, 216), (36, 219), (36, 223), (36, 224), (36, 225), (36, 232), (36, 234), (36, 235), (36, 242), (36, 243), (36, 244), (36, 247), (36, 251), (36, 252), (36, 262), (36, 263), (36, 264), (36, 265), (36, 267), (36, 270), (36, 274), (36, 279), (36, 283), (36, 293), (36, 294), (36, 296), (36, 298), (36, 299), (36, 300), (37, 40), (37, 42), (37, 43), (37, 46), (37, 48), (37, 51), (37, 55), (37, 56), (37, 59), (37, 64), (37, 67), (37, 69), (37, 73), (37, 75), (37, 77), (37, 83), (37, 87), (37, 88), (37, 89), (37, 94), (37, 95), (37, 97), (37, 98), (37, 102), (37, 105), (37, 114), (37, 115), (37, 118), (37, 121), (37, 125), (37, 126), (37, 128), (37, 130), (37, 131), (37, 132), (37, 135), (37, 136), (37, 137), (37, 140), (37, 144), (37, 148), (37, 149), (37, 150), (37, 154), (37, 160), (37, 161), (37, 162), (37, 163), (37, 169), (37, 172), (37, 173), (37, 177), (37, 179), (37, 180), (37, 181), (37, 182), (37, 183), (37, 185), (37, 187), (37, 192), (37, 195), (37, 196), (37, 197), (37, 198), (37, 204), (37, 205), (37, 206), (37, 210), (37, 216), (37, 218), (37, 223), (37, 224), (37, 225), (37, 230), (37, 233), (37, 235), (37, 236), (37, 244), (37, 247), (37, 251), (37, 256), (37, 258), (37, 259), (37, 261), (37, 264), (37, 267), (37, 268), (37, 270), (37, 276), (37, 279), (37, 280), (37, 283), (37, 285), (37, 293), (37, 294), (37, 296), (37, 298), (37, 299), (37, 300), (38, 42), (38, 44), (38, 47), (38, 49), (38, 57), (38, 61), (38, 62), (38, 78), (38, 79), (38, 88), (38, 100), (38, 107), (38, 126), (38, 127), (38, 137), (38, 145), (38, 151), (38, 153), (38, 156), (38, 171), (38, 176), (38, 184), (38, 188), (38, 190), (38, 197), (38, 202), (38, 213), (38, 227), (38, 229), (38, 240), (38, 249), (38, 257), (38, 260), (38, 261), (38, 266), (38, 268), (38, 269), (38, 271), (38, 273), (38, 282), (38, 284), (38, 285), (38, 287), (38, 288), (38, 289), (39, 41), (39, 45), (39, 50), (39, 53), (39, 54), (39, 56), (39, 58), (39, 60), (39, 63), (39, 67), (39, 68), (39, 69), (39, 70), (39, 72), (39, 74), (39, 76), (39, 77), (39, 79), (39, 81), (39, 88), (39, 91), (39, 95), (39, 98), (39, 102), (39, 103), (39, 104), (39, 106), (39, 108), (39, 119), (39, 124), (39, 126), (39, 127), (39, 128), (39, 131), (39, 133), (39, 136), (39, 137), (39, 140), (39, 141), (39, 143), (39, 144), (39, 148), (39, 149), (39, 154), (39, 157), (39, 160), (39, 162), (39, 164), (39, 166), (39, 170), (39, 172), (39, 174), (39, 175), (39, 181), (39, 183), (39, 184), (39, 186), (39, 192), (39, 197), (39, 198), (39, 199), (39, 200), (39, 206), (39, 210), (39, 211), (39, 212), (39, 216), (39, 221), (39, 222), (39, 223), (39, 226), (39, 232), (39, 234), (39, 239), (39, 241), (39, 244), (39, 245), (39, 249), (39, 251), (39, 262), (39, 266), (39, 267), (39, 268), (39, 271), (39, 274), (39, 275), (39, 277), (39, 281), (39, 285), (39, 286), (39, 287), (39, 288), (39, 289), (39, 292), (39, 293), (39, 294), (39, 296), (39, 298), (39, 300), (40, 46), (40, 48), (40, 51), (40, 55), (40, 59), (40, 64), (40, 73), (40, 75), (40, 83), (40, 87), (40, 89), (40, 94), (40, 97), (40, 101), (40, 105), (40, 112), (40, 114), (40, 115), (40, 118), (40, 121), (40, 125), (40, 130), (40, 135), (40, 150), (40, 161), (40, 163), (40, 169), (40, 177), (40, 179), (40, 182), (40, 187), (40, 195), (40, 196), (40, 204), (40, 205), (40, 218), (40, 224), (40, 225), (40, 230), (40, 235), (40, 247), (40, 258), (40, 259), (40, 264), (40, 267), (40, 270), (40, 276), (40, 278), (40, 279), (40, 280), (40, 283), (40, 295), (40, 299), (41, 44), (41, 45), (41, 47), (41, 49), (41, 50), (41, 54), (41, 57), (41, 60), (41, 61), (41, 63), (41, 68), (41, 69), (41, 70), (41, 72), (41, 76), (41, 77), (41, 79), (41, 81), (41, 82), (41, 88), (41, 98), (41, 102), (41, 108), (41, 119), (41, 126), (41, 127), (41, 128), (41, 136), (41, 137), (41, 138), (41, 140), (41, 141), (41, 143), (41, 144), (41, 148), (41, 149), (41, 151), (41, 153), (41, 154), (41, 157), (41, 160), (41, 164), (41, 165), (41, 170), (41, 171), (41, 172), (41, 174), (41, 181), (41, 183), (41, 184), (41, 186), (41, 191), (41, 192), (41, 197), (41, 198), (41, 199), (41, 200), (41, 207), (41, 208), (41, 209), (41, 213), (41, 216), (41, 217), (41, 221), (41, 222), (41, 226), (41, 232), (41, 234), (41, 240), (41, 241), (41, 244), (41, 245), (41, 249), (41, 251), (41, 257), (41, 262), (41, 266), (41, 268), (41, 271), (41, 275), (41, 277), (41, 281), (41, 284), (41, 285), (41, 287), (41, 288), (41, 289), (41, 290), (41, 291), (41, 292), (41, 293), (41, 296), (42, 43), (42, 44), (42, 47), (42, 56), (42, 57), (42, 59), (42, 61), (42, 62), (42, 77), (42, 78), (42, 83), (42, 87), (42, 88), (42, 98), (42, 102), (42, 107), (42, 121), (42, 126), (42, 127), (42, 128), (42, 132), (42, 136), (42, 137), (42, 144), (42, 145), (42, 148), (42, 149), (42, 150), (42, 153), (42, 156), (42, 157), (42, 160), (42, 163), (42, 169), (42, 171), (42, 176), (42, 179), (42, 180), (42, 183), (42, 184), (42, 185), (42, 187), (42, 190), (42, 192), (42, 197), (42, 198), (42, 202), (42, 218), (42, 224), (42, 227), (42, 229), (42, 230), (42, 233), (42, 236), (42, 240), (42, 244), (42, 249), (42, 256), (42, 257), (42, 261), (42, 266), (42, 268), (42, 269), (42, 271), (42, 273), (42, 275), (42, 279), (42, 282), (42, 285), (42, 287), (42, 288), (42, 289), (42, 293), (42, 296), (42, 299), (43, 44), (43, 56), (43, 59), (43, 62), (43, 73), (43, 78), (43, 83), (43, 87), (43, 88), (43, 94), (43, 98), (43, 118), (43, 121), (43, 126), (43, 127), (43, 132), (43, 135), (43, 136), (43, 137), (43, 144), (43, 145), (43, 149), (43, 150), (43, 153), (43, 156), (43, 163), (43, 169), (43, 171), (43, 179), (43, 180), (43, 183), (43, 184), (43, 185), (43, 187), (43, 192), (43, 197), (43, 198), (43, 202), (43, 218), (43, 224), (43, 227), (43, 230), (43, 233), (43, 236), (43, 240), (43, 256), (43, 257), (43, 259), (43, 261), (43, 268), (43, 269), (43, 273), (43, 276), (43, 279), (43, 280), (43, 282), (43, 285), (43, 299), (44, 47), (44, 49), (44, 54), (44, 56), (44, 57), (44, 61), (44, 62), (44, 77), (44, 78), (44, 79), (44, 81), (44, 88), (44, 98), (44, 100), (44, 102), (44, 107), (44, 121), (44, 126), (44, 127), (44, 136), (44, 137), (44, 144), (44, 145), (44, 148), (44, 149), (44, 151), (44, 153), (44, 156), (44, 157), (44, 160), (44, 163), (44, 171), (44, 176), (44, 180), (44, 183), (44, 184), (44, 188), (44, 190), (44, 192), (44, 197), (44, 198), (44, 202), (44, 213), (44, 227), (44, 229), (44, 236), (44, 240), (44, 241), (44, 244), (44, 249), (44, 256), (44, 257), (44, 260), (44, 261), (44, 266), (44, 268), (44, 269), (44, 271), (44, 273), (44, 275), (44, 282), (44, 284), (44, 285), (44, 287), (44, 288), (44, 289), (44, 296), (45, 50), (45, 53), (45, 54), (45, 58), (45, 60), (45, 63), (45, 68), (45, 69), (45, 70), (45, 72), (45, 74), (45, 76), (45, 77), (45, 79), (45, 81), (45, 82), (45, 88), (45, 91), (45, 93), (45, 98), (45, 102), (45, 103), (45, 104), (45, 106), (45, 108), (45, 109), (45, 111), (45, 113), (45, 119), (45, 120), (45, 128), (45, 131), (45, 133), (45, 136), (45, 140), (45, 141), (45, 143), (45, 144), (45, 148), (45, 154), (45, 157), (45, 160), (45, 164), (45, 166), (45, 170), (45, 172), (45, 174), (45, 181), (45, 184), (45, 186), (45, 191), (45, 192), (45, 198), (45, 199), (45, 200), (45, 201), (45, 207), (45, 208), (45, 209), (45, 211), (45, 212), (45, 213), (45, 215), (45, 216), (45, 217), (45, 220), (45, 221), (45, 222), (45, 226), (45, 232), (45, 234), (45, 239), (45, 241), (45, 244), (45, 245), (45, 249), (45, 250), (45, 251), (45, 262), (45, 266), (45, 271), (45, 274), (45, 275), (45, 277), (45, 281), (45, 286), (45, 287), (45, 288), (45, 289), (45, 290), (45, 291), (45, 292), (45, 293), (45, 296), (46, 48), (46, 51), (46, 55), (46, 56), (46, 59), (46, 64), (46, 73), (46, 75), (46, 83), (46, 87), (46, 89), (46, 94), (46, 97), (46, 101), (46, 105), (46, 112), (46, 114), (46, 115), (46, 118), (46, 121), (46, 125), (46, 130), (46, 135), (46, 150), (46, 161), (46, 162), (46, 163), (46, 169), (46, 173), (46, 177), (46, 179), (46, 182), (46, 185), (46, 187), (46, 195), (46, 196), (46, 204), (46, 205), (46, 218), (46, 224), (46, 225), (46, 230), (46, 233), (46, 235), (46, 236), (46, 247), (46, 258), (46, 259), (46, 264), (46, 267), (46, 270), (46, 276), (46, 278), (46, 279), (46, 280), (46, 283), (46, 294), (46, 295), (46, 299), (46, 300), (47, 49), (47, 54), (47, 57), (47, 61), (47, 62), (47, 77), (47, 78), (47, 79), (47, 81), (47, 88), (47, 98), (47, 100), (47, 107), (47, 126), (47, 127), (47, 137), (47, 138), (47, 144), (47, 145), (47, 149), (47, 151), (47, 153), (47, 156), (47, 157), (47, 171), (47, 176), (47, 183), (47, 184), (47, 188), (47, 190), (47, 192), (47, 197), (47, 198), (47, 202), (47, 213), (47, 217), (47, 221), (47, 227), (47, 229), (47, 240), (47, 241), (47, 244), (47, 249), (47, 257), (47, 260), (47, 261), (47, 266), (47, 268), (47, 269), (47, 271), (47, 273), (47, 275), (47, 282), (47, 284), (47, 285), (47, 287), (47, 288), (47, 289), (48, 51), (48, 55), (48, 59), (48, 64), (48, 66), (48, 67), (48, 73), (48, 75), (48, 83), (48, 89), (48, 94), (48, 95), (48, 96), (48, 97), (48, 101), (48, 105), (48, 112), (48, 114), (48, 115), (48, 118), (48, 122), (48, 123), (48, 125), (48, 130), (48, 131), (48, 135), (48, 140), (48, 150), (48, 161), (48, 162), (48, 172), (48, 173), (48, 177), (48, 179), (48, 182), (48, 187), (48, 189), (48, 195), (48, 196), (48, 204), (48, 205), (48, 206), (48, 210), (48, 216), (48, 223), (48, 224), (48, 225), (48, 235), (48, 247), (48, 258), (48, 259), (48, 263), (48, 264), (48, 267), (48, 270), (48, 276), (48, 278), (48, 279), (48, 280), (48, 283), (48, 294), (48, 295), (48, 298), (48, 299), (48, 300), (49, 57), (49, 61), (49, 68), (49, 79), (49, 82), (49, 100), (49, 107), (49, 127), (49, 138), (49, 145), (49, 151), (49, 153), (49, 156), (49, 157), (49, 165), (49, 171), (49, 176), (49, 184), (49, 188), (49, 190), (49, 202), (49, 213), (49, 217), (49, 221), (49, 227), (49, 229), (49, 240), (49, 241), (49, 249), (49, 257), (49, 260), (49, 266), (49, 271), (49, 273), (49, 275), (49, 284), (49, 287), (49, 288), (49, 289), (49, 290), (50, 53), (50, 54), (50, 58), (50, 60), (50, 63), (50, 68), (50, 69), (50, 70), (50, 72), (50, 74), (50, 76), (50, 77), (50, 79), (50, 81), (50, 82), (50, 88), (50, 91), (50, 95), (50, 98), (50, 102), (50, 103), (50, 104), (50, 106), (50, 108), (50, 119), (50, 120), (50, 126), (50, 127), (50, 128), (50, 131), (50, 133), (50, 136), (50, 137), (50, 140), (50, 141), (50, 143), (50, 144), (50, 148), (50, 154), (50, 157), (50, 160), (50, 162), (50, 164), (50, 166), (50, 170), (50, 172), (50, 174), (50, 175), (50, 181), (50, 184), (50, 186), (50, 191), (50, 192), (50, 197), (50, 198), (50, 199), (50, 200), (50, 206), (50, 209), (50, 210), (50, 211), (50, 212), (50, 213), (50, 216), (50, 221), (50, 222), (50, 223), (50, 226), (50, 232), (50, 234), (50, 239), (50, 241), (50, 244), (50, 245), (50, 249), (50, 251), (50, 262), (50, 266), (50, 268), (50, 271), (50, 274), (50, 275), (50, 277), (50, 281), (50, 285), (50, 286), (50, 287), (50, 288), (50, 289), (50, 290), (50, 292), (50, 293), (50, 294), (50, 296), (50, 300), (51, 55), (51, 59), (51, 64), (51, 66), (51, 67), (51, 73), (51, 75), (51, 83), (51, 89), (51, 94), (51, 96), (51, 97), (51, 101), (51, 105), (51, 112), (51, 114), (51, 115), (51, 118), (51, 123), (51, 125), (51, 130), (51, 135), (51, 161), (51, 162), (51, 173), (51, 177), (51, 179), (51, 182), (51, 187), (51, 195), (51, 196), (51, 204), (51, 205), (51, 210), (51, 224), (51, 225), (51, 235), (51, 247), (51, 258), (51, 259), (51, 263), (51, 264), (51, 267), (51, 270), (51, 276), (51, 278), (51, 279), (51, 280), (51, 283), (51, 294), (51, 295), (51, 298), (51, 299), (52, 65), (52, 66), (52, 67), (52, 80), (52, 84), (52, 95), (52, 96), (52, 99), (52, 105), (52, 110), (52, 112), (52, 116), (52, 122), (52, 123), (52, 124), (52, 130), (52, 131), (52, 134), (52, 139), (52, 155), (52, 159), (52, 167), (52, 173), (52, 175), (52, 189), (52, 194), (52, 203), (52, 206), (52, 210), (52, 211), (52, 219), (52, 242), (52, 243), (52, 247), (52, 252), (52, 254), (52, 263), (52, 265), (52, 283), (52, 297), (52, 298), (53, 58), (53, 60), (53, 63), (53, 65), (53, 69), (53, 72), (53, 74), (53, 76), (53, 80), (53, 81), (53, 85), (53, 90), (53, 91), (53, 93), (53, 95), (53, 103), (53, 104), (53, 106), (53, 108), (53, 110), (53, 111), (53, 113), (53, 116), (53, 117), (53, 119), (53, 120), (53, 124), (53, 129), (53, 131), (53, 133), (53, 139), (53, 141), (53, 142), (53, 143), (53, 146), (53, 154), (53, 164), (53, 166), (53, 170), (53, 174), (53, 175), (53, 178), (53, 181), (53, 186), (53, 191), (53, 193), (53, 194), (53, 199), (53, 200), (53, 201), (53, 206), (53, 211), (53, 212), (53, 219), (53, 222), (53, 223), (53, 226), (53, 228), (53, 231), (53, 232), (53, 234), (53, 237), (53, 238), (53, 239), (53, 242), (53, 245), (53, 250), (53, 251), (53, 252), (53, 253), (53, 262), (53, 272), (53, 274), (53, 277), (53, 281), (53, 286), (53, 292), (54, 57), (54, 60), (54, 61), (54, 63), (54, 68), (54, 69), (54, 70), (54, 72), (54, 76), (54, 77), (54, 79), (54, 81), (54, 82), (54, 86), (54, 88), (54, 98), (54, 102), (54, 108), (54, 109), (54, 119), (54, 126), (54, 127), (54, 128), (54, 136), (54, 137), (54, 138), (54, 140), (54, 141), (54, 143), (54, 144), (54, 147), (54, 148), (54, 151), (54, 153), (54, 154), (54, 157), (54, 160), (54, 164), (54, 165), (54, 166), (54, 170), (54, 172), (54, 174), (54, 181), (54, 184), (54, 186), (54, 191), (54, 192), (54, 197), (54, 198), (54, 199), (54, 200), (54, 207), (54, 208), (54, 209), (54, 212), (54, 213), (54, 215), (54, 216), (54, 217), (54, 221), (54, 222), (54, 226), (54, 232), (54, 234), (54, 239), (54, 241), (54, 244), (54, 245), (54, 249), (54, 251), (54, 257), (54, 262), (54, 266), (54, 268), (54, 271), (54, 274), (54, 275), (54, 277), (54, 281), (54, 284), (54, 285), (54, 286), (54, 287), (54, 288), (54, 289), (54, 290), (54, 291), (54, 292), (54, 293), (54, 296), (55, 56), (55, 59), (55, 64), (55, 66), (55, 67), (55, 73), (55, 75), (55, 83), (55, 89), (55, 94), (55, 95), (55, 96), (55, 97), (55, 101), (55, 102), (55, 105), (55, 112), (55, 114), (55, 115), (55, 118), (55, 121), (55, 122), (55, 123), (55, 125), (55, 128), (55, 130), (55, 131), (55, 135), (55, 140), (55, 150), (55, 160), (55, 161), (55, 162), (55, 163), (55, 172), (55, 173), (55, 177), (55, 179), (55, 182), (55, 187), (55, 189), (55, 195), (55, 196), (55, 204), (55, 205), (55, 206), (55, 210), (55, 216), (55, 218), (55, 223), (55, 224), (55, 225), (55, 235), (55, 247), (55, 258), (55, 259), (55, 263), (55, 264), (55, 267), (55, 270), (55, 276), (55, 278), (55, 279), (55, 280), (55, 283), (55, 293), (55, 294), (55, 295), (55, 298), (55, 299), (55, 300), (56, 59), (56, 62), (56, 64), (56, 69), (56, 73), (56, 75), (56, 77), (56, 83), (56, 87), (56, 88), (56, 89), (56, 94), (56, 97), (56, 98), (56, 102), (56, 115), (56, 118), (56, 121), (56, 125), (56, 126), (56, 127), (56, 128), (56, 132), (56, 135), (56, 136), (56, 137), (56, 140), (56, 144), (56, 148), (56, 149), (56, 150), (56, 153), (56, 156), (56, 157), (56, 160), (56, 161), (56, 162), (56, 163), (56, 169), (56, 172), (56, 179), (56, 180), (56, 181), (56, 183), (56, 184), (56, 185), (56, 187), (56, 192), (56, 196), (56, 197), (56, 198), (56, 202), (56, 204), (56, 205), (56, 216), (56, 218), (56, 224), (56, 227), (56, 230), (56, 233), (56, 236), (56, 244), (56, 251), (56, 256), (56, 257), (56, 259), (56, 261), (56, 264), (56, 266), (56, 267), (56, 268), (56, 269), (56, 270), (56, 275), (56, 276), (56, 279), (56, 280), (56, 282), (56, 285), (56, 287), (56, 288), (56, 293), (56, 294), (56, 296), (56, 299), (56, 300), (57, 61), (57, 62), (57, 77), (57, 78), (57, 79), (57, 81), (57, 88), (57, 100), (57, 107), (57, 126), (57, 127), (57, 137), (57, 138), (57, 144), (57, 145), (57, 151), (57, 153), (57, 156), (57, 157), (57, 171), (57, 176), (57, 184), (57, 188), (57, 190), (57, 197), (57, 198), (57, 202), (57, 213), (57, 217), (57, 221), (57, 227), (57, 229), (57, 240), (57, 241), (57, 249), (57, 257), (57, 260), (57, 261), (57, 266), (57, 268), (57, 269), (57, 271), (57, 273), (57, 275), (57, 282), (57, 284), (57, 285), (57, 287), (57, 288), (57, 289), (58, 60), (58, 63), (58, 65), (58, 69), (58, 74), (58, 76), (58, 80), (58, 84), (58, 85), (58, 90), (58, 91), (58, 93), (58, 95), (58, 103), (58, 104), (58, 106), (58, 108), (58, 110), (58, 111), (58, 113), (58, 116), (58, 117), (58, 119), (58, 120), (58, 124), (58, 129), (58, 131), (58, 133), (58, 139), (58, 141), (58, 142), (58, 143), (58, 146), (58, 154), (58, 164), (58, 166), (58, 167), (58, 170), (58, 174), (58, 175), (58, 178), (58, 186), (58, 193), (58, 194), (58, 199), (58, 201), (58, 206), (58, 211), (58, 212), (58, 219), (58, 222), (58, 226), (58, 228), (58, 231), (58, 232), (58, 234), (58, 237), (58, 238), (58, 239), (58, 242), (58, 245), (58, 250), (58, 252), (58, 253), (58, 262), (58, 272), (58, 274), (58, 277), (58, 281), (58, 286), (58, 292), (59, 64), (59, 73), (59, 75), (59, 77), (59, 83), (59, 87), (59, 88), (59, 89), (59, 94), (59, 97), (59, 98), (59, 102), (59, 114), (59, 115), (59, 118), (59, 121), (59, 125), (59, 126), (59, 127), (59, 128), (59, 132), (59, 135), (59, 136), (59, 137), (59, 140), (59, 144), (59, 148), (59, 149), (59, 150), (59, 153), (59, 160), (59, 161), (59, 162), (59, 163), (59, 169), (59, 172), (59, 177), (59, 179), (59, 180), (59, 181), (59, 182), (59, 183), (59, 184), (59, 185), (59, 187), (59, 192), (59, 195), (59, 196), (59, 197), (59, 198), (59, 204), (59, 205), (59, 210), (59, 216), (59, 218), (59, 223), (59, 224), (59, 225), (59, 227), (59, 230), (59, 233), (59, 236), (59, 244), (59, 251), (59, 256), (59, 258), (59, 259), (59, 261), (59, 264), (59, 266), (59, 267), (59, 268), (59, 270), (59, 276), (59, 279), (59, 280), (59, 283), (59, 285), (59, 293), (59, 294), (59, 296), (59, 299), (59, 300), (60, 63), (60, 68), (60, 69), (60, 70), (60, 71), (60, 72), (60, 74), (60, 76), (60, 79), (60, 81), (60, 82), (60, 86), (60, 91), (60, 92), (60, 93), (60, 103), (60, 104), (60, 106), (60, 108), (60, 109), (60, 111), (60, 113), (60, 119), (60, 120), (60, 129), (60, 133), (60, 138), (60, 141), (60, 142), (60, 143), (60, 146), (60, 147), (60, 148), (60, 152), (60, 154), (60, 157), (60, 158), (60, 164), (60, 165), (60, 166), (60, 168), (60, 170), (60, 174), (60, 178), (60, 181), (60, 186), (60, 191), (60, 199), (60, 200), (60, 201), (60, 207), (60, 208), (60, 209), (60, 212), (60, 213), (60, 214), (60, 215), (60, 217), (60, 220), (60, 221), (60, 222), (60, 226), (60, 232), (60, 234), (60, 237), (60, 238), (60, 239), (60, 241), (60, 244), (60, 245), (60, 249), (60, 250), (60, 251), (60, 253), (60, 255), (60, 262), (60, 266), (60, 274), (60, 275), (60, 277), (60, 281), (60, 286), (60, 289), (60, 290), (60, 291), (60, 292), (61, 68), (61, 70), (61, 77), (61, 78), (61, 79), (61, 81), (61, 82), (61, 88), (61, 98), (61, 100), (61, 107), (61, 126), (61, 127), (61, 137), (61, 138), (61, 144), (61, 145), (61, 151), (61, 153), (61, 156), (61, 157), (61, 165), (61, 171), (61, 176), (61, 184), (61, 188), (61, 190), (61, 197), (61, 198), (61, 202), (61, 213), (61, 217), (61, 221), (61, 227), (61, 229), (61, 240), (61, 241), (61, 249), (61, 257), (61, 260), (61, 261), (61, 266), (61, 268), (61, 269), (61, 271), (61, 273), (61, 275), (61, 282), (61, 284), (61, 285), (61, 287), (61, 288), (61, 289), (61, 290), (62, 77), (62, 78), (62, 87), (62, 88), (62, 100), (62, 107), (62, 121), (62, 126), (62, 127), (62, 132), (62, 137), (62, 144), (62, 145), (62, 149), (62, 150), (62, 153), (62, 156), (62, 163), (62, 169), (62, 171), (62, 176), (62, 180), (62, 183), (62, 184), (62, 185), (62, 188), (62, 190), (62, 192), (62, 197), (62, 198), (62, 202), (62, 218), (62, 227), (62, 229), (62, 230), (62, 233), (62, 236), (62, 240), (62, 256), (62, 257), (62, 260), (62, 261), (62, 266), (62, 268), (62, 269), (62, 271), (62, 273), (62, 282), (62, 285), (62, 287), (62, 288), (63, 68), (63, 69), (63, 70), (63, 72), (63, 74), (63, 76), (63, 77), (63, 79), (63, 81), (63, 82), (63, 88), (63, 91), (63, 95), (63, 98), (63, 102), (63, 103), (63, 104), (63, 106), (63, 108), (63, 119), (63, 120), (63, 126), (63, 127), (63, 128), (63, 131), (63, 133), (63, 136), (63, 137), (63, 140), (63, 141), (63, 143), (63, 144), (63, 148), (63, 154), (63, 157), (63, 160), (63, 162), (63, 164), (63, 166), (63, 170), (63, 172), (63, 174), (63, 175), (63, 181), (63, 184), (63, 186), (63, 191), (63, 192), (63, 197), (63, 198), (63, 199), (63, 200), (63, 201), (63, 206), (63, 209), (63, 210), (63, 211), (63, 212), (63, 213), (63, 216), (63, 221), (63, 222), (63, 223), (63, 226), (63, 232), (63, 234), (63, 239), (63, 241), (63, 244), (63, 245), (63, 249), (63, 251), (63, 262), (63, 266), (63, 268), (63, 271), (63, 274), (63, 275), (63, 277), (63, 281), (63, 285), (63, 286), (63, 287), (63, 288), (63, 289), (63, 290), (63, 292), (63, 293), (63, 294), (63, 296), (63, 300), (64, 66), (64, 67), (64, 73), (64, 75), (64, 83), (64, 87), (64, 89), (64, 94), (64, 95), (64, 97), (64, 101), (64, 102), (64, 105), (64, 112), (64, 114), (64, 115), (64, 118), (64, 121), (64, 122), (64, 123), (64, 125), (64, 128), (64, 130), (64, 131), (64, 135), (64, 136), (64, 140), (64, 150), (64, 160), (64, 161), (64, 162), (64, 163), (64, 169), (64, 172), (64, 173), (64, 177), (64, 179), (64, 180), (64, 181), (64, 182), (64, 183), (64, 187), (64, 189), (64, 192), (64, 195), (64, 196), (64, 204), (64, 205), (64, 206), (64, 210), (64, 216), (64, 218), (64, 223), (64, 224), (64, 225), (64, 235), (64, 236), (64, 247), (64, 251), (64, 258), (64, 259), (64, 263), (64, 264), (64, 267), (64, 270), (64, 276), (64, 278), (64, 279), (64, 280), (64, 283), (64, 293), (64, 294), (64, 295), (64, 296), (64, 298), (64, 299), (64, 300), (65, 66), (65, 67), (65, 69), (65, 74), (65, 75), (65, 80), (65, 84), (65, 85), (65, 90), (65, 95), (65, 96), (65, 99), (65, 103), (65, 104), (65, 105), (65, 106), (65, 110), (65, 112), (65, 116), (65, 117), (65, 122), (65, 123), (65, 124), (65, 125), (65, 128), (65, 130), (65, 131), (65, 133), (65, 134), (65, 139), (65, 140), (65, 141), (65, 143), (65, 154), (65, 155), (65, 159), (65, 162), (65, 166), (65, 167), (65, 172), (65, 173), (65, 175), (65, 181), (65, 186), (65, 189), (65, 193), (65, 194), (65, 199), (65, 203), (65, 206), (65, 210), (65, 211), (65, 216), (65, 219), (65, 223), (65, 225), (65, 228), (65, 232), (65, 234), (65, 242), (65, 243), (65, 247), (65, 251), (65, 252), (65, 254), (65, 262), (65, 263), (65, 264), (65, 265), (65, 267), (65, 272), (65, 274), (65, 281), (65, 283), (65, 286), (65, 293), (65, 294), (65, 297), (65, 298), (65, 300), (66, 67), (66, 75), (66, 80), (66, 84), (66, 89), (66, 95), (66, 96), (66, 97), (66, 99), (66, 105), (66, 112), (66, 122), (66, 123), (66, 124), (66, 125), (66, 130), (66, 131), (66, 159), (66, 162), (66, 167), (66, 173), (66, 177), (66, 182), (66, 189), (66, 196), (66, 203), (66, 204), (66, 206), (66, 210), (66, 219), (66, 223), (66, 225), (66, 235), (66, 242), (66, 243), (66, 247), (66, 252), (66, 263), (66, 264), (66, 265), (66, 267), (66, 283), (66, 294), (66, 297), (66, 298), (67, 69), (67, 74), (67, 75), (67, 80), (67, 84), (67, 89), (67, 90), (67, 95), (67, 96), (67, 97), (67, 99), (67, 102), (67, 103), (67, 104), (67, 105), (67, 112), (67, 115), (67, 116), (67, 122), (67, 123), (67, 124), (67, 125), (67, 128), (67, 130), (67, 131), (67, 133), (67, 140), (67, 141), (67, 143), (67, 148), (67, 154), (67, 159), (67, 160), (67, 162), (67, 166), (67, 167), (67, 172), (67, 173), (67, 175), (67, 181), (67, 182), (67, 189), (67, 194), (67, 196), (67, 203), (67, 204), (67, 206), (67, 210), (67, 211), (67, 216), (67, 219), (67, 223), (67, 224), (67, 225), (67, 232), (67, 234), (67, 235), (67, 242), (67, 243), (67, 247), (67, 251), (67, 252), (67, 262), (67, 263), (67, 264), (67, 265), (67, 267), (67, 274), (67, 283), (67, 293), (67, 294), (67, 296), (67, 297), (67, 298), (67, 300), (68, 70), (68, 71), (68, 72), (68, 76), (68, 79), (68, 81), (68, 82), (68, 86), (68, 92), (68, 93), (68, 108), (68, 109), (68, 119), (68, 120), (68, 129), (68, 138), (68, 141), (68, 143), (68, 147), (68, 151), (68, 152), (68, 157), (68, 164), (68, 165), (68, 168), (68, 170), (68, 174), (68, 186), (68, 191), (68, 199), (68, 200), (68, 207), (68, 208), (68, 209), (68, 212), (68, 213), (68, 214), (68, 215), (68, 217), (68, 220), (68, 221), (68, 222), (68, 226), (68, 239), (68, 241), (68, 244), (68, 245), (68, 246), (68, 249), (68, 255), (68, 266), (68, 271), (68, 275), (68, 277), (68, 281), (68, 284), (68, 287), (68, 288), (68, 289), (68, 290), (68, 291), (68, 292), (69, 74), (69, 75), (69, 76), (69, 77), (69, 80), (69, 81), (69, 88), (69, 90), (69, 91), (69, 95), (69, 98), (69, 102), (69, 103), (69, 104), (69, 105), (69, 106), (69, 108), (69, 116), (69, 122), (69, 124), (69, 125), (69, 128), (69, 130), (69, 131), (69, 133), (69, 136), (69, 137), (69, 140), (69, 141), (69, 143), (69, 144), (69, 148), (69, 154), (69, 157), (69, 160), (69, 162), (69, 166), (69, 170), (69, 172), (69, 173), (69, 174), (69, 175), (69, 181), (69, 186), (69, 189), (69, 192), (69, 194), (69, 196), (69, 198), (69, 199), (69, 200), (69, 204), (69, 206), (69, 210), (69, 211), (69, 216), (69, 219), (69, 222), (69, 223), (69, 224), (69, 226), (69, 232), (69, 234), (69, 242), (69, 243), (69, 244), (69, 251), (69, 252), (69, 262), (69, 264), (69, 266), (69, 267), (69, 274), (69, 275), (69, 281), (69, 283), (69, 286), (69, 292), (69, 293), (69, 294), (69, 296), (69, 298), (69, 299), (69, 300), (70, 71), (70, 72), (70, 76), (70, 77), (70, 79), (70, 81), (70, 82), (70, 86), (70, 88), (70, 91), (70, 92), (70, 93), (70, 108), (70, 109), (70, 119), (70, 120), (70, 129), (70, 138), (70, 141), (70, 143), (70, 144), (70, 147), (70, 148), (70, 154), (70, 157), (70, 164), (70, 165), (70, 168), (70, 170), (70, 174), (70, 181), (70, 184), (70, 186), (70, 191), (70, 199), (70, 200), (70, 201), (70, 207), (70, 208), (70, 209), (70, 212), (70, 213), (70, 215), (70, 217), (70, 220), (70, 221), (70, 222), (70, 226), (70, 232), (70, 234), (70, 239), (70, 241), (70, 244), (70, 245), (70, 249), (70, 255), (70, 266), (70, 271), (70, 275), (70, 277), (70, 281), (70, 284), (70, 286), (70, 287), (70, 288), (70, 289), (70, 290), (70, 291), (70, 292), (71, 72), (71, 76), (71, 82), (71, 86), (71, 92), (71, 93), (71, 108), (71, 109), (71, 113), (71, 119), (71, 120), (71, 129), (71, 138), (71, 142), (71, 147), (71, 152), (71, 158), (71, 164), (71, 165), (71, 168), (71, 174), (71, 178), (71, 191), (71, 200), (71, 207), (71, 208), (71, 209), (71, 212), (71, 214), (71, 215), (71, 217), (71, 220), (71, 221), (71, 222), (71, 226), (71, 239), (71, 241), (71, 245), (71, 246), (71, 248), (71, 255), (71, 277), (71, 290), (71, 291), (72, 76), (72, 79), (72, 81), (72, 82), (72, 86), (72, 91), (72, 92), (72, 93), (72, 106), (72, 108), (72, 109), (72, 111), (72, 113), (72, 119), (72, 120), (72, 129), (72, 138), (72, 141), (72, 142), (72, 143), (72, 147), (72, 152), (72, 154), (72, 157), (72, 158), (72, 164), (72, 165), (72, 168), (72, 170), (72, 174), (72, 178), (72, 186), (72, 191), (72, 199), (72, 200), (72, 201), (72, 207), (72, 208), (72, 209), (72, 212), (72, 213), (72, 214), (72, 215), (72, 217), (72, 220), (72, 221), (72, 222), (72, 226), (72, 232), (72, 234), (72, 239), (72, 241), (72, 244), (72, 245), (72, 246), (72, 248), (72, 249), (72, 255), (72, 266), (72, 271), (72, 275), (72, 277), (72, 281), (72, 284), (72, 286), (72, 289), (72, 290), (72, 291), (72, 292), (73, 75), (73, 83), (73, 87), (73, 89), (73, 94), (73, 97), (73, 101), (73, 114), (73, 115), (73, 118), (73, 121), (73, 132), (73, 135), (73, 150), (73, 161), (73, 163), (73, 169), (73, 177), (73, 179), (73, 180), (73, 182), (73, 185), (73, 187), (73, 195), (73, 196), (73, 204), (73, 205), (73, 218), (73, 224), (73, 230), (73, 233), (73, 236), (73, 256), (73, 258), (73, 259), (73, 264), (73, 270), (73, 276), (73, 278), (73, 279), (73, 280), (73, 295), (73, 299), (74, 76), (74, 80), (74, 84), (74, 85), (74, 90), (74, 91), (74, 95), (74, 103), (74, 104), (74, 106), (74, 108), (74, 110), (74, 111), (74, 113), (74, 116), (74, 117), (74, 119), (74, 120), (74, 122), (74, 124), (74, 128), (74, 131), (74, 133), (74, 139), (74, 141), (74, 143), (74, 146), (74, 148), (74, 154), (74, 159), (74, 164), (74, 166), (74, 167), (74, 170), (74, 172), (74, 174), (74, 175), (74, 181), (74, 186), (74, 189), (74, 193), (74, 194), (74, 199), (74, 201), (74, 206), (74, 210), (74, 211), (74, 212), (74, 216), (74, 219), (74, 222), (74, 223), (74, 226), (74, 228), (74, 231), (74, 232), (74, 234), (74, 237), (74, 238), (74, 239), (74, 242), (74, 243), (74, 244), (74, 245), (74, 250), (74, 251), (74, 252), (74, 253), (74, 262), (74, 272), (74, 274), (74, 277), (74, 281), (74, 286), (74, 292), (74, 293), (74, 294), (74, 297), (74, 298), (75, 80), (75, 83), (75, 89), (75, 94), (75, 95), (75, 96), (75, 97), (75, 102), (75, 105), (75, 112), (75, 114), (75, 115), (75, 118), (75, 121), (75, 122), (75, 123), (75, 125), (75, 128), (75, 130), (75, 131), (75, 136), (75, 140), (75, 148), (75, 150), (75, 160), (75, 161), (75, 162), (75, 163), (75, 166), (75, 172), (75, 173), (75, 177), (75, 179), (75, 181), (75, 182), (75, 187), (75, 189), (75, 192), (75, 195), (75, 196), (75, 204), (75, 205), (75, 206), (75, 210), (75, 216), (75, 219), (75, 223), (75, 224), (75, 225), (75, 235), (75, 242), (75, 243), (75, 247), (75, 251), (75, 252), (75, 259), (75, 263), (75, 264), (75, 267), (75, 270), (75, 279), (75, 280), (75, 283), (75, 293), (75, 294), (75, 296), (75, 298), (75, 299), (75, 300), (76, 79), (76, 81), (76, 82), (76, 86), (76, 91), (76, 92), (76, 93), (76, 104), (76, 106), (76, 108), (76, 109), (76, 111), (76, 113), (76, 119), (76, 120), (76, 129), (76, 133), (76, 138), (76, 141), (76, 142), (76, 143), (76, 146), (76, 147), (76, 148), (76, 152), (76, 154), (76, 157), (76, 158), (76, 164), (76, 165), (76, 168), (76, 170), (76, 174), (76, 178), (76, 181), (76, 186), (76, 191), (76, 199), (76, 200), (76, 201), (76, 207), (76, 208), (76, 209), (76, 212), (76, 213), (76, 214), (76, 215), (76, 217), (76, 220), (76, 221), (76, 222), (76, 226), (76, 232), (76, 234), (76, 237), (76, 238), (76, 239), (76, 241), (76, 244), (76, 245), (76, 246), (76, 249), (76, 250), (76, 251), (76, 255), (76, 262), (76, 266), (76, 274), (76, 275), (76, 277), (76, 281), (76, 286), (76, 289), (76, 290), (76, 291), (76, 292), (77, 79), (77, 81), (77, 88), (77, 98), (77, 102), (77, 121), (77, 126), (77, 127), (77, 128), (77, 136), (77, 137), (77, 140), (77, 141), (77, 143), (77, 144), (77, 148), (77, 149), (77, 150), (77, 151), (77, 153), (77, 154), (77, 156), (77, 157), (77, 160), (77, 162), (77, 163), (77, 171), (77, 172), (77, 179), (77, 180), (77, 181), (77, 183), (77, 184), (77, 186), (77, 192), (77, 197), (77, 198), (77, 200), (77, 202), (77, 213), (77, 216), (77, 221), (77, 222), (77, 224), (77, 227), (77, 232), (77, 236), (77, 240), (77, 241), (77, 244), (77, 249), (77, 251), (77, 256), (77, 257), (77, 261), (77, 266), (77, 268), (77, 269), (77, 271), (77, 273), (77, 275), (77, 281), (77, 282), (77, 285), (77, 287), (77, 288), (77, 289), (77, 292), (77, 293), (77, 294), (77, 296), (77, 299), (77, 300), (78, 100), (78, 107), (78, 126), (78, 127), (78, 137), (78, 145), (78, 149), (78, 151), (78, 153), (78, 156), (78, 171), (78, 176), (78, 180), (78, 183), (78, 184), (78, 188), (78, 190), (78, 197), (78, 202), (78, 227), (78, 229), (78, 236), (78, 240), (78, 256), (78, 257), (78, 260), (78, 261), (78, 268), (78, 269), (78, 271), (78, 273), (78, 282), (78, 285), (78, 287), (78, 288), (79, 81), (79, 82), (79, 86), (79, 88), (79, 98), (79, 108), (79, 109), (79, 126), (79, 127), (79, 137), (79, 138), (79, 144), (79, 147), (79, 151), (79, 153), (79, 156), (79, 157), (79, 165), (79, 171), (79, 174), (79, 176), (79, 184), (79, 188), (79, 190), (79, 197), (79, 198), (79, 200), (79, 207), (79, 208), (79, 209), (79, 213), (79, 217), (79, 221), (79, 222), (79, 226), (79, 227), (79, 229), (79, 240), (79, 241), (79, 244), (79, 249), (79, 257), (79, 266), (79, 268), (79, 271), (79, 275), (79, 277), (79, 284), (79, 285), (79, 287), (79, 288), (79, 289), (79, 290), (79, 291), (79, 292), (80, 84), (80, 85), (80, 89), (80, 90), (80, 95), (80, 96), (80, 97), (80, 99), (80, 103), (80, 104), (80, 105), (80, 106), (80, 110), (80, 112), (80, 116), (80, 117), (80, 122), (80, 123), (80, 124), (80, 125), (80, 128), (80, 130), (80, 131), (80, 133), (80, 134), (80, 139), (80, 140), (80, 141), (80, 143), (80, 154), (80, 155), (80, 159), (80, 162), (80, 166), (80, 167), (80, 172), (80, 173), (80, 175), (80, 181), (80, 186), (80, 189), (80, 194), (80, 199), (80, 203), (80, 204), (80, 206), (80, 210), (80, 211), (80, 216), (80, 219), (80, 223), (80, 225), (80, 228), (80, 232), (80, 234), (80, 235), (80, 242), (80, 243), (80, 247), (80, 251), (80, 252), (80, 254), (80, 262), (80, 263), (80, 264), (80, 265), (80, 267), (80, 274), (80, 281), (80, 283), (80, 286), (80, 293), (80, 294), (80, 297), (80, 298), (80, 300), (81, 82), (81, 86), (81, 88), (81, 98), (81, 102), (81, 106), (81, 108), (81, 109), (81, 119), (81, 126), (81, 127), (81, 128), (81, 136), (81, 137), (81, 138), (81, 140), (81, 141), (81, 143), (81, 144), (81, 148), (81, 153), (81, 154), (81, 157), (81, 160), (81, 164), (81, 165), (81, 166), (81, 170), (81, 172), (81, 174), (81, 181), (81, 184), (81, 186), (81, 191), (81, 192), (81, 197), (81, 198), (81, 199), (81, 200), (81, 207), (81, 208), (81, 209), (81, 212), (81, 213), (81, 215), (81, 216), (81, 217), (81, 221), (81, 222), (81, 226), (81, 232), (81, 234), (81, 239), (81, 241), (81, 244), (81, 245), (81, 249), (81, 251), (81, 257), (81, 262), (81, 266), (81, 268), (81, 271), (81, 274), (81, 275), (81, 277), (81, 281), (81, 284), (81, 285), (81, 286), (81, 287), (81, 288), (81, 289), (81, 290), (81, 291), (81, 292), (81, 293), (81, 296), (81, 300), (82, 86), (82, 92), (82, 93), (82, 108), (82, 109), (82, 119), (82, 120), (82, 129), (82, 138), (82, 147), (82, 151), (82, 152), (82, 157), (82, 158), (82, 164), (82, 165), (82, 168), (82, 170), (82, 174), (82, 191), (82, 200), (82, 207), (82, 208), (82, 209), (82, 212), (82, 213), (82, 214), (82, 215), (82, 217), (82, 220), (82, 221), (82, 222), (82, 226), (82, 239), (82, 241), (82, 245), (82, 246), (82, 248), (82, 249), (82, 255), (82, 271), (82, 275), (82, 277), (82, 284), (82, 289), (82, 290), (82, 291), (82, 292), (83, 87), (83, 89), (83, 94), (83, 97), (83, 98), (83, 101), (83, 102), (83, 114), (83, 115), (83, 118), (83, 121), (83, 125), (83, 126), (83, 132), (83, 135), (83, 136), (83, 137), (83, 140), (83, 149), (83, 150), (83, 160), (83, 161), (83, 162), (83, 163), (83, 169), (83, 172), (83, 177), (83, 179), (83, 180), (83, 182), (83, 183), (83, 185), (83, 187), (83, 192), (83, 195), (83, 196), (83, 198), (83, 204), (83, 205), (83, 218), (83, 224), (83, 230), (83, 233), (83, 236), (83, 256), (83, 258), (83, 259), (83, 261), (83, 264), (83, 268), (83, 270), (83, 276), (83, 278), (83, 279), (83, 280), (83, 285), (83, 293), (83, 295), (83, 299), (83, 300), (84, 85), (84, 90), (84, 95), (84, 96), (84, 99), (84, 103), (84, 104), (84, 110), (84, 116), (84, 117), (84, 122), (84, 123), (84, 124), (84, 130), (84, 131), (84, 133), (84, 134), (84, 139), (84, 155), (84, 159), (84, 166), (84, 167), (84, 173), (84, 175), (84, 189), (84, 193), (84, 194), (84, 203), (84, 206), (84, 210), (84, 211), (84, 219), (84, 223), (84, 228), (84, 231), (84, 242), (84, 243), (84, 252), (84, 254), (84, 262), (84, 263), (84, 265), (84, 272), (84, 274), (84, 297), (84, 298), (85, 90), (85, 91), (85, 103), (85, 104), (85, 106), (85, 110), (85, 111), (85, 113), (85, 116), (85, 117), (85, 120), (85, 124), (85, 133), (85, 139), (85, 141), (85, 142), (85, 143), (85, 146), (85, 155), (85, 166), (85, 167), (85, 170), (85, 174), (85, 175), (85, 178), (85, 186), (85, 193), (85, 194), (85, 199), (85, 201), (85, 211), (85, 212), (85, 219), (85, 228), (85, 231), (85, 232), (85, 234), (85, 237), (85, 238), (85, 239), (85, 242), (85, 245), (85, 250), (85, 252), (85, 253), (85, 254), (85, 262), (85, 272), (85, 274), (85, 281), (85, 286), (85, 297), (86, 92), (86, 93), (86, 108), (86, 109), (86, 119), (86, 120), (86, 129), (86, 138), (86, 147), (86, 152), (86, 158), (86, 164), (86, 165), (86, 168), (86, 174), (86, 191), (86, 200), (86, 207), (86, 208), (86, 209), (86, 212), (86, 213), (86, 214), (86, 215), (86, 217), (86, 220), (86, 221), (86, 222), (86, 226), (86, 239), (86, 241), (86, 245), (86, 246), (86, 248), (86, 255), (86, 277), (86, 290), (86, 291), (87, 94), (87, 101), (87, 114), (87, 115), (87, 118), (87, 121), (87, 126), (87, 132), (87, 135), (87, 136), (87, 137), (87, 149), (87, 150), (87, 161), (87, 163), (87, 169), (87, 179), (87, 180), (87, 183), (87, 185), (87, 187), (87, 192), (87, 195), (87, 196), (87, 204), (87, 205), (87, 218), (87, 224), (87, 230), (87, 233), (87, 236), (87, 256), (87, 258), (87, 259), (87, 261), (87, 269), (87, 270), (87, 276), (87, 278), (87, 279), (87, 280), (87, 285), (87, 295), (87, 299), (88, 98), (88, 102), (88, 121), (88, 126), (88, 127), (88, 128), (88, 136), (88, 137), (88, 140), (88, 141), (88, 143), (88, 144), (88, 148), (88, 149), (88, 150), (88, 151), (88, 153), (88, 154), (88, 156), (88, 157), (88, 160), (88, 162), (88, 163), (88, 171), (88, 172), (88, 176), (88, 180), (88, 181), (88, 183), (88, 184), (88, 190), (88, 192), (88, 197), (88, 198), (88, 200), (88, 202), (88, 213), (88, 216), (88, 221), (88, 222), (88, 224), (88, 227), (88, 232), (88, 236), (88, 240), (88, 241), (88, 244), (88, 249), (88, 251), (88, 256), (88, 257), (88, 261), (88, 266), (88, 268), (88, 269), (88, 271), (88, 273), (88, 275), (88, 282), (88, 284), (88, 285), (88, 287), (88, 288), (88, 289), (88, 292), (88, 293), (88, 294), (88, 296), (88, 299), (88, 300), (89, 94), (89, 95), (89, 96), (89, 97), (89, 101), (89, 102), (89, 105), (89, 112), (89, 114), (89, 115), (89, 118), (89, 121), (89, 122), (89, 123), (89, 125), (89, 128), (89, 130), (89, 131), (89, 135), (89, 136), (89, 140), (89, 150), (89, 160), (89, 161), (89, 162), (89, 163), (89, 172), (89, 173), (89, 177), (89, 179), (89, 181), (89, 182), (89, 187), (89, 189), (89, 192), (89, 195), (89, 196), (89, 204), (89, 205), (89, 206), (89, 210), (89, 216), (89, 218), (89, 223), (89, 224), (89, 225), (89, 235), (89, 247), (89, 251), (89, 252), (89, 258), (89, 259), (89, 263), (89, 264), (89, 267), (89, 270), (89, 276), (89, 278), (89, 279), (89, 280), (89, 283), (89, 293), (89, 294), (89, 295), (89, 296), (89, 298), (89, 299), (89, 300), (90, 91), (90, 95), (90, 99), (90, 103), (90, 104), (90, 106), (90, 108), (90, 110), (90, 111), (90, 113), (90, 116), (90, 117), (90, 120), (90, 122), (90, 124), (90, 131), (90, 133), (90, 139), (90, 141), (90, 143), (90, 146), (90, 154), (90, 155), (90, 159), (90, 166), (90, 167), (90, 170), (90, 174), (90, 175), (90, 178), (90, 186), (90, 189), (90, 193), (90, 194), (90, 199), (90, 201), (90, 206), (90, 211), (90, 212), (90, 219), (90, 223), (90, 226), (90, 228), (90, 231), (90, 232), (90, 234), (90, 237), (90, 238), (90, 239), (90, 242), (90, 243), (90, 245), (90, 250), (90, 252), (90, 253), (90, 254), (90, 262), (90, 265), (90, 272), (90, 274), (90, 281), (90, 286), (90, 297), (91, 93), (91, 103), (91, 104), (91, 106), (91, 108), (91, 111), (91, 113), (91, 116), (91, 117), (91, 119), (91, 120), (91, 124), (91, 129), (91, 133), (91, 141), (91, 142), (91, 143), (91, 146), (91, 154), (91, 164), (91, 166), (91, 168), (91, 170), (91, 174), (91, 175), (91, 178), (91, 186), (91, 191), (91, 193), (91, 194), (91, 199), (91, 200), (91, 201), (91, 211), (91, 212), (91, 215), (91, 220), (91, 222), (91, 226), (91, 228), (91, 231), (91, 232), (91, 234), (91, 237), (91, 238), (91, 239), (91, 245), (91, 250), (91, 253), (91, 255), (91, 262), (91, 272), (91, 274), (91, 277), (91, 281), (91, 286), (91, 292), (92, 93), (92, 108), (92, 109), (92, 113), (92, 119), (92, 120), (92, 129), (92, 138), (92, 142), (92, 147), (92, 152), (92, 158), (92, 164), (92, 165), (92, 168), (92, 174), (92, 178), (92, 191), (92, 200), (92, 207), (92, 208), (92, 209), (92, 212), (92, 214), (92, 215), (92, 217), (92, 220), (92, 221), (92, 222), (92, 226), (92, 239), (92, 241), (92, 245), (92, 246), (92, 248), (92, 255), (92, 277), (92, 290), (92, 291), (93, 104), (93, 106), (93, 108), (93, 109), (93, 111), (93, 113), (93, 119), (93, 120), (93, 129), (93, 133), (93, 142), (93, 146), (93, 147), (93, 152), (93, 158), (93, 164), (93, 168), (93, 170), (93, 174), (93, 178), (93, 186), (93, 191), (93, 199), (93, 200), (93, 201), (93, 207), (93, 208), (93, 209), (93, 212), (93, 214), (93, 215), (93, 220), (93, 222), (93, 226), (93, 231), (93, 237), (93, 238), (93, 239), (93, 245), (93, 246), (93, 248), (93, 250), (93, 253), (93, 255), (93, 277), (93, 281), (93, 286), (93, 290), (93, 291), (94, 95), (94, 97), (94, 98), (94, 101), (94, 102), (94, 105), (94, 114), (94, 115), (94, 118), (94, 121), (94, 125), (94, 126), (94, 128), (94, 130), (94, 131), (94, 132), (94, 135), (94, 136), (94, 137), (94, 140), (94, 144), (94, 148), (94, 149), (94, 150), (94, 160), (94, 161), (94, 162), (94, 163), (94, 169), (94, 172), (94, 173), (94, 177), (94, 179), (94, 180), (94, 181), (94, 182), (94, 183), (94, 185), (94, 187), (94, 192), (94, 195), (94, 196), (94, 198), (94, 204), (94, 205), (94, 206), (94, 210), (94, 216), (94, 218), (94, 223), (94, 224), (94, 225), (94, 230), (94, 233), (94, 235), (94, 236), (94, 247), (94, 251), (94, 256), (94, 258), (94, 259), (94, 261), (94, 264), (94, 267), (94, 268), (94, 270), (94, 276), (94, 278), (94, 279), (94, 280), (94, 283), (94, 285), (94, 293), (94, 294), (94, 295), (94, 296), (94, 298), (94, 299), (94, 300), (95, 96), (95, 97), (95, 98), (95, 102), (95, 103), (95, 104), (95, 105), (95, 106), (95, 112), (95, 116), (95, 122), (95, 123), (95, 124), (95, 125), (95, 128), (95, 130), (95, 131), (95, 133), (95, 136), (95, 140), (95, 141), (95, 143), (95, 148), (95, 154), (95, 159), (95, 160), (95, 162), (95, 166), (95, 167), (95, 172), (95, 173), (95, 175), (95, 181), (95, 182), (95, 186), (95, 189), (95, 192), (95, 194), (95, 196), (95, 199), (95, 203), (95, 204), (95, 206), (95, 210), (95, 211), (95, 216), (95, 219), (95, 223), (95, 224), (95, 225), (95, 232), (95, 234), (95, 235), (95, 242), (95, 243), (95, 244), (95, 247), (95, 251), (95, 252), (95, 262), (95, 263), (95, 264), (95, 265), (95, 267), (95, 274), (95, 279), (95, 281), (95, 283), (95, 286), (95, 292), (95, 293), (95, 294), (95, 296), (95, 297), (95, 298), (95, 299), (95, 300), (96, 97), (96, 99), (96, 105), (96, 112), (96, 116), (96, 122), (96, 123), (96, 124), (96, 125), (96, 130), (96, 131), (96, 134), (96, 155), (96, 159), (96, 162), (96, 166), (96, 167), (96, 173), (96, 175), (96, 182), (96, 189), (96, 194), (96, 203), (96, 204), (96, 206), (96, 210), (96, 219), (96, 223), (96, 225), (96, 235), (96, 242), (96, 243), (96, 247), (96, 252), (96, 254), (96, 263), (96, 264), (96, 265), (96, 267), (96, 283), (96, 294), (96, 297), (96, 298), (97, 101), (97, 102), (97, 105), (97, 112), (97, 114), (97, 115), (97, 118), (97, 121), (97, 122), (97, 123), (97, 125), (97, 128), (97, 130), (97, 131), (97, 135), (97, 136), (97, 140), (97, 150), (97, 160), (97, 161), (97, 162), (97, 163), (97, 172), (97, 173), (97, 177), (97, 179), (97, 182), (97, 187), (97, 189), (97, 195), (97, 196), (97, 204), (97, 205), (97, 206), (97, 210), (97, 216), (97, 218), (97, 223), (97, 224), (97, 225), (97, 235), (97, 243), (97, 247), (97, 251), (97, 252), (97, 258), (97, 259), (97, 263), (97, 264), (97, 267), (97, 270), (97, 276), (97, 278), (97, 279), (97, 280), (97, 283), (97, 293), (97, 294), (97, 295), (97, 298), (97, 299), (97, 300), (98, 102), (98, 121), (98, 126), (98, 127), (98, 128), (98, 131), (98, 132), (98, 136), (98, 137), (98, 140), (98, 141), (98, 143), (98, 144), (98, 148), (98, 149), (98, 150), (98, 153), (98, 154), (98, 156), (98, 157), (98, 160), (98, 162), (98, 163), (98, 171), (98, 172), (98, 179), (98, 180), (98, 181), (98, 183), (98, 184), (98, 185), (98, 187), (98, 192), (98, 196), (98, 197), (98, 198), (98, 202), (98, 204), (98, 206), (98, 210), (98, 216), (98, 218), (98, 223), (98, 224), (98, 227), (98, 232), (98, 236), (98, 240), (98, 244), (98, 249), (98, 251), (98, 256), (98, 257), (98, 261), (98, 264), (98, 266), (98, 267), (98, 268), (98, 269), (98, 271), (98, 275), (98, 279), (98, 282), (98, 285), (98, 287), (98, 288), (98, 289), (98, 292), (98, 293), (98, 294), (98, 296), (98, 299), (98, 300), (99, 103), (99, 110), (99, 116), (99, 117), (99, 122), (99, 123), (99, 124), (99, 130), (99, 134), (99, 139), (99, 155), (99, 159), (99, 167), (99, 173), (99, 175), (99, 189), (99, 193), (99, 194), (99, 203), (99, 211), (99, 219), (99, 228), (99, 242), (99, 243), (99, 252), (99, 254), (99, 263), (99, 265), (99, 297), (99, 298), (100, 107), (100, 145), (100, 151), (100, 156), (100, 171), (100, 176), (100, 188), (100, 190), (100, 202), (100, 213), (100, 227), (100, 229), (100, 240), (100, 257), (100, 260), (100, 269), (100, 271), (100, 273), (100, 282), (100, 284), (100, 287), (100, 288), (100, 289), (101, 114), (101, 115), (101, 118), (101, 135), (101, 161), (101, 169), (101, 177), (101, 179), (101, 182), (101, 187), (101, 195), (101, 196), (101, 205), (101, 218), (101, 258), (101, 259), (101, 270), (101, 276), (101, 278), (101, 279), (101, 280), (101, 295), (102, 115), (102, 118), (102, 121), (102, 125), (102, 126), (102, 127), (102, 128), (102, 131), (102, 132), (102, 136), (102, 137), (102, 140), (102, 141), (102, 143), (102, 144), (102, 148), (102, 149), (102, 150), (102, 153), (102, 154), (102, 157), (102, 160), (102, 161), (102, 162), (102, 163), (102, 166), (102, 172), (102, 173), (102, 179), (102, 180), (102, 181), (102, 183), (102, 184), (102, 185), (102, 187), (102, 192), (102, 196), (102, 197), (102, 198), (102, 204), (102, 205), (102, 206), (102, 210), (102, 216), (102, 218), (102, 223), (102, 224), (102, 227), (102, 232), (102, 234), (102, 236), (102, 244), (102, 251), (102, 256), (102, 261), (102, 262), (102, 264), (102, 266), (102, 267), (102, 268), (102, 271), (102, 275), (102, 279), (102, 283), (102, 285), (102, 287), (102, 288), (102, 292), (102, 293), (102, 294), (102, 296), (102, 298), (102, 299), (102, 300), (103, 104), (103, 106), (103, 108), (103, 110), (103, 111), (103, 116), (103, 117), (103, 120), (103, 122), (103, 124), (103, 128), (103, 131), (103, 133), (103, 139), (103, 140), (103, 141), (103, 143), (103, 146), (103, 148), (103, 154), (103, 155), (103, 159), (103, 162), (103, 166), (103, 167), (103, 170), (103, 172), (103, 173), (103, 174), (103, 175), (103, 181), (103, 186), (103, 189), (103, 193), (103, 194), (103, 199), (103, 201), (103, 206), (103, 210), (103, 211), (103, 212), (103, 216), (103, 219), (103, 222), (103, 223), (103, 226), (103, 228), (103, 231), (103, 232), (103, 234), (103, 237), (103, 239), (103, 242), (103, 243), (103, 245), (103, 250), (103, 251), (103, 252), (103, 253), (103, 262), (103, 265), (103, 267), (103, 272), (103, 274), (103, 281), (103, 283), (103, 286), (103, 292), (103, 293), (103, 294), (103, 297), (103, 298), (104, 106), (104, 108), (104, 110), (104, 111), (104, 113), (104, 116), (104, 117), (104, 119), (104, 120), (104, 124), (104, 131), (104, 133), (104, 139), (104, 141), (104, 142), (104, 143), (104, 146), (104, 154), (104, 164), (104, 166), (104, 167), (104, 170), (104, 174), (104, 175), (104, 178), (104, 181), (104, 186), (104, 189), (104, 193), (104, 194), (104, 199), (104, 201), (104, 206), (104, 210), (104, 211), (104, 212), (104, 216), (104, 219), (104, 222), (104, 223), (104, 226), (104, 228), (104, 231), (104, 232), (104, 234), (104, 237), (104, 238), (104, 239), (104, 242), (104, 243), (104, 245), (104, 250), (104, 251), (104, 252), (104, 253), (104, 262), (104, 272), (104, 274), (104, 277), (104, 281), (104, 286), (104, 292), (104, 297), (105, 112), (105, 114), (105, 115), (105, 118), (105, 122), (105, 123), (105, 124), (105, 125), (105, 130), (105, 131), (105, 140), (105, 159), (105, 161), (105, 162), (105, 166), (105, 167), (105, 172), (105, 173), (105, 177), (105, 182), (105, 189), (105, 196), (105, 203), (105, 204), (105, 205), (105, 206), (105, 210), (105, 216), (105, 219), (105, 223), (105, 224), (105, 225), (105, 235), (105, 242), (105, 243), (105, 247), (105, 252), (105, 263), (105, 264), (105, 265), (105, 267), (105, 270), (105, 279), (105, 283), (105, 293), (105, 294), (105, 297), (105, 298), (105, 300), (106, 108), (106, 110), (106, 111), (106, 113), (106, 116), (106, 117), (106, 119), (106, 120), (106, 124), (106, 129), (106, 131), (106, 133), (106, 139), (106, 141), (106, 142), (106, 143), (106, 146), (106, 154), (106, 164), (106, 166), (106, 168), (106, 170), (106, 174), (106, 175), (106, 178), (106, 181), (106, 186), (106, 191), (106, 193), (106, 194), (106, 199), (106, 200), (106, 201), (106, 211), (106, 212), (106, 219), (106, 220), (106, 222), (106, 226), (106, 228), (106, 231), (106, 232), (106, 234), (106, 237), (106, 238), (106, 239), (106, 245), (106, 250), (106, 251), (106, 253), (106, 262), (106, 272), (106, 274), (106, 277), (106, 281), (106, 286), (106, 292), (107, 127), (107, 145), (107, 151), (107, 153), (107, 156), (107, 171), (107, 176), (107, 184), (107, 188), (107, 190), (107, 202), (107, 227), (107, 229), (107, 240), (107, 257), (107, 260), (107, 261), (107, 269), (107, 271), (107, 273), (107, 282), (107, 287), (107, 288), (108, 109), (108, 111), (108, 113), (108, 119), (108, 120), (108, 129), (108, 133), (108, 138), (108, 141), (108, 142), (108, 143), (108, 146), (108, 147), (108, 148), (108, 152), (108, 154), (108, 157), (108, 158), (108, 164), (108, 165), (108, 166), (108, 168), (108, 170), (108, 174), (108, 178), (108, 181), (108, 186), (108, 191), (108, 199), (108, 200), (108, 201), (108, 207), (108, 208), (108, 209), (108, 212), (108, 214), (108, 215), (108, 217), (108, 220), (108, 221), (108, 222), (108, 226), (108, 232), (108, 234), (108, 237), (108, 238), (108, 239), (108, 241), (108, 244), (108, 245), (108, 246), (108, 249), (108, 250), (108, 251), (108, 253), (108, 255), (108, 262), (108, 274), (108, 275), (108, 277), (108, 281), (108, 286), (108, 290), (108, 291), (108, 292), (109, 113), (109, 119), (109, 120), (109, 129), (109, 138), (109, 142), (109, 147), (109, 152), (109, 158), (109, 164), (109, 165), (109, 168), (109, 170), (109, 174), (109, 178), (109, 191), (109, 200), (109, 201), (109, 207), (109, 208), (109, 209), (109, 212), (109, 213), (109, 214), (109, 215), (109, 217), (109, 220), (109, 221), (109, 222), (109, 226), (109, 239), (109, 241), (109, 245), (109, 246), (109, 248), (109, 255), (109, 277), (109, 290), (109, 291), (110, 116), (110, 117), (110, 122), (110, 124), (110, 133), (110, 134), (110, 139), (110, 155), (110, 159), (110, 166), (110, 167), (110, 175), (110, 189), (110, 193), (110, 194), (110, 203), (110, 211), (110, 219), (110, 228), (110, 231), (110, 242), (110, 243), (110, 250), (110, 252), (110, 253), (110, 254), (110, 265), (110, 272), (110, 274), (110, 297), (111, 113), (111, 117), (111, 119), (111, 120), (111, 129), (111, 133), (111, 141), (111, 142), (111, 143), (111, 146), (111, 152), (111, 158), (111, 164), (111, 168), (111, 170), (111, 174), (111, 175), (111, 178), (111, 186), (111, 191), (111, 193), (111, 194), (111, 199), (111, 200), (111, 201), (111, 211), (111, 212), (111, 214), (111, 215), (111, 220), (111, 222), (111, 226), (111, 228), (111, 231), (111, 232), (111, 234), (111, 237), (111, 238), (111, 239), (111, 245), (111, 246), (111, 250), (111, 253), (111, 255), (111, 262), (111, 272), (111, 274), (111, 277), (111, 281), (111, 286), (112, 115), (112, 122), (112, 123), (112, 125), (112, 130), (112, 131), (112, 159), (112, 162), (112, 167), (112, 173), (112, 177), (112, 182), (112, 189), (112, 196), (112, 203), (112, 204), (112, 206), (112, 210), (112, 219), (112, 223), (112, 225), (112, 235), (112, 242), (112, 243), (112, 247), (112, 252), (112, 263), (112, 264), (112, 265), (112, 267), (112, 283), (112, 294), (112, 297), (112, 298), (113, 117), (113, 119), (113, 120), (113, 129), (113, 133), (113, 142), (113, 146), (113, 152), (113, 158), (113, 164), (113, 168), (113, 170), (113, 174), (113, 178), (113, 186), (113, 191), (113, 193), (113, 199), (113, 200), (113, 201), (113, 209), (113, 212), (113, 214), (113, 215), (113, 220), (113, 222), (113, 226), (113, 231), (113, 237), (113, 238), (113, 239), (113, 245), (113, 246), (113, 248), (113, 250), (113, 253), (113, 255), (113, 272), (113, 277), (113, 281), (113, 286), (113, 291), (114, 115), (114, 118), (114, 121), (114, 125), (114, 135), (114, 150), (114, 161), (114, 163), (114, 169), (114, 177), (114, 179), (114, 182), (114, 185), (114, 187), (114, 195), (114, 196), (114, 204), (114, 205), (114, 218), (114, 224), (114, 225), (114, 230), (114, 233), (114, 235), (114, 247), (114, 258), (114, 259), (114, 264), (114, 267), (114, 270), (114, 276), (114, 278), (114, 279), (114, 280), (114, 283), (114, 295), (114, 299), (115, 118), (115, 121), (115, 125), (115, 128), (115, 130), (115, 132), (115, 135), (115, 136), (115, 140), (115, 150), (115, 160), (115, 161), (115, 162), (115, 163), (115, 169), (115, 172), (115, 173), (115, 177), (115, 179), (115, 180), (115, 182), (115, 185), (115, 187), (115, 192), (115, 195), (115, 196), (115, 204), (115, 205), (115, 206), (115, 210), (115, 216), (115, 218), (115, 223), (115, 224), (115, 225), (115, 230), (115, 233), (115, 235), (115, 236), (115, 247), (115, 258), (115, 259), (115, 264), (115, 267), (115, 270), (115, 276), (115, 278), (115, 279), (115, 280), (115, 283), (115, 293), (115, 294), (115, 295), (115, 298), (115, 299), (115, 300), (116, 117), (116, 122), (116, 123), (116, 124), (116, 131), (116, 133), (116, 134), (116, 139), (116, 141), (116, 143), (116, 146), (116, 154), (116, 155), (116, 159), (116, 166), (116, 167), (116, 173), (116, 175), (116, 186), (116, 189), (116, 193), (116, 194), (116, 199), (116, 203), (116, 206), (116, 210), (116, 211), (116, 219), (116, 223), (116, 228), (116, 231), (116, 232), (116, 234), (116, 242), (116, 243), (116, 250), (116, 252), (116, 253), (116, 254), (116, 262), (116, 265), (116, 272), (116, 274), (116, 281), (116, 286), (116, 297), (116, 298), (117, 120), (117, 124), (117, 133), (117, 139), (117, 141), (117, 143), (117, 146), (117, 155), (117, 159), (117, 166), (117, 167), (117, 170), (117, 175), (117, 186), (117, 193), (117, 194), (117, 199), (117, 201), (117, 211), (117, 212), (117, 219), (117, 228), (117, 231), (117, 232), (117, 234), (117, 237), (117, 238), (117, 239), (117, 242), (117, 243), (117, 250), (117, 252), (117, 253), (117, 254), (117, 262), (117, 272), (117, 274), (117, 281), (117, 286), (117, 297), (118, 121), (118, 125), (118, 132), (118, 135), (118, 136), (118, 140), (118, 149), (118, 150), (118, 160), (118, 161), (118, 162), (118, 163), (118, 169), (118, 172), (118, 177), (118, 179), (118, 180), (118, 182), (118, 183), (118, 185), (118, 187), (118, 192), (118, 195), (118, 196), (118, 204), (118, 205), (118, 218), (118, 224), (118, 225), (118, 230), (118, 233), (118, 235), (118, 236), (118, 247), (118, 256), (118, 258), (118, 259), (118, 264), (118, 267), (118, 270), (118, 276), (118, 278), (118, 279), (118, 280), (118, 283), (118, 293), (118, 294), (118, 295), (118, 299), (118, 300), (119, 120), (119, 129), (119, 133), (119, 138), (119, 141), (119, 142), (119, 143), (119, 146), (119, 147), (119, 152), (119, 158), (119, 164), (119, 165), (119, 168), (119, 170), (119, 174), (119, 178), (119, 186), (119, 191), (119, 199), (119, 200), (119, 201), (119, 207), (119, 208), (119, 209), (119, 212), (119, 214), (119, 215), (119, 220), (119, 221), (119, 222), (119, 226), (119, 232), (119, 234), (119, 237), (119, 238), (119, 239), (119, 241), (119, 245), (119, 246), (119, 248), (119, 250), (119, 253), (119, 255), (119, 277), (119, 281), (119, 286), (119, 290), (119, 291), (119, 292), (120, 129), (120, 133), (120, 141), (120, 142), (120, 143), (120, 146), (120, 147), (120, 152), (120, 158), (120, 164), (120, 168), (120, 170), (120, 174), (120, 178), (120, 186), (120, 191), (120, 199), (120, 200), (120, 201), (120, 207), (120, 208), (120, 209), (120, 212), (120, 214), (120, 215), (120, 220), (120, 222), (120, 226), (120, 231), (120, 234), (120, 237), (120, 238), (120, 239), (120, 245), (120, 246), (120, 248), (120, 250), (120, 253), (120, 255), (120, 262), (120, 272), (120, 274), (120, 277), (120, 281), (120, 286), (120, 290), (120, 291), (120, 292), (121, 125), (121, 126), (121, 127), (121, 128), (121, 132), (121, 135), (121, 136), (121, 137), (121, 140), (121, 144), (121, 148), (121, 149), (121, 150), (121, 153), (121, 157), (121, 160), (121, 161), (121, 162), (121, 163), (121, 169), (121, 172), (121, 179), (121, 180), (121, 181), (121, 182), (121, 183), (121, 184), (121, 185), (121, 187), (121, 192), (121, 196), (121, 197), (121, 198), (121, 204), (121, 205), (121, 216), (121, 218), (121, 224), (121, 227), (121, 230), (121, 233), (121, 236), (121, 244), (121, 256), (121, 258), (121, 259), (121, 261), (121, 264), (121, 266), (121, 268), (121, 269), (121, 270), (121, 276), (121, 279), (121, 280), (121, 282), (121, 285), (121, 293), (121, 294), (121, 296), (121, 299), (121, 300), (122, 123), (122, 124), (122, 125), (122, 130), (122, 131), (122, 134), (122, 139), (122, 140), (122, 155), (122, 159), (122, 162), (122, 166), (122, 167), (122, 172), (122, 173), (122, 175), (122, 181), (122, 182), (122, 189), (122, 194), (122, 196), (122, 203), (122, 204), (122, 206), (122, 210), (122, 211), (122, 216), (122, 219), (122, 223), (122, 225), (122, 232), (122, 234), (122, 235), (122, 242), (122, 243), (122, 247), (122, 251), (122, 252), (122, 254), (122, 262), (122, 263), (122, 264), (122, 265), (122, 267), (122, 274), (122, 283), (122, 293), (122, 294), (122, 297), (122, 298), (122, 300), (123, 124), (123, 125), (123, 130), (123, 131), (123, 134), (123, 159), (123, 167), (123, 173), (123, 175), (123, 182), (123, 189), (123, 196), (123, 203), (123, 204), (123, 206), (123, 210), (123, 219), (123, 223), (123, 225), (123, 235), (123, 242), (123, 243), (123, 247), (123, 252), (123, 263), (123, 264), (123, 265), (123, 267), (123, 283), (123, 294), (123, 297), (123, 298), (124, 130), (124, 131), (124, 133), (124, 134), (124, 139), (124, 140), (124, 141), (124, 143), (124, 154), (124, 155), (124, 159), (124, 162), (124, 166), (124, 167), (124, 170), (124, 172), (124, 173), (124, 175), (124, 181), (124, 186), (124, 189), (124, 193), (124, 194), (124, 199), (124, 203), (124, 206), (124, 210), (124, 211), (124, 216), (124, 219), (124, 223), (124, 228), (124, 231), (124, 232), (124, 234), (124, 242), (124, 243), (124, 250), (124, 251), (124, 252), (124, 253), (124, 254), (124, 262), (124, 265), (124, 267), (124, 272), (124, 274), (124, 281), (124, 283), (124, 286), (124, 293), (124, 294), (124, 297), (124, 298), (125, 128), (125, 130), (125, 131), (125, 136), (125, 140), (125, 148), (125, 150), (125, 160), (125, 161), (125, 162), (125, 166), (125, 172), (125, 173), (125, 177), (125, 179), (125, 181), (125, 182), (125, 187), (125, 189), (125, 192), (125, 195), (125, 196), (125, 204), (125, 205), (125, 206), (125, 210), (125, 216), (125, 219), (125, 223), (125, 224), (125, 225), (125, 235), (125, 242), (125, 243), (125, 247), (125, 251), (125, 252), (125, 263), (125, 264), (125, 265), (125, 267), (125, 270), (125, 279), (125, 283), (125, 293), (125, 294), (125, 296), (125, 298), (125, 299), (125, 300), (126, 127), (126, 128), (126, 132), (126, 136), (126, 137), (126, 140), (126, 144), (126, 145), (126, 148), (126, 149), (126, 150), (126, 153), (126, 156), (126, 157), (126, 160), (126, 162), (126, 163), (126, 171), (126, 172), (126, 176), (126, 179), (126, 180), (126, 181), (126, 183), (126, 184), (126, 185), (126, 187), (126, 190), (126, 192), (126, 197), (126, 198), (126, 202), (126, 216), (126, 218), (126, 224), (126, 227), (126, 230), (126, 233), (126, 236), (126, 240), (126, 244), (126, 249), (126, 251), (126, 256), (126, 257), (126, 261), (126, 266), (126, 268), (126, 269), (126, 271), (126, 273), (126, 275), (126, 279), (126, 282), (126, 285), (126, 287), (126, 288), (126, 289), (126, 292), (126, 293), (126, 296), (126, 299), (126, 300), (127, 128), (127, 132), (127, 136), (127, 137), (127, 140), (127, 144), (127, 145), (127, 148), (127, 149), (127, 150), (127, 151), (127, 153), (127, 156), (127, 157), (127, 160), (127, 163), (127, 171), (127, 172), (127, 176), (127, 180), (127, 181), (127, 183), (127, 184), (127, 185), (127, 190), (127, 192), (127, 197), (127, 198), (127, 202), (127, 213), (127, 224), (127, 227), (127, 229), (127, 236), (127, 240), (127, 241), (127, 244), (127, 249), (127, 251), (127, 256), (127, 257), (127, 261), (127, 266), (127, 268), (127, 269), (127, 271), (127, 273), (127, 275), (127, 282), (127, 284), (127, 285), (127, 287), (127, 288), (127, 289), (127, 292), (127, 293), (127, 296), (127, 299), (127, 300), (128, 130), (128, 131), (128, 136), (128, 137), (128, 140), (128, 141), (128, 143), (128, 144), (128, 148), (128, 149), (128, 150), (128, 153), (128, 154), (128, 157), (128, 160), (128, 162), (128, 163), (128, 166), (128, 170), (128, 172), (128, 173), (128, 174), (128, 175), (128, 179), (128, 180), (128, 181), (128, 183), (128, 184), (128, 186), (128, 187), (128, 189), (128, 192), (128, 196), (128, 197), (128, 198), (128, 199), (128, 204), (128, 205), (128, 206), (128, 210), (128, 216), (128, 223), (128, 224), (128, 232), (128, 234), (128, 244), (128, 251), (128, 262), (128, 264)] 


function forces(coords, neighbors)
    fs_chunks = [zero(coords) for _ in 1:1]
    forces!(fs_chunks, coords, neighbors)
    return sum(fs_chunks)
end

println(forces(coords, neighbors))
println("Got here")

fs_chunks = [zero(coords) for _ in 1:1]
d_fs = rand(SVector{3, T}, length(coords))
d_fs_chunks = Enzyme.make_zero(fs_chunks)
d_coords = zero(coords)

grads = autodiff(
    Enzyme.Reverse,
    forces!,
    Const,
    Duplicated(fs_chunks, d_fs_chunks),
    Duplicated(coords, d_coords),
    Const(neighbors),
)[1]

@wsmoses
Copy link
Member

wsmoses commented Jun 15, 2024

wmoses@beast:~/git/Enzyme.jl ((HEAD detached at origin/main)) $ ./julia-1.10.2/bin/julia --project seg.jl 
SVector{2, Float64}[[1.404295834437917, 0.21404066572633343], [0.8779277837617114, 1.0454624347950523], [1.7273636168162154, 1.6818707095503487], [0.2426612402767434, 1.1613953346407473], [0.46339377466033926, 1.2357858173372565], [1.25408992902625, 0.9005301720083675], [0.6513454192007485, 0.5833647992025633], [0.20999751602725072, 0.15506291021472318], [0.6487914227614802, 0.5621399252961756], [1.2622659203434483, 0.5958290637423915], [1.5883042259503128, 0.5928173083687526], [0.06965080769177372, 1.2114800148120903], [1.6831996004887275, 1.3417919846228794], [0.18062621649617283, 0.8792849985111849], [1.152018591928785, 0.7851087738342812], [0.10391992960268397, 1.309918517717445], [1.5859423453895873, 0.34413327534680854], [1.182764142707581, 1.444835836318525], [0.12404194696341321, 1.241224662981113], [1.4130616589372773, 0.555539206836148], [0.26182239438520605, 1.738741337793375], [1.7769795014776428, 1.7792124920059293], [0.3637194659759385, 1.1282264016094083], [0.5117994279803277, 0.21793523991313232], [0.4353978444240278, 0.3863139681354877], [0.09480070215643217, 1.0182902598196644], [1.2877267437653814, 0.8259340650353806], [1.2484684168029103, 0.6641364292990313], [1.2627925028614304, 0.9707397897796209], [0.889635287955015, 1.7234927780341118], [1.2977938319041897, 0.5145734851111441], [0.8949283152215648, 1.2023008144056666], [1.0831749313815724, 1.5289987429881597], [0.12899097052797598, 1.5644422252078296], [0.2576308295841625, 0.15000955174960146], [1.7402420592246612, 0.11214137772352482], [1.5895392457694524, 0.02145013370489415], [0.3865198766818911, 0.3274623974264575], [1.0148200394049536, 0.10584383564822986], [1.5398345739208443, 1.0761182044895645], [0.3996649071346099, 1.5776469217918851], [0.3423756512471114, 1.2531800106174626], [0.01997630822983281, 1.3692668311485199], [1.1464327911014072, 0.02773971089020117], [1.0431412523530958, 0.7724503041878797], [0.6095736637453358, 1.733502473841776], [0.025937107584403853, 1.6419115182877395], [0.826919961716819, 1.7070924872741517], [0.47784057413884456, 1.579676079554341], [0.8223204044528104, 1.5639433463265666], [0.49097787022604766, 1.106087971492349], [0.39801294550733046, 0.5914413552107174], [0.9413353549982155, 1.5798103658828282], [0.5637985579190015, 0.6232404839732315], [1.559714392374495, 0.8233843095431324], [0.9691808960139354, 1.6209513400208935], [1.0054221382811888, 0.4530634945678375], [0.2872758192071563, 0.7727759742694322], [1.2009825442722004, 1.7556436249376601], [0.7601072203496144, 0.5513099162598067], [1.2610620204695355, 1.590314775531313], [1.3895462562268395, 0.7564405234834124], [1.4121503483037845, 1.0023014462423314], [0.13069715823741984, 1.10785696533035], [1.73355099536568, 1.763579476378048], [0.9749262513539984, 0.6979400375741193], [1.2185365262528514, 0.3364924542535551], [1.5815343331190705, 0.4469443289693233], [0.7826938891252997, 0.9432637954745993], [1.0865292907088528, 0.5881020566248564], [1.3757453698042137, 0.06520611526160082], [1.1423162330441259, 0.6147781492445821], [0.7411136608038783, 1.7575765229608882], [0.6594331286500578, 0.3660934904992748], [0.3282465770296113, 1.346813101670227], [0.3027643579639946, 1.4591726269496805], [0.7968257662979432, 0.9494501618127393], [1.3009459723268586, 0.8372129417179767], [1.0125370500857462, 0.03656880331028582], [0.3779211948225701, 1.2025904961878071], [1.766291836120819, 0.27738660741379845], [1.6469028972064197, 1.2656960269339215], [0.5735410830748242, 0.17534877878612298], [0.731169635426155, 1.7040319934505945], [0.25828611362185633, 0.07506596203931659], [1.6665349096325919, 0.9029321225028296], [1.3444532706795866, 1.380261697379216], [0.4459199132694972, 0.43211547321852173], [0.37442869274898555, 1.4262142899411532], [1.0232987693874793, 1.4087468460686272], [0.31668186260952075, 0.5845008381861477], [1.167092180517337, 0.5601870744563362], [0.21898321910267893, 1.602457631455625], [1.233880071679276, 0.6504632308585374], [0.18282735318390725, 0.4270559080705189], [0.008243889841963462, 1.4723387049973415], [1.5879599342708999, 0.005754951258914225], [0.2828410631866631, 1.1199959407442044], [0.024891767619691432, 0.12390316772525221], [0.6145479339127112, 0.5543206037149438], [0.34688054980346267, 1.3482954876344397], [0.847553941074071, 1.1527019238108327], [0.284811557605246, 1.4683552789657262], [0.6089516093326899, 0.592439988911316], [1.6179065059723505, 1.6963666777929693], [1.7687082330368151, 0.2946748909081459], [0.9621005964489123, 0.5583784096118863], [1.4562414568893314, 1.7413772760319637], [1.0149724991810658, 0.25003621846688606], [0.4437690426230754, 0.32809045620213545], [0.2569910500968401, 1.2932277058436479], [1.1273412339115703, 1.0740363562156081], [1.0653910119548715, 0.3531839661124091], [0.0076061020445365585, 0.9113942258760652], [0.22301261479066828, 1.1630492776669121], [0.3706886466340152, 1.513145060893468], [0.42608348854686207, 0.5014591618311655], [0.20782964724205993, 0.8428934761899827], [0.9142791156998118, 0.14420497883374575], [1.341920350959172, 0.8558521707504686], [0.14067660680841584, 0.8447972602381615], [1.4303388913221007, 0.9162184959307862], [1.1986683659359587, 0.3932548063889188], [0.7480953266453253, 1.4918112979628693], [0.8958287819855396, 1.3226671555784892], [0.9241153608255978, 1.0424699670801865], [1.5642589421031374, 1.3563193603962722], [0.8577476596242523, 0.988785151783181], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0]]
Got here
after simplification :
; Function Attrs: mustprogress willreturn
define void @preprocess_julia_forces__1630({} addrspace(10)* nocapture noundef nonnull readonly align 16 dereferenceable(40) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,0]:Pointer, [-1,0,0,0,-1]:Float@double, [-1,0,0,8]:Integer, [-1,0,0,9]:Integer, [-1,0,0,10]:Integer, [-1,0,0,11]:Integer, [-1,0,0,12]:Integer, [-1,0,0,13]:Integer, [-1,0,0,14]:Integer, [-1,0,0,15]:Integer, [-1,0,0,16]:Integer, [-1,0,0,17]:Integer, [-1,0,0,18]:Integer, [-1,0,0,19]:Integer, [-1,0,0,20]:Integer, [-1,0,0,21]:Integer, [-1,0,0,22]:Integer, [-1,0,0,23]:Integer, [-1,0,0,24]:Integer, [-1,0,0,25]:Integer, [-1,0,0,26]:Integer, [-1,0,0,27]:Integer, [-1,0,0,28]:Integer, [-1,0,0,29]:Integer, [-1,0,0,30]:Integer, [-1,0,0,31]:Integer, [-1,0,0,32]:Integer, [-1,0,0,33]:Integer, [-1,0,0,34]:Integer, [-1,0,0,35]:Integer, [-1,0,0,36]:Integer, [-1,0,0,37]:Integer, [-1,0,0,38]:Integer, [-1,0,0,39]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}" "enzymejl_parmtype"="140539475762896" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* nocapture noundef nonnull readonly align 16 dereferenceable(40) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}" "enzymejl_parmtype"="140539446487696" "enzymejl_parmtype_ref"="2" %1, {} addrspace(10)* nocapture noundef nonnull readonly align 16 dereferenceable(40) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}" "enzymejl_parmtype"="140539253517680" "enzymejl_parmtype_ref"="2" %2) local_unnamed_addr #6 !dbg !92 {
top:
  %3 = call {}*** @julia.get_pgcstack() #7
  %ptls_field34 = getelementptr inbounds {}**, {}*** %3, i64 2
  %4 = bitcast {}*** %ptls_field34 to i64***
  %ptls_load3536 = load i64**, i64*** %4, align 8, !tbaa !8
  %5 = getelementptr inbounds i64*, i64** %ptls_load3536, i64 2
  %safepoint = load i64*, i64** %5, align 8, !tbaa !12
  fence syncscope("singlethread") seq_cst
  call void @julia.safepoint(i64* %safepoint) #7, !dbg !93
  fence syncscope("singlethread") seq_cst
  %6 = addrspacecast {} addrspace(10)* %2 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !94
  %arraylen_ptr = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %6, i64 0, i32 1, !dbg !94
  %arraylen = load i64, i64 addrspace(11)* %arraylen_ptr, align 8, !dbg !94, !tbaa !19, !range !22, !alias.scope !23, !noalias !26
  %.not = icmp eq i64 %arraylen, 0, !dbg !96
  br i1 %.not, label %L65, label %top.L18_crit_edge, !dbg !95

top.L18_crit_edge:                                ; preds = %top
  %7 = addrspacecast {} addrspace(10)* %2 to [2 x i64] addrspace(13)* addrspace(11)*, !dbg !100
  %arrayptr.pre37 = load [2 x i64] addrspace(13)*, [2 x i64] addrspace(13)* addrspace(11)* %7, align 16, !dbg !100, !tbaa !45, !alias.scope !102, !noalias !26
  %8 = addrspacecast {} addrspace(10)* %1 to [1 x [2 x double]] addrspace(13)* addrspace(11)*, !dbg !105
  %arrayptr8.pre38 = load [1 x [2 x double]] addrspace(13)*, [1 x [2 x double]] addrspace(13)* addrspace(11)* %8, align 16, !dbg !105, !tbaa !45, !alias.scope !102, !noalias !26
  %9 = addrspacecast {} addrspace(10)* %0 to {} addrspace(10)* addrspace(13)* addrspace(11)*
  %arrayptr16.pre40 = load {} addrspace(10)* addrspace(13)*, {} addrspace(10)* addrspace(13)* addrspace(11)* %9, align 16
  br label %L18, !dbg !95

L18:                                              ; preds = %L54, %top.L18_crit_edge
  %iv = phi i64 [ %iv.next, %L54 ], [ 0, %top.L18_crit_edge ]
  %iv.next = add nuw nsw i64 %iv, 1, !dbg !100
  %10 = add nsw i64 %iv.next, -1, !dbg !100
  %arrayref.sroa.0.0..sroa_idx = getelementptr inbounds [2 x i64], [2 x i64] addrspace(13)* %arrayptr.pre37, i64 %10, i64 0, !dbg !100
  %arrayref.sroa.0.0.copyload = load i64, i64 addrspace(13)* %arrayref.sroa.0.0..sroa_idx, align 1, !dbg !100, !tbaa !52, !alias.scope !53, !noalias !107
  %arrayref.sroa.3.0..sroa_idx28 = getelementptr inbounds [2 x i64], [2 x i64] addrspace(13)* %arrayptr.pre37, i64 %10, i64 1, !dbg !100
  %arrayref.sroa.3.0.copyload = load i64, i64 addrspace(13)* %arrayref.sroa.3.0..sroa_idx28, align 1, !dbg !100, !tbaa !52, !alias.scope !53, !noalias !107
  %11 = add i64 %arrayref.sroa.0.0.copyload, -1, !dbg !105
  %12 = getelementptr inbounds [1 x [2 x double]], [1 x [2 x double]] addrspace(13)* %arrayptr8.pre38, i64 %11, !dbg !105
  %arrayref9.sroa.0.0..sroa_cast = bitcast [1 x [2 x double]] addrspace(13)* %12 to i8 addrspace(13)*, !dbg !105
  %13 = bitcast i8 addrspace(13)* %arrayref9.sroa.0.0..sroa_cast to [2 x double] addrspace(13)*, !dbg !105
  %14 = load [2 x double], [2 x double] addrspace(13)* %13, align 8, !dbg !105
  %.fca.0.extract = extractvalue [2 x double] %14, 0, !dbg !105
  %.fca.1.extract = extractvalue [2 x double] %14, 1, !dbg !105
  %15 = add i64 %arrayref.sroa.3.0.copyload, 1, !dbg !108
  %16 = icmp sgt i64 %15, 258, !dbg !110
  %value_phi11 = select i1 %16, i64 %arrayref.sroa.3.0.copyload, i64 258, !dbg !112
  %.not39 = icmp slt i64 %value_phi11, %15, !dbg !115
  br i1 %.not39, label %L54, label %L41.preheader, !dbg !109

L41.preheader:                                    ; preds = %L18
  br label %L41, !dbg !119

L41:                                              ; preds = %L41.preheader, %pass
  %iv2 = phi i64 [ 0, %L41.preheader ], [ %iv.next3, %pass ]
  %17 = add i64 %15, %iv2, !dbg !119
  %iv.next3 = add nuw nsw i64 %iv2, 1, !dbg !119
  %arrayref17 = load {} addrspace(10)*, {} addrspace(10)* addrspace(13)* %arrayptr16.pre40, align 8, !dbg !119, !tbaa !74, !alias.scope !77, !noalias !78
  %.not41 = icmp eq {} addrspace(10)* %arrayref17, null, !dbg !119
  br i1 %.not41, label %fail, label %pass, !dbg !119

L54.loopexit:                                     ; preds = %pass
  br label %L54, !dbg !121

L54:                                              ; preds = %L54.loopexit, %L18
  %.not44 = icmp eq i64 %iv.next, %arraylen, !dbg !121
  %18 = add nuw nsw i64 %iv.next, 1, !dbg !122
  br i1 %.not44, label %L65.loopexit, label %L18, !dbg !123

L65.loopexit:                                     ; preds = %L54
  br label %L65, !dbg !124

L65:                                              ; preds = %L65.loopexit, %top
  ret void, !dbg !124

fail:                                             ; preds = %L41
  call void @ijl_throw({} addrspace(12)* noundef addrspacecast ({}* inttoptr (i64 140539323922912 to {}*) to {} addrspace(12)*)) #8, !dbg !119
  unreachable, !dbg !119

pass:                                             ; preds = %L41
  %19 = addrspacecast {} addrspace(10)* %arrayref17 to [1 x [2 x double]] addrspace(13)* addrspace(11)*, !dbg !125
  %arrayptr2042 = load [1 x [2 x double]] addrspace(13)*, [1 x [2 x double]] addrspace(13)* addrspace(11)* %19, align 8, !dbg !125, !tbaa !45, !alias.scope !102, !noalias !26, !nonnull !7
  %20 = getelementptr inbounds [1 x [2 x double]], [1 x [2 x double]] addrspace(13)* %arrayptr2042, i64 %11, !dbg !125
  %arrayref9.sroa.0.sroa.0.0.arrayref9.sroa.0.0..sroa_cast26.sroa_idx = getelementptr inbounds [1 x [2 x double]], [1 x [2 x double]] addrspace(13)* %20, i64 0, i64 0, i64 0, !dbg !125
  store double %.fca.0.extract, double addrspace(13)* %arrayref9.sroa.0.sroa.0.0.arrayref9.sroa.0.0..sroa_cast26.sroa_idx, align 8, !dbg !125, !tbaa !52, !alias.scope !88, !noalias !107
  %arrayref9.sroa.0.sroa.3.0.arrayref9.sroa.0.0..sroa_cast26.sroa_idx1 = getelementptr inbounds [1 x [2 x double]], [1 x [2 x double]] addrspace(13)* %20, i64 0, i64 0, i64 1, !dbg !125
  store double %.fca.1.extract, double addrspace(13)* %arrayref9.sroa.0.sroa.3.0.arrayref9.sroa.0.0..sroa_cast26.sroa_idx1, align 8, !dbg !125, !tbaa !52, !alias.scope !88, !noalias !107
  %.not43 = icmp eq i64 %17, %value_phi11, !dbg !126
  %21 = add i64 %17, 1, !dbg !127
  br i1 %.not43, label %L54.loopexit, label %L41, !dbg !128
}

; Function Attrs: mustprogress willreturn
define internal void @diffejulia_forces__1630({} addrspace(10)* nocapture noundef nonnull readonly align 16 dereferenceable(40) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,0]:Pointer, [-1,0,0,0,-1]:Float@double, [-1,0,0,8]:Integer, [-1,0,0,9]:Integer, [-1,0,0,10]:Integer, [-1,0,0,11]:Integer, [-1,0,0,12]:Integer, [-1,0,0,13]:Integer, [-1,0,0,14]:Integer, [-1,0,0,15]:Integer, [-1,0,0,16]:Integer, [-1,0,0,17]:Integer, [-1,0,0,18]:Integer, [-1,0,0,19]:Integer, [-1,0,0,20]:Integer, [-1,0,0,21]:Integer, [-1,0,0,22]:Integer, [-1,0,0,23]:Integer, [-1,0,0,24]:Integer, [-1,0,0,25]:Integer, [-1,0,0,26]:Integer, [-1,0,0,27]:Integer, [-1,0,0,28]:Integer, [-1,0,0,29]:Integer, [-1,0,0,30]:Integer, [-1,0,0,31]:Integer, [-1,0,0,32]:Integer, [-1,0,0,33]:Integer, [-1,0,0,34]:Integer, [-1,0,0,35]:Integer, [-1,0,0,36]:Integer, [-1,0,0,37]:Integer, [-1,0,0,38]:Integer, [-1,0,0,39]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}" "enzymejl_parmtype"="140539475762896" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* nocapture align 16 "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,0]:Pointer, [-1,0,0,0,-1]:Float@double, [-1,0,0,8]:Integer, [-1,0,0,9]:Integer, [-1,0,0,10]:Integer, [-1,0,0,11]:Integer, [-1,0,0,12]:Integer, [-1,0,0,13]:Integer, [-1,0,0,14]:Integer, [-1,0,0,15]:Integer, [-1,0,0,16]:Integer, [-1,0,0,17]:Integer, [-1,0,0,18]:Integer, [-1,0,0,19]:Integer, [-1,0,0,20]:Integer, [-1,0,0,21]:Integer, [-1,0,0,22]:Integer, [-1,0,0,23]:Integer, [-1,0,0,24]:Integer, [-1,0,0,25]:Integer, [-1,0,0,26]:Integer, [-1,0,0,27]:Integer, [-1,0,0,28]:Integer, [-1,0,0,29]:Integer, [-1,0,0,30]:Integer, [-1,0,0,31]:Integer, [-1,0,0,32]:Integer, [-1,0,0,33]:Integer, [-1,0,0,34]:Integer, [-1,0,0,35]:Integer, [-1,0,0,36]:Integer, [-1,0,0,37]:Integer, [-1,0,0,38]:Integer, [-1,0,0,39]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}" "enzymejl_parmtype"="140539475762896" "enzymejl_parmtype_ref"="2" %"'", {} addrspace(10)* nocapture noundef nonnull readonly align 16 dereferenceable(40) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}" "enzymejl_parmtype"="140539446487696" "enzymejl_parmtype_ref"="2" %1, {} addrspace(10)* nocapture align 16 "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}" "enzymejl_parmtype"="140539446487696" "enzymejl_parmtype_ref"="2" %"'1", {} addrspace(10)* nocapture noundef nonnull readonly align 16 dereferenceable(40) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}" "enzymejl_parmtype"="140539253517680" "enzymejl_parmtype_ref"="2" %2) local_unnamed_addr #6 !dbg !129 {
top:
  %"iv'ac" = alloca i64, align 8
  %"iv2'ac" = alloca i64, align 8
  %".fca.1.extract'de" = alloca double, align 8
  %3 = getelementptr double, double* %".fca.1.extract'de", i64 0
  store double 0.000000e+00, double* %3, align 8
  %"'de" = alloca [2 x double], align 8
  %4 = getelementptr [2 x double], [2 x double]* %"'de", i64 0, i32 0
  store double 0.000000e+00, double* %4, align 8
  %5 = getelementptr [2 x double], [2 x double]* %"'de", i64 0, i32 1
  store double 0.000000e+00, double* %5, align 8
  %".fca.0.extract'de" = alloca double, align 8
  %6 = getelementptr double, double* %".fca.0.extract'de", i64 0
  store double 0.000000e+00, double* %6, align 8
  %_cache = alloca i64*, align 8
  %7 = alloca <2 x double>, align 16
  %arrayref.sroa.3.0.copyload_cache = alloca i64*, align 8
  %"arrayref17'ipl_cache" = alloca {} addrspace(10)* addrspace(10)* addrspace(10)*, align 8
  %8 = call {}*** @julia.get_pgcstack()
  %9 = call {}*** @julia.get_pgcstack()
  %10 = call {}*** @julia.get_pgcstack()
  %11 = call {}*** @julia.get_pgcstack()
  %12 = call {}*** @julia.get_pgcstack()
  %13 = call {}*** @julia.get_pgcstack()
  %14 = call {}*** @julia.get_pgcstack()
  %15 = call {}*** @julia.get_pgcstack()
  %16 = call {}*** @julia.get_pgcstack() #8
  %ptls_field34 = getelementptr inbounds {}**, {}*** %16, i64 2
  %17 = bitcast {}*** %ptls_field34 to i64***
  %ptls_load3536 = load i64**, i64*** %17, align 8, !tbaa !8, !alias.scope !130, !noalias !133
  %18 = getelementptr inbounds i64*, i64** %ptls_load3536, i64 2
  %safepoint = load i64*, i64** %18, align 8, !tbaa !12, !alias.scope !135, !noalias !138
  fence syncscope("singlethread") seq_cst
  call void @julia.safepoint(i64* %safepoint) #8, !dbg !140
  fence syncscope("singlethread") seq_cst
  %19 = addrspacecast {} addrspace(10)* %2 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !141
  %arraylen_ptr = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %19, i64 0, i32 1, !dbg !141
  %arraylen = load i64, i64 addrspace(11)* %arraylen_ptr, align 8, !dbg !141, !tbaa !19, !range !22, !alias.scope !143, !noalias !146, !invariant.group !148
  %.not = icmp eq i64 %arraylen, 0, !dbg !149
  br i1 %.not, label %L65, label %top.L18_crit_edge, !dbg !142

top.L18_crit_edge:                                ; preds = %top
  %20 = addrspacecast {} addrspace(10)* %2 to [2 x i64] addrspace(13)* addrspace(11)*, !dbg !153
  %arrayptr.pre37 = load [2 x i64] addrspace(13)*, [2 x i64] addrspace(13)* addrspace(11)* %20, align 16, !dbg !153, !tbaa !45, !alias.scope !155, !noalias !146
  %"'ipc2" = addrspacecast {} addrspace(10)* %"'1" to [1 x [2 x double]] addrspace(13)* addrspace(11)*, !dbg !156
  %21 = addrspacecast {} addrspace(10)* %1 to [1 x [2 x double]] addrspace(13)* addrspace(11)*, !dbg !156
  %"arrayptr8.pre38'ipl" = load [1 x [2 x double]] addrspace(13)*, [1 x [2 x double]] addrspace(13)* addrspace(11)* %"'ipc2", align 16, !dbg !156, !tbaa !45, !alias.scope !158, !noalias !161, !invariant.group !163
  %arrayptr8.pre38 = load [1 x [2 x double]] addrspace(13)*, [1 x [2 x double]] addrspace(13)* addrspace(11)* %21, align 16, !dbg !156, !tbaa !45, !alias.scope !164, !noalias !165
  %"'ipc" = addrspacecast {} addrspace(10)* %"'" to {} addrspace(10)* addrspace(13)* addrspace(11)*
  %22 = addrspacecast {} addrspace(10)* %0 to {} addrspace(10)* addrspace(13)* addrspace(11)*
  %"arrayptr16.pre40'ipl" = load {} addrspace(10)* addrspace(13)*, {} addrspace(10)* addrspace(13)* addrspace(11)* %"'ipc", align 16, !alias.scope !166, !noalias !169
  %arrayptr16.pre40 = load {} addrspace(10)* addrspace(13)*, {} addrspace(10)* addrspace(13)* addrspace(11)* %22, align 16, !alias.scope !169, !noalias !166
  %23 = add nsw i64 %arraylen, -1, !dbg !142
  %24 = add nuw i64 %23, 1, !dbg !142
  %25 = mul nuw i64 %24, 8, !dbg !142
  %26 = call noalias nonnull i8* @malloc(i64 %25), !dbg !142, !enzyme_cache_alloc !171
  %_malloccache = bitcast i8* %26 to i64*, !dbg !142
  store i64* %_malloccache, i64** %_cache, align 8, !dbg !142, !invariant.group !173
  %27 = mul nuw i64 %24, 8, !dbg !142
  %28 = call noalias nonnull i8* @malloc(i64 %27), !dbg !142, !enzyme_cache_alloc !174
  %arrayref.sroa.3.0.copyload_malloccache = bitcast i8* %28 to i64*, !dbg !142
  store i64* %arrayref.sroa.3.0.copyload_malloccache, i64** %arrayref.sroa.3.0.copyload_cache, align 8, !dbg !142, !invariant.group !176
  %29 = mul nuw i64 %24, 8, !dbg !142
  %30 = call {} addrspace(10)* @ijl_box_int64(i64 %24), !dbg !142
  %31 = call {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32)*, {} addrspace(10)*, ...) @julia.call({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32)* @jl_f_apply_type, {} addrspace(10)* null, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140539261518000 to {}*) to {} addrspace(10)*), {} addrspace(10)* %30, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140534437788624 to {}*) to {} addrspace(10)*)), !dbg !142
  %32 = bitcast {}*** %13 to {}**, !dbg !142
  %33 = getelementptr inbounds {}*, {}** %32, i64 -14, !dbg !142
  %34 = getelementptr inbounds {}*, {}** %33, i64 16, !dbg !142
  %35 = bitcast {}** %34 to i8**, !dbg !142
  %36 = load i8*, i8** %35, align 8, !dbg !142
  %37 = call noalias nonnull {} addrspace(10)* @julia.gc_alloc_obj({}** %33, i64 %29, {} addrspace(10)* %31), !dbg !142
  %38 = bitcast {} addrspace(10)* %37 to {} addrspace(10)* addrspace(10)* addrspace(10)*, !dbg !142
  br label %loop.i, !dbg !142

loop.i:                                           ; preds = %loop.i, %top.L18_crit_edge
  %39 = phi i64 [ 0, %top.L18_crit_edge ], [ %40, %loop.i ], !dbg !142
  %40 = add i64 %39, 1, !dbg !142
  %41 = getelementptr {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)* addrspace(10)* %38, i64 %39, !dbg !142
  %42 = bitcast {} addrspace(10)* addrspace(10)* addrspace(10)* %41 to {} addrspace(10)* addrspace(10)*, !dbg !142
  store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140539479449608 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %42, align 8, !dbg !142
  %43 = icmp eq i64 %40, %24, !dbg !142
  br i1 %43, label %zeroType.2.exit, label %loop.i, !dbg !142

zeroType.2.exit:                                  ; preds = %loop.i
  %"arrayref17'ipl_malloccache" = bitcast {} addrspace(10)* %37 to {} addrspace(10)* addrspace(10)* addrspace(10)*, !dbg !142
  store {} addrspace(10)* addrspace(10)* addrspace(10)* %"arrayref17'ipl_malloccache", {} addrspace(10)* addrspace(10)* addrspace(10)** %"arrayref17'ipl_cache", align 8, !dbg !142, !invariant.group !177
  br label %L18, !dbg !142

L18:                                              ; preds = %L54, %zeroType.2.exit
  %iv = phi i64 [ %iv.next, %L54 ], [ 0, %zeroType.2.exit ]
  %iv.next = add nuw nsw i64 %iv, 1, !dbg !153
  %44 = add nsw i64 %iv.next, -1, !dbg !153
  %arrayref.sroa.0.0..sroa_idx = getelementptr inbounds [2 x i64], [2 x i64] addrspace(13)* %arrayptr.pre37, i64 %44, i64 0, !dbg !153
  %arrayref.sroa.0.0.copyload = load i64, i64 addrspace(13)* %arrayref.sroa.0.0..sroa_idx, align 1, !dbg !153, !tbaa !52, !alias.scope !178, !noalias !181
  %arrayref.sroa.3.0..sroa_idx28 = getelementptr inbounds [2 x i64], [2 x i64] addrspace(13)* %arrayptr.pre37, i64 %44, i64 1, !dbg !153
  %arrayref.sroa.3.0.copyload = load i64, i64 addrspace(13)* %arrayref.sroa.3.0..sroa_idx28, align 1, !dbg !153, !tbaa !52, !alias.scope !178, !noalias !181
  %45 = add i64 %arrayref.sroa.0.0.copyload, -1, !dbg !156
  %46 = load i64*, i64** %_cache, align 8, !dbg !156, !dereferenceable !183, !invariant.group !173
  %47 = getelementptr inbounds i64, i64* %46, i64 %iv, !dbg !156
  store i64 %45, i64* %47, align 8, !dbg !156, !invariant.group !184
  %48 = load i64*, i64** %arrayref.sroa.3.0.copyload_cache, align 8, !dbg !156, !dereferenceable !183, !invariant.group !176
  %49 = getelementptr inbounds i64, i64* %48, i64 %iv, !dbg !156
  store i64 %arrayref.sroa.3.0.copyload, i64* %49, align 8, !dbg !156, !tbaa !52, !invariant.group !185
  %"'ipg" = getelementptr inbounds [1 x [2 x double]], [1 x [2 x double]] addrspace(13)* %"arrayptr8.pre38'ipl", i64 %45, !dbg !156
  %50 = getelementptr inbounds [1 x [2 x double]], [1 x [2 x double]] addrspace(13)* %arrayptr8.pre38, i64 %45, !dbg !156
  %"arrayref9.sroa.0.0..sroa_cast'ipc" = bitcast [1 x [2 x double]] addrspace(13)* %"'ipg" to i8 addrspace(13)*, !dbg !156
  %arrayref9.sroa.0.0..sroa_cast = bitcast [1 x [2 x double]] addrspace(13)* %50 to i8 addrspace(13)*, !dbg !156
  %"'ipc3" = bitcast i8 addrspace(13)* %"arrayref9.sroa.0.0..sroa_cast'ipc" to [2 x double] addrspace(13)*, !dbg !156
  %51 = bitcast i8 addrspace(13)* %arrayref9.sroa.0.0..sroa_cast to [2 x double] addrspace(13)*, !dbg !156
  %52 = load [2 x double], [2 x double] addrspace(13)* %51, align 8, !dbg !156, !alias.scope !186, !noalias !189
  %.fca.0.extract = extractvalue [2 x double] %52, 0, !dbg !156
  %.fca.1.extract = extractvalue [2 x double] %52, 1, !dbg !156
  %53 = add i64 %arrayref.sroa.3.0.copyload, 1, !dbg !191
  %54 = icmp sgt i64 %53, 258, !dbg !193
  %value_phi11 = select i1 %54, i64 %arrayref.sroa.3.0.copyload, i64 258, !dbg !195
  %.not39 = icmp slt i64 %value_phi11, %53, !dbg !198
  br i1 %.not39, label %L54, label %L41.preheader, !dbg !192

L41.preheader:                                    ; preds = %L18
  %55 = add i64 %value_phi11, -1, !dbg !202
  %56 = sub i64 %55, %arrayref.sroa.3.0.copyload, !dbg !202
  %57 = add nuw i64 %56, 1, !dbg !202
  %58 = load {} addrspace(10)* addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)* addrspace(10)** %"arrayref17'ipl_cache", align 8, !dbg !202, !invariant.group !204
  %59 = getelementptr inbounds {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)* addrspace(10)* %58, i64 %iv, !dbg !202
  %60 = mul nuw i64 %57, 8, !dbg !202
  %61 = call {} addrspace(10)* @ijl_box_int64(i64 %57), !dbg !202
  %62 = call {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32)*, {} addrspace(10)*, ...) @julia.call({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32)* @jl_f_apply_type, {} addrspace(10)* null, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140539261518000 to {}*) to {} addrspace(10)*), {} addrspace(10)* %61, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140534437788624 to {}*) to {} addrspace(10)*)), !dbg !202
  %63 = bitcast {}*** %12 to {}**, !dbg !202
  %64 = getelementptr inbounds {}*, {}** %63, i64 -14, !dbg !202
  %65 = getelementptr inbounds {}*, {}** %64, i64 16, !dbg !202
  %66 = bitcast {}** %65 to i8**, !dbg !202
  %67 = load i8*, i8** %66, align 8, !dbg !202
  %68 = call noalias nonnull {} addrspace(10)* @julia.gc_alloc_obj({}** %64, i64 %60, {} addrspace(10)* %62), !dbg !202
  %69 = bitcast {} addrspace(10)* %68 to {} addrspace(10)* addrspace(10)*, !dbg !202
  br label %loop.i39, !dbg !202

loop.i39:                                         ; preds = %loop.i39, %L41.preheader
  %70 = phi i64 [ 0, %L41.preheader ], [ %71, %loop.i39 ], !dbg !202
  %71 = add i64 %70, 1, !dbg !202
  %72 = getelementptr {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %69, i64 %70, !dbg !202
  store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140539479449608 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %72, align 8, !dbg !202
  %73 = icmp eq i64 %71, %57, !dbg !202
  br i1 %73, label %zeroType.3.exit, label %loop.i39, !dbg !202

zeroType.3.exit:                                  ; preds = %loop.i39
  %"arrayref17'ipl_malloccache26" = bitcast {} addrspace(10)* %68 to {} addrspace(10)* addrspace(10)*, !dbg !202
  store {} addrspace(10)* addrspace(10)* %"arrayref17'ipl_malloccache26", {} addrspace(10)* addrspace(10)* addrspace(10)* %59, align 8, !dbg !202, !invariant.group !205
  %74 = bitcast {} addrspace(10)* addrspace(10)* addrspace(10)* %58 to {} addrspace(10)*, !dbg !202
  %75 = bitcast {} addrspace(10)* addrspace(10)* %"arrayref17'ipl_malloccache26" to {} addrspace(10)*, !dbg !202
  call void ({} addrspace(10)*, ...) @julia.write_barrier({} addrspace(10)* %74, {} addrspace(10)* %75), !dbg !202
  br label %L41, !dbg !202

L41:                                              ; preds = %pass, %zeroType.3.exit
  %iv2 = phi i64 [ 0, %zeroType.3.exit ], [ %iv.next3, %pass ]
  %iv.next3 = add nuw nsw i64 %iv2, 1, !dbg !202
  %76 = add i64 %53, %iv2, !dbg !202
  %"arrayref17'ipl" = load {} addrspace(10)*, {} addrspace(10)* addrspace(13)* %"arrayptr16.pre40'ipl", align 8, !dbg !202, !tbaa !74, !alias.scope !206, !noalias !209
  %77 = load {} addrspace(10)* addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)* addrspace(10)** %"arrayref17'ipl_cache", align 8, !dbg !202, !dereferenceable !183, !invariant.group !177
  %78 = getelementptr inbounds {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)* addrspace(10)* %77, i64 %iv, !dbg !202
  %79 = load {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)* addrspace(10)* %78, align 8, !dbg !202, !dereferenceable !183, !invariant.group !205
  %80 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %79, i64 %iv2, !dbg !202
  store {} addrspace(10)* %"arrayref17'ipl", {} addrspace(10)* addrspace(10)* %80, align 8, !dbg !202, !tbaa !74, !invariant.group !211
  %81 = bitcast {} addrspace(10)* addrspace(10)* %79 to {} addrspace(10)*, !dbg !202
  call void ({} addrspace(10)*, ...) @julia.write_barrier({} addrspace(10)* %81, {} addrspace(10)* %"arrayref17'ipl"), !dbg !202
  %arrayref17 = load {} addrspace(10)*, {} addrspace(10)* addrspace(13)* %arrayptr16.pre40, align 8, !dbg !202, !tbaa !74, !alias.scope !212, !noalias !213
  %.not41 = icmp eq {} addrspace(10)* %arrayref17, null, !dbg !202
  br i1 %.not41, label %fail, label %pass, !dbg !202

L54.loopexit:                                     ; preds = %pass
  br label %L54, !dbg !214

L54:                                              ; preds = %L54.loopexit, %L18
  %.not44 = icmp eq i64 %iv.next, %arraylen, !dbg !214
  br i1 %.not44, label %L65.loopexit, label %L18, !dbg !216

L65.loopexit:                                     ; preds = %L54
  br label %L65, !dbg !217

L65:                                              ; preds = %L65.loopexit, %top
  br label %invertL65, !dbg !217

fail:                                             ; preds = %L41
  call void @ijl_throw({} addrspace(12)* noundef addrspacecast ({}* inttoptr (i64 140539323922912 to {}*) to {} addrspace(12)*)) #9, !dbg !202
  unreachable

pass:                                             ; preds = %L41
  %"'ipc24" = addrspacecast {} addrspace(10)* %"arrayref17'ipl" to [1 x [2 x double]] addrspace(13)* addrspace(11)*, !dbg !218
  %82 = addrspacecast {} addrspace(10)* %arrayref17 to [1 x [2 x double]] addrspace(13)* addrspace(11)*, !dbg !218
  %"arrayptr2042'ipl" = load [1 x [2 x double]] addrspace(13)*, [1 x [2 x double]] addrspace(13)* addrspace(11)* %"'ipc24", align 8, !dbg !218, !tbaa !45, !alias.scope !219, !noalias !222, !nonnull !7
  %arrayptr2042 = load [1 x [2 x double]] addrspace(13)*, [1 x [2 x double]] addrspace(13)* addrspace(11)* %82, align 8, !dbg !218, !tbaa !45, !alias.scope !224, !noalias !225, !nonnull !7
  %"'ipg23" = getelementptr inbounds [1 x [2 x double]], [1 x [2 x double]] addrspace(13)* %"arrayptr2042'ipl", i64 %45, !dbg !218
  %83 = getelementptr inbounds [1 x [2 x double]], [1 x [2 x double]] addrspace(13)* %arrayptr2042, i64 %45, !dbg !218
  %"arrayref9.sroa.0.sroa.0.0.arrayref9.sroa.0.0..sroa_cast26.sroa_idx'ipg" = getelementptr inbounds [1 x [2 x double]], [1 x [2 x double]] addrspace(13)* %"'ipg23", i64 0, i64 0, i64 0, !dbg !218
  %arrayref9.sroa.0.sroa.0.0.arrayref9.sroa.0.0..sroa_cast26.sroa_idx = getelementptr inbounds [1 x [2 x double]], [1 x [2 x double]] addrspace(13)* %83, i64 0, i64 0, i64 0, !dbg !218
  store double %.fca.0.extract, double addrspace(13)* %arrayref9.sroa.0.sroa.0.0.arrayref9.sroa.0.0..sroa_cast26.sroa_idx, align 8, !dbg !218, !tbaa !52, !alias.scope !226, !noalias !229
  %"arrayref9.sroa.0.sroa.3.0.arrayref9.sroa.0.0..sroa_cast26.sroa_idx1'ipg" = getelementptr inbounds [1 x [2 x double]], [1 x [2 x double]] addrspace(13)* %"'ipg23", i64 0, i64 0, i64 1, !dbg !218
  %arrayref9.sroa.0.sroa.3.0.arrayref9.sroa.0.0..sroa_cast26.sroa_idx1 = getelementptr inbounds [1 x [2 x double]], [1 x [2 x double]] addrspace(13)* %83, i64 0, i64 0, i64 1, !dbg !218
  store double %.fca.1.extract, double addrspace(13)* %arrayref9.sroa.0.sroa.3.0.arrayref9.sroa.0.0..sroa_cast26.sroa_idx1, align 8, !dbg !218, !tbaa !52, !alias.scope !226, !noalias !229
  %.not43 = icmp eq i64 %76, %value_phi11, !dbg !231
  br i1 %.not43, label %L54.loopexit, label %L41, !dbg !233

inverttop:                                        ; preds = %invertL65, %inverttop.L18_crit_edge
  fence syncscope("singlethread") seq_cst
  fence syncscope("singlethread") seq_cst
  ret void

inverttop.L18_crit_edge:                          ; preds = %invertL18
  %84 = load i64, i64* %"iv'ac", align 8
  %forfree = load i64*, i64** %_cache, align 8, !dereferenceable !183, !invariant.group !173
  %85 = bitcast i64* %forfree to i8*
  call void @free(i8* nonnull %85), !dbg !234, !enzyme_cache_free !171
  %86 = load i64, i64* %"iv'ac", align 8
  %forfree5 = load i64*, i64** %arrayref.sroa.3.0.copyload_cache, align 8, !dereferenceable !183, !invariant.group !176
  %87 = bitcast i64* %forfree5 to i8*
  call void @free(i8* nonnull %87), !dbg !234, !enzyme_cache_free !174
  %88 = load i64, i64* %"iv'ac", align 8
  %forfree25 = load {} addrspace(10)* addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)* addrspace(10)** %"arrayref17'ipl_cache", align 8, !dereferenceable !183, !invariant.group !177
  br label %inverttop

invertL18:                                        ; preds = %invertL54, %invertL41.preheader
  %89 = load double, double* %".fca.1.extract'de", align 8, !dbg !156
  %90 = getelementptr inbounds [2 x double], [2 x double]* %"'de", i32 0, i32 1, !dbg !156
  %91 = load double, double* %90, align 8, !dbg !156
  %92 = fadd fast double %91, %89, !dbg !156
  store double %92, double* %90, align 8, !dbg !156
  store double 0.000000e+00, double* %".fca.1.extract'de", align 8, !dbg !156
  %93 = load double, double* %".fca.0.extract'de", align 8, !dbg !156
  %94 = getelementptr inbounds [2 x double], [2 x double]* %"'de", i32 0, i32 0, !dbg !156
  %95 = load double, double* %94, align 8, !dbg !156
  %96 = fadd fast double %95, %93, !dbg !156
  store double %96, double* %94, align 8, !dbg !156
  store double 0.000000e+00, double* %".fca.0.extract'de", align 8, !dbg !156
  %97 = load [2 x double], [2 x double]* %"'de", align 8, !dbg !156
  store [2 x double] zeroinitializer, [2 x double]* %"'de", align 8, !dbg !156
  %98 = load i64, i64* %"iv'ac", align 8, !dbg !156
  %"'ipc2_unwrap" = addrspacecast {} addrspace(10)* %"'1" to [1 x [2 x double]] addrspace(13)* addrspace(11)*, !dbg !156
  %"arrayptr8.pre38'ipl_unwrap" = load [1 x [2 x double]] addrspace(13)*, [1 x [2 x double]] addrspace(13)* addrspace(11)* %"'ipc2_unwrap", align 16, !dbg !156, !tbaa !45, !alias.scope !158, !noalias !161, !invariant.group !163
  %_unwrap = addrspacecast {} addrspace(10)* %2 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !156
  %arraylen_ptr_unwrap = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %_unwrap, i64 0, i32 1, !dbg !156
  %arraylen_unwrap = load i64, i64 addrspace(11)* %arraylen_ptr_unwrap, align 8, !dbg !141, !tbaa !19, !range !22, !alias.scope !143, !noalias !146, !invariant.group !148
  %_unwrap4 = add nsw i64 %arraylen_unwrap, -1, !dbg !156
  %99 = add nuw i64 %_unwrap4, 1, !dbg !156
  %100 = load i64*, i64** %_cache, align 8, !dbg !156, !dereferenceable !183, !invariant.group !173
  %101 = getelementptr inbounds i64, i64* %100, i64 %98, !dbg !156
  %102 = load i64, i64* %101, align 8, !dbg !156, !invariant.group !184
  %"'ipg_unwrap" = getelementptr inbounds [1 x [2 x double]], [1 x [2 x double]] addrspace(13)* %"arrayptr8.pre38'ipl_unwrap", i64 %102, !dbg !156
  %"arrayref9.sroa.0.0..sroa_cast'ipc_unwrap" = bitcast [1 x [2 x double]] addrspace(13)* %"'ipg_unwrap" to i8 addrspace(13)*, !dbg !156
  %"'ipc3_unwrap" = bitcast i8 addrspace(13)* %"arrayref9.sroa.0.0..sroa_cast'ipc_unwrap" to [2 x double] addrspace(13)*, !dbg !156
  %103 = bitcast [2 x double] addrspace(13)* %"'ipc3_unwrap" to <2 x double> addrspace(13)*, !dbg !156
  %104 = bitcast <2 x double>* %7 to [2 x double]*, !dbg !156
  store [2 x double] %97, [2 x double]* %104, align 8, !dbg !156
  %105 = load <2 x double>, <2 x double>* %7, align 16, !dbg !156
  %106 = load <2 x double>, <2 x double> addrspace(13)* %103, align 8, !dbg !156, !alias.scope !189, !noalias !186
  %107 = fadd fast <2 x double> %106, %105, !dbg !156
  store <2 x double> %107, <2 x double> addrspace(13)* %103, align 8, !dbg !156, !alias.scope !189, !noalias !186
  %108 = load i64, i64* %"iv'ac", align 8
  %109 = icmp eq i64 %108, 0
  %110 = xor i1 %109, true
  br i1 %109, label %inverttop.L18_crit_edge, label %incinvertL18

incinvertL18:                                     ; preds = %invertL18
  %111 = load i64, i64* %"iv'ac", align 8
  %112 = add nsw i64 %111, -1
  store i64 %112, i64* %"iv'ac", align 8
  br label %invertL54

invertL41.preheader:                              ; preds = %invertL41
  %113 = load i64, i64* %"iv'ac", align 8
  %114 = load i64, i64* %"iv2'ac", align 8
  %_unwrap27 = load {} addrspace(10)* addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)* addrspace(10)** %"arrayref17'ipl_cache", align 8, !dbg !202, !invariant.group !204
  %_unwrap28 = getelementptr inbounds {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)* addrspace(10)* %_unwrap27, i64 %113
  %forfree29 = load {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)* addrspace(10)* %_unwrap28, align 8, !dereferenceable !183, !invariant.group !205
  br label %invertL18

invertL41:                                        ; preds = %invertpass
  %115 = load i64, i64* %"iv2'ac", align 8
  %116 = icmp eq i64 %115, 0
  %117 = xor i1 %116, true
  br i1 %116, label %invertL41.preheader, label %incinvertL41

incinvertL41:                                     ; preds = %invertL41
  %118 = load i64, i64* %"iv2'ac", align 8
  %119 = add nsw i64 %118, -1
  store i64 %119, i64* %"iv2'ac", align 8
  br label %invertpass

invertL54.loopexit:                               ; preds = %invertL54
  %120 = load i64, i64* %"iv'ac", align 8
  %_unwrap6 = addrspacecast {} addrspace(10)* %2 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*
  %arraylen_ptr_unwrap7 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %_unwrap6, i64 0, i32 1
  %arraylen_unwrap8 = load i64, i64 addrspace(11)* %arraylen_ptr_unwrap7, align 8, !dbg !141, !tbaa !19, !range !22, !alias.scope !143, !noalias !146, !invariant.group !148
  %_unwrap9 = add nsw i64 %arraylen_unwrap8, -1
  %121 = add nuw i64 %_unwrap9, 1
  %122 = load i64*, i64** %arrayref.sroa.3.0.copyload_cache, align 8, !dereferenceable !183, !invariant.group !176
  %123 = getelementptr inbounds i64, i64* %122, i64 %120
  %124 = load i64, i64* %123, align 8, !dbg !153, !tbaa !52, !alias.scope !178, !noalias !181, !invariant.group !185
  %_unwrap10 = add i64 %124, 1
  %_unwrap11 = icmp sgt i64 %_unwrap10, 258
  %value_phi11_unwrap = select i1 %_unwrap11, i64 %124, i64 258
  %_unwrap12 = add i64 %value_phi11_unwrap, -1
  %_unwrap13 = sub i64 %_unwrap12, %124
  br label %mergeinvertL41_L54.loopexit

mergeinvertL41_L54.loopexit:                      ; preds = %invertL54.loopexit
  store i64 %_unwrap13, i64* %"iv2'ac", align 8
  br label %invertpass

invertL54:                                        ; preds = %mergeinvertL18_L65.loopexit, %incinvertL18
  %125 = load i64, i64* %"iv'ac", align 8
  %_unwrap14 = addrspacecast {} addrspace(10)* %2 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*
  %arraylen_ptr_unwrap15 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %_unwrap14, i64 0, i32 1
  %arraylen_unwrap16 = load i64, i64 addrspace(11)* %arraylen_ptr_unwrap15, align 8, !dbg !141, !tbaa !19, !range !22, !alias.scope !143, !noalias !146, !invariant.group !148
  %_unwrap17 = add nsw i64 %arraylen_unwrap16, -1
  %126 = add nuw i64 %_unwrap17, 1
  %127 = load i64*, i64** %arrayref.sroa.3.0.copyload_cache, align 8, !dereferenceable !183, !invariant.group !176
  %128 = getelementptr inbounds i64, i64* %127, i64 %125
  %129 = load i64, i64* %128, align 8, !dbg !153, !tbaa !52, !alias.scope !178, !noalias !181, !invariant.group !185
  %_unwrap18 = add i64 %129, 1
  %_unwrap19 = icmp sgt i64 %_unwrap18, 258
  %value_phi11_unwrap20 = select i1 %_unwrap19, i64 %129, i64 258
  %.not39_unwrap = icmp slt i64 %value_phi11_unwrap20, %_unwrap18
  br i1 %.not39_unwrap, label %invertL18, label %invertL54.loopexit

invertL65.loopexit:                               ; preds = %invertL65
  %_unwrap21 = add nsw i64 %arraylen, -1
  br label %mergeinvertL18_L65.loopexit

mergeinvertL18_L65.loopexit:                      ; preds = %invertL65.loopexit
  store i64 %_unwrap21, i64* %"iv'ac", align 8
  br label %invertL54

invertL65:                                        ; preds = %L65
  br i1 %.not, label %inverttop, label %invertL65.loopexit

invertpass:                                       ; preds = %mergeinvertL41_L54.loopexit, %incinvertL41
  %130 = load i64, i64* %"iv2'ac", align 8, !dbg !218
  %131 = load i64, i64* %"iv'ac", align 8, !dbg !218
  %_unwrap30 = addrspacecast {} addrspace(10)* %2 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !218
  %arraylen_ptr_unwrap31 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %_unwrap30, i64 0, i32 1, !dbg !218
  %arraylen_unwrap32 = load i64, i64 addrspace(11)* %arraylen_ptr_unwrap31, align 8, !dbg !141, !tbaa !19, !range !22, !alias.scope !143, !noalias !146, !invariant.group !148
  %_unwrap33 = add nsw i64 %arraylen_unwrap32, -1, !dbg !218
  %132 = add nuw i64 %_unwrap33, 1, !dbg !218
  %133 = load i64, i64* %"iv'ac", align 8, !dbg !218
  %134 = load i64, i64* %"iv2'ac", align 8, !dbg !218
  %135 = add nuw i64 %_unwrap33, 1, !dbg !218
  %136 = load i64*, i64** %arrayref.sroa.3.0.copyload_cache, align 8, !dbg !218, !dereferenceable !183, !invariant.group !176
  %137 = getelementptr inbounds i64, i64* %136, i64 %133, !dbg !218
  %138 = load i64, i64* %137, align 8, !dbg !153, !tbaa !52, !alias.scope !178, !noalias !181, !invariant.group !185
  %_unwrap34 = add i64 %138, 1, !dbg !218
  %_unwrap35 = icmp sgt i64 %_unwrap34, 258, !dbg !218
  %value_phi11_unwrap36 = select i1 %_unwrap35, i64 %138, i64 258, !dbg !218
  %_unwrap37 = add i64 %value_phi11_unwrap36, -1, !dbg !218
  %_unwrap38 = sub i64 %_unwrap37, %138, !dbg !218
  %139 = add nuw i64 %_unwrap38, 1, !dbg !218
  %140 = load {} addrspace(10)* addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)* addrspace(10)** %"arrayref17'ipl_cache", align 8, !dbg !218, !dereferenceable !183, !invariant.group !177
  %141 = getelementptr inbounds {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)* addrspace(10)* %140, i64 %131, !dbg !218
  %142 = load {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)* addrspace(10)* %141, align 8, !dbg !218, !dereferenceable !183, !invariant.group !205
  %143 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %142, i64 %130, !dbg !218
  %144 = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %143, align 8, !dbg !202, !tbaa !74, !alias.scope !206, !noalias !209, !invariant.group !211
  %"'ipc24_unwrap" = addrspacecast {} addrspace(10)* %144 to [1 x [2 x double]] addrspace(13)* addrspace(11)*, !dbg !218
  %"arrayptr2042'il_phi_unwrap" = load [1 x [2 x double]] addrspace(13)*, [1 x [2 x double]] addrspace(13)* addrspace(11)* %"'ipc24_unwrap", align 8, !dbg !218, !tbaa !45, !alias.scope !219, !noalias !222, !nonnull !7
  %145 = add nuw i64 %_unwrap33, 1, !dbg !218
  %146 = load i64*, i64** %_cache, align 8, !dbg !218, !dereferenceable !183, !invariant.group !173
  %147 = getelementptr inbounds i64, i64* %146, i64 %131, !dbg !218
  %148 = load i64, i64* %147, align 8, !dbg !218, !invariant.group !184
  %"'ipg23_unwrap" = getelementptr inbounds [1 x [2 x double]], [1 x [2 x double]] addrspace(13)* %"arrayptr2042'il_phi_unwrap", i64 %148, !dbg !218
  %"arrayref9.sroa.0.sroa.3.0.arrayref9.sroa.0.0..sroa_cast26.sroa_idx1'ipg_unwrap" = getelementptr inbounds [1 x [2 x double]], [1 x [2 x double]] addrspace(13)* %"'ipg23_unwrap", i64 0, i64 0, i64 1, !dbg !218
  %149 = load double, double addrspace(13)* %"arrayref9.sroa.0.sroa.3.0.arrayref9.sroa.0.0..sroa_cast26.sroa_idx1'ipg_unwrap", align 8, !dbg !218, !tbaa !52, !alias.scope !235, !noalias !236
  store double 0.000000e+00, double addrspace(13)* %"arrayref9.sroa.0.sroa.3.0.arrayref9.sroa.0.0..sroa_cast26.sroa_idx1'ipg_unwrap", align 8, !dbg !218, !tbaa !52, !alias.scope !235, !noalias !236
  %150 = load double, double* %".fca.1.extract'de", align 8, !dbg !218
  %151 = fadd fast double %150, %149, !dbg !218
  store double %151, double* %".fca.1.extract'de", align 8, !dbg !218
  %152 = load i64, i64* %"iv2'ac", align 8, !dbg !218
  %153 = load i64, i64* %"iv'ac", align 8, !dbg !218
  %"arrayref9.sroa.0.sroa.0.0.arrayref9.sroa.0.0..sroa_cast26.sroa_idx'ipg_unwrap" = getelementptr inbounds [1 x [2 x double]], [1 x [2 x double]] addrspace(13)* %"'ipg23_unwrap", i64 0, i64 0, i64 0, !dbg !218
  %154 = load double, double addrspace(13)* %"arrayref9.sroa.0.sroa.0.0.arrayref9.sroa.0.0..sroa_cast26.sroa_idx'ipg_unwrap", align 8, !dbg !218, !tbaa !52, !alias.scope !235, !noalias !236
  store double 0.000000e+00, double addrspace(13)* %"arrayref9.sroa.0.sroa.0.0.arrayref9.sroa.0.0..sroa_cast26.sroa_idx'ipg_unwrap", align 8, !dbg !218, !tbaa !52, !alias.scope !235, !noalias !236
  %155 = load double, double* %".fca.0.extract'de", align 8, !dbg !218
  %156 = fadd fast double %155, %154, !dbg !218
  store double %156, double* %".fca.0.extract'de", align 8, !dbg !218
  br label %invertL41
}

@wsmoses
Copy link
Member

wsmoses commented Jun 15, 2024

0x0000730f764b9ca9 in gc_setmark_pool_ (ptls=0x5d089ca17d00, o=0x5d089ffa27f8, mark_mode=1 '\001', page=0x0) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:881
881	        ptls->gc_cache.scanned_bytes += page->osize;
(rr) up
#1  0x0000730f764b9d50 in gc_setmark_pool (ptls=0x5d089ca17d00, o=0x5d089ffa27f8, mark_mode=1 '\001') at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:895
895	    gc_setmark_pool_(ptls, o, mark_mode, page_metadata((char*)o));
(rr) up
#2  0x0000730f764b9d8d in gc_setmark (ptls=0x5d089ca17d00, o=0x5d089ffa27f8, mark_mode=1 '\001', sz=2024) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:902
902	        gc_setmark_pool(ptls, o, mark_mode);
(rr) up
#3  0x0000730f764bfab1 in gc_mark_outrefs (meta_updated=0, _new_obj=0x5d089ffa2800, mq=0x5d089ca18af8, ptls=0x5d089ca17d00) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:2617
2617	            gc_setmark(ptls, o, bits, dtsz);
(rr) up
#4  gc_mark_loop_serial_ (ptls=0x5d089ca17d00, mq=0x5d089ca18af8) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:2690
2690	        gc_mark_outrefs(ptls, mq, new_obj, 0);
(rr) up
#5  0x0000730f764c0014 in gc_mark_loop_serial (ptls=0x5d089ca17d00) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:2713
2713	    gc_mark_loop_serial_(ptls, &ptls->mark_queue);
(rr) up
#6  0x0000730f764c205f in gc_mark_loop (ptls=0x5d089ca17d00) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:2908
2908	        gc_mark_loop_serial(ptls);
(rr) up
#7  0x0000730f764c4a05 in _jl_gc_collect (ptls=0x5d089ca17d00, collection=JL_GC_AUTO) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:3241
3241	        gc_mark_loop(ptls);
(rr) up
#8  0x0000730f764c55ad in ijl_gc_collect (collection=JL_GC_AUTO) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:3538
3538	        if (_jl_gc_collect(ptls, collection)) {
(rr) up
#9  0x0000730f764b9ff8 in maybe_collect (ptls=0x5d089ca17d00) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:937
937	        jl_gc_collect(JL_GC_AUTO);
(rr) up
#10 0x0000730f764bb0c7 in jl_gc_pool_alloc_inner (ptls=0x5d089ca17d00, pool_offset=1736, osize=1168) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:1293
1293	    maybe_collect(ptls);
(rr) up
#11 0x0000730f764bb417 in jl_gc_pool_alloc_noinline (ptls=0x5d089ca17d00, pool_offset=1736, osize=1168) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:1350
1350	    return jl_gc_pool_alloc_inner(ptls, pool_offset, osize);
(rr) down
#10 0x0000730f764bb0c7 in jl_gc_pool_alloc_inner (ptls=0x5d089ca17d00, pool_offset=1736, osize=1168) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:1293
1293	    maybe_collect(ptls);
(rr) down
#9  0x0000730f764b9ff8 in maybe_collect (ptls=0x5d089ca17d00) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:937
937	        jl_gc_collect(JL_GC_AUTO);
(rr) down
#8  0x0000730f764c55ad in ijl_gc_collect (collection=JL_GC_AUTO) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:3538
3538	        if (_jl_gc_collect(ptls, collection)) {
(rr) down
#7  0x0000730f764c4a05 in _jl_gc_collect (ptls=0x5d089ca17d00, collection=JL_GC_AUTO) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:3241
3241	        gc_mark_loop(ptls);
(rr) down
#6  0x0000730f764c205f in gc_mark_loop (ptls=0x5d089ca17d00) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:2908
2908	        gc_mark_loop_serial(ptls);
(rr) down
#5  0x0000730f764c0014 in gc_mark_loop_serial (ptls=0x5d089ca17d00) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:2713
2713	    gc_mark_loop_serial_(ptls, &ptls->mark_queue);
(rr) 
#4  gc_mark_loop_serial_ (ptls=0x5d089ca17d00, mq=0x5d089ca18af8) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:2690
2690	        gc_mark_outrefs(ptls, mq, new_obj, 0);
(rr) p new_obj
$1 = (void *) 0x5d089ffa2800
(rr) p jl_(new_obj)
((1=Array{StaticArraysCore.SArray{Tuple{2}, Float64, 1, 2}, (300,)}[StaticArraysCore.SArray{Tuple{2}, Float64, 1, 2}(data=(0, 0)), StaticArraysCore.SArray{Tuple{2}, Float64, 1, 2}(data=(0, 0)), StaticArraysCore.SArray{Tuple{2}, Float64, 1, 2}(data=(0, 0)), StaticArraysCore.SArray{Tuple{2}, Float64, 1, 2}(data=(0, 0)), StaticArraysCore.SArray{Tuple{2}, Float64, 1, 2}(data=(0, 0)), StaticArraysCore.SArray{Tuple{2}, Float64, 1, 2}(data=(0, 0)), StaticArraysCore.SArray{Tuple{2}, Float64, 1, 2}(data=(0, 0)), StaticArraysCore.SArray{Tuple{2}, Float64, 1, 2}(data=(0, 0)), StaticArraysCore.SArray{Tuple{2}, Float64, 1, 2}(data=(0, 0)), StaticArraysCore.SArray{Tuple{2}, Float64, 1, 2}(data=(0, 0)), StaticArraysCore.SArray{Tuple{2}, Float64, 1, 2}(data=(0, 0)), StaticArraysCore.SArray{Tuple{2}, Float64, 1, 2}(data=(0, 0)), StaticArraysCore.SArray{Tuple{2}, Float64, 1, 2}(data=(0, 0)), StaticArraysCore.SArray{Tuple{2}, Float64, 1, 2}(data=(0, 0)), StaticArraysCore.SArray{Tuple{2}, Float64, 1, 2}(data=(0, 0)), StaticArraysCore.SArray{Tuple{2}, ....

@wsmoses
Copy link
Member

wsmoses commented Jun 15, 2024

#3  0x0000730f764bfab1 in gc_mark_outrefs (meta_updated=0, _new_obj=0x5d089ffa2800, mq=0x5d089ca18af8, ptls=0x5d089ca17d00) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:2617
2617	            gc_setmark(ptls, o, bits, dtsz);
(rr) l
2612	            }
2613	            return;
2614	        }
2615	        size_t dtsz = jl_datatype_size(vt);
2616	        if (update_meta)
2617	            gc_setmark(ptls, o, bits, dtsz);
2618	        else if (foreign_alloc)
2619	            objprofile_count(vt, bits == GC_OLD_MARKED, dtsz);
2620	        if (vt == jl_weakref_type)
2621	            return;
(rr) p o
$17 = (jl_taggedvalue_t *) 0x5d089ffa27f8
(rr) p jl_(o)
<?#0x5d089ffa27f8::(nil)>
$18 = void
(rr) p o->
bits    header  next    type    
(rr) p o->bits
$19 = {gc = 1, in_image = 0, unused = 0, tag = 7906842479017}
(rr) p o->tag
There is no member named tag.
(rr) p o->type
$20 = (jl_value_t *) 0x730f48989a91
(rr) p jl_(o->type)

Program received signal SIGSEGV, Segmentation fault.
0x0000730f764efa1d in jl_is_cpointer_type (t=0xe000000000000000) at /home/wmoses/git/Enzyme.jl/julia10/src/julia.h:1440
1440	    return (jl_is_datatype(t) &&
The program being debugged was signaled while in a function called from GDB.
GDB has restored the context to what it was before the call.
To change this behavior use "set unwindonsignal off".
Evaluation of the expression containing the function
(jl_) will be abandoned.
(rr) p o->type
$21 = (jl_value_t *) 0x730f48989a91
(rr) p o->bits
$22 = {gc = 1, in_image = 0, unused = 0, tag = 7906842479017}
(rr) p o->tag
There is no member named tag.
(rr) p o->bits.tag
$23 = 7906842479017
(rr) p jl_(o->bits.tag)

Program received signal SIGSEGV, Segmentation fault.
0x0000730f764f4fc3 in jl_static_show_next_ (out=0x2, v=0x730f48989a9, prev=0x0, depth=0x0, ctx=...) at /home/wmoses/git/Enzyme.jl/julia10/src/rtutils.c:1262
1262	    return jl_static_show_x_(out, v, (jl_datatype_t*)jl_typeof(v), newdepth, ctx);
The program being debugged was signaled while in a function called from GDB.
GDB has restored the context to what it was before the call.
To change this behavior use "set unwindonsignal off".
Evaluation of the expression containing the function
(jl_) will be abandoned.
(rr) p o->bits
$24 = {gc = 1, in_image = 0, unused = 0, tag = 7906842479017}
(rr) p &o->bits
$25 = (struct _jl_taggedvalue_bits *) 0x5d089ffa27f8
(rr) watch *(struct _jl_taggedvalue_bits *) 0x5d089ffa27f8
Hardware watchpoint 1: *(struct _jl_taggedvalue_bits *) 0x5d089ffa27f8
(rr) reverse-continue
Continuing.
[New Thread 887482.887484]

Thread 1 received signal SIGSEGV, Segmentation fault.
<signal handler called>
(rr) reverse-continue
Continuing.

Thread 1 received signal SIGSEGV, Segmentation fault.
0x0000730f764b9ca9 in gc_setmark_pool_ (ptls=0x5d089ca17d00, o=0x5d089ffa27f8, mark_mode=1 '\001', page=0x0) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:881
881	        ptls->gc_cache.scanned_bytes += page->osize;
(rr) reverse-continue
Continuing.

Thread 1 hit Hardware watchpoint 1: *(struct _jl_taggedvalue_bits *) 0x5d089ffa27f8

Old value = {gc = 1, in_image = 0, unused = 0, tag = 7906842479017}
New value = {gc = 0, in_image = 0, unused = 0, tag = 7906842479017}
0x0000730f764bc8ff in gc_try_setmark_tag (mark_mode=1 '\001', o=0x5d089ffa27f8) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:837
837	    tag = jl_atomic_exchange_relaxed((_Atomic(uintptr_t)*)&o->header, tag);
(rr) bt
#0  0x0000730f764bc8ff in gc_try_setmark_tag (mark_mode=1 '\001', o=0x5d089ffa27f8) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:837
#1  gc_try_claim_and_push (mq=0x5d089ca18af8, _obj=0x5d089ffa2800, nptr=0x7ffe8c55d298) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:1836
#2  0x0000730f764bceec in gc_mark_obj32 (ptls=0x5d089ca17d00, obj32_parent=0x5d08a100a740 "\240\067}H\017s", obj32_begin=0x5d08a3231d94, obj32_end=0x5d08a3239d58, nptr=32973) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:1920
#3  0x0000730f764bfdc8 in gc_mark_outrefs (meta_updated=0, _new_obj=0x5d08a100a740, mq=0x5d089ca18af8, ptls=0x5d089ca17d00) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:2662
#4  gc_mark_loop_serial_ (ptls=0x5d089ca17d00, mq=0x5d089ca18af8) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:2690
#5  0x0000730f764c0014 in gc_mark_loop_serial (ptls=0x5d089ca17d00) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:2713
#6  0x0000730f764c205f in gc_mark_loop (ptls=0x5d089ca17d00) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:2908
#7  0x0000730f764c4a05 in _jl_gc_collect (ptls=0x5d089ca17d00, collection=JL_GC_AUTO) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:3241
#8  0x0000730f764c55ad in ijl_gc_collect (collection=JL_GC_AUTO) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:3538
#9  0x0000730f764b9ff8 in maybe_collect (ptls=0x5d089ca17d00) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:937
#10 0x0000730f764bb0c7 in jl_gc_pool_alloc_inner (ptls=0x5d089ca17d00, pool_offset=1736, osize=1168) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:1293
#11 0x0000730f764bb417 in jl_gc_pool_alloc_noinline (ptls=0x5d089ca17d00, pool_offset=1736, osize=1168) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:1350
#12 0x0000730f764b7459 in jl_gc_alloc_ (ptls=0x5d089ca17d00, sz=1144, ty=0x730f64f96950 <jl_system_image_data+72252560>) at /home/wmoses/git/Enzyme.jl/julia10/src/julia_internal.h:476
#13 0x0000730f764c57b7 in jl_gc_alloc (ptls=0x5d089ca17d00, sz=1144, ty=0x730f64f96950 <jl_system_image_data+72252560>) at /home/wmoses/git/Enzyme.jl/julia10/src/gc.c:3590
#14 0x0000730f764a59cc in ijl_alloc_svec_uninit (n=142) at /home/wmoses/git/Enzyme.jl/julia10/src/simplevector.c:63
#15 0x0000730f764a5ad1 in ijl_svec_fill (n=142, x=0x730f610e2fc0 <jl_system_image_data+6505216>) at /home/wmoses/git/Enzyme.jl/julia10/src/simplevector.c:89
#16 0x0000730f76434217 in jl_tupletype_fill (n=142, v=0x730f610e2fc0 <jl_system_image_data+6505216>) at /home/wmoses/git/Enzyme.jl/julia10/src/jltypes.c:1439
#17 0x0000730f7643759d in inst_tuple_w_ (t=0x730f610e2f40 <jl_system_image_data+6505088>, env=0x7ffe8c55dd00, stack=0x0, check=1) at /home/wmoses/git/Enzyme.jl/julia10/src/jltypes.c:2231
#18 0x0000730f76437eda in inst_type_w_ (t=0x730f610e2f40 <jl_system_image_data+6505088>, env=0x7ffe8c55dd00, stack=0x0, check=1) at /home/wmoses/git/Enzyme.jl/julia10/src/jltypes.c:2343
#19 0x0000730f76437aad in inst_type_w_ (t=0x730f610e2f20 <jl_system_image_data+6505056>, env=0x7ffe8c55dd80, stack=0x0, check=1) at /home/wmoses/git/Enzyme.jl/julia10/src/jltypes.c:2288
#20 0x0000730f764342a0 in ijl_instantiate_unionall (u=0x730f610e2f00 <jl_system_image_data+6505024>, p=0x730f6e42c000) at /home/wmoses/git/Enzyme.jl/julia10/src/jltypes.c:1456
^C#21 0x0000730f76433f42 in ijl_apply_type (tc=Quit
(rr) reverse-continue
Continuing.

Thread 1 hit Hardware watchpoint 1: *(struct _jl_taggedvalue_bits *) 0x5d089ffa27f8

Old value = {gc = 0, in_image = 0, unused = 0, tag = 7906842479017}
New value = {gc = 0, in_image = 0, unused = 0, tag = 0}
0x0000730f5ef8fefb in getindex () at essentials.jl:13
13	essentials.jl: No such file or directory.
(rr) bt
#0  0x0000730f5ef8fefb in getindex () at essentials.jl:13
#1  julia_forces!_1625 (fs_chunks=<optimized out>, coords=<optimized out>, neighbors=<optimized out>) at /home/wmoses/git/Enzyme.jl/seg.jl:15
#2  0x0000730f5ef8fefb in diffejulia_forces__1625wrap ()
#3  0x0000730f5ef9a507 in macro expansion () at /home/wmoses/git/Enzyme.jl/src/compiler.jl:6399
#4  enzyme_call () at /home/wmoses/git/Enzyme.jl/src/compiler.jl:6000
#5  CombinedAdjointThunk () at /home/wmoses/git/Enzyme.jl/src/compiler.jl:5877
#6  autodiff () at /home/wmoses/git/Enzyme.jl/src/Enzyme.jl:309
#7  julia_autodiff_3051 (mode=..., f=..., args...=...) at /home/wmoses/git/Enzyme.jl/src/Enzyme.jl:321
#8  0x0000730f5ef9a54b in jfptr_autodiff_3052 ()
#9  0x0000730f764498b8 in _jl_invoke (F=0x730f76e48070 <jl_system_image_data+70576>, args=0x7ffe8c55e118, nargs=6, mfunc=0x730f6d7ea2c0, world=31478) at /home/wmoses/git/Enzyme.jl/julia10/src/gf.c:2894
#10 0x0000730f7644a29f in ijl_apply_generic (F=0x730f76e48070 <jl_system_image_data+70576>, args=0x7ffe8c55e118, nargs=6) at /home/wmoses/git/Enzyme.jl/julia10/src/gf.c:3076
#11 0x0000730f7646b8b1 in jl_apply (args=0x7ffe8c55e110, nargs=7) at /home/wmoses/git/Enzyme.jl/julia10/src/julia.h:1982
#12 0x0000730f7646bd79 in do_call (args=0x730f6caf2aa8, nargs=7, s=0x7ffe8c55e560) at /home/wmoses/git/Enzyme.jl/julia10/src/interpreter.c:126
#13 0x0000730f7646c622 in eval_value (e=0x730f6d2e5150, s=0x7ffe8c55e560) at /home/wmoses/git/Enzyme.jl/julia10/src/interpreter.c:223
#14 0x0000730f7646c130 in eval_stmt_value (stmt=0x730f6d2e5150, s=0x7ffe8c55e560) at /home/wmoses/git/Enzyme.jl/julia10/src/interpreter.c:174
#15 0x0000730f7646e967 in eval_body (stmts=0x730f6cd51e50, s=0x7ffe8c55e560, ip=6, toplevel=1) at /home/wmoses/git/Enzyme.jl/julia10/src/interpreter.c:617
#16 0x0000730f7646f826 in jl_interpret_toplevel_thunk (m=0x730f64b007c0 <jl_system_image_data+67443456>, src=0x730f6ccf5450) at /home/wmoses/git/Enzyme.jl/julia10/src/interpreter.c:775
#17 0x0000730f7649756d in jl_toplevel_eval_flex (m=0x730f64b007c0 <jl_system_image_data+67443456>, e=0x730f6e00f6b0, fast=1, expanded=0) at /home/wmoses/git/Enzyme.jl/julia10/src/toplevel.c:934
^C#18 0x0000730f76497052 in jl_toplevel_eval_flex (m=0x730f64b007c0 <jl_system_image_data+67443456>, e=Quit
(rr) disassemble

@wsmoses
Copy link
Member

wsmoses commented Jun 15, 2024

so the segfault happens at some iteration within the nested loop's apply_type [which triggers gc]

@wsmoses
Copy link
Member

wsmoses commented Jun 15, 2024

cc @gbaraldi

@wsmoses
Copy link
Member

wsmoses commented Jun 17, 2024

@jgreener64 , working with @gbaraldi we determined this to be a bug in the julia compiler itself -- not enzyme. sadly this means waiting for a Julia version bump.

cc @vchuravy

@wsmoses
Copy link
Member

wsmoses commented Jun 18, 2024

Fix to upstream julia: JuliaLang/julia#54837

@wsmoses
Copy link
Member

wsmoses commented Aug 4, 2024

Since a fix is in upstream julia [though 1.10.5 is not yet released sadly], going to close this here.

@wsmoses wsmoses closed this as not planned Won't fix, can't repro, duplicate, stale Aug 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
gc garbage collection segfault
Projects
None yet
Development

No branches or pull requests

2 participants