text:
"""
    ColoredRootedTree(level_sequence, color_sequence, is_canonical::Bool=false)

Represents a colored rooted tree using its level sequence. The single-colored
version is [`RootedTree`](@ref).

See also [`BicoloredRootedTree`](@ref), [`rootedtree`](@ref).

# References

- Terry Beyer and Sandra Mitchell Hedetniemi.
  "Constant time generation of rooted trees".
  SIAM Journal on Computing 9.4 (1980): 706-712.
  [DOI: 10.1137/0209055](https://doi.org/10.1137/0209055)
- A. L. Araujo, A. Murua, and J. M. Sanz-Serna.
  "Symplectic Methods Based on Decompositions".
  SIAM Journal on Numerical Analysis 34.5 (1997): 1926–1947.
  [DOI: 10.1137/S0036142995292128](https://doi.org/10.1137/S0036142995292128)
"""
struct ColoredRootedTree{T<:Integer, V<:AbstractVector{T}, C<:AbstractVector} <: AbstractRootedTree
  level_sequence::V
  color_sequence::C
  iscanonical::Bool

  function ColoredRootedTree(level_sequence::V, color_sequence::C, iscanonical::Bool=false) where {T<:Integer, V<:AbstractVector{T}, C<:AbstractVector}
    new{T, V, C}(level_sequence, color_sequence, iscanonical)
  end
end

"""
    BicoloredRootedTree{T<:Integer}

Representation of bicolored rooted trees.

See also [`ColoredRootedTree`](@ref), [`RootedTree`](@ref), [`rootedtree`](@ref).
"""
const BicoloredRootedTree{T<:Integer, V<:AbstractVector{T}, C<:AbstractVector{Bool}} = ColoredRootedTree{T, V, C}

"""
    rootedtree(level_sequence, color_sequence)

Construct a canonical [`ColoredRootedTree`](@ref) object from a `level_sequence`
and a `color_sequence`, i.e., a vector of integers representing the levels of
each node of the tree and a vector of associated colors (e.g., `Bool`s or
`Integers`).

# References

- Terry Beyer and Sandra Mitchell Hedetniemi.
  "Constant time generation of rooted trees".
  SIAM Journal on Computing 9.4 (1980): 706-712.
  [DOI: 10.1137/0209055](https://doi.org/10.1137/0209055)
"""
function rootedtree(level_sequence::AbstractVector, color_sequence::AbstractVector)
  if axes(level_sequence) != axes(color_sequence)
    throw(DimensionMismatch("The axes of the `level_sequence` ($level_sequence) and the `color_sequence` ($color_sequence) do not match."))
  end

  canonical_representation(ColoredRootedTree(level_sequence, color_sequence))
end

"""
    rootedtree!(level_sequence, color_sequence)

Construct a canonical [`ColoredRootedTree`](@ref) object from a `level_sequence`
and a `color_sequence` which may be modified in this process. See also
[`rootedtree`](@ref).

# References

- Terry Beyer and Sandra Mitchell Hedetniemi.
  "Constant time generation of rooted trees".
  SIAM Journal on Computing 9.4 (1980): 706-712.
  [DOI: 10.1137/0209055](https://doi.org/10.1137/0209055)
"""
rootedtree!(level_sequence::AbstractVector, color_sequence::AbstractVector) = canonical_representation!(ColoredRootedTree(level_sequence, color_sequence))

iscanonical(t::ColoredRootedTree) = t.iscanonical
#TODO: Validate rooted tree in constructor?

Base.copy(t::ColoredRootedTree) = ColoredRootedTree(copy(t.level_sequence), copy(t.color_sequence), t.iscanonical)
Base.similar(t::ColoredRootedTree) = ColoredRootedTree(similar(t.level_sequence), similar(t.color_sequence), true)
Base.isempty(t::ColoredRootedTree) = isempty(t.level_sequence)
Base.empty(t::ColoredRootedTree) = ColoredRootedTree(empty(t.level_sequence), empty(t.color_sequence), iscanonical(t))

@inline function Base.copy!(t_dst::ColoredRootedTree, t_src::ColoredRootedTree)
  copy!(t_dst.level_sequence, t_src.level_sequence)
  copy!(t_dst.color_sequence, t_src.color_sequence)
  return t_dst
end

"""
    root_color(t::ColoredRootedTree)

Return the color of the root of `t`.
"""
root_color(t::ColoredRootedTree) = first(t.color_sequence)

# Internal interface
@inline function unsafe_deleteat!(t::ColoredRootedTree, i)
  deleteat!(t.level_sequence, i)
  deleteat!(t.color_sequence, i)
  return t
end

# Internal interface
@inline function unsafe_resize!(t::ColoredRootedTree, n::Integer)
  resize!(t.level_sequence, n)
  resize!(t.color_sequence, n)
  return t
end

# Internal interface
@inline function unsafe_copyto!(t_dst::ColoredRootedTree, dst_offset,
                                t_src::ColoredRootedTree, src_offset, N)
  copyto!(t_dst.level_sequence, dst_offset, t_src.level_sequence, src_offset, N)
  copyto!(t_dst.color_sequence, dst_offset, t_src.color_sequence, src_offset, N)
  return t_dst
end

function Base.show(io::IO, t::ColoredRootedTree{T}) where {T}
  # print(io, "ColoredRootedTree{", T, "}: [")
  # if !isempty(t)
  #   print(io, first(t.level_sequence), " (", first(t.color_sequence), ")")
  #   for i in Iterators.drop(eachindex(t.level_sequence, t.color_sequence), 1)
  #     print(io, ", ", t.level_sequence[i], " (", t.color_sequence[i], ")")
  #   end
  # end
  # print(io, "]")
  print(io, "ColoredRootedTree{", T, "}: ")
  show(io, (t.level_sequence, t.color_sequence))
end

# comparison

"""
    isless(t1::ColoredRootedTree, t2::ColoredRootedTree)

Compares two colored rooted trees using a lexicographical comparison of their
level (first) and color (second) sequences while considering equivalence classes
given by different root indices.
"""
function Base.isless(t1::ColoredRootedTree, t2::ColoredRootedTree)
  if isempty(t1.level_sequence)
    if isempty(t2.level_sequence)
      # empty trees are equal
      return false
    else
      # the empty tree `isless` than any other tree
      return true
    end
  elseif isempty(t2.level_sequence)
    # the empty tree `isless` than any other tree
    return false
  end

  root1_minus_root2 = first(t1.level_sequence) - first(t2.level_sequence)
  for (e1, e2) in zip(t1.level_sequence, t2.level_sequence)
    v1 = e1
    v2 = e2 + root1_minus_root2
    (v1 == v2) || return isless(v1, v2)
  end
  if length(t1.level_sequence) != length(t2.level_sequence)
    return isless(length(t1.level_sequence), length(t2.level_sequence))
  end
  return isless(t1.color_sequence, t2.color_sequence)
end

"""
    ==(t1::ColoredRootedTree, t2::ColoredRootedTree)

Compares two rooted trees based on their level (first) and color (second)
sequences while considering equivalence classes given by different root indices.
```
"""
function Base.:(==)(t1::ColoredRootedTree, t2::ColoredRootedTree)
  length(t1.level_sequence) == length(t2.level_sequence) || return false

  if isempty(t1.level_sequence)
    # empty trees are equal
    return true
  end

  root1_minus_root2 = first(t1.level_sequence) - first(t2.level_sequence)
  for (e1, c1, e2, c2) in zip(t1.level_sequence, t1.color_sequence, t2.level_sequence, t2.color_sequence)
    v1 = e1
    v2 = e2 + root1_minus_root2
    (v1 == v2 && c1 == c2) || return false
  end

  return true
end

# Factor out equivalence classes given by different roots
function Base.hash(t::ColoredRootedTree, h::UInt)
  # Use a fast path if possible
  if UInt == UInt64 && t isa BicoloredRootedTree && order(t) <= 12
    return simple_hash(t, h)
  end

  isempty(t.level_sequence) && return h
  root = first(t.level_sequence)
  for (l, c) in zip(t.level_sequence, t.color_sequence)
    h = hash(l - root, h)
    h = hash(c, h)
  end
  return h
end

# Map the level sequence to an unsigned integer by concatenating the bit
# representations of level sequence differences. If the level sequence increases
# from one vertex to the next, it can increase at most by unity. Since we want
# to use simple bits representations, we measure the decrease compared to the
# maximal possible increase.
# The maximal drop in the level sequence is
#   maximal_drop = length(t.level_sequence) - 3
# We need at most
#   number_of_bits = trunc(Int, log2(maximal_drop)) + 1
# bits to represent this. Thus, 64 bit allow us to compute unique hashes for
# level sequence up to length 16 in the following simple way; 64 bit result
# in `number_of_bits = 4` for `maximal_drop = 16 - 3 = 13`.
# For 32 bits, we could use a maximal length of 10 with `number_of_bits = 3`.
# However, most user systems should use 64 bit by default, so we only implement
# this option for simplicity.
# The binary color sequence is mapped to an unsigned integer by interpreting
# the Boolean colors as bits of an unsigned integer. Thus, we need one
# additional bit per level to store also the color information. Thus, we
# can use this simple version with 64 bits up to a maximal length of 12
# (maximal_drop = 9; number_of_bits = 4; max_length * (number_of_bits + 1) = 60)
@inline function simple_hash(t::BicoloredRootedTree, h_base::UInt64)
  isempty(t.level_sequence) && return h_base
  h = zero(h_base)
  l_prev = first(t.level_sequence)
  for l in t.level_sequence
    h = (h << 4) | (l_prev + 1 - l)
    l_prev = l
  end
  for c in t.color_sequence
    h = (h << 1) | c
  end
  return hash(h, h_base)
end

# generation and canonical representation
# A very simple implementation of `canonical_representation!` could read as
# follows.
#     function canonical_representation!(t::ColoredRootedTree)
#       subtr = subtrees(t)
#       for i in eachindex(subtr)
#         canonical_representation!(subtr[i])
#       end
#       sort!(subtr, rev=true)

#       i = 2
#       for τ in subtr
#         t.level_sequence[i:i+order(τ)-1] = τ.level_sequence
#         t.color_sequence[i:i+order(τ)-1] = τ.color_sequence
#         i += order(τ)
#       end

#       ColoredRootedTree(t.level_sequence, t.color_sequence, true)
#     end
# However, this would create a lot of intermediate allocations, which make it
# rather slow. Since most trees in use are relatively small, we can use a
# non-allocating sorting algorithm instead - although bubble sort is slower in
# general when comparing the complexity with quicksort etc., it will be faster
# here since we can avoid allocations.
function canonical_representation!(t::ColoredRootedTree,
                                   buffer_level=similar(t.level_sequence),
                                   buffer_color=similar(t.color_sequence))
  # Since we use a recursive implementation, it is useful to exit early for
  # small trees. If there are at most 3 vertices in a valid rooted tree, its
  # level sequence must already be in canonical representation. However, the
  # color sequence of the bushy tree may be wrong. Thus, we can only skip the
  # sorting for colored trees with at most two nodes.
  if order(t) <= 2
    return ColoredRootedTree(t.level_sequence, t.color_sequence, true)
  end

  # First, sort all subtrees recursively. Here, we use `view`s to avoid memory
  # allocations.
  # TODO: Assume 1-based indexing in the following
  subtree_root_index = 2
  number_of_subtrees = 0

  while subtree_root_index <= order(t)
    subtree_last_index = _subtree_last_index(subtree_root_index, t.level_sequence)

    # We found a complete subtree
    idx_subtree = subtree_root_index:subtree_last_index
    subtree = ColoredRootedTree(view(t.level_sequence, idx_subtree),
                                view(t.color_sequence, idx_subtree))
    canonical_representation!(subtree,
                              view(buffer_level, idx_subtree),
                              view(buffer_color, idx_subtree))

    subtree_root_index = subtree_last_index + 1
    number_of_subtrees += 1
  end

  # Next, we need to sort the subtrees of `t` (in lexicographically decreasing
  # order of the level sequences).
  if number_of_subtrees > 1
    # Simple bubble sort that can act in-place, avoiding allocations
    # We keep track of the last index of the last subtree that we need to sort
    # since we know that the last `n` subtrees are already sorted after `n`
    # iterations.
    subtree_last_index_to_sort = order(t)
    swapped = true
    while swapped
      swapped = false

      # Search the first complete subtree
      subtree1_root_index = 2
      subtree1_last_index = 0
      subtree2_last_index = 0
      while subtree1_root_index <= subtree_last_index_to_sort
        subtree1_last_index = _subtree_last_index(subtree1_root_index, t.level_sequence)
        subtree2_last_index = subtree1_last_index

        # Search the next complete subtree
        subtree1_last_index == subtree_last_index_to_sort && break

        subtree2_root_index = subtree1_last_index + 1
        subtree2_last_index = _subtree_last_index(subtree2_root_index, t.level_sequence)

        # Swap the subtrees if they are not sorted correctly
        subtree1_idx = subtree1_root_index:subtree1_last_index
        subtree1 = ColoredRootedTree(view(t.level_sequence, subtree1_idx),
                                     view(t.color_sequence, subtree1_idx))
        subtree2_idx = subtree2_root_index:subtree2_last_index
        subtree2 = ColoredRootedTree(view(t.level_sequence, subtree2_idx),
                                     view(t.color_sequence, subtree2_idx))
        if isless(subtree1, subtree2)
          copyto!(buffer_level, 1, t.level_sequence, subtree1_root_index, order(subtree1) + order(subtree2))
          copyto!(t.level_sequence, subtree1_root_index, buffer_level, order(subtree1) + 1, order(subtree2))
          copyto!(t.level_sequence, subtree1_root_index + order(subtree2), buffer_level, 1, order(subtree1))

          copyto!(buffer_color, 1, t.color_sequence, subtree1_root_index, order(subtree1) + order(subtree2))
          copyto!(t.color_sequence, subtree1_root_index, buffer_color, order(subtree1) + 1, order(subtree2))
          copyto!(t.color_sequence, subtree1_root_index + order(subtree2), buffer_color, 1, order(subtree1))

          # `subtree1_root_index` will be updated below using `subtree1_last_index`.
          # Thus, we need to adapt this variable here.
          subtree1_last_index = subtree1_root_index + order(subtree2) - 1
          swapped = true
        end

        # Move on to the next pair of subtrees
        subtree2_last_index == subtree_last_index_to_sort && break
        subtree1_root_index = subtree1_last_index + 1
      end

      # Update the last subtree we need to look at
      subtree_last_index_to_sort = min(subtree1_last_index, subtree2_last_index)
    end
  end

  ColoredRootedTree(t.level_sequence, t.color_sequence, true)
end

"""
    BicoloredRootedTreeIterator(order::Integer)

Iterator over all bi-colored rooted trees of given `order`. The returned trees
are views to an internal tree modified during the iteration. If the returned
trees shall be stored or modified during the iteration, a `copy` has to be made.
"""
struct BicoloredRootedTreeIterator{T<:Integer}
  number_of_colors::T
  iter::RootedTreeIterator{T}
  t::BicoloredRootedTree{T, Vector{T}, Vector{Bool}}

  function BicoloredRootedTreeIterator(order::T) where {T<:Integer}
    iter = RootedTreeIterator(order)
    number_of_colors = convert(T, 2)^order
    t = ColoredRootedTree(iter.t.level_sequence, zeros(Bool, order), true)
    new{T}(number_of_colors, iter, t)
  end
end

Base.IteratorSize(::Type{<:BicoloredRootedTreeIterator}) = Base.SizeUnknown()
Base.eltype(::Type{BicoloredRootedTreeIterator{T}}) where T = BicoloredRootedTree{T, Vector{T}, Vector{Bool}}

@inline function Base.iterate(iter::BicoloredRootedTreeIterator)
  _, inner_state = iterate(iter.iter)
  color_id = 0
  binary_digits!(iter.t.color_sequence, color_id)
  (iter.t, (inner_state, color_id + 1))
end

@inline function Base.iterate(iter::BicoloredRootedTreeIterator, state)
  inner_state, color_id = state

  # If we can iterate more by changing the color sequence, let's do so.
  while color_id < iter.number_of_colors
    binary_digits!(iter.t.color_sequence, color_id)

    # This simple enumeration of all possible colors can also yield colored
    # trees that are not in canonical representation. For example, the trees
    #   rootedtree([1, 2, 2], Bool[0, 0, 1])
    #   rootedtree([1, 2, 2], Bool[1, 0, 1])
    # are not in canonical representation.
    # TODO: ColoredRootedTrees. Is there a more efficient way to get only
    #       canonical representations?
    if check_canonical(iter.t)
      return (iter.t, (inner_state, color_id + 1))
    else
      color_id = color_id + 1
    end
  end

  # Now, we need to iterate to a new baseline (uncolored) tree - if possible
  inner_value_state = iterate(iter.iter, inner_state)
  if inner_value_state === nothing
    return nothing
  end

  _, inner_state = inner_value_state
  color_id = 0
  binary_digits!(iter.t.color_sequence, color_id)
  return (iter.t, (inner_state, color_id + 1))
end

# subtrees
@inline function Base.iterate(subtrees::SubtreeIterator{<:ColoredRootedTree})
  subtree_root_index = firstindex(subtrees.t.level_sequence) + 1
  iterate(subtrees, subtree_root_index)
end

@inline function Base.iterate(subtrees::SubtreeIterator{<:ColoredRootedTree}, subtree_root_index)
  level_sequence = subtrees.t.level_sequence
  color_sequence = subtrees.t.color_sequence

  # terminate the iteration if there are no further subtrees
  if subtree_root_index > lastindex(level_sequence)
    return nothing
  end

  # find the next complete subtree
  subtree_last_index = _subtree_last_index(subtree_root_index, level_sequence)
  subtree = ColoredRootedTree(
    view(level_sequence, subtree_root_index:subtree_last_index),
    view(color_sequence, subtree_root_index:subtree_last_index),
    # if t is in canonical representation, its subtrees are, too
    iscanonical(subtrees.t))

  return (subtree, subtree_last_index + 1)
end

"""
    subtrees(t::ColoredRootedTree)

Returns a vector of all subtrees of `t`.
"""
function subtrees(t::ColoredRootedTree)
  subtr = ColoredRootedTree{eltype(t.level_sequence),
                            Vector{eltype(t.level_sequence)},
                            Vector{eltype(t.color_sequence)}}[]

  if length(t.level_sequence) < 2
    return subtr
  end

  start = 2
  i = 3
  while i <= length(t.level_sequence)
    if t.level_sequence[i] <= t.level_sequence[start]
      push!(subtr, ColoredRootedTree(t.level_sequence[start:i-1], t.color_sequence[start:i-1]))
      start = i
    end
    i += 1
  end
  push!(subtr, ColoredRootedTree(t.level_sequence[start:end], t.color_sequence[start:end]))
end

# partitions
# We only need to specialize this performance enhancement. The remaining parts
# are implemented generically.
function PartitionIterator(t::ColoredRootedTree{Int, Vector{Int}, Vector{Bool}})
  order_t = order(t)

  if order_t <= BUFFER_LENGTH
    id = Threads.threadid()

    buffer_forest_t        = PARTITION_ITERATOR_BUFFER_FOREST_T[id]
    resize!(buffer_forest_t, order_t)
    buffer_forest_t_colors = PARTITION_ITERATOR_BUFFER_FOREST_T_COLORS[id]
    resize!(buffer_forest_t_colors, order_t)
    level_sequence         = PARTITION_ITERATOR_BUFFER_FOREST_LEVEL_SEQUENCE[id]
    resize!(level_sequence, order_t)
    color_sequence         = PARTITION_ITERATOR_BUFFER_FOREST_COLOR_SEQUENCE[id]
    resize!(color_sequence, order_t)
    buffer_skeleton        = PARTITION_ITERATOR_BUFFER_SKELETON[id]
    resize!(buffer_skeleton, order_t)
    buffer_skeleton_colors = PARTITION_ITERATOR_BUFFER_SKELETON_COLORS[id]
    resize!(buffer_skeleton_colors, order_t)
    edge_set                = PARTITION_ITERATOR_BUFFER_EDGE_SET[id]
    resize!(edge_set, order_t - 1)
    edge_set_tmp            = PARTITION_ITERATOR_BUFFER_EDGE_SET_TMP[id]
    resize!(edge_set_tmp, order_t - 1)
  else
    buffer_forest_t        = Vector{Int}(undef, order_t)
    buffer_forest_t_colors = Vector{Bool}(undef, order_t)
    level_sequence         = similar(buffer_forest_t)
    color_sequence         = similar(buffer_forest_t_colors)
    buffer_skeleton        = similar(buffer_forest_t)
    buffer_skeleton_colors = similar(buffer_forest_t_colors)
    edge_set               = Vector{Bool}(undef, order_t - 1)
    edge_set_tmp           = similar(edge_set)
  end

  skeleton = ColoredRootedTree(buffer_skeleton, buffer_skeleton_colors, true)
  t_forest = ColoredRootedTree(buffer_forest_t, buffer_forest_t_colors, true)
  t_temp_forest = ColoredRootedTree(level_sequence, color_sequence, true)
  forest = PartitionForestIterator(t_forest, t_temp_forest, edge_set_tmp)
  PartitionIterator{typeof(t), ColoredRootedTree{Int, Vector{Int}, Vector{Bool}}}(
    t, forest, skeleton, edge_set, edge_set_tmp)
end

# TODO: ColoredRootedTree. splittings
# SplittingIterator

# additional representation and construction methods

function Base.:∘(t1::ColoredRootedTree, t2::ColoredRootedTree)
  offset = first(t1.level_sequence) - first(t2.level_sequence) + 1
  level_sequence = vcat(t1.level_sequence, t2.level_sequence .+ offset)
  color_sequence = vcat(t1.color_sequence, t2.color_sequence)
  rootedtree(level_sequence, color_sequence)
end

function butcher_representation(t::ColoredRootedTree, normalize::Bool=true;
                                colormap=_colormap_butcher_representation(t))
  if order(t) == 0
    return "∅"
  elseif order(t) == 1
    return "τ" * colormap[root_color(t)]
  end

  result = ""
  for subtree in SubtreeIterator(t)
    result = result * butcher_representation(subtree, normalize, colormap=colormap)
  end
  result = "[" * result * "]" * colormap[root_color(t)]

  if normalize
    # normalize the result by grouping repeated occurrences of τ
    # TODO: Decide whether powers should also be used for subtrees,
    #       e.g., "[[τ]²]" instead of "[[τ][τ]]"
    #       for rootedtree([1, 2, 3, 2, 3]).
    #       Currently, powers are only used for τ.
    for n in order(t):-1:2
      n_str = string(n)
      n_str = replace(n_str, "1" => "¹")
      n_str = replace(n_str, "2" => "²")
      n_str = replace(n_str, "3" => "³")
      n_str = replace(n_str, "4" => "⁴")
      n_str = replace(n_str, "5" => "⁵")
      n_str = replace(n_str, "6" => "⁶")
      n_str = replace(n_str, "7" => "⁷")
      n_str = replace(n_str, "8" => "⁸")
      n_str = replace(n_str, "9" => "⁹")
      n_str = replace(n_str, "0" => "⁰")
      for index in values(colormap)
        str = "τ" * index
        result = replace(result, str^n => str * n_str)
      end
    end
  end

  return result
end

function _colormap_butcher_representation(t::ColoredRootedTree)
  colors = sort!(unique(t.color_sequence))
  if length(colors) > 10
    @error "Not implemented for trees with more than 10 colors"
  end

  indices = ["₀", "₁", "₂", "₃", "₄", "₅", "₆", "₇", "₈", "₉"]

  colormap = Dict{eltype(colors), String}()

  if issubset(colors, 0:9) || eltype(colors) == Bool
    for color in colors
      colormap[color] = indices[color + 1]
    end
  else
    for (color, index) in zip(colors, indices)
      colormap[color] = index
    end
  end

  return colormap
end


text:
module day09

using Combinatorics, CircularArrays

include("inputs.jl")

ex = CircularArray(inputs.ex1_d9())
input = CircularArray(inputs.input_d9())

function first_invalid(input, pream_len=25)
    idx = 1
    window = input[idx:pream_len]
    next = input[pream_len+1]

    while next ∈ sum.(combinations(window, 2))
        idx += 1
        window = input[idx:(idx+pream_len)]
        next = input[pream_len+1+idx]
    end
    return next
end

@assert first_invalid(ex, 5) == 127
@assert first_invalid(input) == 556543474
@info "Day 9, Part 1 answer: $(first_invalid(input))"

function find_contig(input, inval)
    for testdepth in 1:100
        for init in 1:length(input), len in 2:testdepth
            inval ∈ sum(input[range(init, length=len)]) && return input[range(init, length=len)]
        end
    end
end

inval = first_invalid(input)
part2(input, pream) = sum(extrema(find_contig(input, first_invalid(input, pream))))
@assert part2(ex, 5) == 62
@assert part2(input, 25) == 76096372
@info "Day 9, Part 2 answer: $(part2(input, 25))"

end

ext: jl


text:
using Clang.Generators
using FreeType2_jll

cd(@__DIR__)

include_dir = joinpath(FreeType2_jll.artifact_dir, "include", "freetype2") |> normpath
freetype_h = joinpath(include_dir, "freetype", "freetype.h") |> normpath
ftoutln_h = joinpath(include_dir, "freetype", "ftoutln.h") |> normpath
@assert isfile(freetype_h)

options = load_options(joinpath(@__DIR__, "generator.toml"))

args = get_default_args()
push!(args, "-I$include_dir", "-DFT_FREETYPE_H")

ctx = create_context([freetype_h, ftoutln_h], args, options)

build!(ctx)


text:
# ------------------------------------------ #
#                   Importing                #
# ------------------------------------------ #
using KissMCMC, LaTeXStrings

# ------------------------------------------ #
#           Loop over the two days           #
# ------------------------------------------ #

model_runs = Dict()
if !@isdefined n_iterations
    n_iterations = 5*10^4 # at least 10^6 for nice distribution in plot
end

if !@isdefined use_progress_meter
    use_progress_meter = true # shows nice progress bar; but hide it for Literate.jl
end

for date in ["0908", "2108"]

    out = Dict()

    # ------------------------------------------ #
    #            free-gradient model, MCMC       #
    # ------------------------------------------ #

    # initial point of walker
    if date == "0908"
        gradT0 = -5e-4;
    elseif date == "2108"
        gradT0 = -2e-3;
    end
    Sinit_0 = pmean(mid_309_265[date][:S][1]);
    Sinit_std = pstd(mid_309_265[date][:S][1]);
    theta0 = [gradT0, Sinit_0];

    # prior information
    dTmin, dTmax = -1e-2, -1e-6;
    # logarithmic posterior density function
    logposterior = R.make_logpdf(date, mid_309_265, [dTmin, dTmax]);

    # emcee MCMC sampler:
    thetas, accept_ratioe, logdensities, blobs = emcee(logposterior, make_theta0s(theta0, [1e-3, Sinit_std],
                                                                                logposterior, 6, hasblob=true),
                                                       niter=n_iterations, hasblob=true, use_progress_meter=use_progress_meter)
    thetas, accept_ratioe, logdensities, blobs = squash_walkers(thetas, accept_ratioe, logdensities, blobs); # puts all walkers into one

    out[:dTdz_MCMC] = [thetas[k][1] for k in 1:length(thetas)];
    # out[:Sinit] = [thetas[k][2] for k in 1:length(thetas)];

    out[:S_MCMC] = [blobs[k][1] for k in 1:length(blobs)];
    out[:dSdt_MCMC] = [blobs[k][2] for k in 1:length(blobs)];
    out[:dSdt_sensible_MCMC] = [blobs[k][3] for k in 1:length(blobs)];

    # ------------------------------------------ #
    #                   ct-model                 #
    # ------------------------------------------ #

    dp = mean(mid_309_265[date][:dp], dims=1) # mean pressure difference over the tracer experiments
    out[:dTdz_ct] = dp * ct / mid_309_265[date][:dz]
    out[:S_ct],
        out[:dSdt_ct],
        out[:dSdt_sensible_ct] = R.model_S(mid_309_265, date, out[:dTdz_ct], Sinit_0)

    # ------------------------------------------ #
    #                closure rate                #
    # ------------------------------------------ #

    out[:closure] = R.closure_rate(ctd309, ctd265, mid_309_265, date)

    # ------------------------------------------ #
    #            dT/dz from measurements         #
    # ------------------------------------------ #

    i = indices[date][1][1]:indices[date][4][end] # indices from appearance of first tracer signal until disappearance of last one
    out[:dTdz_measured] = (Particles.(n_partcl, Normal.(
                            mean(ctd265[date][:temp_PT][i]), e_T))
                        - Particles.(n_partcl, Normal.(
                            mean(ctd309[date][:temp_PT][i]), e_T))
                        ) / mid_309_265[date][:dz]

    # ------------------------------------------ #
    #              Save in dictionary            #
    # ------------------------------------------ #

    model_runs[date] = out

end

## Table S2
## print latex table of total opening rate, opening rate due to sensible heat and closure rate
table_s3 = ""
for (MCMC, c_t, description) in zip([:dSdt_MCMC, :dSdt_sensible_MCMC],
                                 [:dSdt_ct, :dSdt_sensible_ct],
                                 [L"Total opening rate ($\mathrm{m^2\,s^{-1}}$)", L"Opening rate due to sensible heat ($\mathrm{m^2\,s^{-1}}$)"])
    for date in ["0908", "2108"]
        if date == "0908"
            o = description
        else
            o = ""
        end
        values_ct = only(mean(model_runs[date][c_t], dims=1))
        values_MCMC = only(mean(
                    [ bootstrap(
                        Particles([model_runs[date][MCMC][i][k] for i in 1:length(model_runs[date][MCMC])]),
                        n_partcl)
                      for k in 1:length(model_runs[date][MCMC][1]) ]
                    , dims=1))
        if date == "0908"
            o = o * " & " * string(pmean(values_ct) ± pstd(values_ct)) * " & " * string(pmean(values_MCMC) ± pstd(values_MCMC)) * "\\\\ \n"
        else
            o = o * " & \\textbf{" * string(pmean(values_ct) ± pstd(values_ct)) * "} & \\textbf{" * string(pmean(values_MCMC) ± pstd(values_MCMC)) * "} \\\\ \n"
        end
        global table_s3 *= o
    end
end
table_s3 *= "\\hline \n"
closure_rate = only(mean(model_runs["0908"][:closure], dims=1))
o = L"Closure rate ($\mathrm{m^2\,s^{-1}}$)" * " & \\multicolumn{2}{" * string(pmean(closure_rate) ± pstd(closure_rate)) * "} \\\\ \n"
table_s3 *= o
closure_rate = only(mean(model_runs["2108"][:closure], dims=1))
o = " & \\multicolumn{2}{\\textbf{" * string(pmean(closure_rate) ± pstd(closure_rate)) * "}} \\\\ \n"
table_s3 *= o


text:
""" antecessor e sucessor de um número
# Leia um número inteiro
# e imprima o seu antecedente e o seu sucessor.
"""

print("informe um numero ")
number = parse(UInt8, readline())

println("Antecedente = ", number-1)
println("Sucessor = ", number+1)

max_stars_repo_name: codinginbrazil/functional-programming

max_issues_repo_name: codinginbrazil/functional-programming

max_forks_repo_name: codinginbrazil/functional-programming


text:
# Implement some extensions to Euclidean and Squared-Euclidean distances.
for (d, D) in [(:sqeuclidean, :SqEuclidean), (:euclidean, :Euclidean)]
    @eval begin
        function ew(d::$D, x::AV{<:Real}, x′::AV{<:Real})
            return colwise($D(dtol), reshape(x, 1, :), reshape(x′, 1, :))
        end
        function pw(d::$D, x::AV{<:Real}, x′::AV{<:Real})
            return pw($D(dtol), reshape(x, 1, :), reshape(x′, 1, :); dims=2)
        end

        ew(::$D, x::AV{T}) where {T<:Real} = zeros(T, length(x))
        pw(::$D, x::AV{<:Real}) = pairwise($D(dtol), x, x)

        ew(::$D, x::ColVecs{<:Real}, x′::ColVecs{<:Real}) = colwise($D(dtol), x.X, x′.X)
        pw(::$D, x::ColVecs{<:Real}, x′::ColVecs{<:Real}) = pw($D(dtol), x.X, x′.X; dims=2)

        ew(::$D, x::ColVecs{T}) where {T<:Real} = zeros(T, length(x))
        pw(::$D, x::ColVecs{<:Real}) = pairwise($D(dtol), x.X; dims=2)
    end
end

@adjoint function pairwise(::Euclidean, X::AV{<:Real})
    D, back = Zygote.pullback(X->pairwise(SqEuclidean(dtol), X), X)
    D .= sqrt.(D)
    return D, function(Δ)
        Δ = Δ ./ (2 .* D)
        Δ[diagind(Δ)] .= 0
        return (nothing, first(back(Δ)))
    end
end


text:
# image_geom_mri.jl

using MIRT: image_geom_mri
using MIRT: ImageGeom
using Test: @test, @inferred

#@inferred
@test image_geom_mri( ; nx = 64, dx = 2) isa ImageGeom{2}


text:
export BrickletRS232V2ReadLowLevel
struct BrickletRS232V2ReadLowLevel
    message_length::Integer
    message_chunk_offset::Integer
    message_chunk_data::Vector{Char}
end

export BrickletRS232V2Configuration
struct BrickletRS232V2Configuration
    baudrate::Integer
    parity::Integer
    stopbits::Integer
    wordlength::Integer
    flowcontrol::Integer
end

export BrickletRS232V2BufferConfig
struct BrickletRS232V2BufferConfig
    send_buffer_size::Integer
    receive_buffer_size::Integer
end

export BrickletRS232V2BufferStatus
struct BrickletRS232V2BufferStatus
    send_buffer_used::Integer
    receive_buffer_used::Integer
end

export BrickletRS232V2ErrorCount
struct BrickletRS232V2ErrorCount
    error_count_overrun::Integer
    error_count_parity::Integer
end

export BrickletRS232V2SPITFPErrorCount
struct BrickletRS232V2SPITFPErrorCount
    error_count_ack_checksum::Integer
    error_count_message_checksum::Integer
    error_count_frame::Integer
    error_count_overflow::Integer
end

export BrickletRS232V2Identity
struct BrickletRS232V2Identity
    uid::String
    connected_uid::String
    position::Char
    hardware_version::Vector{Integer}
    firmware_version::Vector{Integer}
    device_identifier::Integer
end

export BrickletRS232V2
"""
Communicates with RS232 devices
"""
mutable struct BrickletRS232V2 <: TinkerforgeDevice
    ipcon::IPConnection
    deviceInternal::PyObject

    """
    Creates an object with the unique device ID *uid* and adds it to
    the IP Connection *ipcon*.
    """
    function BrickletRS232V2(uid::String, ipcon::IPConnection)
        package = pyimport("tinkerforge.bricklet_rs232_v2")
        deviceInternal = package.BrickletRS232V2(uid, ipcon.ipconInternal)

        return new(ipcon, deviceInternal)
    end
end

export write_low_level
"""
    $(SIGNATURES)

Writes characters to the RS232 interface. The characters can be binary data,
ASCII or similar is not necessary.

The return value is the number of characters that were written.

See :func:`Set Configuration` for configuration possibilities
regarding baud rate, parity and so on.
"""
function write_low_level(device::BrickletRS232V2, message_length, message_chunk_offset, message_chunk_data)
    return device.deviceInternal.write_low_level(message_length, message_chunk_offset, message_chunk_data)
end

export read_low_level
"""
    $(SIGNATURES)

Returns up to *length* characters from receive buffer.

Instead of polling with this function, you can also use
callbacks. But note that this function will return available
data only when the read callback is disabled.
See :func:`Enable Read Callback` and :cb:`Read` callback.
"""
function read_low_level(device::BrickletRS232V2, length)
    return device.deviceInternal.read_low_level(length)
end

export enable_read_callback
"""
    $(SIGNATURES)

Enables the :cb:`Read` callback. This will disable the :cb:`Frame Readable` callback.

By default the callback is disabled.
"""
function enable_read_callback(device::BrickletRS232V2)
    device.deviceInternal.enable_read_callback()
end

export disable_read_callback
"""
    $(SIGNATURES)

Disables the :cb:`Read` callback.

By default the callback is disabled.
"""
function disable_read_callback(device::BrickletRS232V2)
    device.deviceInternal.disable_read_callback()
end

export is_read_callback_enabled
"""
    $(SIGNATURES)

Returns *true* if the :cb:`Read` callback is enabled,
*false* otherwise.
"""
function is_read_callback_enabled(device::BrickletRS232V2)
    return device.deviceInternal.is_read_callback_enabled()
end

export set_configuration
"""
    $(SIGNATURES)

Sets the configuration for the RS232 communication.
"""
function set_configuration(device::BrickletRS232V2, baudrate, parity, stopbits, wordlength, flowcontrol)
    device.deviceInternal.set_configuration(baudrate, parity, stopbits, wordlength, flowcontrol)
end

export get_configuration
"""
    $(SIGNATURES)

Returns the configuration as set by :func:`Set Configuration`.
"""
function get_configuration(device::BrickletRS232V2)
    return device.deviceInternal.get_configuration()
end

export set_buffer_config
"""
    $(SIGNATURES)

Sets the send and receive buffer size in byte. In total the buffers have to be
10240 byte (10KiB) in size, the minimum buffer size is 1024 byte (1KiB) for each.

The current buffer content is lost if this function is called.

The send buffer holds data that is given by :func:`Write` and
can not be written yet. The receive buffer holds data that is
received through RS232 but could not yet be send to the
user, either by :func:`Read` or through :cb:`Read` callback.
"""
function set_buffer_config(device::BrickletRS232V2, send_buffer_size, receive_buffer_size)
    device.deviceInternal.set_buffer_config(send_buffer_size, receive_buffer_size)
end

export get_buffer_config
"""
    $(SIGNATURES)

Returns the buffer configuration as set by :func:`Set Buffer Config`.
"""
function get_buffer_config(device::BrickletRS232V2)
    return device.deviceInternal.get_buffer_config()
end

export get_buffer_status
"""
    $(SIGNATURES)

Returns the currently used bytes for the send and received buffer.

See :func:`Set Buffer Config` for buffer size configuration.
"""
function get_buffer_status(device::BrickletRS232V2)
    return device.deviceInternal.get_buffer_status()
end

export get_error_count
"""
    $(SIGNATURES)

Returns the current number of overrun and parity errors.
"""
function get_error_count(device::BrickletRS232V2)
    return device.deviceInternal.get_error_count()
end

export set_frame_readable_callback_configuration
"""
    $(SIGNATURES)

Configures the :cb:`Frame Readable` callback. The frame size is the number of bytes, that have to be readable to trigger the callback.
A frame size of 0 disables the callback. A frame size greater than 0 enables the callback and disables the :cb:`Read` callback.

By default the callback is disabled.

.. versionadded:: 2.0.3\$nbsp;(Plugin)
"""
function set_frame_readable_callback_configuration(device::BrickletRS232V2, frame_size)
    device.deviceInternal.set_frame_readable_callback_configuration(frame_size)
end

export get_frame_readable_callback_configuration
"""
    $(SIGNATURES)

Returns the callback configuration as set by :func:`Set Frame Readable Callback Configuration`.

.. versionadded:: 2.0.3\$nbsp;(Plugin)
"""
function get_frame_readable_callback_configuration(device::BrickletRS232V2)
    return device.deviceInternal.get_frame_readable_callback_configuration()
end

export get_spitfp_error_count
"""
    $(SIGNATURES)

Returns the error count for the communication between Brick and Bricklet.

The errors are divided into

* ACK checksum errors,
* message checksum errors,
* framing errors and
* overflow errors.

The errors counts are for errors that occur on the Bricklet side. All
Bricks have a similar function that returns the errors on the Brick side.
"""
function get_spitfp_error_count(device::BrickletRS232V2)
    return device.deviceInternal.get_spitfp_error_count()
end

export set_bootloader_mode
"""
    $(SIGNATURES)

Sets the bootloader mode and returns the status after the requested
mode change was instigated.

You can change from bootloader mode to firmware mode and vice versa. A change
from bootloader mode to firmware mode will only take place if the entry function,
device identifier and CRC are present and correct.

This function is used by Brick Viewer during flashing. It should not be
necessary to call it in a normal user program.
"""
function set_bootloader_mode(device::BrickletRS232V2, mode)
    return device.deviceInternal.set_bootloader_mode(mode)
end

export get_bootloader_mode
"""
    $(SIGNATURES)

Returns the current bootloader mode, see :func:`Set Bootloader Mode`.
"""
function get_bootloader_mode(device::BrickletRS232V2)
    return device.deviceInternal.get_bootloader_mode()
end

export set_write_firmware_pointer
"""
    $(SIGNATURES)

Sets the firmware pointer for :func:`Write Firmware`. The pointer has
to be increased by chunks of size 64. The data is written to flash
every 4 chunks (which equals to one page of size 256).

This function is used by Brick Viewer during flashing. It should not be
necessary to call it in a normal user program.
"""
function set_write_firmware_pointer(device::BrickletRS232V2, pointer)
    device.deviceInternal.set_write_firmware_pointer(pointer)
end

export write_firmware
"""
    $(SIGNATURES)

Writes 64 Bytes of firmware at the position as written by
:func:`Set Write Firmware Pointer` before. The firmware is written
to flash every 4 chunks.

You can only write firmware in bootloader mode.

This function is used by Brick Viewer during flashing. It should not be
necessary to call it in a normal user program.
"""
function write_firmware(device::BrickletRS232V2, data)
    return device.deviceInternal.write_firmware(data)
end

export set_status_led_config
"""
    $(SIGNATURES)

Sets the status LED configuration. By default the LED shows
communication traffic between Brick and Bricklet, it flickers once
for every 10 received data packets.

You can also turn the LED permanently on/off or show a heartbeat.

If the Bricklet is in bootloader mode, the LED is will show heartbeat by default.
"""
function set_status_led_config(device::BrickletRS232V2, config)
    device.deviceInternal.set_status_led_config(config)
end

export get_status_led_config
"""
    $(SIGNATURES)

Returns the configuration as set by :func:`Set Status LED Config`
"""
function get_status_led_config(device::BrickletRS232V2)
    return device.deviceInternal.get_status_led_config()
end

export get_chip_temperature
"""
    $(SIGNATURES)

Returns the temperature as measured inside the microcontroller. The
value returned is not the ambient temperature!

The temperature is only proportional to the real temperature and it has bad
accuracy. Practically it is only useful as an indicator for
temperature changes.
"""
function get_chip_temperature(device::BrickletRS232V2)
    return device.deviceInternal.get_chip_temperature()
end

export reset
"""
    $(SIGNATURES)

Calling this function will reset the Bricklet. All configurations
will be lost.

After a reset you have to create new device objects,
calling functions on the existing ones will result in
undefined behavior!
"""
function reset(device::BrickletRS232V2)
    device.deviceInternal.reset()
end

export write_uid
"""
    $(SIGNATURES)

Writes a new UID into flash. If you want to set a new UID
you have to decode the Base58 encoded UID string into an
integer first.

We recommend that you use Brick Viewer to change the UID.
"""
function write_uid(device::BrickletRS232V2, uid)
    device.deviceInternal.write_uid(uid)
end

export read_uid
"""
    $(SIGNATURES)

Returns the current UID as an integer. Encode as
Base58 to get the usual string version.
"""
function read_uid(device::BrickletRS232V2)
    return device.deviceInternal.read_uid()
end

export get_identity
"""
    $(SIGNATURES)

Returns the UID, the UID where the Bricklet is connected to,
the position, the hardware and firmware version as well as the
device identifier.

The position can be 'a', 'b', 'c', 'd', 'e', 'f', 'g' or 'h' (Bricklet Port).
A Bricklet connected to an :ref:`Isolator Bricklet <isolator_bricklet>` is always at
position 'z'.

The device identifier numbers can be found :ref:`here <device_identifier>`.
|device_identifier_constant|
"""
function get_identity(device::BrickletRS232V2)
    return device.deviceInternal.get_identity()
end

export write
"""
Writes characters to the RS232 interface. The characters can be binary data,
ASCII or similar is not necessary.

The return value is the number of characters that were written.

See :func:`Set Configuration` for configuration possibilities
regarding baud rate, parity and so on.
"""
function write(device::BrickletRS232V2, message)

        message = convert(Vector{String}, message)

    if length(message) > 65535
        throw(TinkerforgeInvalidParameterError("Message can be at most 65535 items long"))
    end

    message_length = length(message)
    message_chunk_offset = 0

    if message_length == 0
        message_chunk_data = ['\0'] * 60
        ret = write_low_level(device, message_length, message_chunk_offset, message_chunk_data)
        message_written = ret
    else
        message_written = 0

        lock(device.stream_lock) do
            while message_chunk_offset < message_length
                message_chunk_data = create_chunk_data(message, message_chunk_offset, 60, '\0')
                ret = write_low_level(device, message_length, message_chunk_offset, message_chunk_data)
                message_written += ret

                if ret < 60
                    break # either last chunk or short write
                end

                message_chunk_offset += 60
            end
        end
    end

        return message_written
end

export read
"""
Returns up to *length* characters from receive buffer.

Instead of polling with this function, you can also use
callbacks. But note that this function will return available
data only when the read callback is disabled.
See :func:`Enable Read Callback` and :cb:`Read` callback.
"""
function read(device::BrickletRS232V2, length)

        length = UInt16(length)

    lock(device.stream_lock) do
        ret = read_low_level(device, length)
            message_length = ret.message_length
        message_out_of_sync = ret.message_chunk_offset != 0

        message_data = ret.message_chunk_data

        while !message_out_of_sync && length(message_data) < message_length
            ret = read_low_level(device, length)
                message_length = ret.message_length
            message_out_of_sync = ret.message_chunk_offset != length(message_data)
            message_data += ret.message_chunk_data
        end

        if message_out_of_sync # discard remaining stream to bring it back in-sync
            while ret.message_chunk_offset + 60 < message_length
                ret = read_low_level(device, length)
                    message_length = ret.message_length
            end

            throw(TinkerforgeStreamOutOfSyncError("Message stream is out-of-sync"))
        end
    end

        return message_data[:message_length]
end

export register_callback
"""
Registers the given *function* with the given *callback_id*.
"""
function register_callback(device::BrickletRS232V2, callback_id, function_)
    if isnothing(function_)
        device.registered_callbacks.pop(callback_id, None)
    else
        device.registered_callbacks[callback_id] = function_
    end
end


text:
module M0_0
function f(q::Vector{T}, q_dot::Vector{T}, xi::T) where T
    l1 = q[1]
    l2 = q[2]
    l3 = q[3]
    l1_dot = q_dot[1]
    l2_dot = q_dot[2]
    l3_dot = q_dot[3]

    5.53436344864651e+17*l1.^18 - 4.8090190002e+18*l1.^17.*l2 - 4.8090190002e+18*l1.^17.*l3 + 5.15724310745555e+16*l1.^17 + 2.31139995715999e+19*l1.^16.*l2.^2 + 3.30670379789799e+19*l1.^16.*l2.*l3 - 3.68742882183072e+17*l1.^16.*l2 + 2.31139995715999e+19*l1.^16.*l3.^2 - 3.68742882183072e+17*l1.^16.*l3 + 2.41644260879436e+16*l1.^16 - 7.69390145230899e+19*l1.^15.*l2.^3 - 1.29196727131924e+20*l1.^15.*l2.^2.*l3 + 1.47153336666065e+18*l1.^15.*l2.^2 - 1.29196727131924e+20*l1.^15.*l2.*l3.^2 + 1.84285487039745e+18*l1.^15.*l2.*l3 - 1.97456895458837e+17*l1.^15.*l2 - 7.69390145230899e+19*l1.^15.*l3.^3 + 1.47153336666065e+18*l1.^15.*l3.^2 - 1.97456895458837e+17*l1.^15.*l3 - 1.24244602658643e+15*l1.^15 + 1.95717816717947e+20*l1.^14.*l2.^4 + 3.44602576540088e+20*l1.^14.*l2.^3.*l3 - 3.9917061651706e+18*l1.^14.*l2.^3 + 4.34777633458962e+20*l1.^14.*l2.^2.*l3.^2 - 5.18818656610028e+18*l1.^14.*l2.^2.*l3 + 9.13743861789824e+17*l1.^14.*l2.^2 + 3.44602576540088e+20*l1.^14.*l2.*l3.^3 - 5.18818656610028e+18*l1.^14.*l2.*l3.^2 + 1.18548857706711e+18*l1.^14.*l2.*l3 + 7.66843031463025e+15*l1.^14.*l2 + 1.95717816717947e+20*l1.^14.*l3.^4 - 3.9917061651706e+18*l1.^14.*l3.^3 + 9.13743861789824e+17*l1.^14.*l3.^2 + 7.66843031463025e+15*l1.^14.*l3 - 452604466899092.0*l1.^14 - 3.99090686595394e+20*l1.^13.*l2.^5 - 6.90685619791023e+20*l1.^13.*l2.^4.*l3 + 8.0865571924903e+18*l1.^13.*l2.^4 - 1.00196623479682e+21*l1.^13.*l2.^3.*l3.^2 + 8.66416842052532e+18*l1.^13.*l2.^3.*l3 - 2.92356649747454e+18*l1.^13.*l2.^3 - 1.00196623479682e+21*l1.^13.*l2.^2.*l3.^3 + 1.12634189466829e+19*l1.^13.*l2.^2.*l3.^2 - 4.20033288849909e+18*l1.^13.*l2.^2.*l3 - 2.67927473797752e+16*l1.^13.*l2.^2 - 6.90685619791023e+20*l1.^13.*l2.*l3.^4 + 8.66416842052532e+18*l1.^13.*l2.*l3.^3 - 4.20033288849909e+18*l1.^13.*l2.*l3.^2 - 3.0673721258521e+16*l1.^13.*l2.*l3 + 3.22240409581671e+15*l1.^13.*l2 - 3.99090686595394e+20*l1.^13.*l3.^5 + 8.0865571924903e+18*l1.^13.*l3.^4 - 2.92356649747454e+18*l1.^13.*l3.^3 - 2.67927473797752e+16*l1.^13.*l3.^2 + 3.22240409581671e+15*l1.^13.*l3 + 16251848256920.2*l1.^13 + 6.71734294136156e+20*l1.^12.*l2.^6 + 1.07345796638641e+21*l1.^12.*l2.^5.*l3 - 1.26472791805168e+19*l1.^12.*l2.^5 + 1.78001966686823e+21*l1.^12.*l2.^4.*l3.^2 - 7.73758374221914e+18*l1.^12.*l2.^4.*l3 + 7.09428529223957e+18*l1.^12.*l2.^4 + 1.94079018235802e+21*l1.^12.*l2.^3.*l3.^3 - 1.24667756717559e+19*l1.^12.*l2.^3.*l3.^2 + 1.00484931670391e+19*l1.^12.*l2.^3.*l3 + 6.28904803242542e+16*l1.^12.*l2.^3 + 1.78001966686823e+21*l1.^12.*l2.^2.*l3.^4 - 1.24667756717559e+19*l1.^12.*l2.^2.*l3.^3 + 1.24615031453864e+19*l1.^12.*l2.^2.*l3.^2 + 6.9623736210271e+16*l1.^12.*l2.^2.*l3 - 1.32366856382182e+16*l1.^12.*l2.^2 + 1.07345796638641e+21*l1.^12.*l2.*l3.^5 - 7.73758374221914e+18*l1.^12.*l2.*l3.^4 + 1.00484931670391e+19*l1.^12.*l2.*l3.^3 + 6.9623736210271e+16*l1.^12.*l2.*l3.^2 - 1.59827596794286e+16*l1.^12.*l2.*l3 - 84731656537169.6*l1.^12.*l2 + 6.71734294136156e+20*l1.^12.*l3.^6 - 1.26472791805168e+19*l1.^12.*l3.^5 + 7.09428529223957e+18*l1.^12.*l3.^4 + 6.28904803242542e+16*l1.^12.*l3.^3 - 1.32366856382182e+16*l1.^12.*l3.^2 - 84731656537169.6*l1.^12.*l3 + 15027506753843.2*l1.^12 - 9.49445811342512e+20*l1.^11.*l2.^7 - 1.31168351457004e+21*l1.^11.*l2.^6.*l3 + 1.54511003499368e+19*l1.^11.*l2.^6 - 2.51628679378898e+21*l1.^11.*l2.^5.*l3.^2 - 3.17686175419262e+18*l1.^11.*l2.^5.*l3 - 1.36214113696252e+19*l1.^11.*l2.^5 - 2.91503601505726e+21*l1.^11.*l2.^4.*l3.^3 + 5.05409824530644e+18*l1.^11.*l2.^4.*l3.^2 - 1.77503737401623e+19*l1.^11.*l2.^4.*l3 - 1.08901062212036e+17*l1.^11.*l2.^4 - 2.91503601505726e+21*l1.^11.*l2.^3.*l3.^4 - 4.62088982428017e+18*l1.^11.*l2.^3.*l3.^3 - 2.50545541603978e+19*l1.^11.*l2.^3.*l3.^2 - 7.93027915464202e+16*l1.^11.*l2.^3.*l3 + 3.73896490152897e+16*l1.^11.*l2.^3 - 2.51628679378898e+21*l1.^11.*l2.^2.*l3.^5 + 5.05409824530644e+18*l1.^11.*l2.^2.*l3.^4 - 2.50545541603978e+19*l1.^11.*l2.^2.*l3.^3 - 1.18393082662462e+17*l1.^11.*l2.^2.*l3.^2 + 4.83736302218318e+16*l1.^11.*l2.^2.*l3 + 255352441362365.0*l1.^11.*l2.^2 - 1.31168351457004e+21*l1.^11.*l2.*l3.^6 - 3.17686175419262e+18*l1.^11.*l2.*l3.^5 - 1.77503737401623e+19*l1.^11.*l2.*l3.^4 - 7.93027915464201e+16*l1.^11.*l2.*l3.^3 + 4.83736302218318e+16*l1.^11.*l2.*l3.^2 + 255210710127566.0*l1.^11.*l2.*l3 - 91078616440699.3*l1.^11.*l2 - 9.49445811342512e+20*l1.^11.*l3.^7 + 1.54511003499368e+19*l1.^11.*l3.^6 - 1.36214113696252e+19*l1.^11.*l3.^5 - 1.08901062212036e+17*l1.^11.*l3.^4 + 3.73896490152897e+16*l1.^11.*l3.^3 + 255352441362365.0*l1.^11.*l3.^2 - 89813665170120.7*l1.^11.*l3 - 84330084705.24*l1.^11 + 1.13901490129234e+21*l1.^10.*l2.^8 + 1.2356537029059e+21*l1.^10.*l2.^7.*l3 - 1.44196517284457e+19*l1.^10.*l2.^7 + 2.96793022843935e+21*l1.^10.*l2.^6.*l3.^2 + 2.35376575424271e+19*l1.^10.*l2.^6.*l3 + 2.12353198901345e+19*l1.^10.*l2.^6 + 3.31603561625242e+21*l1.^10.*l2.^5.*l3.^3 + 1.1480023157196e+19*l1.^10.*l2.^5.*l3.^2 + 2.33690670723988e+19*l1.^10.*l2.^5.*l3 + 1.41819202099229e+17*l1.^10.*l2.^5 + 3.93038933629301e+21*l1.^10.*l2.^4.*l3.^4 + 3.54508891206495e+19*l1.^10.*l2.^4.*l3.^3 + 3.92297934618731e+19*l1.^10.*l2.^4.*l3.^2 + 7.6216715931996e+15*l1.^10.*l2.^4.*l3 - 7.95976334493306e+16*l1.^10.*l2.^4 + 3.31603561625242e+21*l1.^10.*l2.^3.*l3.^5 + 3.54508891206495e+19*l1.^10.*l2.^3.*l3.^4 + 3.9703700718015e+19*l1.^10.*l2.^3.*l3.^3 + 6.45270355743277e+16*l1.^10.*l2.^3.*l3.^2 - 9.62768401957128e+16*l1.^10.*l2.^3.*l3 - 507185223727228.0*l1.^10.*l2.^3 + 2.96793022843935e+21*l1.^10.*l2.^2.*l3.^6 + 1.14800231571961e+19*l1.^10.*l2.^2.*l3.^5 + 3.92297934618731e+19*l1.^10.*l2.^2.*l3.^4 + 6.45270355743278e+16*l1.^10.*l2.^2.*l3.^3 - 1.23096624280662e+17*l1.^10.*l2.^2.*l3.^2 - 437075506246793.0*l1.^10.*l2.^2.*l3 + 301425893705836.0*l1.^10.*l2.^2 + 1.2356537029059e+21*l1.^10.*l2.*l3.^7 + 2.35376575424271e+19*l1.^10.*l2.*l3.^6 + 2.33690670723988e+19*l1.^10.*l2.*l3.^5 + 7.6216715931996e+15*l1.^10.*l2.*l3.^4 - 9.62768401957128e+16*l1.^10.*l2.*l3.^3 - 437075506246793.0*l1.^10.*l2.*l3.^2 + 398332831145689.0*l1.^10.*l2.*l3 - 102024343549.642*l1.^10.*l2 + 1.13901490129234e+21*l1.^10.*l3.^8 - 1.44196517284457e+19*l1.^10.*l3.^7 + 2.12353198901345e+19*l1.^10.*l3.^6 + 1.41819202099229e+17*l1.^10.*l3.^5 - 7.95976334493306e+16*l1.^10.*l3.^4 - 507185223727228.0*l1.^10.*l3.^3 + 297578333591160.0*l1.^10.*l3.^2 + 830877218502.073*l1.^10.*l3 - 118654071332.836*l1.^10 - 1.16583148796442e+21*l1.^9.*l2.^9 - 8.3483893965458e+20*l1.^9.*l2.^8.*l3 + 9.4240022383571e+18*l1.^9.*l2.^8 - 2.98968762329269e+21*l1.^9.*l2.^7.*l3.^2 - 4.52324602144568e+19*l1.^9.*l2.^7.*l3 - 2.72510055828639e+19*l1.^9.*l2.^7 - 2.96839922900913e+21*l1.^9.*l2.^6.*l3.^3 - 2.30563148523979e+19*l1.^9.*l2.^6.*l3.^2 - 2.25169949086724e+19*l1.^9.*l2.^6.*l3 - 1.38125263106206e+17*l1.^9.*l2.^6 - 3.97114301738214e+21*l1.^9.*l2.^5.*l3.^4 - 8.01916921588621e+19*l1.^9.*l2.^5.*l3.^3 - 4.87307521803325e+19*l1.^9.*l2.^5.*l3.^2 + 1.69079536693311e+17*l1.^9.*l2.^5.*l3 + 1.32545568323125e+17*l1.^9.*l2.^5 - 3.97114301738214e+21*l1.^9.*l2.^4.*l3.^5 - 6.11305216337064e+19*l1.^9.*l2.^4.*l3.^4 - 4.94394737637007e+19*l1.^9.*l2.^4.*l3.^3 + 4.88628638950525e+16*l1.^9.*l2.^4.*l3.^2 + 1.38122472563257e+17*l1.^9.*l2.^4.*l3 + 731096952836743.0*l1.^9.*l2.^4 - 2.96839922900913e+21*l1.^9.*l2.^3.*l3.^6 - 8.01916921588621e+19*l1.^9.*l2.^3.*l3.^5 - 4.94394737637007e+19*l1.^9.*l2.^3.*l3.^4 + 2.28182560581681e+17*l1.^9.*l2.^3.*l3.^3 + 2.05792006927874e+17*l1.^9.*l2.^3.*l3.^2 + 195825322746901.0*l1.^9.*l2.^3.*l3 - 671157070601910.0*l1.^9.*l2.^3 - 2.98968762329269e+21*l1.^9.*l2.^2.*l3.^7 - 2.30563148523979e+19*l1.^9.*l2.^2.*l3.^6 - 4.87307521803325e+19*l1.^9.*l2.^2.*l3.^5 + 4.88628638950525e+16*l1.^9.*l2.^2.*l3.^4 + 2.05792006927874e+17*l1.^9.*l2.^2.*l3.^3 + 567869814093548.0*l1.^9.*l2.^2.*l3.^2 - 994332458054359.0*l1.^9.*l2.^2.*l3 + 968290079740.516*l1.^9.*l2.^2 - 8.3483893965458e+20*l1.^9.*l2.*l3.^8 - 4.52324602144568e+19*l1.^9.*l2.*l3.^7 - 2.25169949086724e+19*l1.^9.*l2.*l3.^6 + 1.69079536693311e+17*l1.^9.*l2.*l3.^5 + 1.38122472563257e+17*l1.^9.*l2.*l3.^4 + 195825322746901.0*l1.^9.*l2.*l3.^3 - 1.00086803961901e+15*l1.^9.*l2.*l3.^2 - 1060902583479.32*l1.^9.*l2.*l3 + 526016607320.377*l1.^9.*l2 - 1.16583148796442e+21*l1.^9.*l3.^9 + 9.4240022383571e+18*l1.^9.*l3.^8 - 2.72510055828639e+19*l1.^9.*l3.^7 - 1.38125263106206e+17*l1.^9.*l3.^6 + 1.32545568323125e+17*l1.^9.*l3.^5 + 731096952836743.0*l1.^9.*l3.^4 - 663989013401965.0*l1.^9.*l3.^3 - 2557761586997.32*l1.^9.*l3.^2 + 660866190185.724*l1.^9.*l3 + 51312626.6610925*l1.^9 + 1.01940491607017e+21*l1.^8.*l2.^10 + 2.80882413602424e+20*l1.^8.*l2.^9.*l3 - 2.63277260635606e+18*l1.^8.*l2.^9 + 2.68014122311302e+21*l1.^8.*l2.^8.*l3.^2 + 5.62010567634968e+19*l1.^8.*l2.^8.*l3 + 2.89898714824737e+19*l1.^8.*l2.^8 + 1.87228553773066e+21*l1.^8.*l2.^7.*l3.^3 + 2.26196682693e+19*l1.^8.*l2.^7.*l3.^2 + 1.39562247380946e+19*l1.^8.*l2.^7.*l3 + 9.24219528163974e+16*l1.^8.*l2.^7 + 3.57748697773999e+21*l1.^8.*l2.^6.*l3.^4 + 1.0505304209887e+20*l1.^8.*l2.^6.*l3.^3 + 5.12555471786395e+19*l1.^8.*l2.^6.*l3.^2 - 3.672429981165e+17*l1.^8.*l2.^6.*l3 - 1.76691856863559e+17*l1.^8.*l2.^6 + 2.97232813729099e+21*l1.^8.*l2.^5.*l3.^5 + 8.7941309468332e+19*l1.^8.*l2.^5.*l3.^4 + 4.32762316561288e+19*l1.^8.*l2.^5.*l3.^3 - 1.8221873741533e+17*l1.^8.*l2.^5.*l3.^2 - 1.37816889059293e+17*l1.^8.*l2.^5.*l3 - 758687299877561.0*l1.^8.*l2.^5 + 3.57748697773999e+21*l1.^8.*l2.^4.*l3.^6 + 8.7941309468332e+19*l1.^8.*l2.^4.*l3.^5 + 5.63100521886639e+19*l1.^8.*l2.^4.*l3.^4 - 5.0008452570104e+17*l1.^8.*l2.^4.*l3.^3 - 2.75142775961574e+17*l1.^8.*l2.^4.*l3.^2 + 559838377454953.0*l1.^8.*l2.^4.*l3 + 1.10488427527167e+15*l1.^8.*l2.^4 + 1.87228553773066e+21*l1.^8.*l2.^3.*l3.^7 + 1.0505304209887e+20*l1.^8.*l2.^3.*l3.^6 + 4.32762316561288e+19*l1.^8.*l2.^3.*l3.^5 - 5.0008452570104e+17*l1.^8.*l2.^3.*l3.^4 - 2.5032134983522e+17*l1.^8.*l2.^3.*l3.^3 + 88936349836198.5*l1.^8.*l2.^3.*l3.^2 + 1.60193238315923e+15*l1.^8.*l2.^3.*l3 - 2841622675692.62*l1.^8.*l2.^3 + 2.68014122311302e+21*l1.^8.*l2.^2.*l3.^8 + 2.26196682693e+19*l1.^8.*l2.^2.*l3.^7 + 5.12555471786395e+19*l1.^8.*l2.^2.*l3.^6 - 1.8221873741533e+17*l1.^8.*l2.^2.*l3.^5 - 2.75142775961574e+17*l1.^8.*l2.^2.*l3.^4 + 88936349836198.6*l1.^8.*l2.^2.*l3.^3 + 2.07954860877798e+15*l1.^8.*l2.^2.*l3.^2 + 2385336681662.5*l1.^8.*l2.^2.*l3 - 1238085532351.65*l1.^8.*l2.^2 + 2.80882413602424e+20*l1.^8.*l2.*l3.^9 + 5.62010567634968e+19*l1.^8.*l2.*l3.^8 + 1.39562247380946e+19*l1.^8.*l2.*l3.^7 - 3.672429981165e+17*l1.^8.*l2.*l3.^6 - 1.37816889059293e+17*l1.^8.*l2.*l3.^5 + 559838377454953.0*l1.^8.*l2.*l3.^4 + 1.617269917315e+15*l1.^8.*l2.*l3.^3 + 464191939471.258*l1.^8.*l2.*l3.^2 - 2172842201444.9*l1.^8.*l2.*l3 + 12770429960.279*l1.^8.*l2 + 1.01940491607017e+21*l1.^8.*l3.^10 - 2.63277260635606e+18*l1.^8.*l3.^9 + 2.89898714824737e+19*l1.^8.*l3.^8 + 9.24219528163974e+16*l1.^8.*l3.^7 - 1.76691856863559e+17*l1.^8.*l3.^6 - 758687299877561.0*l1.^8.*l3.^5 + 1.09792704328349e+15*l1.^8.*l3.^4 + 4961545474689.09*l1.^8.*l3.^3 - 1931498712736.3*l1.^8.*l3.^2 - 13206587286.8983*l1.^8.*l3 + 263022563.70711*l1.^8 - 7.5923845745938e+20*l1.^7.*l2.^11 + 1.7726752237352e+20*l1.^7.*l2.^10.*l3 - 2.86742716774529e+18*l1.^7.*l2.^10 - 2.18053763151336e+21*l1.^7.*l2.^9.*l3.^2 - 5.12011095708187e+19*l1.^7.*l2.^9.*l3 - 2.55838287668497e+19*l1.^7.*l2.^9 - 6.26471918973076e+20*l1.^7.*l2.^8.*l3.^3 - 9.46869834528839e+18*l1.^7.*l2.^8.*l3.^2 - 1.84687197172202e+18*l1.^7.*l2.^8.*l3 - 2.73538520369433e+16*l1.^7.*l2.^8 - 2.67811314828077e+21*l1.^7.*l2.^7.*l3.^4 - 1.11891546459356e+20*l1.^7.*l2.^7.*l3.^3 - 4.68513552345619e+19*l1.^7.*l2.^7.*l3.^2 + 4.75816749278521e+17*l1.^7.*l2.^7.*l3 + 1.90286482810859e+17*l1.^7.*l2.^7 - 2.05086543889153e+21*l1.^7.*l2.^6.*l3.^5 - 5.71835115754671e+19*l1.^7.*l2.^6.*l3.^4 - 2.69838197932345e+19*l1.^7.*l2.^6.*l3.^3 + 1.70014711121924e+17*l1.^7.*l2.^6.*l3.^2 + 8.5145511469622e+16*l1.^7.*l2.^6.*l3 + 542405435574710.0*l1.^7.*l2.^6 - 2.05086543889153e+21*l1.^7.*l2.^5.*l3.^6 - 1.24764025255565e+20*l1.^7.*l2.^5.*l3.^5 - 4.47300824452025e+19*l1.^7.*l2.^5.*l3.^4 + 8.07990706322017e+17*l1.^7.*l2.^5.*l3.^3 + 2.90432006657373e+17*l1.^7.*l2.^5.*l3.^2 - 1.6197045512798e+15*l1.^7.*l2.^5.*l3 - 1.39811376199347e+15*l1.^7.*l2.^5 - 2.67811314828077e+21*l1.^7.*l2.^4.*l3.^7 - 5.71835115754671e+19*l1.^7.*l2.^4.*l3.^6 - 4.47300824452025e+19*l1.^7.*l2.^4.*l3.^5 + 4.76938958592857e+17*l1.^7.*l2.^4.*l3.^4 + 2.48575693459949e+17*l1.^7.*l2.^4.*l3.^3 - 488264103881596.0*l1.^7.*l2.^4.*l3.^2 - 1.81862844791044e+15*l1.^7.*l2.^4.*l3 + 4481541644335.59*l1.^7.*l2.^4 - 6.26471918973076e+20*l1.^7.*l2.^3.*l3.^8 - 1.11891546459356e+20*l1.^7.*l2.^3.*l3.^7 - 2.69838197932345e+19*l1.^7.*l2.^3.*l3.^6 + 8.07990706322017e+17*l1.^7.*l2.^3.*l3.^5 + 2.48575693459949e+17*l1.^7.*l2.^3.*l3.^4 - 2.09478765032511e+15*l1.^7.*l2.^3.*l3.^3 - 2.78399556825627e+15*l1.^7.*l2.^3.*l3.^2 - 4056879432069.92*l1.^7.*l2.^3.*l3 + 1833204680889.21*l1.^7.*l2.^3 - 2.18053763151336e+21*l1.^7.*l2.^2.*l3.^9 - 9.46869834528839e+18*l1.^7.*l2.^2.*l3.^8 - 4.68513552345619e+19*l1.^7.*l2.^2.*l3.^7 + 1.70014711121924e+17*l1.^7.*l2.^2.*l3.^6 + 2.90432006657373e+17*l1.^7.*l2.^2.*l3.^5 - 488264103881596.0*l1.^7.*l2.^2.*l3.^4 - 2.76249139665643e+15*l1.^7.*l2.^2.*l3.^3 - 460803677139.353*l1.^7.*l2.^2.*l3.^2 + 4139527373174.42*l1.^7.*l2.^2.*l3 - 39831426445.6718*l1.^7.*l2.^2 + 1.7726752237352e+20*l1.^7.*l2.*l3.^10 - 5.12011095708187e+19*l1.^7.*l2.*l3.^9 - 1.84687197172202e+18*l1.^7.*l2.*l3.^8 + 4.75816749278521e+17*l1.^7.*l2.*l3.^7 + 8.5145511469622e+16*l1.^7.*l2.*l3.^6 - 1.6197045512798e+15*l1.^7.*l2.*l3.^5 - 1.84961975403962e+15*l1.^7.*l2.*l3.^4 + 2204629357294.13*l1.^7.*l2.*l3.^3 + 4580405461446.52*l1.^7.*l2.*l3.^2 + 8569208652.40219*l1.^7.*l2.*l3 + 986657342.464228*l1.^7.*l2 - 7.5923845745938e+20*l1.^7.*l3.^11 - 2.86742716774529e+18*l1.^7.*l3.^10 - 2.55838287668497e+19*l1.^7.*l3.^9 - 2.73538520369433e+16*l1.^7.*l3.^8 + 1.90286482810859e+17*l1.^7.*l3.^7 + 542405435574710.0*l1.^7.*l3.^6 - 1.39495138381702e+15*l1.^7.*l3.^5 - 6144049028524.62*l1.^7.*l3.^4 + 3696981906473.35*l1.^7.*l3.^3 + 32904221846.4246*l1.^7.*l3.^2 - 3092259153.56982*l1.^7.*l3 - 213195.217306395*l1.^7 + 4.78232475724381e+20*l1.^6.*l2.^12 - 3.89142937668124e+20*l1.^6.*l2.^11.*l3 + 5.24663532131811e+18*l1.^6.*l2.^11 + 1.63553252203771e+21*l1.^6.*l2.^10.*l3.^2 + 3.47048079511042e+19*l1.^6.*l2.^10.*l3 + 1.86421333440325e+19*l1.^6.*l2.^10 - 3.70004423189357e+20*l1.^6.*l2.^9.*l3.^3 - 2.76772046766782e+18*l1.^6.*l2.^9.*l3.^2 - 7.50005794624181e+18*l1.^6.*l2.^9.*l3 - 2.48288810796869e+16*l1.^6.*l2.^9 + 2.08033842206562e+21*l1.^6.*l2.^8.*l3.^4 + 9.09015670120115e+19*l1.^6.*l2.^8.*l3.^3 + 3.87914447659798e+19*l1.^6.*l2.^8.*l3.^2 - 4.26860367940607e+17*l1.^6.*l2.^8.*l3 - 1.65878108699854e+17*l1.^6.*l2.^8 + 4.57398976730297e+20*l1.^6.*l2.^7.*l3.^5 + 2.74365333316635e+19*l1.^6.*l2.^7.*l3.^4 + 5.70265717726182e+18*l1.^6.*l2.^7.*l3.^3 - 7.79935473463616e+16*l1.^6.*l2.^7.*l3.^2 - 6.24900462863172e+15*l1.^6.*l2.^7.*l3 - 190274182717285.0*l1.^6.*l2.^7 + 1.95114110721369e+21*l1.^6.*l2.^6.*l3.^6 + 8.28872112230256e+19*l1.^6.*l2.^6.*l3.^5 + 3.5926244156893e+19*l1.^6.*l2.^6.*l3.^4 - 7.8947425263547e+17*l1.^6.*l2.^6.*l3.^3 - 2.68870032441712e+17*l1.^6.*l2.^6.*l3.^2 + 2.18032245052615e+15*l1.^6.*l2.^6.*l3 + 1.38789301185438e+15*l1.^6.*l2.^6 + 4.57398976730297e+20*l1.^6.*l2.^5.*l3.^7 + 8.28872112230256e+19*l1.^6.*l2.^5.*l3.^6 + 1.88088675437803e+19*l1.^6.*l2.^5.*l3.^5 - 5.26316168423647e+17*l1.^6.*l2.^5.*l3.^4 - 1.38348014883115e+17*l1.^6.*l2.^5.*l3.^3 + 713971095298563.0*l1.^6.*l2.^5.*l3.^2 + 1.42863519349506e+15*l1.^6.*l2.^5.*l3 - 4620460399943.78*l1.^6.*l2.^5 + 2.08033842206562e+21*l1.^6.*l2.^4.*l3.^8 + 2.74365333316635e+19*l1.^6.*l2.^4.*l3.^7 + 3.5926244156893e+19*l1.^6.*l2.^4.*l3.^6 - 5.26316168423647e+17*l1.^6.*l2.^4.*l3.^5 - 2.57625036912396e+17*l1.^6.*l2.^4.*l3.^4 + 2.66844482317295e+15*l1.^6.*l2.^4.*l3.^3 + 2.82279205209848e+15*l1.^6.*l2.^4.*l3.^2 + 8754140444870.27*l1.^6.*l2.^4.*l3 - 1823869681232.08*l1.^6.*l2.^4 - 3.70004423189357e+20*l1.^6.*l2.^3.*l3.^9 + 9.09015670120115e+19*l1.^6.*l2.^3.*l3.^8 + 5.70265717726182e+18*l1.^6.*l2.^3.*l3.^7 - 7.8947425263547e+17*l1.^6.*l2.^3.*l3.^6 - 1.38348014883115e+17*l1.^6.*l2.^3.*l3.^5 + 2.66844482317295e+15*l1.^6.*l2.^3.*l3.^4 + 2.71819685007207e+15*l1.^6.*l2.^3.*l3.^3 - 6331532877556.81*l1.^6.*l2.^3.*l3.^2 - 5073943106724.23*l1.^6.*l2.^3.*l3 + 69451640185.7865*l1.^6.*l2.^3 + 1.63553252203771e+21*l1.^6.*l2.^2.*l3.^10 - 2.76772046766781e+18*l1.^6.*l2.^2.*l3.^9 + 3.87914447659798e+19*l1.^6.*l2.^2.*l3.^8 - 7.79935473463615e+16*l1.^6.*l2.^2.*l3.^7 - 2.68870032441712e+17*l1.^6.*l2.^2.*l3.^6 + 713971095298563.0*l1.^6.*l2.^2.*l3.^5 + 2.80144599940747e+15*l1.^6.*l2.^2.*l3.^4 + 3440215687662.86*l1.^6.*l2.^2.*l3.^3 - 7034105699429.33*l1.^6.*l2.^2.*l3.^2 - 47002366021.5592*l1.^6.*l2.^2.*l3 - 6155734523.22814*l1.^6.*l2.^2 - 3.89142937668124e+20*l1.^6.*l2.*l3.^11 + 3.47048079511042e+19*l1.^6.*l2.*l3.^10 - 7.50005794624181e+18*l1.^6.*l2.*l3.^9 - 4.26860367940607e+17*l1.^6.*l2.*l3.^8 - 6.24900462863172e+15*l1.^6.*l2.*l3.^7 + 2.18032245052615e+15*l1.^6.*l2.*l3.^6 + 1.45678035926543e+15*l1.^6.*l2.*l3.^5 - 9081672470287.95*l1.^6.*l2.*l3.^4 - 5941023872043.34*l1.^6.*l2.*l3.^3 + 25733282270.5371*l1.^6.*l2.*l3.^2 + 4018103825.70112*l1.^6.*l2.*l3 - 208014573.525834*l1.^6.*l2 + 4.78232475724381e+20*l1.^6.*l3.^12 + 5.24663532131811e+18*l1.^6.*l3.^11 + 1.86421333440325e+19*l1.^6.*l3.^10 - 2.48288810796869e+16*l1.^6.*l3.^9 - 1.65878108699854e+17*l1.^6.*l3.^8 - 190274182717285.0*l1.^6.*l3.^7 + 1.39026479548671e+15*l1.^6.*l3.^6 + 5056416819982.49*l1.^6.*l3.^5 - 5070753102152.6*l1.^6.*l3.^4 - 51774440301.0407*l1.^6.*l3.^3 + 9508374077.55556*l1.^6.*l3.^2 + 208355685.873524*l1.^6.*l3 + 2991661.88685176*l1.^6 - 2.51507726600378e+20*l1.^5.*l2.^13 + 3.68436973916698e+20*l1.^5.*l2.^12.*l3 - 4.76529263128893e+18*l1.^5.*l2.^12 - 1.09999146791926e+21*l1.^5.*l2.^11.*l3.^2 - 1.70395312270331e+19*l1.^5.*l2.^11.*l3 - 1.10888448320281e+19*l1.^5.*l2.^11 + 7.79244446676221e+20*l1.^5.*l2.^10.*l3.^3 + 7.65334877146404e+18*l1.^5.*l2.^10.*l3.^2 + 1.04243723548894e+19*l1.^5.*l2.^10.*l3 + 4.49818900163067e+16*l1.^5.*l2.^10 - 1.49851853102291e+21*l1.^5.*l2.^9.*l3.^4 - 6.32484294698348e+19*l1.^5.*l2.^9.*l3.^3 - 2.87002293987278e+19*l1.^5.*l2.^9.*l3.^2 + 2.76437561098135e+17*l1.^5.*l2.^9.*l3 + 1.16200280653782e+17*l1.^5.*l2.^9 + 2.17677974975506e+20*l1.^5.*l2.^8.*l3.^5 + 1.25630442097617e+19*l1.^5.*l2.^8.*l3.^4 + 8.43830883779172e+18*l1.^5.*l2.^8.*l3.^3 - 3.57704218944643e+16*l1.^5.*l2.^8.*l3.^2 - 5.1147097494142e+16*l1.^5.*l2.^8.*l3 - 91983571384369.8*l1.^5.*l2.^8 - 8.36203331663008e+20*l1.^5.*l2.^7.*l3.^6 - 7.9710349468833e+19*l1.^5.*l2.^7.*l3.^5 - 2.42896906385678e+19*l1.^5.*l2.^7.*l3.^4 + 6.84547681745042e+17*l1.^5.*l2.^7.*l3.^3 + 2.16755767505657e+17*l1.^5.*l2.^7.*l3.^2 - 1.97389090704181e+15*l1.^5.*l2.^7.*l3 - 1.08440906335114e+15*l1.^5.*l2.^7 - 8.36203331663008e+20*l1.^5.*l2.^6.*l3.^7 - 4868.38857142857*l1.^5.*l2.^6.*l3.^6 - 8.98547562787135e+18*l1.^5.*l2.^6.*l3.^5 + 9.03378498040586e+16*l1.^5.*l2.^6.*l3.^4 + 3.17807033079022e+16*l1.^5.*l2.^6.*l3.^3 - 88156828044805.2*l1.^5.*l2.^6.*l3.^2 - 717942009033156.0*l1.^5.*l2.^6.*l3 + 2782892795272.91*l1.^5.*l2.^6 + 2.17677974975506e+20*l1.^5.*l2.^5.*l3.^8 - 7.9710349468833e+19*l1.^5.*l2.^5.*l3.^7 - 8.98547562787135e+18*l1.^5.*l2.^5.*l3.^6 + 7.54124659233882e+17*l1.^5.*l2.^5.*l3.^5 + 1.53997703584357e+17*l1.^5.*l2.^5.*l3.^4 - 3.51195826707755e+15*l1.^5.*l2.^5.*l3.^3 - 2.1700506799186e+15*l1.^5.*l2.^5.*l3.^2 - 11391337959871.2*l1.^5.*l2.^5.*l3 + 1162086760213.18*l1.^5.*l2.^5 - 1.49851853102291e+21*l1.^5.*l2.^4.*l3.^9 + 1.25630442097617e+19*l1.^5.*l2.^4.*l3.^8 - 2.42896906385678e+19*l1.^5.*l2.^4.*l3.^7 + 9.03378498040588e+16*l1.^5.*l2.^4.*l3.^6 + 1.53997703584357e+17*l1.^5.*l2.^4.*l3.^5 - 865977844620194.0*l1.^5.*l2.^4.*l3.^4 - 2.01285543173639e+15*l1.^5.*l2.^4.*l3.^3 + 7189892668306.56*l1.^5.*l2.^4.*l3.^2 + 4679095145598.08*l1.^5.*l2.^4.*l3 - 68053371109.2718*l1.^5.*l2.^4 + 7.79244446676221e+20*l1.^5.*l2.^3.*l3.^10 - 6.32484294698348e+19*l1.^5.*l2.^3.*l3.^9 + 8.43830883779172e+18*l1.^5.*l2.^3.*l3.^8 + 6.84547681745042e+17*l1.^5.*l2.^3.*l3.^7 + 3.17807033079022e+16*l1.^5.*l2.^3.*l3.^6 - 3.51195826707755e+15*l1.^5.*l2.^3.*l3.^5 - 2.06029110438309e+15*l1.^5.*l2.^3.*l3.^4 + 2489243393174.33*l1.^5.*l2.^3.*l3.^3 + 6194177865718.38*l1.^5.*l2.^3.*l3.^2 + 99161651022.5581*l1.^5.*l2.^3.*l3 + 14972400868.7573*l1.^5.*l2.^3 - 1.09999146791926e+21*l1.^5.*l2.^2.*l3.^11 + 7.65334877146404e+18*l1.^5.*l2.^2.*l3.^10 - 2.87002293987278e+19*l1.^5.*l2.^2.*l3.^9 - 3.57704218944643e+16*l1.^5.*l2.^2.*l3.^8 + 2.16755767505657e+17*l1.^5.*l2.^2.*l3.^7 - 88156828044805.2*l1.^5.*l2.^2.*l3.^6 - 2.12640986108364e+15*l1.^5.*l2.^2.*l3.^5 - 636993318398.498*l1.^5.*l2.^2.*l3.^4 + 7827766648100.86*l1.^5.*l2.^2.*l3.^3 - 20820098267.7376*l1.^5.*l2.^2.*l3.^2 - 4989961006.35615*l1.^5.*l2.^2.*l3 + 448925169.082043*l1.^5.*l2.^2 + 3.68436973916698e+20*l1.^5.*l2.*l3.^12 - 1.70395312270331e+19*l1.^5.*l2.*l3.^11 + 1.04243723548894e+19*l1.^5.*l2.*l3.^10 + 2.76437561098135e+17*l1.^5.*l2.*l3.^9 - 5.1147097494142e+16*l1.^5.*l2.*l3.^8 - 1.97389090704181e+15*l1.^5.*l2.*l3.^7 - 733753899915389.0*l1.^5.*l2.*l3.^6 + 12800855089944.5*l1.^5.*l2.*l3.^5 + 4920469741411.85*l1.^5.*l2.*l3.^4 - 46309645561.6345*l1.^5.*l2.*l3.^3 - 7497136761.87917*l1.^5.*l2.*l3.^2 - 129835887.339585*l1.^5.*l2.*l3 - 38291992.9803988*l1.^5.*l2 - 2.51507726600378e+20*l1.^5.*l3.^13 - 4.76529263128893e+18*l1.^5.*l3.^12 - 1.10888448320281e+19*l1.^5.*l3.^11 + 4.49818900163067e+16*l1.^5.*l3.^10 + 1.16200280653782e+17*l1.^5.*l3.^9 - 91983571384369.8*l1.^5.*l3.^8 - 1.08883639279816e+15*l1.^5.*l3.^7 - 2102981487336.91*l1.^5.*l3.^6 + 5155543242739.24*l1.^5.*l3.^5 + 41050101328.8728*l1.^5.*l3.^4 - 17221388915.074*l1.^5.*l3.^3 - 316658856.265165*l1.^5.*l3.^2 + 34237019.9472314*l1.^5.*l3 + 2084249.74319149*l1.^5 + 1.0820483759454e+20*l1.^4.*l2.^14 - 2.3735337168546e+20*l1.^4.*l2.^13.*l3 + 2.99635824543167e+18*l1.^4.*l2.^13 + 6.39393825022315e+20*l1.^4.*l2.^12.*l3.^2 + 5.30680315757176e+18*l1.^4.*l2.^12.*l3 + 5.27810061890583e+18*l1.^4.*l2.^12 - 7.35327068761165e+20*l1.^4.*l2.^11.*l3.^3 - 4.98189684180206e+18*l1.^4.*l2.^11.*l3.^2 - 8.14735071131242e+18*l1.^4.*l2.^11.*l3 - 3.81551166874286e+16*l1.^4.*l2.^11 + 1.10332795442878e+21*l1.^4.*l2.^10.*l3.^4 + 3.31404442085094e+19*l1.^4.*l2.^10.*l3.^3 + 1.8343320598167e+19*l1.^4.*l2.^10.*l3.^2 - 1.21853228048332e+17*l1.^4.*l2.^10.*l3 - 6.43591051669678e+16*l1.^4.*l2.^10 - 7.33167197716163e+20*l1.^4.*l2.^9.*l3.^5 - 1.87723649111382e+19*l1.^4.*l2.^9.*l3.^4 - 1.31813205333854e+19*l1.^4.*l2.^9.*l3.^3 + 5.8214608181187e+16*l1.^4.*l2.^9.*l3.^2 + 6.39140480503884e+16*l1.^4.*l2.^9.*l3 + 198659947442877.0*l1.^4.*l2.^9 + 9.64561382337457e+20*l1.^4.*l2.^8.*l3.^6 + 4.15880084185216e+19*l1.^4.*l2.^8.*l3.^5 + 1.84192250437393e+19*l1.^4.*l2.^8.*l3.^4 - 4.1451606548291e+17*l1.^4.*l2.^8.*l3.^3 - 1.55795895415001e+17*l1.^4.*l2.^8.*l3.^2 + 1.18487312291732e+15*l1.^4.*l2.^8.*l3 + 661507765777075.0*l1.^4.*l2.^8 - 4.99291659203167e+20*l1.^4.*l2.^7.*l3.^7 + 6.06491789436773e+18*l1.^4.*l2.^7.*l3.^6 - 5.13992175655616e+18*l1.^4.*l2.^7.*l3.^5 + 3.08607561442436e+16*l1.^4.*l2.^7.*l3.^4 + 5.36898131307112e+16*l1.^4.*l2.^7.*l3.^3 - 227832959938946.0*l1.^4.*l2.^7.*l3.^2 + 126248572502139.0*l1.^4.*l2.^7.*l3 - 560192705541.95*l1.^4.*l2.^7 + 9.64561382337457e+20*l1.^4.*l2.^6.*l3.^8 + 6.06491789436773e+18*l1.^4.*l2.^6.*l3.^7 + 1.31309758051924e+19*l1.^4.*l2.^6.*l3.^6 - 3.18146340614294e+17*l1.^4.*l2.^6.*l3.^5 - 1.296407591878e+17*l1.^4.*l2.^6.*l3.^4 + 2.42537575549314e+15*l1.^4.*l2.^6.*l3.^3 + 1.38942766257303e+15*l1.^4.*l2.^6.*l3.^2 + 10932793124286.4*l1.^4.*l2.^6.*l3 - 367012272590.406*l1.^4.*l2.^6 - 7.33167197716163e+20*l1.^4.*l2.^5.*l3.^9 + 4.15880084185215e+19*l1.^4.*l2.^5.*l3.^8 - 5.13992175655616e+18*l1.^4.*l2.^5.*l3.^7 - 3.18146340614294e+17*l1.^4.*l2.^5.*l3.^6 + 2.8472609916411e+15*l1.^4.*l2.^5.*l3.^5 + 957040162978373.0*l1.^4.*l2.^5.*l3.^4 + 813327141409366.0*l1.^4.*l2.^5.*l3.^3 - 11055899989012.4*l1.^4.*l2.^5.*l3.^2 - 3363470654783.41*l1.^4.*l2.^5.*l3 + 36733426611.0085*l1.^4.*l2.^5 + 1.10332795442878e+21*l1.^4.*l2.^4.*l3.^10 - 1.87723649111382e+19*l1.^4.*l2.^4.*l3.^9 + 1.84192250437393e+19*l1.^4.*l2.^4.*l3.^8 + 3.08607561442436e+16*l1.^4.*l2.^4.*l3.^7 - 1.296407591878e+17*l1.^4.*l2.^4.*l3.^6 + 957040162978374.0*l1.^4.*l2.^4.*l3.^5 + 1.51504342883461e+15*l1.^4.*l2.^4.*l3.^4 + 9379839555495.74*l1.^4.*l2.^4.*l3.^3 - 3821066264206.65*l1.^4.*l2.^4.*l3.^2 - 159601511150.991*l1.^4.*l2.^4.*l3 - 21174904510.6963*l1.^4.*l2.^4 - 7.35327068761165e+20*l1.^4.*l2.^3.*l3.^11 + 3.31404442085094e+19*l1.^4.*l2.^3.*l3.^10 - 1.31813205333854e+19*l1.^4.*l2.^3.*l3.^9 - 4.1451606548291e+17*l1.^4.*l2.^3.*l3.^8 + 5.36898131307112e+16*l1.^4.*l2.^3.*l3.^7 + 2.42537575549314e+15*l1.^4.*l2.^3.*l3.^6 + 828664675565131.0*l1.^4.*l2.^3.*l3.^5 - 14693764312703.2*l1.^4.*l2.^3.*l3.^4 - 5018749551077.94*l1.^4.*l2.^3.*l3.^3 + 94556342779.7252*l1.^4.*l2.^3.*l3.^2 + 6433880989.63001*l1.^4.*l2.^3.*l3 - 510559906.405317*l1.^4.*l2.^3 + 6.39393825022315e+20*l1.^4.*l2.^2.*l3.^12 - 4.98189684180206e+18*l1.^4.*l2.^2.*l3.^11 + 1.8343320598167e+19*l1.^4.*l2.^2.*l3.^10 + 5.8214608181187e+16*l1.^4.*l2.^2.*l3.^9 - 1.55795895415001e+17*l1.^4.*l2.^2.*l3.^8 - 227832959938946.0*l1.^4.*l2.^2.*l3.^7 + 1.36254744807323e+15*l1.^4.*l2.^2.*l3.^6 + 4384411457487.6*l1.^4.*l2.^2.*l3.^5 - 6122822414656.53*l1.^4.*l2.^2.*l3.^4 - 61305760703.3384*l1.^4.*l2.^2.*l3.^3 + 4912541380.17864*l1.^4.*l2.^2.*l3.^2 + 626538104.619987*l1.^4.*l2.^2.*l3 + 101166129.937225*l1.^4.*l2.^2 - 2.3735337168546e+20*l1.^4.*l2.*l3.^13 + 5.30680315757176e+18*l1.^4.*l2.*l3.^12 - 8.14735071131242e+18*l1.^4.*l2.*l3.^11 - 1.21853228048332e+17*l1.^4.*l2.*l3.^10 + 6.39140480503884e+16*l1.^4.*l2.*l3.^9 + 1.18487312291732e+15*l1.^4.*l2.*l3.^8 + 123560551052159.0*l1.^4.*l2.*l3.^7 - 11812611909805.0*l1.^4.*l2.*l3.^6 - 2337782560454.87*l1.^4.*l2.*l3.^5 + 100168661320.782*l1.^4.*l2.*l3.^4 + 8239644480.21504*l1.^4.*l2.*l3.^3 - 441250141.259013*l1.^4.*l2.*l3.^2 - 29911960.3480241*l1.^4.*l2.*l3 - 2855949.80633517*l1.^4.*l2 + 1.0820483759454e+20*l1.^4.*l3.^14 + 2.99635824543167e+18*l1.^4.*l3.^13 + 5.27810061890583e+18*l1.^4.*l3.^12 - 3.81551166874286e+16*l1.^4.*l3.^11 - 6.43591051669678e+16*l1.^4.*l3.^10 + 198659947442877.0*l1.^4.*l3.^9 + 664670143953521.0*l1.^4.*l3.^8 - 489039196571.904*l1.^4.*l3.^7 - 3923567395410.61*l1.^4.*l3.^6 - 15220607883.3461*l1.^4.*l3.^5 + 19992599962.2025*l1.^4.*l3.^4 + 315464963.048249*l1.^4.*l3.^3 - 80156402.3818504*l1.^4.*l3.^2 - 2855949.80633517*l1.^4.*l3 + 353201.182746532*l1.^4 - 3.68347640474837e+19*l1.^3.*l2.^15 + 1.10579520304018e+20*l1.^3.*l2.^14.*l3 - 1.36838850451154e+18*l1.^3.*l2.^14 - 3.0095437439064e+20*l1.^3.*l2.^13.*l3.^2 - 4.81342690029184e+17*l1.^3.*l2.^13.*l3 - 1.94410545077346e+18*l1.^3.*l2.^13 + 4.54712508554322e+20*l1.^3.*l2.^12.*l3.^3 + 1.39589380108463e+18*l1.^3.*l2.^12.*l3.^2 + 4.30342662239039e+18*l1.^3.*l2.^12.*l3 + 2.13687356938172e+16*l1.^3.*l2.^12 - 6.5127311576983e+20*l1.^3.*l2.^11.*l3.^4 - 1.34775953208172e+19*l1.^3.*l2.^11.*l3.^3 - 9.42236567495097e+18*l1.^3.*l2.^11.*l3.^2 + 3.10477910299664e+16*l1.^3.*l2.^11.*l3 + 2.73261508235673e+16*l1.^3.*l2.^11 + 5.71831001714586e+20*l1.^3.*l2.^10.*l3.^5 + 1.62693829229864e+19*l1.^3.*l2.^10.*l3.^4 + 1.00121508753877e+19*l1.^3.*l2.^10.*l3.^3 - 3.54431108444496e+16*l1.^3.*l2.^10.*l3.^2 - 4.42098132361655e+16*l1.^3.*l2.^10.*l3 - 158786226719502.0*l1.^3.*l2.^10 - 4.97860560973349e+20*l1.^3.*l2.^9.*l3.^6 - 3.02283209338328e+19*l1.^3.*l2.^9.*l3.^5 - 1.14905731241153e+19*l1.^3.*l2.^9.*l3.^4 + 2.15090118581092e+17*l1.^3.*l2.^9.*l3.^3 + 9.1674524829247e+16*l1.^3.*l2.^9.*l3.^2 - 463933575241151.0*l1.^3.*l2.^9.*l3 - 307245216016607.0*l1.^3.*l2.^9 + 1.10932740031378e+20*l1.^3.*l2.^8.*l3.^7 + 2.31044491214009e+19*l1.^3.*l2.^8.*l3.^6 + 5.73069112097776e+18*l1.^3.*l2.^8.*l3.^5 - 1.62720350578739e+17*l1.^3.*l2.^8.*l3.^4 - 6.65193417260082e+16*l1.^3.*l2.^8.*l3.^3 + 349367493778851.0*l1.^3.*l2.^8.*l3.^2 + 114507608494981.0*l1.^3.*l2.^8.*l3 - 700240881927.437*l1.^3.*l2.^8 + 1.10932740031378e+20*l1.^3.*l2.^7.*l3.^8 - 3.33364194465927e+19*l1.^3.*l2.^7.*l3.^7 - 3.83774342034456e+18*l1.^3.*l2.^7.*l3.^6 + 3.38907212929513e+17*l1.^3.*l2.^7.*l3.^5 + 7.64362934461914e+16*l1.^3.*l2.^7.*l3.^4 - 1.74754612506825e+15*l1.^3.*l2.^7.*l3.^3 - 731278803399170.0*l1.^3.*l2.^7.*l3.^2 - 6225367324490.37*l1.^3.*l2.^7.*l3 - 85279312607.1082*l1.^3.*l2.^7 - 4.97860560973349e+20*l1.^3.*l2.^6.*l3.^9 + 2.31044491214009e+19*l1.^3.*l2.^6.*l3.^8 - 3.83774342034456e+18*l1.^3.*l2.^6.*l3.^7 - 1.80675699608118e+17*l1.^3.*l2.^6.*l3.^6 - 2.17096772032847e+15*l1.^3.*l2.^6.*l3.^5 + 845426815574380.0*l1.^3.*l2.^6.*l3.^4 - 130009428231083.0*l1.^3.*l2.^6.*l3.^3 + 7309611270700.6*l1.^3.*l2.^6.*l3.^2 + 2062011042056.15*l1.^3.*l2.^6.*l3 - 448985483.284531*l1.^3.*l2.^6 + 5.71831001714586e+20*l1.^3.*l2.^5.*l3.^10 - 3.02283209338328e+19*l1.^3.*l2.^5.*l3.^9 + 5.73069112097776e+18*l1.^3.*l2.^5.*l3.^8 + 3.38907212929513e+17*l1.^3.*l2.^5.*l3.^7 - 2.17096772032847e+15*l1.^3.*l2.^5.*l3.^6 - 2.19938530160657e+15*l1.^3.*l2.^5.*l3.^5 - 627762486232838.0*l1.^3.*l2.^5.*l3.^4 - 5669692302057.62*l1.^3.*l2.^5.*l3.^3 + 987242514305.443*l1.^3.*l2.^5.*l3.^2 + 133900299272.117*l1.^3.*l2.^5.*l3 + 19538613603.4502*l1.^3.*l2.^5 - 6.5127311576983e+20*l1.^3.*l2.^4.*l3.^11 + 1.62693829229864e+19*l1.^3.*l2.^4.*l3.^10 - 1.14905731241153e+19*l1.^3.*l2.^4.*l3.^9 - 1.6272035057874e+17*l1.^3.*l2.^4.*l3.^8 + 7.64362934461914e+16*l1.^3.*l2.^4.*l3.^7 + 845426815574380.0*l1.^3.*l2.^4.*l3.^6 - 581591764856719.0*l1.^3.*l2.^4.*l3.^5 + 2010368983598.13*l1.^3.*l2.^4.*l3.^4 + 3274916404800.23*l1.^3.*l2.^4.*l3.^3 - 78495490634.8038*l1.^3.*l2.^4.*l3.^2 - 11420779921.469*l1.^3.*l2.^4.*l3 + 235900507.949509*l1.^3.*l2.^4 + 4.54712508554322e+20*l1.^3.*l2.^3.*l3.^12 - 1.34775953208172e+19*l1.^3.*l2.^3.*l3.^11 + 1.00121508753877e+19*l1.^3.*l2.^3.*l3.^10 + 2.15090118581092e+17*l1.^3.*l2.^3.*l3.^9 - 6.65193417260081e+16*l1.^3.*l2.^3.*l3.^8 - 1.74754612506825e+15*l1.^3.*l2.^3.*l3.^7 - 155308453642655.0*l1.^3.*l2.^3.*l3.^6 + 8466138146658.2*l1.^3.*l2.^3.*l3.^5 + 1796343067560.89*l1.^3.*l2.^3.*l3.^4 + 31505952769.9098*l1.^3.*l2.^3.*l3.^3 + 7104474499.02388*l1.^3.*l2.^3.*l3.^2 - 860797009.396236*l1.^3.*l2.^3.*l3 - 146619352.829388*l1.^3.*l2.^3 - 3.0095437439064e+20*l1.^3.*l2.^2.*l3.^13 + 1.39589380108464e+18*l1.^3.*l2.^2.*l3.^12 - 9.42236567495097e+18*l1.^3.*l2.^2.*l3.^11 - 3.54431108444496e+16*l1.^3.*l2.^2.*l3.^10 + 9.16745248292469e+16*l1.^3.*l2.^2.*l3.^9 + 349367493778850.0*l1.^3.*l2.^2.*l3.^8 - 714834436881648.0*l1.^3.*l2.^2.*l3.^7 - 2936494020986.03*l1.^3.*l2.^2.*l3.^6 + 3819699505997.66*l1.^3.*l2.^2.*l3.^5 - 564438893.272061*l1.^3.*l2.^2.*l3.^4 - 12991634676.9174*l1.^3.*l2.^2.*l3.^3 + 298302748.055086*l1.^3.*l2.^2.*l3.^2 + 45988545.3205603*l1.^3.*l2.^2.*l3 + 1619250.98719465*l1.^3.*l2.^2 + 1.10579520304018e+20*l1.^3.*l2.*l3.^14 - 4.81342690029185e+17*l1.^3.*l2.*l3.^13 + 4.30342662239039e+18*l1.^3.*l2.*l3.^12 + 3.10477910299664e+16*l1.^3.*l2.*l3.^11 - 4.42098132361655e+16*l1.^3.*l2.*l3.^10 - 463933575241151.0*l1.^3.*l2.*l3.^9 + 122097316118453.0*l1.^3.*l2.*l3.^8 + 6202778908944.34*l1.^3.*l2.*l3.^7 + 203159828631.469*l1.^3.*l2.*l3.^6 - 73915838705.3014*l1.^3.*l2.*l3.^5 - 1074252029.26943*l1.^3.*l2.*l3.^4 + 401745067.492141*l1.^3.*l2.*l3.^3 + 9724038.8567452*l1.^3.*l2.*l3.^2 - 1233400.95562281*l1.^3.*l2.*l3 - 710993.609859124*l1.^3.*l2 - 3.68347640474837e+19*l1.^3.*l3.^15 - 1.36838850451154e+18*l1.^3.*l3.^14 - 1.94410545077346e+18*l1.^3.*l3.^13 + 2.13687356938172e+16*l1.^3.*l3.^12 + 2.73261508235673e+16*l1.^3.*l3.^11 - 158786226719502.0*l1.^3.*l3.^10 - 307877691651897.0*l1.^3.*l3.^9 + 1481800059820.64*l1.^3.*l3.^8 + 2204341401637.43*l1.^3.*l3.^7 - 9107991232.34362*l1.^3.*l3.^6 - 15858680314.8909*l1.^3.*l3.^5 - 59588063.2371329*l1.^3.*l3.^4 + 107232192.417318*l1.^3.*l3.^3 + 1619250.98719465*l1.^3.*l3.^2 - 702645.892829925*l1.^3.*l3 - 125.215755437978*l1.^3 + 9.37824823540379e+18*l1.^2.*l2.^16 - 3.65908602424017e+19*l1.^2.*l2.^15.*l3 + 4.43522907241177e+17*l1.^2.*l2.^15 + 1.07152524912614e+20*l1.^2.*l2.^14.*l3.^2 - 4.22893934811355e+17*l1.^2.*l2.^14.*l3 + 5.23154225091318e+17*l1.^2.*l2.^14 - 1.98448951614853e+20*l1.^2.*l2.^13.*l3.^3 + 2.88805614017511e+17*l1.^2.*l2.^13.*l3.^2 - 1.54639464062719e+18*l1.^2.*l2.^13.*l3 - 8.18277625036765e+15*l1.^2.*l2.^13 + 3.09219480922851e+20*l1.^2.*l2.^12.*l3.^4 + 3.17686175419262e+18*l1.^2.*l2.^12.*l3.^3 + 3.59626936808639e+18*l1.^2.*l2.^12.*l3.^2 - 46758721430670.1*l1.^2.*l2.^12.*l3 - 8.41929367720916e+15*l1.^2.*l2.^12 - 3.59353173407429e+20*l1.^2.*l2.^11.*l3.^5 - 5.99271649086335e+18*l1.^2.*l2.^11.*l3.^4 - 4.95086625463216e+18*l1.^2.*l2.^11.*l3.^3 + 5.33049424309662e+15*l1.^2.*l2.^11.*l3.^2 + 1.95748000790172e+16*l1.^2.*l2.^11.*l3 + 78259263481361.2*l1.^2.*l2.^11 + 3.84531098732033e+20*l1.^2.*l2.^10.*l3.^6 + 1.04692035081348e+19*l1.^2.*l2.^10.*l3.^5 + 5.99744467238329e+18*l1.^2.*l2.^10.*l3.^4 - 6.49946227886344e+16*l1.^2.*l2.^10.*l3.^3 - 4.1090540743235e+16*l1.^2.*l2.^10.*l3.^2 + 76841951133374.2*l1.^2.*l2.^10.*l3 + 103426567931333.0*l1.^2.*l2.^10 - 3.43318996033344e+20*l1.^2.*l2.^9.*l3.^7 - 7.72555017496841e+18*l1.^2.*l2.^9.*l3.^6 - 5.00391077934067e+18*l1.^2.*l2.^9.*l3.^5 + 7.2476018217542e+16*l1.^2.*l2.^9.*l3.^4 + 4.50511639589647e+16*l1.^2.*l2.^9.*l3.^3 - 109251160157348.0*l1.^2.*l2.^9.*l3.^2 - 107919484668165.0*l1.^2.*l2.^9.*l3 + 691581989301.451*l1.^2.*l2.^9 + 3.48476239140799e+20*l1.^2.*l2.^8.*l3.^8 + 4.61057533806526e+18*l1.^2.*l2.^8.*l3.^7 + 4.52362380494545e+18*l1.^2.*l2.^8.*l3.^6 - 1.05207123219013e+17*l1.^2.*l2.^8.*l3.^5 - 5.04592815502952e+16*l1.^2.*l2.^8.*l3.^4 + 609798637721503.0*l1.^2.*l2.^8.*l3.^3 + 321725742666523.0*l1.^2.*l2.^8.*l3.^2 + 2354842320675.33*l1.^2.*l2.^8.*l3 + 146794222212.279*l1.^2.*l2.^8 - 3.43318996033344e+20*l1.^2.*l2.^7.*l3.^9 + 4.61057533806526e+18*l1.^2.*l2.^7.*l3.^8 - 3.51014580607503e+18*l1.^2.*l2.^7.*l3.^7 + 1.57109304007059e+16*l1.^2.*l2.^7.*l3.^6 + 3.44304005227362e+16*l1.^2.*l2.^7.*l3.^5 - 332005417516007.0*l1.^2.*l2.^7.*l3.^4 - 137529067727721.0*l1.^2.*l2.^7.*l3.^3 - 4892650807273.64*l1.^2.*l2.^7.*l3.^2 - 1001300210890.14*l1.^2.*l2.^7.*l3 - 12417655651.984*l1.^2.*l2.^7 + 3.84531098732033e+20*l1.^2.*l2.^6.*l3.^10 - 7.72555017496841e+18*l1.^2.*l2.^6.*l3.^9 + 4.52362380494545e+18*l1.^2.*l2.^6.*l3.^8 + 1.57109304007059e+16*l1.^2.*l2.^6.*l3.^7 - 3.8614107622936e+16*l1.^2.*l2.^6.*l3.^6 + 422288214082793.0*l1.^2.*l2.^6.*l3.^5 + 351427280678656.0*l1.^2.*l2.^6.*l3.^4 + 7946604589099.1*l1.^2.*l2.^6.*l3.^3 + 170535871813.017*l1.^2.*l2.^6.*l3.^2 - 72299490965.4771*l1.^2.*l2.^6.*l3 - 11664838031.6009*l1.^2.*l2.^6 - 3.59353173407429e+20*l1.^2.*l2.^5.*l3.^11 + 1.04692035081348e+19*l1.^2.*l2.^5.*l3.^10 - 5.00391077934067e+18*l1.^2.*l2.^5.*l3.^9 - 1.05207123219013e+17*l1.^2.*l2.^5.*l3.^8 + 3.44304005227362e+16*l1.^2.*l2.^5.*l3.^7 + 422288214082793.0*l1.^2.*l2.^5.*l3.^6 - 57167153490474.8*l1.^2.*l2.^5.*l3.^5 - 9083931311842.54*l1.^2.*l2.^5.*l3.^4 - 1149318711928.71*l1.^2.*l2.^5.*l3.^3 + 80547995701.2474*l1.^2.*l2.^5.*l3.^2 + 11530099059.1925*l1.^2.*l2.^5.*l3 + 23536751.9906243*l1.^2.*l2.^5 + 3.09219480922851e+20*l1.^2.*l2.^4.*l3.^12 - 5.99271649086335e+18*l1.^2.*l2.^4.*l3.^11 + 5.99744467238329e+18*l1.^2.*l2.^4.*l3.^10 + 7.2476018217542e+16*l1.^2.*l2.^4.*l3.^9 - 5.04592815502952e+16*l1.^2.*l2.^4.*l3.^8 - 332005417516007.0*l1.^2.*l2.^4.*l3.^7 + 345893118869875.0*l1.^2.*l2.^4.*l3.^6 + 6712147679507.67*l1.^2.*l2.^4.*l3.^5 - 1186711175298.9*l1.^2.*l2.^4.*l3.^4 - 100303356965.767*l1.^2.*l2.^4.*l3.^3 - 9063248784.21702*l1.^2.*l2.^4.*l3.^2 + 789248694.468216*l1.^2.*l2.^4.*l3 + 122491952.714009*l1.^2.*l2.^4 - 1.98448951614853e+20*l1.^2.*l2.^3.*l3.^13 + 3.17686175419262e+18*l1.^2.*l2.^3.*l3.^12 - 4.95086625463216e+18*l1.^2.*l2.^3.*l3.^11 - 6.49946227886344e+16*l1.^2.*l2.^3.*l3.^10 + 4.50511639589647e+16*l1.^2.*l2.^3.*l3.^9 + 609798637721503.0*l1.^2.*l2.^3.*l3.^8 - 137845305545366.0*l1.^2.*l2.^3.*l3.^7 - 7090503639903.96*l1.^2.*l2.^3.*l3.^6 - 19722548611.4509*l1.^2.*l2.^3.*l3.^5 + 81535763764.4735*l1.^2.*l2.^3.*l3.^4 + 3696706265.37082*l1.^2.*l2.^3.*l3.^3 - 577417926.552597*l1.^2.*l2.^3.*l3.^2 - 48185998.6492104*l1.^2.*l2.^3.*l3 + 288563.057799454*l1.^2.*l2.^3 + 1.07152524912614e+20*l1.^2.*l2.^2.*l3.^14 + 2.8880561401751e+17*l1.^2.*l2.^2.*l3.^13 + 3.59626936808639e+18*l1.^2.*l2.^2.*l3.^12 + 5.33049424309662e+15*l1.^2.*l2.^2.*l3.^11 - 4.1090540743235e+16*l1.^2.*l2.^2.*l3.^10 - 109251160157348.0*l1.^2.*l2.^2.*l3.^9 + 321251385940056.0*l1.^2.*l2.^2.*l3.^8 + 1795779035910.69*l1.^2.*l2.^2.*l3.^7 - 1931716786178.54*l1.^2.*l2.^2.*l3.^6 - 28555476736.8971*l1.^2.*l2.^2.*l3.^5 + 7486275953.67216*l1.^2.*l2.^2.*l3.^4 + 309047787.007327*l1.^2.*l2.^2.*l3.^3 + 14690298.4466565*l1.^2.*l2.^2.*l3.^2 + 3418235.53610439*l1.^2.*l2.^2.*l3 + 684801.755829903*l1.^2.*l2.^2 - 3.65908602424017e+19*l1.^2.*l2.*l3.^15 - 4.22893934811355e+17*l1.^2.*l2.*l3.^14 - 1.54639464062719e+18*l1.^2.*l2.*l3.^13 - 46758721430670.1*l1.^2.*l2.*l3.^12 + 1.95748000790172e+16*l1.^2.*l2.*l3.^11 + 76841951133374.2*l1.^2.*l2.*l3.^10 - 113295527568124.0*l1.^2.*l2.*l3.^9 - 1629754181647.25*l1.^2.*l2.*l3.^8 + 499901994706.734*l1.^2.*l2.*l3.^7 + 36803981472.6674*l1.^2.*l2.*l3.^6 - 2989971206.26096*l1.^2.*l2.*l3.^5 - 480009031.765313*l1.^2.*l2.*l3.^4 - 11921492.1853954*l1.^2.*l2.*l3.^3 + 3418235.53610439*l1.^2.*l2.*l3.^2 + 753151.364556796*l1.^2.*l2.*l3 - 1533.89300411523*l1.^2.*l2 + 9.37824823540379e+18*l1.^2.*l3.^16 + 4.43522907241177e+17*l1.^2.*l3.^15 + 5.23154225091318e+17*l1.^2.*l3.^14 - 8.18277625036765e+15*l1.^2.*l3.^13 - 8.41929367720916e+15*l1.^2.*l3.^12 + 78259263481361.2*l1.^2.*l3.^11 + 102952211204866.0*l1.^2.*l3.^10 - 1110973571273.05*l1.^2.*l3.^9 - 877816306956.383*l1.^2.*l3.^8 + 13559361595.1933*l1.^2.*l3.^7 + 8341893149.39269*l1.^2.*l3.^6 - 77197988.1866399*l1.^2.*l3.^5 - 76962832.8369739*l1.^2.*l3.^4 + 288563.057799454*l1.^2.*l3.^3 + 681671.361943954*l1.^2.*l3.^2 + 1283.46149323927*l1.^2.*l3 - 46.9559082892417*l1.^2 - 1.60065545335102e+18*l1.*l2.^17 + 7.83577706326509e+18*l1.*l2.^16.*l3 - 9.28303759341999e+16*l1.*l2.^16 - 2.54077238493916e+19*l1.*l2.^15.*l3.^2 + 2.06289724298222e+17*l1.*l2.^15.*l3 - 9.20455715556768e+16*l1.*l2.^15 + 5.4915970224221e+19*l1.*l2.^14.*l3.^3 - 3.09434586447333e+17*l1.*l2.^14.*l3.^2 + 3.4760116150005e+17*l1.*l2.^14.*l3 + 1.98390575212995e+15*l1.*l2.^14 - 9.34627626673762e+19*l1.*l2.^13.*l3.^4 - 2.88805614017511e+17*l1.*l2.^13.*l3.^3 - 8.95541784540214e+17*l1.*l2.^13.*l3.^2 - 2.61848840011765e+15*l1.*l2.^13.*l3 + 1.68805915376442e+15*l1.*l2.^13 + 1.21240761326154e+20*l1.*l2.^12.*l3.^5 + 1.44402807008755e+18*l1.*l2.^12.*l3.^4 + 1.48815575123594e+18*l1.*l2.^12.*l3.^3 + 2.24441862867227e+15*l1.*l2.^12.*l3.^2 - 5.26208600279771e+15*l1.*l2.^12.*l3 - 23385653741789.2*l1.*l2.^12 - 1.26547873036733e+20*l1.*l2.^11.*l3.^6 - 3.46566736821013e+18*l1.*l2.^11.*l3.^5 - 1.96846028896224e+18*l1.*l2.^11.*l3.^4 + 1.23443024576975e+16*l1.*l2.^11.*l3.^3 + 1.20381880792616e+16*l1.*l2.^11.*l3.^2 + 12141642447757.2*l1.*l2.^11.*l3 - 22751101518459.2*l1.*l2.^11 + 9.36708155517112e+19*l1.*l2.^10.*l3.^7 + 4.90969543829768e+18*l1.*l2.^10.*l3.^6 + 1.89241978572376e+18*l1.*l2.^10.*l3.^5 - 2.94112357798928e+16*l1.*l2.^10.*l3.^4 - 1.67221823255035e+16*l1.*l2.^10.*l3.^3 + 10866061334568.7*l1.*l2.^10.*l3.^2 + 41441278863929.4*l1.*l2.^10.*l3 - 295155296468.339*l1.*l2.^10 - 3.64160135387586e+19*l1.*l2.^9.*l3.^8 - 6.18869172894666e+18*l1.*l2.^9.*l3.^7 - 1.42247085528033e+18*l1.*l2.^9.*l3.^6 + 5.72326750311428e+16*l1.*l2.^9.*l3.^5 + 1.89503487133693e+16*l1.*l2.^9.*l3.^4 - 197715072544218.0*l1.*l2.^9.*l3.^3 - 100323466942650.0*l1.*l2.^9.*l3.^2 - 310967187350.572*l1.*l2.^9.*l3 - 65492954459.8992*l1.*l2.^9 - 3.64160135387586e+19*l1.*l2.^8.*l3.^9 + 6.21963518759139e+18*l1.*l2.^8.*l3.^8 + 4.71900119801684e+17*l1.*l2.^8.*l3.^7 - 6.77533873530441e+16*l1.*l2.^8.*l3.^6 - 1.34582571142122e+16*l1.*l2.^8.*l3.^5 + 351493462300831.0*l1.*l2.^8.*l3.^4 + 88760472881904.8*l1.*l2.^8.*l3.^3 + 1023255224235.9*l1.*l2.^8.*l3.^2 + 350239529975.289*l1.*l2.^8.*l3 + 8158707639.11345*l1.*l2.^8 + 9.36708155517112e+19*l1.*l2.^7.*l3.^10 - 6.18869172894666e+18*l1.*l2.^7.*l3.^9 + 4.71900119801684e+17*l1.*l2.^7.*l3.^8 + 7.95165457015318e+16*l1.*l2.^7.*l3.^7 + 5.80219323689913e+15*l1.*l2.^7.*l3.^6 - 598814467024602.0*l1.*l2.^7.*l3.^5 - 111316432328501.0*l1.*l2.^7.*l3.^4 - 1536012257131.15*l1.*l2.^7.*l3.^3 - 344667877439.213*l1.*l2.^7.*l3.^2 + 16497009471.5407*l1.*l2.^7.*l3 + 4212654483.49058*l1.*l2.^7 - 1.26547873036733e+20*l1.*l2.^6.*l3.^11 + 4.90969543829768e+18*l1.*l2.^6.*l3.^10 - 1.42247085528033e+18*l1.*l2.^6.*l3.^9 - 6.77533873530441e+16*l1.*l2.^6.*l3.^8 + 5.80219323689913e+15*l1.*l2.^6.*l3.^7 + 600373510607388.0*l1.*l2.^6.*l3.^6 + 15826262116501.7*l1.*l2.^6.*l3.^5 + 415626846047.25*l1.*l2.^6.*l3.^4 + 636912771288.646*l1.*l2.^6.*l3.^3 - 24129762687.378*l1.*l2.^6.*l3.^2 - 6725293948.54278*l1.*l2.^6.*l3 - 84958294.0965921*l1.*l2.^6 + 1.21240761326154e+20*l1.*l2.^5.*l3.^12 - 3.46566736821013e+18*l1.*l2.^5.*l3.^11 + 1.89241978572376e+18*l1.*l2.^5.*l3.^10 + 5.72326750311428e+16*l1.*l2.^5.*l3.^9 - 1.34582571142122e+16*l1.*l2.^5.*l3.^8 - 598814467024602.0*l1.*l2.^5.*l3.^7 + 5074176316583.62*l1.*l2.^5.*l3.^6 + 1660248542634.41*l1.*l2.^5.*l3.^5 - 332475931907.191*l1.*l2.^5.*l3.^4 + 28940321436.8553*l1.*l2.^5.*l3.^3 + 7670627862.47646*l1.*l2.^5.*l3.^2 - 292546477.187813*l1.*l2.^5.*l3 - 57886437.410386*l1.*l2.^5 - 9.34627626673762e+19*l1.*l2.^4.*l3.^13 + 1.44402807008755e+18*l1.*l2.^4.*l3.^12 - 1.96846028896224e+18*l1.*l2.^4.*l3.^11 - 2.94112357798929e+16*l1.*l2.^4.*l3.^10 + 1.89503487133693e+16*l1.*l2.^4.*l3.^9 + 351493462300831.0*l1.*l2.^4.*l3.^8 - 104359200340319.0*l1.*l2.^4.*l3.^7 - 2003592458934.31*l1.*l2.^4.*l3.^6 + 798197796569.947*l1.*l2.^4.*l3.^5 - 6721954092.6029*l1.*l2.^4.*l3.^4 - 6263235326.43442*l1.*l2.^4.*l3.^3 + 215540364.696749*l1.*l2.^4.*l3.^2 + 40842617.511218*l1.*l2.^4.*l3 - 540849.61690412*l1.*l2.^4 + 5.4915970224221e+19*l1.*l2.^3.*l3.^14 - 2.88805614017511e+17*l1.*l2.^3.*l3.^13 + 1.48815575123594e+18*l1.*l2.^3.*l3.^12 + 1.23443024576975e+16*l1.*l2.^3.*l3.^11 - 1.67221823255035e+16*l1.*l2.^3.*l3.^10 - 197715072544218.0*l1.*l2.^3.*l3.^9 + 88127997246615.5*l1.*l2.^3.*l3.^8 + 1784484828137.67*l1.*l2.^3.*l3.^7 - 539583132796.845*l1.*l2.^3.*l3.^6 - 12622906158.6284*l1.*l2.^3.*l3.^5 + 4292223878.72541*l1.*l2.^3.*l3.^4 - 73594989.014162*l1.*l2.^3.*l3.^3 - 42986090.4258324*l1.*l2.^3.*l3.^2 - 2846056.21578205*l1.*l2.^3.*l3 - 329513.643826072*l1.*l2.^3 - 2.54077238493916e+19*l1.*l2.^2.*l3.^15 - 3.09434586447333e+17*l1.*l2.^2.*l3.^14 - 8.95541784540215e+17*l1.*l2.^2.*l3.^13 + 2.24441862867227e+15*l1.*l2.^2.*l3.^12 + 1.20381880792616e+16*l1.*l2.^2.*l3.^11 + 10866061334568.8*l1.*l2.^2.*l3.^10 - 100745117366177.0*l1.*l2.^2.*l3.^9 + 27106098655.254*l1.*l2.^2.*l3.^8 + 784928285878.041*l1.*l2.^2.*l3.^7 + 1847254559.79928*l1.*l2.^2.*l3.^6 - 5551083529.58115*l1.*l2.^2.*l3.^5 + 14070884.342221*l1.*l2.^2.*l3.^4 + 29542922.5017978*l1.*l2.^2.*l3.^3 - 1642336.03181861*l1.*l2.^2.*l3.^2 - 369793.162192174*l1.*l2.^2.*l3 + 1690.4126984127*l1.*l2.^2 + 7.83577706326509e+18*l1.*l2.*l3.^16 + 2.06289724298222e+17*l1.*l2.*l3.^15 + 3.4760116150005e+17*l1.*l2.*l3.^14 - 2.61848840011765e+15*l1.*l2.*l3.^13 - 5.26208600279771e+15*l1.*l2.*l3.^12 + 12141642447757.2*l1.*l2.*l3.^11 + 42706230134508.0*l1.*l2.*l3.^10 - 152848278528.247*l1.*l2.*l3.^9 - 324778073751.361*l1.*l2.*l3.^8 - 4284604326.20109*l1.*l2.*l3.^7 + 3014447555.93865*l1.*l2.*l3.^6 + 150686379.592149*l1.*l2.*l3.^5 - 13554142.1845046*l1.*l2.*l3.^4 - 2846056.21578205*l1.*l2.*l3.^3 - 382314.737735972*l1.*l2.*l3.^2 + 313.039388594944*l1.*l2.*l3 + 51.0645502645503*l1.*l2 - 1.60065545335102e+18*l1.*l3.^17 - 9.28303759341999e+16*l1.*l3.^16 - 9.20455715556768e+16*l1.*l3.^15 + 1.98390575212995e+15*l1.*l3.^14 + 1.68805915376442e+15*l1.*l3.^13 - 23385653741789.2*l1.*l3.^12 - 22329451094933.0*l1.*l3.^11 + 448003574996.586*l1.*l3.^10 + 225654889215.13*l1.*l3.^9 - 7427502709.19291*l1.*l3.^8 - 2741445512.4015*l1.*l3.^7 + 76217290.1870305*l1.*l3.^6 + 32774828.7491517*l1.*l3.^5 - 540849.61690412*l1.*l3.^4 - 329513.643826072*l1.*l3.^3 - 1126.9417989418*l1.*l3.^2 + 51.0645502645503*l1.*l3 + 1.23259259259259*l1 + 1.3806522621004e+17*l2.^18 - 8.21485647116353e+17*l2.^17.*l3 + 9.45494569700184e+15*l2.^17 + 2.95872947164765e+18*l2.^16.*l3.^2 - 3.18029991626426e+16*l2.^16.*l3 + 8.03920563991323e+15*l2.^16 - 7.18076310961731e+18*l2.^15.*l3.^3 + 5.84487552178296e+16*l2.^15.*l3.^2 - 3.8140342730624e+16*l2.^15.*l3 - 233793607153361.0*l2.^15 + 1.32045993751291e+19*l2.^14.*l3.^4 + 3.43816207163708e+15*l2.^14.*l3.^3 + 1.14278200991651e+17*l2.^14.*l3.^2 + 607863378598739.0*l2.^14.*l3 - 167171191973850.0*l2.^14 - 1.8585176087238e+19*l2.^13.*l3.^5 - 2.28637777763863e+17*l2.^13.*l3.^4 - 2.36862508511219e+17*l2.^13.*l3.^3 - 935174428613445.0*l2.^13.*l3.^2 + 675801927186164.0*l2.^13.*l3 + 3519658997501.61*l2.^13 + 2.0769731372755e+19*l2.^12.*l3.^6 + 6.3777906428867e+17*l2.^12.*l3.^5 + 3.96984902828632e+17*l2.^12.*l3.^4 - 467587214306723.0*l2.^12.*l3.^3 - 1.78946459524674e+15*l2.^12.*l3.^2 - 8338520980658.16*l2.^12.*l3 + 2475717768100.33*l2.^12 - 1.84438294242929e+19*l2.^11.*l3.^7 - 9.62685380058369e+17*l2.^11.*l3.^6 - 5.54520526777016e+17*l2.^11.*l3.^5 + 3.41338666443908e+15*l2.^11.*l3.^4 + 3.18014188553337e+15*l2.^11.*l3.^3 + 15755788935124.6*l2.^11.*l3.^2 - 6691470360091.35*l2.^11.*l3 + 39906200798.0152*l2.^11 + 1.44307302506766e+19*l2.^10.*l3.^8 + 9.35180083485273e+17*l2.^10.*l3.^7 + 6.93164777224175e+17*l2.^10.*l3.^6 - 7.24760182175421e+15*l2.^10.*l3.^5 - 4.58063188860597e+15*l2.^10.*l3.^4 - 9472370859047.87*l2.^10.*l3.^3 + 16386136246434.6*l2.^10.*l3.^2 + 91106609369.0537*l2.^10.*l3 + 11228905592.797*l2.^10 - 1.22674308389357e+19*l2.^9.*l3.^9 - 3.77338287362165e+17*l2.^9.*l3.^8 - 7.80033731694854e+17*l2.^9.*l3.^7 + 7.34111926461554e+15*l2.^9.*l3.^6 + 5.3737137009345e+15*l2.^9.*l3.^5 + 1889749797316.16*l2.^9.*l3.^4 - 22368118451340.4*l2.^9.*l3.^3 - 534968974848.865*l2.^9.*l3.^2 - 56417218967.0258*l2.^9.*l3 - 1443167624.84318*l2.^9 + 1.44307302506766e+19*l2.^8.*l3.^10 - 3.77338287362165e+17*l2.^8.*l3.^9 + 8.15628013092083e+17*l2.^8.*l3.^8 - 3.50690410730042e+15*l2.^8.*l3.^7 - 5.80398449215227e+15*l2.^8.*l3.^6 + 12188886192690.1*l2.^8.*l3.^5 + 30319812763195.3*l2.^8.*l3.^4 + 1308998680893.39*l2.^8.*l3.^3 + 66207507093.113*l2.^8.*l3.^2 - 3765063981.25755*l2.^8.*l3 - 679868209.972788*l2.^8 - 1.84438294242929e+19*l2.^7.*l3.^11 + 9.35180083485273e+17*l2.^7.*l3.^10 - 7.80033731694854e+17*l2.^7.*l3.^9 - 3.50690410730042e+15*l2.^7.*l3.^8 + 5.80160823425646e+15*l2.^7.*l3.^7 - 2763759078575.18*l2.^7.*l3.^6 - 28657844946990.7*l2.^7.*l3.^5 - 1807073243683.71*l2.^7.*l3.^4 - 33385101075.3403*l2.^7.*l3.^3 + 12725531411.9505*l2.^7.*l3.^2 + 1349802292.18456*l2.^7.*l3 + 18526664.3839243*l2.^7 + 2.0769731372755e+19*l2.^6.*l3.^12 - 9.62685380058369e+17*l2.^6.*l3.^11 + 6.93164777224175e+17*l2.^6.*l3.^10 + 7.34111926461554e+15*l2.^6.*l3.^9 - 5.80398449215227e+15*l2.^6.*l3.^8 - 2763759078575.12*l2.^6.*l3.^7 + 32473004483712.0*l2.^6.*l3.^6 + 1508906158475.9*l2.^6.*l3.^5 - 138390764969.565*l2.^6.*l3.^4 - 22551899417.5494*l2.^6.*l3.^3 - 1056010171.82964*l2.^6.*l3.^2 + 91695262.9634737*l2.^6.*l3 + 11172930.9781685*l2.^6 - 1.8585176087238e+19*l2.^5.*l3.^13 + 6.3777906428867e+17*l2.^5.*l3.^12 - 5.54520526777016e+17*l2.^5.*l3.^11 - 7.24760182175421e+15*l2.^5.*l3.^10 + 5.3737137009345e+15*l2.^5.*l3.^9 + 12188886192690.2*l2.^5.*l3.^8 - 29132201673457.6*l2.^5.*l3.^7 - 601981274302.134*l2.^5.*l3.^6 + 258365803451.001*l2.^5.*l3.^5 + 19351274329.5639*l2.^5.*l3.^4 - 801460143.980672*l2.^5.*l3.^3 - 160472040.066512*l2.^5.*l3.^2 - 6864629.75301384*l2.^5.*l3 + 342977.805841637*l2.^5 + 1.32045993751291e+19*l2.^4.*l3.^14 - 2.28637777763863e+17*l2.^4.*l3.^13 + 3.96984902828632e+17*l2.^4.*l3.^12 + 3.41338666443908e+15*l2.^4.*l3.^11 - 4.58063188860597e+15*l2.^4.*l3.^10 + 1889749797316.16*l2.^4.*l3.^9 + 30952288398484.7*l2.^4.*l3.^8 - 360285227959.438*l2.^4.*l3.^7 - 355699738879.285*l2.^4.*l3.^6 - 6625742917.61336*l2.^4.*l3.^5 + 2829686466.1902*l2.^4.*l3.^4 + 157231472.763455*l2.^4.*l3.^3 - 2902465.8253227*l2.^4.*l3.^2 + 107180.564325512*l2.^4.*l3 + 90676.1843795588*l2.^4 - 7.18076310961731e+18*l2.^3.*l3.^15 + 3.43816207163708e+15*l2.^3.*l3.^14 - 2.36862508511219e+17*l2.^3.*l3.^13 - 467587214306723.0*l2.^3.*l3.^12 + 3.18014188553337e+15*l2.^3.*l3.^11 - 9472370859047.89*l2.^3.*l3.^10 - 23053300389570.5*l2.^3.*l3.^9 + 668617100162.971*l2.^3.*l3.^8 + 277004977597.599*l2.^3.*l3.^7 - 3502086769.61945*l2.^3.*l3.^6 - 3199086357.07241*l2.^3.*l3.^5 - 57669306.2813756*l2.^3.*l3.^4 + 20115076.3754425*l2.^3.*l3.^3 + 862391.309880656*l2.^3.*l3.^2 - 43208.3541272018*l2.^3.*l3 - 1502.58906525573*l2.^3 + 2.95872947164765e+18*l2.^2.*l3.^16 + 5.84487552178296e+16*l2.^2.*l3.^15 + 1.14278200991651e+17*l2.^2.*l3.^14 - 935174428613445.0*l2.^2.*l3.^13 - 1.78946459524674e+15*l2.^2.*l3.^12 + 15755788935124.6*l2.^2.*l3.^11 + 16596961458197.7*l2.^2.*l3.^10 - 590310592936.678*l2.^2.*l3.^9 - 195717795698.425*l2.^2.*l3.^8 + 7530127962.51509*l2.^2.*l3.^7 + 2480734486.96218*l2.^2.*l3.^6 - 39590351.8537946*l2.^2.*l3.^5 - 21034719.0572302*l2.^2.*l3.^4 + 862391.309880655*l2.^2.*l3.^3 + 253882.970801489*l2.^2.*l3.^2 + 1252.15755437978*l2.^2.*l3 - 107.434215167548*l2.^2 - 8.21485647116353e+17*l2.*l3.^17 - 3.18029991626426e+16*l2.*l3.^16 - 3.8140342730624e+16*l2.*l3.^15 + 607863378598739.0*l2.*l3.^14 + 675801927186164.0*l2.*l3.^13 - 8338520980658.16*l2.*l3.^12 - 6744176663032.13*l2.*l3.^11 + 257131463632.495*l2.*l3.^10 + 76790359845.1661*l2.*l3.^9 - 3765063981.25755*l2.*l3.^8 - 1122442246.96442*l2.*l3.^7 + 17823120.1668133*l2.*l3.^6 + 11267623.4788937*l2.*l3.^5 + 107180.564325512*l2.*l3.^4 - 42164.889498552*l2.*l3.^3 - 156.519694297472*l2.*l3.^2 + 178.184126984127*l2.*l3 + 2.15703703703704*l2 + 1.3806522621004e+17*l3.^18 + 9.45494569700184e+15*l3.^17 + 8.03920563991323e+15*l3.^16 - 233793607153361.0*l3.^15 - 167171191973850.0*l3.^14 + 3519658997501.61*l3.^13 + 2370305162218.78*l3.^12 - 94494871700.9607*l3.^11 - 28897568456.176*l3.^10 + 2020434674.78045*l3.^9 + 459250235.727296*l3.^8 - 28482881.0321322*l3.^7 - 6959322.25373908*l3.^6 + 342977.805841637*l3.^5 + 92763.1136368584*l3.^4 - 93.9118165784833*l3.^3 - 107.434215167548*l3.^2 + 2.15703703703704*l3 + 0.457851851851852
end
end


text:
# Pricing Engines module
# module PricingEngines
type NullPricingEngine <: PricingEngine end

_calculate!(pe::NullPricingEngine, inst::Instrument) = error("You must set a valid pricing engine")