Skip to content

Instantly share code, notes, and snippets.

@0xGGGGG
Last active December 5, 2018 15:43
Show Gist options
  • Save 0xGGGGG/24404933ace693bdf9c8ac90e9a3061f to your computer and use it in GitHub Desktop.
Save 0xGGGGG/24404933ace693bdf9c8ac90e9a3061f to your computer and use it in GitHub Desktop.
#AdventOfCode 2018 #elixir #elixirlang
defmodule AlchemicalReduction do
@doc """
For example, again using the polymer dabAcCaCBAcCcaDA from above:
* Removing all A/a units produces dbcCCBcCcD. Fully reacting this polymer produces dbCBcD, which has length 6.
* Removing all B/b units produces daAcCaCAcCcaDA. Fully reacting this polymer produces daCAcaDA, which has length 8.
* Removing all C/c units produces dabAaBAaDA. Fully reacting this polymer produces daDA, which has length 4.
* Removing all D/d units produces abAcCaCBAcCcaA. Fully reacting this polymer produces abCBAc, which has length 6.
In this example, removing all C/c units was best, producing the answer 4.
"""
def find_shortest_polymer_alteration_count(polymer_sequence) do
?a..?z
|> Enum.reduce(:infinity, &dig_minimum_count(&1, &2, polymer_sequence))
end
defp dig_minimum_count(char, prev_count, polymer_sequence) do
count =
polymer_sequence
|> String.replace(~r/#{<<char>>}/i, "")
|> scan()
|> String.length()
if count < prev_count, do: count, else: prev_count
end
@doc """
dabA_cC_aCBAcCcaDA The first 'cC' is removed.
dab_Aa_CBAcCcaDA This creates 'Aa', which is removed.
dabCBA_cC_caDA Either 'cC' or 'Cc' are removed (the result is the same).
dabCBAcaDA No further actions can be taken.
"""
def scan(polymer_sequence), do: do_scan(polymer_sequence, "")
defp do_scan(
<<first::binary-size(1), second::binary-size(1), rest::binary>>,
<<prev::binary-size(1), processed::binary>>
) do
cond do
should_remove?(first, second) ->
do_scan(rest, prev <> processed)
should_remove?(prev, first) ->
do_scan(second <> rest, processed)
true ->
do_scan(second <> rest, first <> prev <> processed)
end
end
defp do_scan(<<first::binary-size(1)>>, <<prev::binary-size(1), processed::binary>>) do
case should_remove?(prev, first) do
true -> String.reverse(processed)
false -> String.reverse(first <> prev <> processed)
end
end
# defp do_scan(<<first::binary-size(1)>>, prev), do: do_scan(processed)
defp do_scan(<<first::binary-size(1), rest::binary>>, ""), do: do_scan(rest, first)
defp do_scan("", processed), do: String.reverse(processed)
def should_remove?(char1, char2) do
upper_char1 = String.upcase(char1)
upper_char2 = String.upcase(char2)
cond do
char1 != upper_char1 && upper_char1 == char2 -> true
char2 != upper_char2 && char1 == upper_char2 -> true
true -> false
end
end
end
test = fn ->
defmodule AlchemicalReductionTest do
use ExUnit.Case, async: true
test "checks and destroys adjacent characters" do
assert true == AlchemicalReduction.should_remove?("a", "A")
assert true == AlchemicalReduction.should_remove?("A", "a")
assert false == AlchemicalReduction.should_remove?("a", "a")
assert false == AlchemicalReduction.should_remove?("A", "A")
assert false == AlchemicalReduction.should_remove?("a", "b")
assert false == AlchemicalReduction.should_remove?("B", "a")
end
test "scans polymer sequence" do
example =
"""
dabAcCaCBAcCcaDA
"""
|> String.trim("\n")
assert "dabCBAcaDA" == AlchemicalReduction.scan(example)
end
test "finds shortest polymer alteration" do
example =
"""
dabAcCaCBAcCcaDA
"""
|> String.trim("\n")
assert 4 == AlchemicalReduction.find_shortest_polymer_alteration_count(example)
end
end
end
case System.argv() do
["--test"] ->
ExUnit.start()
test.()
_ ->
result1 =
File.read!("./5_alchemical_reduction_input.txt")
|> String.trim("\n")
|> AlchemicalReduction.scan()
|> String.length()
IO.puts("Scanned polymer sequence is... #{result1}")
result2 =
File.read!("./5_alchemical_reduction_input.txt")
|> String.trim("\n")
|> AlchemicalReduction.find_shortest_polymer_alteration_count()
IO.puts("Shortest polyme alteration count is... #{result2}")
end
VvbBfpPFrRyRrYNpYyPDlLdVvNnMmnOCcosOoSoOfkKKkFJjyYjJWwHhnNTSstuBbdsSDqQUqQkKVvILlVvGgjJiVcCvvfBbvVoOGgFnNeEZeEzImNnMiRrcCVbcaACQqBzIiofFpPaAPpEeOIieEaISssSiARrKwRRrdDrBbWkTtPplLjJWwUAazbBAkKVvanNAaZuNnWwqQmERrecMmnNCosuUmFfoOMSUuOnNMlBUCcucCbGgrRgGsSrRLdDJjinNIvVGucCkKgSsGlLMvIPlLpiVmUszZljJLpPvVqQSEeyYSsgqbBMKkmewuUiIWCcKLlkETYyyYBAabkKmFfMaALIiMmeEmvVhHZDpPGgdjJpPraARAarRzbBMSlQqLsRIKkirTEeNrNnRWwMmBbeEGgGguUWwqLlQFlLfCUuqQOoIicasqQSZPpzACcYBbwWyIiISsORrOoqPpQNaAuUZznojJkKiuUPpviIVAamSsbBMmMnnluUwWLNetTEkKpPgGmFfMsSNyYaATFftuNEenNyYnsbYyBgGBbiILGglSOoxGTtgXaANnFDdfpmMuUPsYyKkSZWyYwhHYymMjJKkziIVvvVUuXxUNnVgGrcVvoOCCcRdDlmMLsSUuNnpgGPsSnNkkXxKrRKiIvpnNPUSZzsuBIibZfFOqQojJlLIiDdjJzdyYDBfVvFQqlLNnSMxXmsULdDpPAatTluyYpPuMmFfUaAbsviIBbVSqQhHclLEpiIyYPDdPpeOoUzZLuUmMpPluaACPpLaAlgGyYDjJirRNnIgGeEnwWNCcLOosSluUwWiIdmmMTtUuDdMBbuUYywWyYxXmNnsSsSjUumMJYyMaAMmGgoOKkoOoQqOrRnMcCqQmBbrRKJjkHhJjJyXxYjlLwRFfgCcGOotVoOvPmMpTPprIiaACuUcWTtAbBweEDdaADdXBbxCcWzmMZDoOdteESfFsEeRrTYyYyDduUaNfjJhHFFfNsSODdotTTXhHxtnIiNXxnOJNnjzZqQyYzGEgGPIUNnuYyipwWepxXxXPQGggGwWnmMEeNFhHyDdYNnGgZzoiIOfaiIAbIiBQfFqoOyiIwbBWqQYuUeGyYgEmpPxXFfAarRrRHhHhFfuUMbBtTPpQuUHhqxXwhHolqQcCLOqcCtTuUQjJvVWpLlMmxoOXPyYhHwVvhekKEKkHTttDdGgBbWwAawWDdXxMKkmJjuUTkKyrRqtUutTTFfQWwYZIizZAuUNnYkKyEecHhCuSPpsPpMvVSsAaULBblOoMAlVvsSRgeEmMGdDTtchHVvLlzwWZOoMmCrLLniINPpeEeEiIuUWnNdDwlyYOoOZzoEawWAyYeOfFPpWAbWwBaEmMeEeTtFfYyLlwoTJjtBbVvVsMmSvZvVwWzxfFahHRrAZzOoiIRrXTtBbLeElWDaADmMmvVMvVrRdZzdwUupkKrRHlSsIBCcuUbiqQLgVvGjBbJBbSseDlLdEaAoOhWHkKeErRbBhzZMmkKtKkDdXlmMLsnNoOSbBxsSXxXnNxuUkHQqZfFfdDQqFzRrfnNFteETXjJxhqQpWCcwPKOocUuCnNfUuFfFfFJuqjJQUOohHjFlXxmMpPcpMdDmPCiILpPiILlhCcHcClLjwWoOoZzOJuUGgWwogGkyfFYOxXhlLIiwWRdDMTtCkKLlOOoTtZzoebBiIwWlLEJjjJcoOmRPpsSreEUQqgGUuMMmmruUiITtRgGtTAauTUuvVXPOAaoOopgGQWwqnmMNxwsyYSWeLlErqQOoKSsoONIipPnkEJjIieDdWeEwRUuDwWDhHdhHtTNndhuhHIiUGgamMARqQrHyzZHhYtusSJjMmUQjXxJHwWBbnNhgwWgGqQGhSOosHqVvJjHhAaDdoGgNnOCcllLLQlwWLqNhKwWkHvVfWwKKmMkkMmwWUuFfNnWwWwaKkALoOlhoOCOocYyYjxmcCMXWwgmMHhoODdGAaJmMFlLYXxuUfFYyPpyqQVvEVveRrpPyCcoOeYPpyVfRrFvvVVvXxqbBfFoqQZnsSNzTtGgnNNIiEAaeEenNTtnbBZtTtpPWwhHTsStTzmMrRkMmKoOFiNnmMVvyYhQqrRYTtjJyHkKqNnGgvVQXLlpuUPbBmldJjDxUlLnNuRrKkXXLlxLZRcCrzrRVvjJMZDdXxRTYeEyLltaRVvrGgTpwWUPzQqlLQRrqZAapuPguUGOiIoJjyYPEeZzTaAmMiViIvTtSszLlkBbaAxIiPpYyXrRoOWwKelLBXxbUuELlkfBbDEeqSsQMGgQqmioOIQqaAIYTKktyzRrNaAIinNOoHhgGnkrTtsyYqQSRhsYZzySGgHNhHhHBgcCKkveHhqQEVTtHhjJCNnMgGHhPBPpfFWwxXLpPLlbxXBURruNIinYyDoOdsSbVvBZzrTvVtnNRlyiIYDgGbBqQqQuUdEemMgWwNnGaARriJjuqQcCxdXxDXlLsdwmSgGsLWwlxSsjJbBhHtTXotyYcCbBIiTOOoMgGDNndSsWUVvuEeKkjDOoUuLrRvVdDLlcCYmMylUyYYEeyeZzBbBbEwmEeQqMFfPpIVviMmpPLCcAanNeElbBdDUuJlLjvCclLRqfFHhQTfFtqKkcCFFISsaAiyLlfQqFAaYoOssLlpPSEaJjaAAjxjJGNQqiVvIwcCWFfdDqQdDngXTZRrzWEewLhCYywdDORjJroxuUXWcYyBbhnNHcCMOorRQFfqETttTehEFtTkKeEfmTXxPptMeEzZiwWSsdDIXoXxvVaFfAmMOEMmdDbBTlLnNtYyeAaEsSTtmMyYCceiIjYyJxWAavXVluULvxzbBlLZAazeEbSsBXxZrfFQqRGAagUuBCcbVLlNeYyoluULHhxXOUYUiIznGetLJTtjIiBbltmMTTEvNSsnHhPpGRAladDALGVVvvgvmzZMVarkKgIiLlTtfyYFTHhuUteEFfmMWwcCypPZzYbBeEtczZiYyXxIXacCAxYyCaFeEfNjyYEXTtpPeEfFJUzZDduWwloOsSIibBtXxIiBbTaAXxtTLbBkfFaAKzEeZtTOoTtHhTttTIiPlLXxZzdDsNmMnxXSgGZGJjgrMmRzkKpMmUuOGgoPpIijVvsKVvyYLGgEelkpRMmwWCcRrrPSwWaUuDdPpzIiZZzAAanLlNlnNdDkwJjgGWkKKqQkVoOtTkUuGgKbBvsSQJnNjGgUzOoZuEePplLDdqlLAHhsSQtTTtZHuUWeEOozCcSsgGZwNnTNnEusSUmMeZdDzVvjJPpVvFEeRriIGgoOPLlDdmMmMpPuUaMmADdqQHcCSsiIhxIiWwXPTteoFfOQZzwWqMmxXEpBRrbHxoOkKyYuUTtpPFfvVkKXMmIEeSknNKzZUuserROIidDoJlLKkjdDbBIREeruUchHmsZzSHnNhuUmMLltFzZFcCwbUuxXjJBYaAySZzjKkJXxeEIoOMmSsixsGgSQqXjJxXgTKJjkhUutTCcKkZzHcbBLlCVvxXaAPXxjjpPJJhgGXhHxHKkIiwWUuKLxXlkyYWLPpvxjJAaXVOopTtPlDkaEvVeeECUufFcTXxcxXCOWrRLlwWwqGQqtCVvCcQTthHywWYJjqkeHhaPpAEKWwKkDdmMGuaKzZPpoONnOnyZzBbAaRngSsjJGgGDaGgFffFAuUdNuanNyYAjJOJvVjIiYBSsbDdqvVOoQyotTxyYavxXzJjfFZorVvRcCjPfFHgGhXxjXvVxJuSTtsKNxgGzZXnnFffFTtNxXifFxXIZzOommMMbJjGDdgyhHjJCqQcxQpVmMMHdvAaVfFVFfvfIZzioOAPpaIirddDDRjUustTShAateEDdTiqQIeEHqOHSsGgNcGgAabBVtKkTvXYyxucCUZuyxwWXwWQvsSjJCcjJQqbBaUsSCcuSsvVGgxXlLbTtvyYYyQqmAaOqkmMKKkQouUuUoObcCBQFfqAeElLaXvfQFfjhIhHiHXBPpahvAaXxyYVHHhEKkqbBuUQhHsYyfVvFSywWmMuUrRjJbGBbaQUuGeMmuyYcsciIduCcUDCyYHhKkHhSXUuxsVvSkKWnWPpwjJBAsSaVvGmXxBbrNnRQqMDdbBshHWxXKknNEhHXXxxXQSsqKJgGwWzzQcCpPqZydhHJjeEUueOorTtRtYyTsxXoOSHuUhDeQrRKkqEwKkWcCiLlSsnKkNXeExIvVIQFfqOIizxXXxZbBozWwMmAaSspnwYyWNKbBYyuEeUgGxXqZJjzQkPprBbRDKkdvVaMmAEGeEnMmNijgGJvVsSIgGrHKkhSsneENelpPqQLKFfkHhueEBbJjKkJjUupjFXGwtTWbBgCrSsqQrRiIqQVvOotpbJhHjBPjJLlwWTyYJgIiGaAjjQqeEBZzbZgGzJhjJIiHlmrDdGgRiYyQqIMvVvVUuwIiPpoOixXIBbZFYyVvfbBRrohHRrOtiIFfTPlSLlsuULGIiwWgPEepBbEenKkNGgXqeEAhHnCcCZQqJaCcqIAQqaiQFfYlnJjNmfFMppuUcKkUuxXEeLDNkKnoOqzGhHTtgtTZQhyYHdRduUhvVHSsVjJqQhHMmqQicCDJjBbwJjNhnNRiBSsKkblLRetTEgGHhnNZznNdDdnNDrzcCZkuUKkKDPWwHKoyfFYdVPpAaAaAaEOoeXxXxxXtTXlqQfFLzUuZxXxWlLBbeEHhFtTfVBbvtTeJjEbBHhPSspvaAVaAcCLiUWwPpkKufAasMmWwDzZdmsSMEgyYGeErVfFNnvcaAuUCXxBbLlbAEeakKFfBbSsvBJjbGZzrbsSdDxXeEBYyRTeEhDdHttLfFlzpPZTgVhHMmqnNrRbBXxTtvVFtTrRkKfiIbBrUuHymMPpYmYrRyvVMiILlUuhFfJjsSDdVoMmOxXvSsJwWjygxpPXCdDxXcBbEeGNXxVFfvnJjMjXwWxJEeRyYIiLlnwWxvVpPxUuXIiPpHaAlLheMmNnExXuSMmZzuUGVvgcCjkSsJjAaDdDkKUucCCcdAamMmMUuJjJZPpzuwVvOoRrkbnluULgGNGOTSstoguUIieUuiwWPwNnWBbPpYypYyKNkOoNnnuUBboOsStUuTNJRhoJjOxXuFfUHWwYyyYjFfJrhHjJjIiiIBhHNnAabiPCcCvveEzZZzvrRVvVRpoOPVTtVTuLlUvGgVDuUdvOoWwXUuxVaeyYSUusIiEfFQEyYewVvhoOCdqQDcjJjCcoOdDQDdqCcJHWqQMmtUOHhopPuqJeNnEjQNnbQqbBkSNnaAjJNFfVFfXFfxbZzBvmUuyYmMFfnaANBbzZTtCcGEXxssSSXxGgXxeIbbBsSXkKlLYyTWFMmHhfKoOSskwBoObnNEeLgGJjlHhpsSOoeEPxjJUyYueEXmaoONnDdeETtryWwvtxXTeEcCVxXMmvVaAhHAaEeTtJxXjzTtZpQqPQheIkKiEnaqQANOolLDdcoOCryYgDdGOWwoRHjJqLcClROnUuTjJMmtNmlLMkKMmmKTtQqkHhMdDNBnMjhjJymMjJYagGAZJoOJcCTDdhHtKkiIFfjNBbrRnzDdTtMmZmMQqwfFWbBLEexXlmxYyXMNyYYAFYyfuUEdlLPplXxXBbiNjJPpuVUuvABcCZzbaZzRrUiIzZnpPUuUEeiIyIiYbBEedDnNRrqQqQVDdyYCBllLLbhmMAlvVPLlsVjJEesHmMQdvVbzLlZBDWwGgRoOKkrFkSYynoONnaKRrkguWwzZOyYotTMLllLtUUvVuunWwOoNBoOnFfFfEYyyVvYeXxNSsrIiRSfNqQzZbBnFqtTIiqAyYaQUuFfYVvyynnNNiXxIfFDdCPpqQzZFRrfbwWBZzsSjNnJfFUmxXMaaXxqQIiADaAdRTtKVqQikGRrxEwWTXxtfFeXTnpPEeFfpnEeAPpSsarRSsNWwPHhaEeAAaGFjJfHdDhIiRrHLlhmMxTtrNnGgzBbZRqQXKrRgGxXqQkjdzZxXZZIlLiGgRrzrRMEZVvzeTCnNSsMmAakKUuwAaWVvRyYrhbBsozLxIiXlZoNnOoOBTqQtSskRFfXxbWwbBKkBrGgSsdDCfcCFlkKyYLEnJSsbBjbBNtTBeEdDSspPZzaAhaPUupEerGgRlSQJjXxNsSRrkmdvcCJjzwWZboCLLllcSsWwLloOzZElLecvNnVCmyXPIiphtTHfFxteETYMFLlzxrRILSsDdWwxVoOCXxcUuIoOBeEbcCAacJjCwEevViILlWrRASgGsVvISshGgHyhHYmMGgRIirIxXiGwiIAafiIFWjTUurlLmMRtwWZzAJjBbRrRrboOJjtpPtbwWBTYzZSTXlLdDvVxnwaRmzRrZMHhUuJjDYydeYyxcUuPlGVvcDvVicCXxbBsIjJiciCSscIMmEeyPVvTmMDdkfAaFKiIQqkRrKClLAuUEeONhCdyqQYDbbBBrUtTuDeEdsfFgGSeWksBbQqYyaANfFfFlLKkaHtThQNnqMmtaWqUuQCLlcRrwcCvaAJjVfGgiNQCJjcWwxhHOojJkKkKKCFvsSVfKqSZovVOoOZgGzzsZZzzRQPnNkKSINniRxXEertTdzZDQqxXCcKqQEekTeEeEtyraqkKQNdDLwWAalnyIxXnCcUAjJyYNnoOVvyRbBrslLhcCHSgigGIrGhzZqfFQHbGgLlqQAdDaryYHhoObBMparReEEiILlUpLXxlAaiIPmeEMwWKGgJBbCcjgGFfEyYeKkxTjiIJzgGZcTtqQCEetbXiIxBvVHhjJRrBZzbGgTOMmozfFiIZVnNvihuDdiIRlcCekKWwEItsXxSTIBqdDQlLDTtbBHhnNCcCcxXDxTtWCclkKLLlZzEwBbWbNnaABeoOWbBwrRoOkoHIiVvpPZzDRrdhqiIQeFfxpjTtWwYyJKkWwrRPUuWwXEsSqmMjJZzQbilLIsSNrRnhWBbwceEfFLldpPDhcCdDHlVvzDCcOxMmaRXNwWwWnBlLiAJjaIGgkKwEIhHPpOoXDtOoFuUrxjJWWwqQwZzXEeFfOoyYVvwGgpXeERrewWdDpgvVGfFvVVvPEWwxFfIRrisSRrDddvZJnNkKiYzZyKkvVjQFIiVvdDKuQqUxOoIiXzsEeMmSDiInNqQjOoVvsFGgfSeEEerRgGSsyYsScCPgGEYywMmWDdGcSsdDuUsSCPmpPMjJpiIsxXmMUsSqQcCLkDBuUbBsSPPpkKpxXLlpPbPDdaAKEekplIiknNZNnzoJZzQqYpBGgCcAartTUybBUBjmMkKvVnNtYyTBdDbAJjVvmgGMBbkKObSsGgBrRfFqQLlQqHhzfFCSsvKkhPwWBCPNaAMxXLKMmkNnpPRlLrVGgvEuxXrRmMoOuURUurwWsSYlLyrmUuQiIAaqbqDdXZzxQsqvVEeuUNnQDQqKkqhHQnBbEhHeMkCcZzKfeEFiITnNNnoOzgKlyYLXHlLhnNYyxgGQhHwWqHAahEuUUuuHcOAaWwgGoBbzZCYCcyUPpuEdtTDeugcCjJGUnqQuUMmZzzZUfNgyYGnvwlLlLtTGgfSRrUMoaAOxaAEewWXUlLudfkKEedQBboOZwWSwmMArRaPUBYyUHhaAubZziFfxgGPpXORrolLapPiFfIhyYRlLcXxSIispgGyAaYVvOaAoxXRrPCohiIHbSscCxXBOpUQIiqiIuDdebBIiEpeEhmRvUuoJRrjOBfTiItFqQbcdDNnNFtAaOoTSJWwjJjDdtTjJmMfZzFsQqsSVvxXMmaAAaKqQEtdDTjYyQtyYSsTxXPveEZzIimWVvMwZzvVWCchKkRUurfFcCiIWRrIiqRrQZzaAKkDpNhHPYzeEDJjdMIiYyHhbBUuiIGHwWxsDdSzcCtXxTCcRiIbGLlgSsAIiaRPpAfpPFahHbBneEYyDtTdNrkXZWGgwJoOjNFfnZKkYqQqxJjXWwxiINgGndDXIiwMmOoYyJjWIuUisCcPHBbOrRwWAHagGWwbYylhHSyunNcPjEsSezxXAatZmeaWeEQqpPPpwuUAalMJjmYyLoOMmEvqBbZzTSsoOXxRrJBbovHhVvVOiIChMmfFMwWCzgGZiJFfeEEeyYxXjPUuZYyzGWwkhGgHKBRrnmnNaAMNuUbZzPpwvVWgMIAaifYyycCYQqqfFQjyYSeEUuSaNnwCcfFWcfFZlLsNnRpPfFumdDRrSsMZgnNGgGCcHhNpVvMMlPplxXsSjJoOTdFloOPpfFrRLgGlteEOoLlTZzKkLmHiIhKMaALlLcGZsSxdDydDYXlLpwWlLmGgaAEeLlOWMhHLhHlOeESscCJfFrRWwFkKqQgsSYyKtTkGgJjFffFGOjdzZDwWXxYyPbBfiIJjDdJRFfGUdwWDuncCwWNgYTDdEtUuTYMmXxybBsSpJOoQJjqUtTaAjJuAaJCcjdiIdDpFfBQqbYyLlPJCEecjkKbBUuUZpyYtmMSsYyjJDdYRrynNkKrRXzZxrsbBdjjPpcDdCRSsrzttSwWsEehcCHKkdxmTMmtShHsnNMeKuUkKDdGgWwkHOohKOokbBECvxXVZiSdDaAsqQUumMYyuvVqQaAyzKklLtdKkDFfOhxXHMFGgPdDCAacpYROoaAXfdDjbBJZzFBbiIsnbOoGBbBbgtTNawWAYUutTyIxXinoLlOlLbBfFEeDdPlLYyRryYppiZAaSUuTtWwaALoOPMmagGAHhLWlgGLwtdDTQwYyWuIVvAaVvfEgGIiedDwWFEVULwWlmqQPBDhHdXvVVvxmMbDddDaAaAvVmWwETZzwYyWteMScQqCzuUjGgJyLlhQSnNsmMuUAgOrNnXxRTJyYjSHhszZObBPpxPpXlAMmiILkKDdQvvVVYyGrfFsRaAVoFfWwiIOGgjJvrKyYxLlmWNLlMndDNmAaUWwzZWwGnNgGkKtTMcCmbATteEFsZzSfAahmMLlHdInNiNnDayYyHhzZicCIXDdxYKVvkOkKoZzphHTtQqGAagGmMIupxjwWJXwlLwWqpPaLlUuUubYyHhFYhHysohHCcFfOWJjMmqHYBsSOoYybyExXesIsYDduVYAPBbMmpDyEDdeZXxYyzszdDZkKSwtnZwWskKSzNdsCcSlfFKCWwcuRifFIrdSsaAUVgGgdDbBAaPpvviSuUlLOjJPpojcCJSsXfFkAnNoOicCosSOIgGRwWfzZEBbeugXxRHhhLlHtTZPpvVaAzrGgjJXxRLqjDdIiJpONnBbXxpPeaAENwWjXCcxRzZrxbBRrmuUHheRNnMmrMmhoGXGgIAarOfFogiIkKGKoOapPPpirEewJjbfkKFWXxwTtTtHhNnltTmMbsSsYRUurDIidMmyabBAAaFFAaPpNxnpDddEeDPbBNfZzFJlzZLjwcCWsSLGtTgSNnEGgeiyJjsSZzNnIgmMksSKcSOurJjTtYyRaArRgyoOHhCcJsCclBhHuHhCcfEeOLyYlLlczxXrRrRdDaAXxHPnNQIiqjJXxXxqQVvgSmKaALQqEBqQJjlLsrUIOKkMLhIiNUubUuPpcCTtuwMmWPSsCcxinezzZBDsSKkdRrBbHFUuKzyYZGgkhWcCwaAHxZzXQqAJPpaMnNrJjkKtrRlHzjJZzKkWwtTTPiIzZpVhHsSlLYEvLxXxXLqQlXxoBbOLlLVWwvoOEeDdtYLsDVanNrRCcNNpSsPKYeEsQqaApWwyYMwWFfOPpNtQquUTnNCSsheEBEawMWHCchyYOojJwmNeEjJnyYYyKivVIkTazByYdVPRrsKhYMAamcCQlLbfFYycyZIpPiUtNEenMmZzfFJjyYFNnfBbXRrLrMmEGGgpPggGWxlLXBbwoOgXxcCrRkSjJsQqEuUDdWvQqfFVenPpNESJjvZzlJYyjJXxjPAvVatTptkpPveEVdJjnNcCnCqQNnCoOcPVXdCuWwVvUPpcrRgAWTtwoMmDGgJZzcdDCufhHwWhiIPpciIQqdDOoCAFKPRrJjGgdDGMnoyVgGvYmMUuNzjJpPIimMZjuNIiPpnGhHfFgRCcYytVvFCGLDdgGmMmNJjDTtdArRvVzuUUaXQqoOLlMmCcNnhHxdbeEBDjJjcCgGguZrLlRBumMknsIHhitTzZTLltVvQDCcTtJjtTfFxHxEwWqQeXDdhlUuLKknNXonNgETrWXxwRNntxXlrXxRlLLDoTeOobixXIzeEvVSsZCRDDddfTtLzZzRrtTEeZJjiIiIsVvcCevbAlLaURRThHtrfqOoVUuhHvQWjJwTtGgbNnUVvuUuBxnenNEnNZrRnIlWwYywOoScqQCsDczyYLSszuUsSejmfZzFxGgXvCcCmqQWKkwCcXoOxZDSPpsQZltTLyYxyuUYxrVvDdJjDBMmWwbbBkkBbkKJjpMmPCcKbzJjfFCGmMFfgigGvVISsaAYyxXvVxXHhCcLlnMmNRjJDhTNnkYyNnDdKtHuULlCcIRfCCEeccpPFEVveVfkWQqbBwJjEMmzqQZGgAMmJjHhEgGvoOxXwAKkNSsnyBaAeoOhgWuUwepbAaBupOroWrRwlYyiQqIXxZvVXsSbBhrNBbnRJwKkqSsVnNvVgxLPrRpreoOELXxiIoOMmhHAalHxXDJjwtOotsqQGDemMETZztucCHhIiUypPYxvVFXxoOiIfYyVvZzcCXGeEgoEeOxArPpNnRVvzORpixXmMIProbBHhZuULloOckNBbXYyEQIigGZzaXxSdDdfRrFBaAbwWDkKLxdmMDsWwSXrRrsIHhonNJjOidKxXjJLlgwWAaPBYybprRaAJjGYUutTxzZXUEtSfFsbBUuiHhFplbBLhHsMmAloHzZjJrLlyYXUXZwHHGgLEeztThHZixRlgGkcCVvKLMRiVnNTwJKkjWBeEbZeHhEeEedMmRrDJeENFfEeBDdbSsTHDddjJkuyYUxXOoKiUuIxXKuUklNYdCSsiFRCIiuBcjIiuUfsStTtRrohzcVkEwKkHhWeAaWwKusSnNIigGbaRrbhzskKSZaUtMmKncCySsnNhpzVdDXrrRRxZzDdrgGRlLWwmMkWwDdNsZsUAEerRaOozMaAmkpPKlgGkoOKTtRrUkBbbYGgBbwWfFyBKOoWZzYKkNnkgGRrWweEqYuUPEeKkTFfsSxaoOlgJjBFQXpOWwqGZRbiIWVSwWWOsSvVowRqPpQDPOopQqbmhswiIfFrBuUqKuUkPuUpjvgGVEeeEKkJsgNnGSpPhHprRoOiIiPFfITtPpRxXaVvAygZuYEnIiHIiWdSseEDFSoOjJlcCLnRrmMmDdrPrkmMKyYfHeEWwhHAahrQRMmrqWxoubBGXaKkXxsSmwhUuHRaSsRCLPGgVvLDdppPPZzBbyYldtQSsjEUuNnQylLlbBZDmMKkiHhcTtVvaAMDdPLlfFaxXHKnNkhpjFXxfQqWwbbBRrBXEFpPAaLlWwSKqQHfXVvxEejWwOooNnJEaxEeXKkAcrFfRCVlMWDdwWwGgWwGgWwaEexhHlLcCMxXmmMHntTNyoyNnYPzZePppUHPGgGDxXYytbBSGgfcCFrRWRrgGwlLSjJsVvyKFfdDhcCHYkKkFfLlKheEqSqQYvGgsDdcCzZSeBbEyILJjOcCHhovLlZFfzUTemxSYmMSsHhtkKTuLCbCcPsSpuUcUtTuVgGCcvrNnRYyCnAakVvHrAGgfFaDmxXzzZZLCcSsliIosSEANnaQqeRvVrOoGgQqFfHCBbjmEITMUuvOonNKkqvnNLCclABYyLkNnKhHqgGiIQmFHhcQTteJFfKCuUGmnaAQqNctTIQqiVvKkAaZeWwntPSsprdDjPokddDlwWwuRrUjpECjJbeEBpPnpPfGgnbBYygGcCigvVnNvVXxUNnXxhOoHwWVvkoOzWuwWtTHhUutTkKKkUAamMNnNFWnEeNVmMvwLJEeDwWUxXuxXdjRtTlLwRruUWEpVvBEcCEyYdMGTmMtgEZzPiIpaAegJjhHGSqQKksSReECcjHUuFfhGgPppwieEFfIbBNnlsSXKkbBiIpPyDdPpCcWwYugGcCUmMrnNRymMJjLBejgGuCHhcrwzZNQqqQgGnmkKTNgGpPnwJjaAWqcyuZSGnQBbawRQzZqrPpWTZztSsQqsWwjgGuGgnNvVeSsycCOCcsSoEeYJjhnRKkjrRJAadDYyWwWNdoqQQVvhHJVvlLXxVEHhVDQqFvVfFfTtTcCBfFbYdDyhnNCjJJjuUcHGdDghHtWFfwOocCohmJjHjGgThHDgUMNCclLDdnmNhhHUiRzyqQgjJCTteEuOoNCzZHeEhWfFkuUYyVvrIinfnNIOoKkUbBuauDdqZuUzHhRhHcCEeqQyxVvdDzZvVXwWPpsSIigGYoOutkKXMoOqQWKkwmfUnNucItTZzihHrRXFIiVvfhHBtjJjpPFcCfJTzhRzZrWVyBbtTYxXvhLcCSckKpaAZEvVKxXRJjrnNbwDGgPpHtTbQqeEBJOWSsvVlLnwWkKvVpPIichuKkLiOEeoTtILfvVkWwKlLzZFlswWSFfaPpAsSPaUuSsjoaYyrmMlLRFrRVzZVvvcxGgpPaJjIhHkDdMmvWrRYvoejJiIpPUFfUDYypdUpGnsbBSkWwKEeYyHyYAahNyYVvhHYmMyRrTtRQqTxAaXjJrRaALlYJRrmMhVGgDdfFXtlDdrRCcAaFfGgdjKSInNisaFfAIUudDNnHdzAokKjJOaIijJLGgBbSsIEeJPOoChLGIqvSLJpWhrnqHhQNoMnuHtnycChHlLZVbBSsFfmeEMeEvejnNzFfZJEKNWwtTBbUiSsIEgGTtenaHhANCcuneGgpJjPoXMYsSVyenpBiISXxstTthHTbiIuUInrPpKkhgbBQyYqcCYuoLllTrRQqLyYtTIiFWDJAaWwjdbBZzdyYaAxXjJSeEEesSsYyHhxXkxXmJULlVvIQLHLLSswDdhHWFGMWDyYdgKknDdlLrRQGgXIiAaoGuPzNCpPhHReErqVhHDLgGlLYyXlvHhVRrRFfiIKMmKvPpViufNniIFbVEcCcCXQqnNYRdYaAPpvVDkKTzZaACuUSQZzdDdDMmqntDdLWRrwoOkIiKriIjpPCcHubBUDoOdhatTAYEeUuiLrRofXxAolmRrMkCsSeLlEcKmKnNWwPpkvTtAafFgGdDwDdkKdDCrRqQcMvVmqQjZvgGAgGEdDeaArRdDtTzZYYdDyODdMmgoOGUhHWwRsSrdDVvsSELrlLhqQHavVlkKLQCuUvZzjqQJagGLlGwWHhFLCBIuUGgiwiaALQEYyeqQkaWwxkIizHMmHhMbPhpPHnLtqQDZzkwfFJxTpzwWZJbBXxwhqBbyPYysTYVvytbxuJFXxfDOlLzZHhIiikfCcqQxXrQqTuUNvVfATRrDKkqEeQdYyQvHblOoDKkdDdIiOoisJjShGgeEaAHIQmMDKXxDOodZzworRbByYBUupNRreESmLLllMqBTtAabAlxMFPBbvdDwnNFflmMliIcCPpLOrTEeRqZzQDdCkKcdoeEipGOoCCccxXZIkKhLlHizgPpfBbaAFYsZzIPbBmHhSsMQBbkSnNBbmnjYynKkNBJkULgGlumMHhhjJRdHPphrwWcCRDrfFRUKkuABbHxXIgGKkiclLCbBZKSNMmoeEvtUuTVwgGFfyYbRruUBWkbBKVvPpOnnYywWTtNsSsFflLDddsJqnNaBbNnKYyMsSmCLkKvEeVkKTQGgqCHfFrzrRZiipPvQltTHvqDWwTtmMmGQqQqtcCCcrdUuCfQqFNncDtnvtoswWSujJXialOoSstTSsfVvYimPXxpdERreDRhHteyaOfnIibBRuJCcNnNGgGgLQqXnDApFFEefZsZPttTIfBnNfftgPaAuEeUyYNnpKkGhHTwWBbaNnirRIHhAHhDQqdHLlXNnusbBSGlLHhBbpKRrgLUuhsgGSITtjJmZzxXrRkBcCYycCKkbKFfziOoIyuUvVrRIiaJEGBTtPrRcCzjyYnWEkCQZHPpdeExCJiIwWWTtwWRYymXyYxuHfLlaoQeSsEqOgnNGsSdtTDCccCFqQaoKkZwFePHhpCQLaWcCgGWMIiuYyyjJIPgrRmidDSsrgGAavtFfdDTNndDQqjdKkAauzIwsvZzXysSxXmGgSkOGpPgfYLanGFOohmOnNXxaSojJOsMnNmyYRsvcMmpPpPNnERsmVvSsMqQSrebzZbeEIyYYNnxNnXcDdvQqBjJQNIiEmMHhQQGgGgqRiILlNJjhXAxiIXPpZAaBYybvcCuBMmMmyYNVvAMhuOoUZzNqGginNIiplLIiNORIiDZbIiRkXxXaAQqaGLjJlgDywtpvRmAalLwExXtTvYDOocCkQqQsspGgYykKNYnPpNcTtFuaAxXrRMmQqWXyYqQJWqQTdIiDbeKcntcEOonNeFfzZClLmgGMQXTtxaCMbIaATGfQqUpNXxnCcYIiJnNOIiAaNnFKfFjvVQqQmmVvMEeGOogBbZyoOYzpPSsVRrsSSwjiZnNzgGIhXzZypecYyCqICJCcjMsSmguxjkvVpPoeaaACcAqQFUNLCLlLXwWxKfNnJjWsKkFfiVvkKFfoOIwLlFfywWPUubBkYydDdImMiVvecCeHhabwWqETWwmUulMYtHbBiDdCaAoOcLGglCijUuQBmMbBVvRrbliVBbEkKBbSIisuSsUwzfDhHdlLNnmQlLqPAvlLfqQYyXemMOoxXUuQqqXTtxQaAEuxJjYjJUmMiILllLwOQqoUZGhujJUheEbBmMLAalVeHaAMmaAVylAoOJpAhHazcCusSkiIpPotTORrRrKzhHipPxTtHbBhFIiqdnNKCeCEnDbBaAdqQOTtqQFXcCbnquZPpRhMmHiILlvYygGyYRrDdiInKkNBMDdmZzbAJaKkatALlySsnjlCcBzpVvPZJjytTYYyJyYTEeGgGgZGtTBcClMVvJwWjmfFkpPVZJjcCXxyYbiQwWfHhCIzZyfFmZzrMVQvwIvCqQoOjuUWwqQJcjUItxcqwWMhpRpPpIlLcrXxRJOPpcCoAaVvjCwElSsRrJjnfFNAatxRrsCcackCiIJflUusBAhlJjwZnNwhSzZPDdtTLlptOCUhHqFfNgbBGQnNhHmPpTjJNzSFfsZhHhMJQcCSspADOrRwWIEefgzZzcBbCugGwpZzsLhcVvCAaEOpnmXJJjjxHeEgGhMNnNVlLSsyftDdDdpPTsSEgCvVvFGyYFAafYyShdDVsMrRGgCcmQacCAwWNUfFMmbeERrvVtaAlaALKYyexsSTDdopPyTeEnNPteECcTpfFXeEVvJkKGwAaxrRuBbpwmMaAzZoyfeEJUuUuOHhHhoKksWwefFBNBRJNqQJREFyYtRroOTfoOeMWwmVvlhHAZPplZzLeoOAasQLlqmrUuRrUuiIZJjzyHrgGkKRuUjWGQqgwunlDwyQZfFzrxXRItTolLdxkzZcCQqWwKXoEfJjClFbzfNnnkEpJwWuUgNwWPSkXxKsxXeEZcwAatwNnLWwbTNpPhHDdYyWEewCMmcoQqkKJGglTVvtLjmWSMYymsBtTUHhwdDJwkPpPBbyTkKYXxXbldnaAvNnjJmMVnNNpKwWNoOxhYcJeEjOfKfFIdDXxrRksSKhHMNQqJhQMUlBLGgPUSPPpuTtUyxrRXxFtXtTTtTtsSiIwCcnWZijJXxFfRrIXxzYywcCNttDdTwWTvVyOrpPBJqzzZWwhHOoQkrxXaXualLyYxQFEePpBVCgZYlLpPMNnQqsSfFmVwPpIisCjJcEjlLxwHUuSsyDXMXQqJjxgBbzyahQqiQgQEMbBCHcChMmLlHOohwZzvVVEejnNJgGdDIirPcCtTsKkSpBeDdAvVaFWBIcRVvkNRnsGgoQrDQQqqdEgaXWaYCVvrRwOoDdVvmMcCGscaAGVvxNJjzZfDSsfFdlZzLFSwPpWgwWGsXxZDdPIifFHhzZMmfFsuUbBAaLlDdNlAaTtUuPpLPpswsSQpBbIvhBtTmMtSEwANdqgyanVvnuhGgHdeETVRTlLqQOrNHhSxeNnMMbGWwWwitmeCRsKkyykhHoOQRriIxXJTrXxQPpXdDgCcqWwbcbBocyZsoQXzZDAwWrRnNWwSFGgSWKkKkFcCyWwxXAaaAxdtSsyYTvjHhUuJqFftTQPvoOqIiAdBCksPytTMmqQQbBxXzZJtGwrATrPWwnfGvugGOoUOmMbDcMJjmCUudboAaoOoPSspawWchhHIiHviIVenNsSxlLgoZwBbcCyYPyYKLlJFfZzEKLFLJpRrDyYlLKcCkQqXKkjpPHhHTtZzjJoOTYytqKkQWZbyEeEOqQvVNZCegDjJPelLoOEViRBbZzbaAiIavVEyYSscCLlAEXrRJbcpOTGgtKkDonNxXeEWbBKxNnXOQDhsSItTNYyKWwyrvVVvWwotcOGjJKkRwrrMsjJMkWylrRTEeNsSFfacCaXxAoRpRrEiIVKbBFfkcYiIFeVTthHODdoORhHoOratIYxXWvfIyQqzZyJjYtTcCQqtbBuWAUKkupPawusZzgWjeEoBaPpsSAZyxXoRrYyicnrRNVCTbBNiIoOxXTtSsAzfFZZTtbBMKkBbsZoFeEmMMmLzZlfWwLqQWwmWQmTNnJrvVRjpPDdkbwWAaBtTBacSWwsCAIiXCcxcCdnQPgWwGmWwQxMBbmVElLevjKkImMdDmKkfpPmYyUuEeMyHhjhfCcyRySmMsMmYyYmMJjKifmMIiLAaJFPpYUmrRqpPKkQnNjJDDdAGtLlMmtcNksSlhXxHrRGbTlCQPpuUnkYyXSszOeEeEIactwWhlLFERreLzFpEeJjdoOSsLTQEeWwKkmVvgXTtxGjVPwgGRfFMvCzLlQtBbTLlLgTZjyaUSUubBLxYyJjdfvVFiIyiXxLkKjPIipJxXlLtktEIifgGpOnUyaAilLrRYyPLbMmToFGVvwWeQTtUSZzXmMxqQZmMzShHlLISsNhHQOTytTpLcCJfFjgGprExrRIpwWwkKWPYjJymMUuifFETIiLlecQBChHcbbBqpXdjJiJeFMdLuUQCcpPhHzIzcUunEiIpPrBoFdnjJlfdDHqQSoORrKOiIoxXhvJjLlQqkOaAOuzFpWwPpTqPEeiIgzgGEeajlLKkolyYLVvVvDioOvibByEiWZcCopSYgFwGLlQJFrRjRsqQrLllLWwFflNnxjJXspPOQbOoonlaALduvVTemMEfFPGgYjWnGgxHbaAmMtivEOoeANnagZzuZWdjQqJYyYZoOQiHhwWfFpAIigJFzZhWUDavVvxXyuZzwFfWotuUILhHSpuUVvPsSsCiBghHfWwJjLYfFWqKdxXUXwOoWxKkRhQzZbBaAfFfFNnsSpFzZWDrRfcCLXrRKkxVvlsQlLKCSTtsTnFDdfNFcZqkKUegAybIeEaxnNLlhDmMBbGgrReVXxGFkKaHBHhbnLlJoOfFjjNuUgGjJcCNgmLoOlMgGXxGnLOjtThhFfGEFfKkVUuHFxeENQqLABRWwlBHstTtOpPFfiXxtyXFfxJbqVhmxtmGAaMmknNqSrClLtHhOoTUucYyRjJHQXxqStBMmaLVvoDSsdlLOOYcCAcjKZzWwkJCMfaNKZzrFwSLlsNnhHzmMmMNnKkrTjmMmxXuUSsMUuwNnWrVsSIilLEHUHNfGZeQqEPpTAKkxXanaoOlLqgRrvVMEeXlxsARtKkDdukSpwWhAeqQtvBWVWwwovPmMcCMmpOouAuUNwWMfFfSTyYQMpPmHuDdfwTPXxlLHhBbhiIHsPuUpvpNnPJQozZOjDdJopfGtTxbBmRrMBbDdGFQkbUJkCkKcfEeSdsSCZyFoaIkRTlTpQqBaJjsOwWYynNBwWUuDcCCcZvVljsSixcAvnaAjJtAOoKkyYUuaEJyMmsmHGyYEeblmdDoNntgGyxZzZzimcVvXxjSEepPGvcaJjpNTHMUoOuEeTAUyNKpPFlLfEiDZqjUxXaZsSOBkUjoOyCGwUnNrEwSsRrmMBmMrRbVjbKkvXxVBYyssZyVoOjqWAbaAUuBXblwcCnrbWzkKZuUCcoKpZxXzaQqJjJGMZIivVYypdsSKIDLliIilLLpPCciIriICFfrvlTOoJjFxzZXEJXmMxjJCcBaAbzZjrRvJjsSMfFeUkKkKeEuENnjJYyqaAeQqfFKGklsSPFUucCRiXxmMIrSOfhHFTjdDwOvmMssFiDtTBVCQlhHwjJUpJjnNgGYyPWJjStTseCcEkliILsnNwvhHQqaDdAIiyYbDdBNnVRhHQqUJjuzjKkEYEPVpPxXwZycCrqWwKkQrgEeZHhZVTrXvZeIiJihFfXxxjJPpBrXxRpEeeyFfYEPbgOoJUuVDdoOtTEcfYPpyhQPcUkzhoOHzZZIeBbEZzBStqQqQsNSWTMSscCmsSjJTtskggZzdDxJjLlPnAjJagvVHhGfoOacJAMyfFzSszfFnlbJcHhmKksWFoMmzZQaTEetwCcJjWfJVzyYZunAaXxsFfSciICcYycTvwKNnRrksSlLxOEsSeGkuUEShIIitnDrKkuTthjJcNndDoOCFfcUGBbcXxCPVAamMmmNmGPIifFiIcjKlDdLtIcsimDnNvdDDdRJXxuUPsMNnmrMphZzWaAwHPPYyGXadrEeRIielLbBYqQBbpcCwDdnAnQqyuPpvVmMnNCOodZzUyYuLbBoRZGSsgmDtTCRHhujyYJDrRmMbBAadzZLUoUPpwWQPFdDtTxRMYfzZCIRSsvMOTtosPmkKUupPAaLQqlNnLRrIKkONnoFtQqnGgwsSeYqZoOJjzQyvRrAYrRuQZPpzlKkSsLaAsEeKkxWwokKOXzYyRlLlWBbaSfFsKYyFpPOJjUuMmnaYWwABDJjHhRUuqQUNkKxrXoOQqKpTTsAtdDEeyYlRsSRTtTtfFdgsYtgGKlNnaCwMZnNzDdkQgGgGKLlhtJIDTTyAgGbBMLlQzhuUEeHncEZzrbBRMtgGfRrBbUuDMWxXiBWwjJrCLlrRjuUlLLctTFZzgGkKvVHhdbgGMmGamUisZzmlkKYfdDFvgGVQdDKhIWwfFnNAcCaPuSIdPlKkdcCDGgLKawWNnAizRrZZzIkLLGgPPwPhKlqQCcgGOofVvuWKhLdDBVQiINnXTtuUrRxNZKkHWfFpPjRmpKkmMaMMpIffyYFaWwjoMOBbkPwWQqLRSvVeEZPUqQRrKkuRrpzUpjQqgPpIyYlLlYeEyrvwzhGWfFEeBpsDdeEZaIYyQbBFpnWwtMCcAaPCqQploOnNVvwQaAqGFRrfGEegMvdmjYbBiIylxDiGsSAaGAavIJjitUuTVgUAakKuUugMmByJjfFsIqQNnTtWEzZIYxinNySswWxCcsVvOoWZzHIiWwlLxquYeEysKObBYyonmMNksDTqQqwWKkQtKVvkbyADdaYKDddjJDXEJjvVeELbAdOLlRriIQJPVylLlJjCcmMkdVctTGgydJIijPpmcCMhQsSsBydnoSsOFfNDrRYbSdnTVMfvhgDdCyYcQqEkOZzGgoKydUuVNnvQqDYesSlLVlQqcaWwVXNnxEevpPqGgJNnPQmZJxViSjJscfFtTNnCUkKhHLcyNnjJTAquHhUxsSXifFfDvDFfFfUgGZzrsoOuVZpAaSVQSNrRrRehOTtrJjAFfaVvBfVvfFbZgNNnRkOfjiFZwWzdWtTBbVUuUXJrRthoOZzUuspPoOgMTtGgTtNKJBiOoImMWwakKQqoOQqjVYyGIjJNRroOOAFidWwVSPNduArlzjRSGhHNQlLqoOgGVbhHgGYljZXVaQhONnOoutTbfUuaAOKkKGggzkYyqQbBvkKVbBlOoGgQqpPyYnNBAUuMIhKVvkIAKCCcODhHMhjbdDSsOYQNnqFfeCkCcnNIiJjhHiOYXKAjrRQWWwIyYCvQqvVVHheuUFfsSEEeFfcDVvoLoOlONZznRsTxXniWwIsSNZzDdPCKkoOBbcnLZzlQWMmnNOjJzZBxXbgnPYNByeEjJUuzZZpPphKWwKOlHhiIlaCcAfxWOxCcIisSRrDgIiGrLlRIgGPEghHyuUPpvOGiDtXxosuEeUiISsSwuUKMHIuLlljYsmMMmvMcWDrOoTkRHQmBLAasuUSQqfxXVGJjeRAHrRLJDTtKksSbBdKHhsSAFpSqHhcCtZzTQbPneSuUcobIihHskyYxXgGgfLqGzZgQaDMoOmdcLsEeSqsSQNnAvUMvVLlaYyAjdDNRrDzZcJFfCSWSSXHhcbDKkdGfFNKkpdDpfZzFwxANVvpPThHAatCcZzDzZzixXwOimTXTirRMYweANnHhHafvoOAxmFfiXRnTMnNGgeDtTNTKkBbUufFgwgGOraAhoZzOWrnNRwlLuUNCKkTKTtktpKVdDJrRDhHpiIOjSshHMtTNkAaKdycRFkKuxXyYuVKdDNbauFeuUHhEPYJDdcoesIPanFqQoOBPAEBvMHwakIiRrxXfFidDLlqblLxXIiuSsUtTkXRwlYstpSsuDkKxXGhHqeEQNCdbBZIDfQqdxOhHQqoXCoObWwGgQqtSXphHpPQXxLkrRKJmcnNDyPBWvTWtxfFXDdrRYJjooEeSQqeuHXxYlMhwWosSmMLZCJQLJyYiHaARoSPTgoZWwmMHASDZzktLlOPphAPpYxGTtBcfVvoOHhYfuRreELlNXlLlVvwdEeBbkPJsfFuEeXFVWgFfGGoOkEISyYLlsvFisDJjImMezZTuUMmkKxHhGgdtTDggofJjCcFJjfFqQQqQAjqQHhdQqyiIUuYreERQZzXcJLljCzZcsOoGkKkCxtDJEcnuUJhHwCVbXFfVFopPjgIiVvvPOWwPpWqWtCSZzAaMmOzyYnNBbQFzZoOevVkKcdswQqplAkKxeYykKMHHAaBbKZzkqQBlLktTyYatdHCQILlrRQhyEGjJvViFRrVWwJjvfmMFhHZzisIiOmMFfsSZzIYdKzZPwaAXOoEeOoKdFlLLvVkEAzZaJZxXzcoyAJrrSnxXxaAdfLAOfVKZzYzZYhHheIMZipnNilAjJaLnRrgGrXzASsbBzZxsOWGHYnNNnZzUurRZWwzZzSNnfFKVvkHjSsOsSoTLltdWLlLCyBfFmMpMmKTwkFfKhUYLwWlTWwIivViItfkBLnNtgOhJjMNnekypSgGcyxOqQPJeEgarVvaTRrIitEevnYyvVxURrWwMpuUQqBbRjwNmkxuZqTtNxGhSszZHcCjYyYBblLkvPoEbBMUkjJOoKbbcrWABbNnkbiIBEvWfLlNrRzaOdDtNFICcyySLlsYmjwWkKmpPjJXmLuJaAiItMmVmmTQCcrwWAIicCaAdwWMmbBtlLTOtGMhkFceETtSyhHhnsDSHKkhDzznNMmlLsHMmnjdbrxMAHssnRXIPpDoCmNncqdDQvrgGMxwWoIZwWhfJjFHFfKkiIoOiIUeKQTTMQgTwAafKIifgnNcnnNNnpPhoKWAWPPxXgyYxPrRulbBbeTPpujZzouUxXwWAzZFhHfjkCzZhHvOqWbBBzAFmrsMDiIFfZzZDdzChsSHmMcJyqCcQwQqKwWKjWwusFfSQqsGSsxZFfzTtNEKkzJjEeZkZxSsXTaAKkhyYxXDELlQNYyeEnkKdrRvfFosEeSRNObJjgrIiaAqQzZxbBXdPYbIEeDoerIthHgGTGgHSsgMydAahJjIvVaWwACcVvnnNqQNHsShvwvVWvSxXcsHHfFabhlLRzZUubmdDxXDnNrRbuBbzEeyYKnNXoUJjPpzZBxeizhNfGdPpsSbMmGSWnHhjTFmFgsSZkKzGizpTcCtVvSsPCRrKrFPCcpLlnNhGYTtXAtTatLVvwhtGbpUTtvVOooOZGXxgLBbOoBeEpuUPkKeedSdYjXYebNnOiUxMmlasvSfXxhHEeXxvLDJPYyfFPDzcjOobNnDdrRqgKqzZvyvXxVUVICAaciyZzYTtLgugbBGtbeSeGJhyYuVxycMlLJHhdooaqQslLRzZrSZEhltTQqLeHhvVrTtDdEePRrwAagkcCoOJSbAJlLdpKkquUQMMmmkPpKKkrjJJiIYQqyNnAYKkrmMPpPQqvVuGvDVvzmCfoOzIeIaAVDJIaAxXYiAWshHDgtTofkKqPmCcqQllLmyARFfiIDkgIKFTLltfYyAaclhighHiIyBOApgfVamoEeOqQMVvmgGNGgrgGREYdmmcCxPpXxXimvVMpPIFtrAaRnzZwWNbLpQxXBYykKAaeENnPnGVNnLVvaFwSxXxyrYyYyUfFpFXmMWIiKAGWDYaSEgpSgAaTGUuUdnhyTtJXNqQjabxjWwALlWwSsaeNmsSaAhHMUZgLnRfbBWOyCZzoOcYVZzUrikKDUVIivLCcluyYkcCaAfeBbNarRUDrjiiIgGpSHXueEQqKkUMnNRGXxVvQqfuTRuUUJmMJntHvVhlCcNJHEehjzGQoGRrSIkrdvnvfFtTVNYsKzeEIiByYymtukKUWjSsqidDiJjIiNNVXaDECHhKuLpANnczijJUuUWwTuUtuaZJckXwWKJfTPqEeQpuNPwRjJUtZdOZzVgGvjEQYbdiblnCNncIiVvfKJtHfWwABMEIZzmMffFFvVCvxOHUXgfJtOcCcPxXQqHhqGPWnlLJTBbGIiVBbvoOsKrRkdDQLlAhHvJtwnNWLtTrycsCyYyBUFfuxXbdrwKSsyAMqpXRjJVVtTXxSreIisiTtIBpPrFNreNhVvrtydDUzfFXxXAcQBKkVnaAwxXWNvVpItTBccJOfKxGbBpEeuwTPwWxaERyhDQqVDYjjbKZSYKmMbfFBdDQpKTEetjbBsSREWwiIerNjJnlUOGcXfFzZuUxgGiSsFfIkKYyzDHiIDwnIyYtkJPpuUOUISAxVUurGnNXLWZdsTtGHnyYQhHwWvoOojEArPpIwEvuUVeXxadNKnGvDuecipPICIkKVviEwWdDisOPrAahksRPdDphkKWZzZsNnSaAxQcHJdGgCcbJOzjxXJnNZdDOoyTiZzZKZpPhtTUkeECwWcGgKPptrfWwNbBKKVrRpPakFfKAatpyLtTlpQltqQteQqjoZzOJEaZBbPHLRrPKLlDvJjtdDRrRVOovqnIGgAuUkdNtTEerRXxxRPpruvdGtTgqcyVaAezZJjzUyioOgTtlLRrODsUZaAUukKEOVqJVAcsUvZeLHhkAVveEaplZUCjAadymMcdOoDtXJOzZOudHpTpuTWeAfFaxCcKByAwWaYdbBDxGPeEjQOtXxIwJbBjaAHqhHPpSYxXoZYDzSsgiBbOfFoIEVzGTNhYFWZwVvnhHiQiDCwRrraxjJXQqsgDdHhwhhUuiqQSSNGbtTctTHhzsWGgwchbjcKkbBCJqRutSyhNnoOodDdhUhHnXxNHuiqQieLnCQPgGpmNloOLsaASgWwGndDPXYzyKurHYQGOogwWqbByeXXxmoGQJjNGaArBpghHfFqxSXpNNnWwVOkKmWdoOuUQCchwYvJdnIsCusqknKjcZzrABbYBnjUUOoupPoVUYYvelfXXFIKkGdgGBbhenyYRrZzrRCEeEsSeDCVbRrKEjBbzKlLIiMGOXnqQqhiDXuuUbetZxoOoRGgretLlTGhtTHJjgDdZzIkTfFtsSKimroFqqQFfGDoOdaGTFKmUuMfeEFaeEAvLtDHTthzwpKBaAwaOXlgYHhpPhHbUdDaNOvZSsPezWvBmUuGHJjIiswhHVvWaXGizxyydTtDRWwrqtTOosJYRPfMquMmUROodWYdyIkldyYBYyxNnXbVcWIxzFbJhFPKTtuBbxhgHGeENlLnXTtxcrOYyoaJaWVvjJTOSsChEtTeBPpbHFfVRrvHhhTSFjpPgGJLZzFdCcLlmMVucrxKRrrdDsuUSIoqQkEdfFbjdBbDPpJBDlBdOAqZIityoOZzWqQfMkKJjmOuUBbDuUtzZBbOovCXXFmLlAcLlhxXRUHwZzvXAKkpnyYpvVcCcITkKRdEeBhCzloOLWwnECcecDNnXxOIiUuAaqQRIVvWwsSirTJUuWrRQVvTtiGlLmkXxkYnzBbCZdcROamlZvVzOoNDdMJjEiRLgGIirvWBujZiJjIKcVcCggGpPabDlGrRiIlMQqIiRMpNnioVOOkUPpalxAvyIiYuFMbmttTAzGtTkTopAYNnLnVtTSsOOFnbWjJWCcUuTrRtMmMsSZzsSrndmlnNVWRcCvZknNpXxlNRrLlMmdEMmEpWTpziBMmbPPRMjbBxaXxFBbgCDwdUOKkoiuXcCxdDgGfaklBbOuJjtOAyYDVUVOowzgZjhwFwVznNpFfPuvLUulJMFNbBHbpFfFGgUaAuMNfFnqEUueqbiIPpLEeNnuUJGDlLlmHFheDdQArggtTIiGGMNOEeSaAnkoXSYdUuDyvVcmZsPnjxAEoxYXOLSFIaqQQgvXHhxYwWcUuVYYiMmYAaQpPHtTnNkTzFzDNoOnhdgRDWIndDVvmHhjJIHzkKZejgfFQqNUuBBfFbbiiNoRAgqwWzOoeDdqMorROmXxrtBbSWSBNXxnUuITHhtItQkcCKqqQTQXNJjsVvCSTVngUtMmTkePpbBEjZzlRkKrtTLTuUnIbRkKpyAOjGgDHMmyYDYdrRlHsvoOwISUuxcURGebKfjqrPCRvVrBaAbcLwAanbYvVvVyPpPCciHizXjJxxeEZWNjvyTtCctNgGGgzxXSHhAhTmMSsQUuLBYLVsSzFkpPSstqHwWWcfFJjcIicJjfFbtpkXlgroJjPVAalIxXJaVynpDZzFPmHDqQhHYmwSbzsSxaAXqMmPpYMsTxtTJTtmxhigQeFsSxXikWqAZHVkEeKVOWjJcysDFOQGLlgqyGxRxRheDXxGggGWeEwdEnNHrXrXgdkKwWgGDYofdSYCwovVqQJjvviBrRbIhzaQwKIGEeEeMmgfEeEqGIHXMqQEejXtSmyQZBsWMylLdhaAMOogGpfdOoYyPNYvAvVsSjiTtLAavpORXxGLlyYngGNLvViIdDxKPTWwBCCgGCwhQbbBBTKkNHhnzZKfZvlyblrRkKqtHaWwsZsSnTYVJFfvVnwzXZIhiIIpoOBTtNWmMQqlpRQJFkBfFEgruCXsiWMmCWwcVSaAhLzWwZDydDUJjudhZzdJoaYPrBvViNrSsRtQqJrRKuGrRNvtsFfccCSvDdVnxqiibswsTRaARrQGgTtlLDdEZQGarOnIvVIbaABnhHGJETthxXiOotTtTCcSsUuMNhHUuiwOobBdrGDHdZfZtKhrRqAayIyyNnvCtTyiIXxVGmMgGqKkEekFfKJjoOAifBbUusloGgxaAyXwWOeaXJNpSzMCHhfPpFsxOKuUNaCcpMPpxXmPAsonmupPURaqDdEHfhMcCLdgjlBQaAQHhoOmMmfPBuUhnoOfmjVUAanNEeZvWfWHJzGBbCIicZWvuvdaohAnlLNaHTjJUowWLNnoOKyYAFUIuDWdiIcmNnFfMGfAXJmrpPppIZuUPtwPeVveDUunkoOKLPKlLzpLlPVrwvLMDmMvVNRmCcihHIwwBNfoovNlyYyYnNyaPcCOtKgZaTMCcBmfUVaXLAmKksuUXhgFfGHxSMuKoOokKLlbjsSJBoiIvOInNPFfFfmrmGgLiwWIzZgLdBAGfAaIHhiFvKkCtTpPkPppIiPzJUbFfwVRlMInimrIWwemnoOLMAtTorpwWPCDzcDdgnNGZNyKKzQqZMgIWwZzqwOojtXxqQooOdCsSNmMMmZcHbEeDrtiCybBYPNPaxDdVWhurHCaMfxxYycVTdfJjFoCcFYywYTzQeEaoDbigGILeKOikOolLKRkXQqIijJRsSCUjJvDyYfvOoVlfstzJjZHpiIKIikPhHcotwDdAJjjARCgwWhGHXBbUsSfFkpFffHjAaBdMZzmDfZXiwprRPCvDLKiYDywPpDraAQmYPpyFpiIryfFjSlLQRrYZzYXZIgxASAamMJqQjjOoJhAagMbdDVwZEpzVwWMnqQPkKpNaXxAmonAOouBUGguyGLQqxoAWbCcUuVvkPWZzRrZdTZzlVcCDpPdkftYygAEegQgGKkMZzmHhfxXORMunfFCKkcNUDzZdRXxmqQMrnNExXOXzTiIEmMBiIUYyhuUHxdIHQNxoxXCiIsxKkXSkKcgmBbkZJekBZzvnNcdsxXScnNRrNEHDFfgifxxFLEIiVyyPpuvOuhHJNbQBbBbqIpPioOyaRCVZzSsvJkNKQSUtAaTmMcopPOuUSiNDjrZzRVyjJWBbHPxXpqVvOoHcChDiqQIwsSMovnPxcCsXiIQOoGPlcCLbVvRAagdDnqgOMmMxETthRaAUkYZyxpHhMqcNlEIsSIUheEuHbBDOHFflLYsLlTUeErQCcwWbBAaJjBHCyYSZnjJNCqQBUuJjPpgnDdssuUIHHWGSzZARHhWcdIqINWzwfykXxKWJjwHvVIinnSnNYyrRsNhHwWtgZveGZdcCyzrROyVjJvsQwWhLlWUuiToqJpgXQnNOoqhHLlbkBbEeXEjJwtUqQPAatPxXyYkKhDUomModDjxTJjCYDJcuNnBwWYybzLPNnKUpPRrHhfFrpPRugGlEzVuSCavzZjQvoeaQqPpgGAzuSdpPoYyGIYnNuZEvYCzZCcQDVKkDUudiIUXnyYiIDKAuUasSaxXifFNQrTzZVdkplhpDdzAgGaTZztATTLqPLlYPRqQDdrTAvkkneEFRLlTuHKkzkzIeUuEtYojBCcIiMmeEDjhCYyqXzwHryYmfFMSKHRpPpoUAaunZzNSIUdCcVgTMmtwNkgGKnWhHNLlknDAfaAFBJSsjbWiRaeJjPpJFfBbOVqEeyYNhgSoOHhDzaAwloOyDgGdYZzxgRUxXuvxXXasiuRYyrojKTSsbBmnNMmMiNWLldRfRoOrFrhEedZwWlLKkhHCgoTtuXHhxLrRJEekPqiIiIFfbBkyszSszZkBJJyZzdvdHYreAXvVHhptCcWUPgXkFojCcCCbYYyyioOPrRtTJjvbqJjCaxZuYTRHOosSnElLDdRfFnfsDdSRbgGiwWVvISVhHvQqERsJjSsvMZzmvrxPQmaYkVvWRDYcSCfFYDdRlTjVaqpPSmMVvgtOojNwUupgQpCoTjSsQqnNTGgvVtFGxumMZzhoXViyYrRIcCciembaMmFhTjkIiFNLBIDtTByqeJoDHhzZzbBTATtauqQrQqBqQbaAWpfOAaoFZznUyYgGtUuFjkxeEKCPpjzAvGgAaVIZAaCyYaPlUkUzZucedhHAqQmMxMmvnlLnUuIIQgGJwZzTjfFJMYPpbZknNSyVDRKdDieEoOEehHsgOqgZIigGnnNzZLbEeBTNjjurtUFgrmxhvVsPqAaQiIIPpJRuUduOHhoAnEaAFbBKdvVkKoOIRuUuvIiowOKkojJFUurNlGzunDdEAaOoJXBAJnxjMmpPYHNlLcUuCDugtGsPaAGeGgsArRydwgakHhwmMxfPuzZRYXsWfAOoOoSslvgNpBbGgbqPlBNnhHTfipEePIMYyMvzPpZVwWDygVvtTGetTrRvVnLlMIiAWwsSvFGPayOoYorRbYnNIiSsGIHLCkiGKdraqQAaYDEedMlLLWWEbBqQewwMpaAQKkFOGdSwajHnNYyhyYJIImMiIFfiyijdviEiZFcMZZzdVgUNnpbBRagGAyayYjRPDhvVHlLjaBsjKrRGWpRwWExXHkKezAHhOBbUfFuWwAAaaOEeDwQqWjmOoCYVvXvUHjgmMEsEZEYyewWzUuBTUPpSaAsGdDlvuSsSscCYVuoiIVvOULlTtCcQBbkGwWQeEBJoOCZdppAajdQqaAlVXxFsVSALXuIoBEywCcWXxxJnNeEyDsDEELlblWwzuIiPBgpPpPToOHWlzZAaTfFwMmWEevVxygHdDfRHhoOkwWcEeZlLIsSfMfwWtvVJNwsUugIiBDgFnHrHhRZKHiIhJjkIEXbjJWwzZuOxkZKkgGUxSrRsPpXDmRrMoOdBdMBrHBKkAhhSCsVVfWwFBbYpPyiHDYmGQqhiGgREiQqIOdpPiIiLlnNByMmOonNpDRaAGBGgonrmMOfVvAaiIFVDpMmRrnNPBbqeSsyYuUdHtzKDAaduUenXgSUKCcksLlSJkmMkWUuYbBjWwcCdmSRMfaZiIcCcCbwQoVtPpTkKcKJaOJUaUuATJjttEBmMLUJjpXGNwWnBbcCppwawkOaATtVvHNgGCwoOiIWGFkFcCWtGQqqmYyttyYqkkKEuZOozHhJjziXxOtTXmIiRVCaAMcOoOdixrNSShoOqFfQcCaFfmXRnNFfBDJNhgGGgLlSrRfFZZdNnsxXdSNwWHYslLCfKxXisSIxXHmgToskKSDSswWpPnNgGajmMJRPHhpxXqtBbMMvTLljUMmlMeExvVaAXsSxaFfAMJMYPpiAGgjJKkazZfngGTTtoAZnNuUiIJTtjhHkKntTeEAwWaqNnQFwVeKOoaiIUuZzwRbBCqQBYyEeZQqTtKkKkzBhHumaAeODdpVKyJUugXnqQTtJjQzUKkXjJKMQqnWJrcCPmMmoOuXNVnNARdDAGEejpmMofFCcXYjJjJEeCsPYKEmXrRxJjpPhuUHHoGThHlsSbKXxwWrRFTyYtbZzwWMmByhHuHQmMqWtTtkMUumPlhnNHLbYclwDJhsxXyhgwdSsDoSXaFfZxRNPpIPIzmiLxXlEHYjJyyyfFkvFoaljJFKkDQqXKkxvVXNsRRjaYOCjeKlfDkOoxWpkWwvVDgCcGyioSIBbfImMWwGggeYHDFfdaAqihHqchDaATAKbhhmEXaLdDPWVvSDCEfqeEyYZouMmUNnRhHrscTwQwoaApVZzGJOfiIvxBvFfnNDvPpVoOqQdcWjNCejdTXcAaKvVkKgSCSsxmYyMqTJrRjtDHOohJaqOGIiGbsoOSBXpPtTtJjErRidZzSAaIfVfmMQqFDsSdPpKkcCieKDKkdzjKkJFflLMmZgwvfBCPpcbxTtmMUSjpKWwSFtTfsDSKksWLxnWwIiLtTlUFyAaaAFCbgXkKyaHojJTKVvulLUddDNnzZsahIiWwRrzDdOGtprRsOrLlIiqQhIjJjleEqjgGcfFuUzlOHcCmLlLyhbBUEsOgGOyLlxXTRZzrwtVwbpbLlBaAFftTLlYdRrCKknNMjlqqQPTtxsThWwHpPUcCuLlBcxXQqDFrRKkvVdsSiDdzDEecnqyYQgIidUbBPnNTSyDdLWqQrxSmMOosKBQvVCclmMLIcCwWKAWhmVbeeEaaApbDdfNaAApiSxXEOCcCjypbzZBfUAPJjpBaAnkvUVvUXxfrMmCYDnVvxGgXmJoPdOojvkPWwccJjCnGgDdRrRrOoHRkKoWEeGvVGgGNxtTXnbLTtlBOogtlLndEmtNrxIMmxXMXysSYadDJjVFAhaEWymItxtMTtKkIovVdDWIZpPdBbTtnGgHhwgGWaXFfWPPndDggGBCxCcsswscjhHHhCZdDzdnJmuVXxZbfEQqecCtTFkKBzaqkKQDdEVvelORroCMmAlFGKSIiBOCvYyVsQqAabBEXNnxNpBpPsjJRrPfUSfFsuakjnNlUoOuharWwSsEgvzBbZFeEeCcElbMmqQMqxPpXhrOoKtRdwsDsSdDdSfFCmVobBOSeEyJLUihmrqPUupwRrWjJQRkPTtpkKoOWOTdIgQqoVYGexXQqnNpRridWwhHXwWowXFMmLiILQqeEokkHPzIiYRrbnTtypCSscNEeGQqBbrTtRowqVXxvNpGgfFeAaCcEtSrEDWwzZdeWwTtdgGWwwWvVYyiwqJakAaxyoIGgKcEyoqQdqQDBJEeHZzmdockybBYpNnPaYyBbiQqRroOHHhRrimablLLKZwWGFfkFeEIifoFwSsWBNnUoHPrRpoOqLlAvxzkKJLyxXiIvVBvngsrJIiGBUubgZLRLlaUDiIQqnpsfFvDIftlLTrRSsnNaonMmiGggvJUuAJjbjknmGSJjXhHxBbHOoTjxuvwUuyYzGgFfZDfIfFJFoKrrNnRoOnGzcCBFDfFdtTbFfRoEjJeVvGgHEnsqMmtTvYysiIJHaAovVOhjiIAaPdDzvUSVvPeEpRudVdFMIimICcmMnNQTtoOatYCEeluUKkjmMJzxXZuIvMmXjzMqJjpjQYyACJjZFfzLXxvZYyTMmtJzZjzEeGHVFFfmvfFaRrAtNDqxXpPCcHDbBYzZCvDGgKLYzZvpjqoHhqQYQxXBOfFobFfqjJGuaAUgRryDaFfBlOoeSsrRxkBwWdoOSwWSUQXlLlLJjzZhEeoOwSXYIXeEymMiewDdhHiSYbqQxXIPpdXLGgDsSdLleEJMlLDVmgsSPpWOoNnCcLPczZpmAaNyYnTNPfqiAeEzdQqDSPbwnoONgHbBZWiIVRYyLiGPpJPJlLjBqQbusrFfVvlfFdtUuTDwWpPpKKkomOgGTtsSJSsAFiaALlZeEzPmeLlEmAPMGgrJAEeapPhHuUwKeEAaksShztTWwnqvbJjlHkwUFLkHpWpbKkfFBTmMfFtiIpllEEBbeAaewWaBbApDYyjyEeYJisUFfgGpDdHhzyYZiaAHkdDqvVfFyLNnMSmMoOIuMgMmCsSIiCccGAgBVZzaAZzvDffFClJbBcRbIcCwmBbdPpkzZiIxXKFoOhSsHOoTmuUoOuUeCNZqMmEeVvmbBaYttwYyWdihHjTHXxguUyYFfVvGkqKyJjYmWcoOALhHkTtOKkoTySGDUurrLTmMagyYGSttKkPkxRWwCcXTtnuqQrdbpPaiILxXlRryNnANHhoBbfkimMIHhdDAwLPzZzZprZSqsSUyaVEWNTfxXilnNMXxpSfFmiIKkMmVriclLFymrXfpqiICcGgxhHeEmMXuzZOulkKDdUrcNLlndRcCrMBbzrOlDcvgGVUYwWNcCaNWPyBbEcCDAxgpmRSEGgQqOoepjrWwVkKdjJMjJKuUkYyvVISbGKkgBzDdIiZCiOoTkwWJTncCNaDdQqAWwtCpgMnMuDdUKkMGzZgvpFflLguCHURJjdgGNvVSseETiuUHGgvVseVvmMhHKFfmMgopPXEedDQqWfFVtzZCCNUVvvjFdDtxYyXTAqOfTtGgwmMSOomMeEXQqxMCfFjsSSsqQBLNZAaZJjtgGTSsYpPsSpPwWmajNLlnQqCAFRrNpXPpGGuPIipzzZZUwWKSAwWatwseEnSqQrRvVTsdDpPFfbemMEiBbcOoCKuCpqHFLlCeTtvSsjGuTtUXHIJjjEzqQVxXxRtvzzHqQhwVvWGRRSsiIZzPpBFfbYzeEgJsSjGWvPppeyeJZrWWwSkKtToOVFfvKBbwTtMzZZzmuWAmjJMaiILqDdcvbRrdInNfSdDSeEXHhxtTVGgOoEeBboWtTJtUuosPpuGgULlfpSsLKgkxXEQmXxUMmuVxxXXEeefpPOotLVRcbBcCqQIiRlIdvVtTikDPjZzvVJIxXizmgEejbuUAalLBAtTPiIkrRKnNkhKkHOkWwtTAaeEsSKwDdNnqyYQwlLCcWRreEMmBJdfFSslNnLDhHjRNCcWkKFfLkNnnNKBxawXxQJqQzZvYzSSXFfxJHhvWsSCSvVBbZzsYyQqcJjelLRYyuWgEejFfJcYJhHUuuKWwbCDdgGcDdKkoDdLlzABbuJQzdIecCknYmMIiuatmhtfFnPACbBVgUQqoOusOoJCMIXmYTErReJjOoOMXxLMmjJBkKghMSYjlLSseTNyhHYACcOoaVaCXcCIJLAadQqDzoOKkdQqjMmbBJHhbaALloSXxCcAbcChHPtLtrSsYyKiAxXrRpPOslLSfIiYzFlSsLfJjVvFAzZAVvaafcDsCmMsGwWRroOEeyHhOoYcCgScFKEeMmjuBKqcCcCfgXrRgFsSPCcOqjUuVzZXxSptWFnNvVUoOeEhSsxXqtsGgFmuUnuUAaaUvVVOWvwbzZVoOQqTEaHPsKUjbBPpJcCKkTrhHaSGgXqQLBbxmxYyXpqQPGQyYgAaMmxXMmoOGANAatsSzgFnmDdMhuhfFevRVvJtgGgGRorROafFAZIiWfRHhsSknAZzYyMmkKlLFmayoKklWJjkKwAQKVeEvkqMvVEemKkqAaQPpbTEeshJjsQoOKgjJMTXMOoGgwWHpYyyYBbPvUuoOQBjYvVTIoGgTShbLrbalnXmHhMfVjJvgGjJhveleELIigHHpyYFiIfPJorRsSlcCnJbBaqQANhAfOZzogvESWwsdHimMIXAiBYVvaCcZbBzGEtTuQzCdDfdtTDtcbBkqMmMyYmSFfBNnbFRrPIipShHsHDdhdDdwIifPtTQqoOqMoOmXxHrMmEzZeuRjTtNnqsSQNnJrDkQwylhHFGpPbIcMmRrliTOkKUYVPpAduwHfjGaPIqzyXxUuDefFMmEJjTyYeEFftwzVvZeEzcrRCUlLGVIlLOoqQTBhaAXNBbwwTtWJyprSsRtUUuXxDEeNKkOBqodDvDdVSbBLRSrJEeiIfjsSqxXcCgWfsSGysTtPOWnNKkwzwIeYICuUckKVvSsVIdOJcCAZwWGxXSDdstZzQqKkJjTGgxXpQtPIidDfZUEeooXxbBKJWiIwjpPVHklLskKhFLhHRzZrNDbWwVvBfOmMaHvXxVhAbReNYyfFCZidDZzZqlDmpPVvffFEaAFfjOoIDxPbgHUVvuhGBqQCEbNnBtgaAWwGIieukYyKUXxKvqQVkXeRLldDPnNnNpPXxYfFylPLwWlYtOooqSsnUuiMLlUumsEeRrsHhuqEgfOtBlpoOrNnJjgGxXRlyYLIlLYuNoCcPFeTKTlDdeEIYDXSsIilsuiIAYJaqcCgGQAztrRGhzZHlqtTWwZcVmSsxXBbxGgXEerqQWpkKvIiJVvMqGgtlDPfZlfHTCAifFoZxKoWwOaMmLlGXxXUuxgANqXxcrRLtBzZKkfFgMmLKiYyInCTTgadMjJWwunNyzyYZaAsSeEfjlFIkwWcChHyYrXxYFHJYFMikKJXqMpPwWXnNxpeEqMbBmlMmMmLNDWEkKeEerRqQkKJjwbNnoOKDdknNKtMBbqwPppPEeMPBdDbtTprRlSszZVvoOONoOnYyNnzAaKpPkSmzrRaxXnqQIiNntsSchHlLvnNvVnNCtTIOYODdRUuroDdzMmnNbOBbJwGZgGzSUUThHNneEvoORrVDdYZziOoFVwsWwVQqHhvBbwSsWhNnHZAazSymMiNnTAXlLxovEfzZqQyClLyYveEeEePcCrOcLlCKkAKCcsSuUkntuULjJYwYyaAKmSmRRWNnrgoCTOVWwvTFftRBPpbbBYAakKkniHdWwxXkKzZqMmoCckFfwmvgGVMnNnNOdoPCBjpPIjJicCxehHpFfPkJjKeEaKZzHhkeABUuTtrtTIvpMmdGEIdDsSiczfVvFnwWoeEeFfuUYBzwxXTSsPnNprRthJxKkbBdPjlLlfllLhHTtkehHjzZkpWIiMmzZzzZOGtTZzXYyAaECaAJsyYVvScCjcirRrRIPpAaCwWGKkgFfAoOOGgPpOBDdxXqQBoPpVgFNpRtGNEdDDdxXemMewWEngVvaRWghHTMrRmjDQqdlLqOhHpPoTtYVvpSKcbDjyYdDJaQEeVYypcDdCVDXvVYyNaAnYfwshHbBnNESsefsaTtfFdAaxqOSbBzIsMmMmSiYCOmMoOCBQGxqYyRtQQqqjqKoiIGgOCTtUucYXxYSrcEMTKkIOldDLvVoJjgkwpPyIiXHhxKkoOYUuWKHEehUKkQEequBmEeoOmQTtqEXsnsOokKZzSRotevVErvtiIyzbBZYDAaUNBbVvNAYGQDzZGgnlsSLanhvVHYyNWeVvTtsaZzATbHVYyEeiNnyYNDdnPqDdWCcSnTteESUupzeHhEyYoOnXgCSrRkKJjgWTtcyAwxAwWGtTVvMmMmeeERIitLlTqnNzZwWOfFSNrWwnCGgcKrldDHhLJjCNXxnifFbwfvVEbxXRvWrRHTtfKkFhbkKBPpcmebtTBqGqAaIHnNSsnNAtTYOoZGhHmEexdWwYTthWXXxHhQMmqfFtIUuiTcCUuJeSwWTtWyYvXxyzyYGcvuUbfqXAUxAeERKnNqZQSsjXxUubRalOoLAqQFfKkvVonNcCYLNLlyYneEsaASloOSsSstTqQWwWxpPRHhrrRVvTfXYvVxXpsjJiIuaAbwtTWkgGKBphHJjJjsLlSsSlbmMLlLlLuAaoXBbxGgOKkAarRbBmqUuNnHjsShHnmMoOmifbBFxXoOYyxXkFoaAqfFQCyHXnkPaADYyLBxytYIidvVDpKWjYPvVpyWwWubwdDMWwuUOoustMmTYyzZaASGpSsBkYyKbPaAgIiUOYEeyQqndHhQqDHhtLlrRBlWIiTSsGgWlCcLCbXxNnBdDzSYyfFspnGjPoOeKmMNFZBfkKLcmXbBxQqMSsFLlpDdPeOnNrjJRDOiKFfFEeosSOftTkUuqVvYWdoPpOBbOoLNnaIiANUJwWrRhhHYiIvVRHqQhpoOPMNnNoqQeEOXJwWcCjxgGnSEzvKkVLlrRyYLbBlaiILOorjnjZzrBbbUunbESTtUuUuoOjFJpPjYOxvVEzZeXxXWPUXWmMglZzLvVjxbhHBtYOHhLltGfFgXEkTJjvVFfBNnuUCOocuPyYVvpnObBEeokKquxXUSvHsgPpfVZEezJjtTctTeEGeFxXYvRryYPoezZHlSPWuUHKkzZhUZTtGaAFRriorRFjJVvfdaPbpPBmMqjjJoOmHhHntslLSSscCMuUqnQTtRrfCFwWSGeEgTtsfTtcFvVdDucodDTsPpHWzWeEvVLHhHaBbdDKkbSLFuUwVvWjEenNcKCAbBSXTAcCucCwWhHUaLVvekKWigGPrPHmQxUuXpXkgGKxPWIiXxwCXTgGicCuqQJVTtkKpPieEWVqEiIevcCmRtTMYickKFqIBFfzIiUuvXxMniIiINmKBbPeEpLbtTAawWgzkKDdKRrktjbLJNYaEeTAeEAjgyYdoODGaTtAaWwVqQhHrUuzRLaAlrsSUsSQNBmZzMxfoNecEckDQNnfXIZmMlLUcCZPjZzYyafMmFLYBYybLlvhSsEgGiIvBblLBeoWwzZOEbppPPjJoOfFHuKkMmJjUBbHgzuCcQqWrwWRoOIiuyXUxFUlwWLuhHVapQqMQqFZXxWHhevILqXxJooOOVZzvFfxXIcvVIfFhTXbBxyhHmLUdDUTtDduufFeEMlLFfsSKPpktebBwWCcImMiQcwWCcCBAEEdDDcCKxXvEejJVpYuUWSwFKkklsSdDclnufFyYXxffwWFEOKJXLlUGsSciQEPPbBCcpWwYxHJjJWsvMvVqJkfMmgGojyXDdxHLlhsScCDTtvVdPHuUvVhuzZFgUWwvVutqzZQiBmEecMmAbBxjJXqTyYNCfFTBbtWwkFfEBtAyYAaawUujHhxNjjJJFQqfnwRrUhHMmfCyNnLlnPStbBTSqIicCKdyVBbeWfFMrVPTXxgGxXzFEefZgGrRWdDYfFdXtTxFfmMAxKrBOoEezcjJCKkdronaAPIQnOoeEXYrRySspPxHmLMmUqQLluAalMmaOnNonUubUuURrVzquUtOoJjTQaJjSsxHnfOoFrdDqenoOuUgGBbqbmsSdDMYyHhjJVqhHQCyimTtMZzhHLlKkdiIcCYyDBBCVSvVrAoZzvVMHhHfgNOoeEKkAcClyGQqgFBboKEhHlLesMPpYxVBbpPhphHPHwIiWSWRriGgZUaAuUKkktTKKkDJVRgxXGAakKIMcCGpiYvWwVUmwwNnTtyYSaIiAfFjJcCOUcCuoshHTPptkKcCAlYykKqcEfiIWzcCOfFAxXhHfcCvVEBbedDiYyIAFbBhkKUTIinNvfFVtMgGEernNwLltTjcXDhzqNnVvMQqmcWwZzKeQMmqwOoNJZpbTSsWwMmtVvqQgejAIiYZvVyYrRAdDaMidDFfwWfFCcZzHFnVAavAaNsRrmMSfHhGgpPlhHGgOomMGkDdmfFMvVPgnNULlgGuUpPxWwXxhwWFCcFzCcZMmbByYgGbAaIiFinNTpztTrRslLSSzBbWwCcvViIxXLuUlIifPAaadPNnpNcCxlnjUrNFaADVvdoOoAYEBbTruUMYyIyFLWzZwATtIxOTpPVNvVTMmtjJTRKzZIdDCcHhAZzkKAXsYySxaoOfUIiFuUaidDkXxTNBbngeEGnNggGMdQVhLqVFfIIMmEeveEVXxajJBbARyYrRDdhpPcjKRrkJtRrHUuvUuVhcClmMckAQjSDyYhHkByuUYbiIzNnmMHIihhYyarHKjbbBYqQyUunuUHhNJixXINRwjJUunLlNWrMLlsKqmsSMfFpiVvukAaKoOUTtSKkyPrRIDddDCcOoOoOIisSDkKOlLoryqQsSYiItRoLSsJjkYmMkKyKuUWgiIlLBbRrGxXVpmMfmXLaQsnPHhbOWFflGgLNnqQkdqhHsSwWLzZBOkKoEehUuYydIiDOyYogGVqtaFftTFnJjtRFkKKeEsSDdFaAfIwWomMeEdjUSQLlqxXSsyYsXGglLBmMvVkKSTtmMjbBSsbBfFJKkPpEepYQHWZzAadDrOPqumMUQporRMmTtzZRiIbbBRrBjuUhMmtTHPtJjqQMeEmXbBJjjTLltWxMmXxbBXKdUuTkKlNxuUXMmxXhzZHpmjJMhHvVBmMZzmhKkZKJjXAgGxXtTKSsOopPmMqxDdhHXsSlBbjJnNoOIWsSsSAabmxXMdDSsToOgGtclfgAVbBODdoEeNnoOUaAupPWsShHjJwcwWFgGUuDdwWfqYyjJAhHOyYZzmMIiyNnYaAoRleuoyXxaVMwWmqQCLDdlcGgJjCczJWjJVDdkiTtitTFmMfIsSuUiIIiSMmsjJRrIKMyYzkKZzZiILOwWpPaRrnNkKFOYylIyJRlEeDsPpSoKkOoOXDdxQqfFQqhHdGgTNTtSsRrtgGoOFHhfTIiQqscpPKMmktdDKkdeEyDryxevvfIiMmFVBMmUIkuUmMGgkrLhHiCcIxXrRxldgGuUvQqQyYZzuUcnZBbpUgOTtiIxqNkKGSspPhHeENnSlLswmgfllmCcFfMcqVvQChlqdQqDKkwWgGIiiNnZzuQqsSjVvMSIisGgCcQqKDwflGgtLAIiEeCcgGaOUiIsSXOoxyaAGHRsSmMNRriPAazXxBbwWyYSsaAZYyNnNEYLlvyKxXkuUlZzEeLoOmkKxOEMmLlnNxUCzZgGgGcJjuXGgRrxXkzYZzNEeEeTGghUNnfFNmSlLOosEeKkOOoVbBvLlRHvVwPtTjlDdIisVQiglHjmMjJJcpjilmmMMZDhrRnNitTnNkJUuDcCLPIiaApSsXxuipPIUAGgaTpPVvvWwKkXxVQquUfTtFxFaAPpflLvrRcwaAWCHjyTtzZtuyYqQfFjJNnTJjtUrqQndtTDPsBbSpelpPfFsSxXOogdDGLENKPJjdDpPpkWwgPAauDPduFcCfCcuEcCfFOVyiIwwWVUuDKkDnNdbBdDdKZzizXxUhHuZkKjJAzZXCfAOKqQkfhHFrhHRJAQqYyplUWwQqWwuUHsSnNdbBtTeEDPpCNsSwojaAhdWMmBMmbBZzkxJjXezwWPXaAxCsCcNnSslCcHwHLRrlpCMRrmabBZzAcQqAaPZTtbHhbNnBxhHCFSsxmMTUYyrwWrRDdBbQGgIwWiUdltThHLDcxXCAqQcCIiwWYyEedcCMmoTtOcCIipkKPKkZzDmMiyYmMVvFoONiIPpZzRKwcnlLXLlFfcCCcgGSTRrtsobBOxUyYcGNnYZrIuSIiEUuesHnNnuGOoOodtwWyYJMSsiILlmMwWmOohKkMcCVvWwGkKgHOOodvevxjJQqXJjjHhqUuODvVnwPprNSeEsGgHEoOgGUMmKpPiIeEkoOZzdDJgGspPSZzSANHhnSsqPpNnNpPlLAaewWEVvgEesmMKkzQAaqfFUsScCnNLlYCzlLZQlllLLLquUdDQZzofFOBbtDdMvVxXWRUJQqEwWzZAabhHKklYpPYUuyQzZqxLHhTdDtWPvVyRrYnNJrHhluUGgdDJjLsmgGDePpFfmMebPerJjzZlSsWaAJjwfnuFfvVOohbBUuHwWNnUiIwZKeEUuuqQGkchHCKsSILFrRflzZNFNRrcbBFfePJjmwWMJWcCKkLUIiuDiIKOpJGgRTCccCNJMdDmjEkKjJoOGgzCMgckjYNnyEqsSCrRzZfTtMbBPpQqqQzpPZlbanNViIQVmNntieMJqQchbBbBXxOMdVwWveEAasSRtTOozZgGhKNBcTtlUysXMEtuLliIVuUrYyRliYjJGtTgVVMrRmvynNIisQVlLvrRqQHKeAaEgiIrRGBbkyXxkXxYsAFfaTdSsxXghHphKkuOoXqYyQqQxPEpAaLlwqQWHTRrkKkKPpVvtlydDYLtoOTcChoOOYheLlEdDAaHhJjXAgQqGQqJjmLzZveeEjHhOJGgFAaBrRbwxXWuSsLlGgJjoOPpfFqQZzsmAaMSUhAaWwJjksfewWBsSGgbxnaANJvVPdDIAaiAaApiImCIHfFhaAHZzhAooOMmPpEeOadeEzLVvIiYKFfkqMyMmYzZeJDdqVveuUETtTDplcKkiIPppPCWwXxcaApPrrRbBqQMmlCcLzbBZArWwWOooOMKevgGVIitTJBKksoXxOgqQGSXxbjEkxXAxCcgUvIipPjJVONnKUukxEeXxXMmHhDdNnXCcVpPvbBxXwUbiIBuRCcFtTRpFfRMsSXxNsHXxhfwhNeTtyUlLzGuUOoYFaAfrvVipxXaAIPXxQKkbRWSfGgwdCcmMjJFvVfDWFHmMMlLBVCcvDdZJjzavVArRdriowWOIsoOwWoOiAaIAavwzZxXkKqeJjfFmMYyEQKkXeEWOowxjJBnUuhHwWNuUIiVXxRpPpPrAavrzgVvQoPxqfpPbGrRLNnLMmEelAFyYfXLlUucCtpyQLDvuJjUVdVvlKyWqSsQwXBbxwGgFfWwuLMmgDdGZfFQSsKkqEwWeuKipPBbIUukSzTcCtZzSnKvZPHyYYvVFfcCNSTtsSsiVvIOokTuDdnEecCNAHDZzdiIvAaVcCWwsSBABUOwWoQqvVCcvMmCZHOTUuFJjJCbUcrfHuUhIcpPpPDZzgGyCcYySjJKksnLFdDfcCTtDeEhtnrUuZzRjEsgxXGEeCctTPpSzKktdDviIuJjUxXGgIzZrJjMmmrXuOoUIAazZqWwQlhhiIWDpPgGNnWmpPMwpPtMmTjJdkKhHzxuxRvVsLlShOLaLlFfnNSoODlLdhHCcbBNKRrzZknPfIxtTXpPhHtrRTcCTSsAaeuNnyuUUukDFfSqQRhHlrRsjJuUCcAqexnKDiIPpdFQmFfMqfkKkXxKKkhHCdKXxoOkDadkKDHhXweIiCcsSEBmMbWiEeIQqNnyYVvdtTSsgSTTWdcChREeCclksSKdDEbBexXDbBIbBBbidXUuGuUtTveEiIYyQoOWoObBjHxzUgGuwWcCQqLMmmtcCTMORMBbmvVoIoOiPUPLlkKEGHExXbYaxMDdmBblPphHLFfuUXWVwWearRqQcFfNnCxXQqlLPpeKFvridrGgcuUzZZBKddDdDzZOogGRXXzqPUrRpPuXTXxtxpdSsNnzMNnLvVKklcxXEkHhKyYeVXkKxuUMmMJAaBbENnZlZCdlLlwDdWNnLvVewWEWBbLbhHqbBrRQRaArPpbsSBBqQRriNoOaPpoOlLAkKvCBbcVzNXFSoOsoBblLORVvzbBZjJBbfbBpPsSFrFfDdruAaBVESloOVyYvFBbrcBEtOnNuUQqdeGOdDdtTqSNKuUUTqZzQJIiaAiIUujtbHhzUGQqwRrWDdbBJAuZanMygEBbeGYZzlQqgcfTOorMVvmSsNOonCcUJRreuUECceuUEeCcEMeEXLlAaxmnObBvVNmJjgpkfVvaAamDdDJNnjNndiIMcxGlKkLgaAXlLZzkKGgCiWwIHFUiIRNnjJrjaABbFhHfdOaGDxvDmMdlLDdpcNAaDEeKuUTPpfFLVswvVNnSsoOeKFfGeRlDdxTuzYjJDdCBKkrooOOtTiIRqyjJHkaABbSmMplLvWwWwDOolLeSsElLbZcCWwkQqBVhHvbAaKACiIcVvtTtJWwjnNWuTaAtURrAePpNnZzbCWwccCHcVcCvoDgsSGbBdOTmAaMtJjjNiIbBpPnsSJnolLmPmMGgNdqQDPpnnNSuUyrRkcCNnneEBPOoplwWLbiIPpnAXxnNvSsdQzZqHhMmqJjkKvVOonNqQQSlyToOAaOoloOlDdVlLecCXxyeEGgDdvfFtZJOojhtTLTZbBZzzRrkKybBcCYpPcKkCRmAWLTtlwjayEYynNeDdYJRrjEeYWgGVgGvwyhHNnfVXBYypPoObxvtTQXDdxqhKkbDdZEEeNOohHtTIXpUBnbmPpMBHrRlmoiCceEtTuRSbelkIiMGgsDhHdGpPphoQqOZCYyzIUuDdtTinNMmZozZVvFUVvUubBboOIipPEWweLvVDXnNxdKkaASrRWwDdNnrRHhWwjYGpPKdDpIiPnNYsSykSsfFUoUuIxWwQqoOXisCVvGSsqQiYybBYIsuUxHhgnNqQgGGMmUEeHhMmuDSsdXbBbBFfccCClItTiXSsTtwvdDVJjWVvnffaAIPpOodDXCceExiJjShHdDBTtxgGXLNsSnZzVvBWVvRIAkwCcnNWqUuVMAamvQRAxXRrgGahHixgVvXxOsSHMmZFfdDzTtEMXWwJcCRrnoZzgnNibBIGbBPQXwWxlseESzZrGxXUfFFQqrmMaKxsIFfnNVkKrFfTtoaAoMmOORpPaAVqCcQFRaArfAaDIeEidxXAaGVvVdDvWwvMmaUuAvVYyuDKktTeEYyfaAFoOUkcCqQlLmMFfCcLwWDTQqeuUEkKJjWQqYsSdPpeKkEeEnNVvayhHmMJjvUnNqQyWwQqFfSiShQwSfXxBIiAQcCOtSsBbTBbPpoWPUiNngYyBbPBHhgkKunEewMXuUkyYRkKrRpPJjZrRzrSMlLmByYbAaLlzuUZOoRCcZmMzeCcELlxXkKgqloOadDfPaAplmxXDdMIigGLFfFAatTLMTtmotmjJoOXlLxMBbTtovVYyGQqaTtqRryYlLJnNhHjHYjJOoAaZspzZGgkKEeMytTYhHuvVveylLYiUqlXjJAaYyxpzpEePGgxXZlaAAaXxyYFfpPaAsmMIidDulLVvUzIPpKkPrRCcVDdocCOvUuAiRcCzZrvHhVIlLaMudvVDUmBNjJJjVIivNnTtSdHhhHDkKjJOvVoqQxrGglLyfdDiImWjnNvdDIizZMpPmVJwLLlloTZKvUuxXgGVZzkPpKLlkYylLYUBVvbrRmMXxwzOoZEekKYfFYmMyyWIzcnNZzzZXVcCvDTTZJyYnNGSsgxXJcChHJTtsSNnjDdDSKXxkFfMmRMmTPzfFsbGgBhHZzkKZzLcCiIlqQtTuwWUsSSvCcVuCcjJZzDjPetUuwWQqQquUeEevVEyrfFfYvVtBbTyjJFrRjJjyYdDHmMQDdqhFpzfFZsSJzZoaASQWwqhrRHbPpBsCUucAafjFfJdDwWqQmMyYaXxAfuUFfFZzkKjNnrRooOubBUSiIsQXxqPpmwofFhHEeMAFfafAaFmaANDPpdtTnyUumMYMPzgCpPleEmnNkyEeYDdLlvVMfDtaALLlLjJTthOokKHMbBDdmmmPniITtNnJeEjzvVxkKXUHhYyrSzCBUubAVvssJbBFmpyYUuIYRryVvZzvVDdZxXzmMcnBbNZwWzCrRcmHciIbBRrcqQcCCjFfxXGgfFsAkKaVvSLlDdtQVIiAaTteQqAEMzawWATNnPpZMvVRrRrmJtTpVIiiIvCxXbnNjJBUYEeaAtTgGgGaAVvsZzZzpcCPViIvBbLBUWwSsoOcAaCuAiUuIJjhaCHhcohpSUuQyzjojJOgGFfzZyYJzxiIKHhBxYzZyXrZXhntTLwWlNgmZrmcCMRnNoOyGgCcwWpnSsSsozZOPdNnwHVvmLlgGqQOowGgMHYyxXhVmMoOpEemMzsSZzZzXxpcCZzLlPbBNnZqJejJQqfFkrjUuJRnNfngGCVYKhHkyrMHFfPPneETxXQqFfjJtNcjJFfaAwWCWwrHAzTZztKkZIMmFfLBNnblupmMWszqDcCJzpPZjFYygGMmEeeEsSDdTtPpDSsmuLlsXxzZFCcWVzKDdkYyjLlJZiIbBFZLlzuTtpPNyYhuUbwWBQqUYyOoeVvDdYyYyCMmcnfFNXhHuHhUqdDlLeEwWMJSsiIjmXbBxkKTtaAQKQqkLlGgxkBbVvTtGgqQDdGkKZOotsSXaAxmaANfFdpiPpIUuPlLnOZzoNOonNnNSTtYyyLNnoOlYVvYdDzZxXyBQqvVZdDzMkKRSsUeGgeElzZmJjZfOoFEeZaAzRrynNYUXxtTuznMmpcSDDNnddstTbpqQHPpVTeEtEeMmcZBzZbzTvVtxXZGgJSTtTtKkEZzOoeMmsTtuULljoGgVvFfjJGsSgaFfsSdDoOJcCAadDbAagGNnReEruYuNgGMmnLlYyReEbPkfFKdSswfFWKMmIjJvVmCcMiQqmMkDwWNbBngGpPyLlfFSBrRbsfFRrUujcrRmMBbjJCOpPKtTDdaAtTbBYyAaGgwqcCQWWwLhcCSRrsHdMmKmMDdlbLlYyBEeUdDwWctTeECgGuuhHSKvVOoycCiIYkgFxXferRHhuUplmiIMLJdKnSsNKkkZFfkAaDdNnAaxLlXfqJIjMmzsSVpPYyfFDPUuGgWVvRsSFffsSMmTpPWwdGfLlhHFgxXzZxhHwlLWiLleWsSVvbfFxrAXmMCTtcodZLdDCwWAaHqQIiBOwWjJqQzZJjKPpwXpPbBFNnfZzvVddbnNprRhHLdDeElPBkKbdwWDGgdXqQxbBDqJmkKMjkKyYIiMZzmxPpXQbBOoiIPpiiLBbiIiVvfFDdSsIDuUdjOvbBPpVrRogGAzZaJrUHOoZoOBbzITtCoOctbZzBCcYkKhHjJyoOXkWwCcuelLmKkMCccCAPmpPvVwkKzZWRBvVeBbIiaOoAEeTtEgRdDGYZnNzBvVbafFyYuLlNuTjJtUyyYYiYAPIGgipwWRYtDdTkKMkaAgAaGKkDiIdKmspqrQAaHWwXGgxnNFfhkQqckQqXlLuUYyEekKqzZnIQqLlFANnTAWwnlLSKCctTFcCfwvVhxXZzKGgkHERvVcdDzapPACcZHRrnoYxXyavVctxXpqQYTtCSCcIdCgLpFkKfKGgXxkCAaXvVJjWwlLqQUuWwFLlcCugGCcUfcCgGDdvVEYGtTsSLlgyhHrAWNWwbTtzZBTtyYtiIbBsytyYTTBbCcBQgGqFfFCcdDfVvaEeoOEuUDduUIiWwHCcheJNngANnaiCcBbaTtiNnAaTtguUYgGyVBbUuvSEesyYzkxpPXKpxXPEMdDmeJjCWwcZEIieGvRZzrcCsSSsXrRlEVveuHhUiXZUxXufOzZiUqQuuUIBEeVDMKpKkPIiuUnIiOozZEyYedDbBqsSsBPpbLXxAmSsMHbeEiwCGgcWIeqQkxXKcRDdrZzvmZzMKEeGgMmkVKTtbOSHcVvtoOmzLPPpwWplDJvVnSsNpPVMmyYPpvunNUgNtggGpPKVvmMkKPpqQIzZHhwWFfIiFfrRgGvkeErzZzSsQqZgOoQqlbHhBLMmGAAauEoOevBbtTVjfFJsScYQaASssqQxxqQUuXuUhHWwZzXxAPpGgGgaVKATtaCcFiIfqbUvVFbBDTtdFwWcCfJjfUueEFjJlLfulLXxzZAKkaejJhHkKEcCCcqQuUvwWlTtVvLVvWjJwVTtBoOblhiXxIHLCcBQMWwfFAamrRdDpiIeEUuvZzVTtPTtkLCclTtRrnGgkTtjJKwWNTtFfRrTJaAjFPpftvXyMmYCcbDdgkKGDdTFfmLlOoBbrDddDRUqQUuZYyzEeKbBUukNnGARqQrNcCHhsKfqhyYSBbLqQSsReEHhrdRrDlaAIKbBkivdDPpSpLaVvHfFWwgrRvVGHhuVvOoHhUcvuIyYYyfFxPpLDeIihZztTiIAaHasSynOowWFfZzjzHJmNdDbnonNiIOoACcGgzZayGgYrTtaAAaqQrRYgGRRreETHOoWwxXlLbBlLTtEehtRryFfYGgAMbFBRrbNyYnfBESsUubNRrnfFBeoXtTxNneELlNNnnOFfgGtyYxBbBbBzZMmigWrRwBbmglLSsGMMVVgGWwvRrvZgGdDldDIxXiaALzOvVoAjJanDrHhPpRYyMCcmAadjAWwaaApPJxXsKwWBqYEYyeyQgOogGGyckKCHhYSnNXMmxtuUTrRsVvobPpBOLlhHTjsSJbBSsqAtLlBbNnveSsUuEOoWgGfzZNnFwvrPpRruUuvFfVUJICciUnNujcCVVvmgGeEPkKpMVIVFfUuvKkiDdcLpPlpSsbBIKnfPpFeEUHhrROovVuMUurRpPBbmlLkBbpPIETtmuUgGHhyYMbBBKcCFfpPGgWUwWjgGqQMUumpPDdRlLrKDdkEeiIKJoOiIsUsSjJIiXNrmGgRrVEegGvDFtThHfgGdYgGLlTteEwWkKFfHqQsSlzZLhOoRQBfFQqtTMmReWGlLgBbwJtFfQEeqYyTGgsSVvbBIJXxjijSFZsgGSzPplLkKTtHhEwDdWeFfpRrRrnNPIhSsHlKkrLlbBRmMPpfFwbBRrwoOUotHhnNFMtTZzrRmfmMxXqQgKkJjGTOoOuOvsSwWVnNdDQqYyoWolxXLOrRhHaAyYPZWanNzZAwuYyUzpUuNnhMJjmHDdzZBbVvJjrRcCTtlIiLvKkhHDYcCtTyZAazSPpsOWRKkrhHfFdNnDwLlkxXBTtgGbiIpPsuZzEeUSqHKkhQhpsSGIidZzDgdDdoOCLlwWUuLWwleEcQAaqIrWufFUMmwnNyYHnPVvpoBbOtTWdWwSsCcIvTtDrxXzJjSsoOZlCcLlCPhHPRrmBbMLyOoAjlLzcuHhkKUrRqDdQNOPpoaFfzZtTHhQxQqVviIOiGgXxmFCcfMIoBbqQMQqmECcpPjJzZcCeQqHhrBbRGglLpeElLUDWwfUIinNuFdCSscuzoOZFfzWLRKkPpBbSjJsSsaAnNiIJjcJPhHpjqQwWceECSsDdBbhHhHxsYySZzBCcbfJQZzLNntTlqPUOoyYWwIhIiiIHizZyYPpEeyYBbTttTgGzZcCEHKvVpPkhIivcCVAaRgePmNeEnMIfFrROoFfiaAZiMmtxpPXsSVvTtSsTQqqQypPwWYdTwWtWwkKiIsvVgGSEEwWeDnbBNcCYxaAXKkZjkxEeCqQcjEeoOJxXeQqrRwdDStTgbixyYCcvVJjXRqQrINALlawJGgeJyYjEiIjEnUuNSIisdZzDesORroSwWCcwWCUNOocCnEgsSUuIiHhgGHhqGgeEAgBYRrezZcCyphHjJPYALlEePpbxXfFnNGHhgvVxeEKkRrJBbYHnNhyjJqRrOgGPpyQqYVvocCdDLlFEeJjKlLkVWwtTxMiIqQEiIemMJVvjsSCeEcvVqLlogGOQCPpcCHhtTmMfFcqQVwWSsRrBAgGaAOoVMqQkLlKhHWwqQmXxwWqEgGeYUzoOsVvSYLlyBbsSLZzlCnJjCchGXxMmxXgZzDdpPMmovVqQCcQLlUuJFDhyYmTtRrvPdDqhHXZzdhHgVvWwGDIiYBQqeEkUXGgCkKIicxsSdDBRrbpQqvxXpoOPkKVJpPdDiIwWDPEepqQdTAaVvtgGMfFmSsdDCcyYyYChwWHhHsSbEewWzZBQqqAaQpPcmCcaAMLgGEiIelyYynNGgMmYBbJjtxXTCczZxbBXOVJxXjAXCcUrYvPpVqQpPhHzZwWhHxYHhyXHOohWwNrEsDdSeyYRrRkKNAanLtTlcYyuUCTtZVvWNnwVvsRrSzokAZfFqQbBzUgHWwhjiLlIJexLlXEoOJjAaKklLYyxXUIisSVvEYyeAaAaXxbhHBVvKkucaJjAJjmMgqQGaBbAnNsSuUDdEeMmTwHhtTWDdgQTtiIxbBEeXPpnfZBbzLlJJjwWjFkKcCecEeCENoRrtAaAKrRgGvRfVvJjSspPFwWlRrVErRelLvhzZzZHeELbTMXxmtNNeESsiIUPpufeEFndDEeQqrRUGgBbyYuHhnOylLUzZuKcEenNNrRpPbnNBnSvBqQbVWwsqQCcClkKLEevVvVkrRYaBAabAKkOoZzokKBYyXfFTNAgWwGanLltYyyYiUuIEexfFMmYybsSBrIEGgemMiHhIiVnNdVvwwWpgkKGPHgGhHNnaAhRrFRroOfZzAfFaADdakdOoDKxXqQNmtTlLMwWqQFZFfxXHhdxXDzfYBbSsSxXjgGjJLxXlJsyYAaHhyYtTyndDTtoOpYytGeqQhGgZzHZXxzzRrsSnNZuUFfKdDkBRrbECxJjXrRIicSsspPoOCciIWwvVWHhosGuUrRgSOUvVufZzlLfaATMCKYyXxtTkNNHhnBbnQqAaidSsDuUfFinNIlKkLtpPtTTEiBtTbzZNnhMxXHMmhmpmMGgfjqQJVvBbtbJjBNnGgySsxXaAYLzZlbGglLyfFYBtThzOrRaAozZqOoOoHnNzZhGgFVvfabOoBaoOpPAyfbBFYKpuUPRrCcvVsSLIyYHhFfqQtTDzZzZfFyGgYnRrZzNEepKkPdixdLlAaDwtTWwxXWQgGOomMZzQqtTQqWwsSdDZzdeEDqkKeJnXxXxDyYdASSssyYhHktTKTJjaADdMkKmaAVDdgNZmMguUGuymkKBeEOPpobeEbHhBKwWuCBbXxcUhuUHGwWgkpPcPpPpiIGgCMuEfgGFLlyYJfFjPtTwNnWHhpQzjJZIiqnJjEewznNpPsSGgZeAaSstZziITHmcpVvPTfFtEeCsSeEEoOeSsHDdQmMhqQHqTOotSssSCcuUxXSnIiNmMpPgFfGslTDdtLlGgtVvXxVPpvkKMmSsIQqbBFfiTmMRnNrtrRJelLSSsBbwWCcfaAKkxXtTUuqQDdzZhHOodkKgGDFfyoOYrRnQqNKDdeEkvVWlITtiLBbwEzMmZVvUuuUkKefTttToFfOJjQJjxXguUiIGUuZJjzFbBClLlYytsSTLcqYJjNnyQWwvLlVGgOofkKLlrJjlLPzZNQqnPIippSxXIiIJFfjisSsrLlRVZrRTtvVzEyYeAEIEeWwieRrigeEIiZzGsZzSRrIeEsSriICcjJQqROSsoZzoOLzZlabrXvVFfxRBFGgWwfEeXxdDvVWYyxcuUCXNQqGvVVvgnzwWFJjfZkKHhADIidaudhtTCFfcXxWJjwuUQqHzZdDJsSjiIJDMSspPUuYyveEVuUmgSsVvGXxcCCFfcSLlPpAaeEsvVSFmGgMfyYoOUZDdvAaVeEzuUIbYypAaVXxvCzZcFfmJjpPcGhsSeEHgmMfFcCfsSFNnGCcfHaAYyEehDdzMIKkimZFBbblyYLBbSsrRThHrRtBbnNnKfFmMZzZiMnNcCfFqQmXxitTzbBZIzZeIiEAeEaCORrorRsScUyYcAadwWDOCcoCqQPpehHEurRkKLlgGhyYyYNnkKHtmMBbThkYyKHdUwWurRrDUudUpPuPpReEFjzQqQqZbycCYlLJjOKkPpeEoBJcsWpPdDnNwLlSpZzfFZkKzPiICKMmZvVtTZzqQBRrbBbItXIixfLlFpUuIipPQQqKUukkKhHqPAaHhptnNAamMAsOHhoCEecgGqQSrjoOJHhPZTtzpNVvyYFfnzxYyLliIaVvAhHLlBbuUnNcdtTDCIhOoHbzIiZlLBNnNkKSsXxnfAaOLlNEDfFOodedMmDyYCcnUNnuSPpsIiQZzLTtlEIoOiDdzZYfoMmOGAagioOGHhNnWwgGgqjvVJyYCvVUKkuLlcwRrjJhHWfUuzZFfFEeQTTvHhYyVrRtSsqQkKtzZZzdDuUIiIIrRlSsTtKXvMmVLlxkLYyHhKkbBkKUZCczyYuiylLqQFfYyJjHIitMmTCctToOCcAabdaADBBbGgAaOoFGQqgnsqQDgKkGkKDdLltfFpPTkKdGgyYgGBbUuSrdDpoOPGbBgtOoZzTHjJQqWwRnNruUoaEXxeAiTbBtiIInNVvhHQgGBxXbsSpGgOoVvPFcCfuUSsqfVvFzemMTtETOIionNtZKHurRUhOfTwdwrVvRWDDddgGsSDPhHcCaAlQNfFnqAykcCwWKYaIiIiCciITtWmMZzwoOVFfEevjkKJRrsSqyYShHsIiFfRrQQqLdDGgvFfNcVMmvfCcBwWbFBbCBbjJnVoOsSaIqQhOoHieEyYmGKkvVgOoMmAnkKUuNXlLhHwEeGlLgYFfOmgcCGOaAoMoyWxaHhuQGgCcqVvdDgGqjJUuuUeEQYyWSsaAwqPgGpQHjJhGgZxXzmXQqcCweEWZbBzxRrwsCcSWDdfFgzEeZmMsSjfjNZzQYyqnJZzvVQqnNtTubBUkFfuBbOoUKcbBTZjJztYyYyavVyYUufFACFCcYyJCcqQiIEexXmMeENnjJjbvVBJcCIBbmMLliGVvlaALUzrRZmgGYyMWwaQcmMCqdYyDRrlLzuUKvVWwvVlLTRrtgGnNksDdSWwkJjvGgVNnWwLrRyKkHhJZzjyYtTYlBfLlbnNvVkSsvdDVKBFJjaApPDdbDdwWKWiIqpPMmiIfqtTQFcCgGyYsSwWHhbBLRrzZlMZPkEesSKyYpwPpWWbBwRrIiuAabBWwnNUtQqTjTtJzwngGGPpgNWmxXVvKdDNnkgJjQqwWQrRqvCcRdDryYpPwzZFfjJVvVCcvWOoPpUzYyZuIyUuYipPPKkpKMUumkyYVuURrQRnNrlKkOoLoIiOGgAaiIqMzZmVikMmlLKkKIkKCRSsrtTcFfvwWAaEerMmRXjJxnNDdsSBbtTKkZtToOdDgPpoFdDRrGMmBbgOKkVOogJjGvpPcCKkQqqQrgGRCcwXxWocCFfctVvTCfhYyjJPpLRrIilBbHOTKNnkaAtNkKVvRkKrnBbvVGipZzlLPIZzTtoEeWnNaAwvwWOoVDdbBiIZzeEXVMmvyJjbBYJbBtsSYTtyJjTjoOiIvoWwOmMIfFWwlLBbiKkVxNkKJYypyYPuqQUAAaaVepDdPEvpPPphzZRrBbHmMlTtDdLMmHhzeEZqQhUuBbHPlLDdlbBjIiJLrRBbpZzrRvVBaAbmMjMBbWwmBYyGgRUurbCbBcFyYBbMmfRyYsFpPfYySmpJjuUPLoOlrRlLMdDUuyYdDrqQpQqPaAsxXSIFfFfimMjJDsSYyNUunKkkKdTtnYyqQXxNnqQotToOGgyYRgGJjcEeCrXxOfmMFdnfFNDKMmbBLlcUuCkZzPpXxnAaNXnOoNRdDqQrPphHNPpPpBbnroOCcRNnlLbBsoXxOSWaAwhilLVvIJGgrWwRjHxTtcCxtTXwFfWxXZzEeGgaALleuhHUHhEkKkBbKGgNnsStlFfxXvVvVHtIiThacgHhGSsVvCyYAtKkOomGcCNiIngNnpQqPyGgYDRrOotTUuEedfcCFlwWLicCIpPnuUUuNkKJjIiVvMXxViIqTtlLQdIQVvIiqifeEreERFqWwQmKkMDvTtjJdDZzKPzZJjZzpktTxxHhXXKkTyYiItBXxBSsbbQcCSshHIidkKDNiIOgIiGonZ

Getting Started

  1. Make sure you have elixir installed and running. (Hint: elixir --version)
  2. Download all gist files and run elixir 5_alchemical_reduction.ex. That will compile the code and give you results.
  3. Run elixir 5_alchemical_reducation.ex --test to run tests.
  4. Have more fun!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment