From 993bc6fd42c4c2ffb8b4a85a9be2271dc52eca19 Mon Sep 17 00:00:00 2001 From: Anders Olsson Date: Mon, 17 Dec 2018 11:51:00 +0100 Subject: [PATCH] 2018/05 --- 2018/05/Cargo.lock | 4 ++ 2018/05/example-01.txt | 1 + 2018/05/input.txt | 1 + 2018/05/src/main.rs | 89 +++++++++++++++++++++++++++++++++++++++++- 4 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 2018/05/Cargo.lock create mode 100644 2018/05/example-01.txt create mode 100644 2018/05/input.txt diff --git a/2018/05/Cargo.lock b/2018/05/Cargo.lock new file mode 100644 index 0000000..583b5e3 --- /dev/null +++ b/2018/05/Cargo.lock @@ -0,0 +1,4 @@ +[[package]] +name = "day-05" +version = "0.1.0" + diff --git a/2018/05/example-01.txt b/2018/05/example-01.txt new file mode 100644 index 0000000..8637b35 --- /dev/null +++ b/2018/05/example-01.txt @@ -0,0 +1 @@ +dabAcCaCBAcCcaDA diff --git a/2018/05/input.txt b/2018/05/input.txt new file mode 100644 index 0000000..9babfab --- /dev/null +++ b/2018/05/input.txt @@ -0,0 +1 @@ +tvVcCtTEedPpvVDaAtfbBxiIXFMnNEPpeiInAaNjFiIrRfLMmiIlJAamPpVviIcPpaACHKkhcvNnVhXxtTsSTtbBHUvmMVuUAakKhHyQqYuayYAaAYWwbBKkyuUCTdDgSsbBIwWikKZzOdDiQqeEbmMBIogvhHvVqUuQTyYtVBbeEvVjqQEeJGkKRrHqacCAtTYcCKkyQQqhoOCGgWwMsSjrRJvvVbBwWLlNnVZzZzmjJKPpkbBciIHhwWhHeBUubyDdYHhRfFASsAaJPpbBjiIarESsGcCLlEQqqryYRnNQQqIiTtvVrXbBMmdDxRsKkeEfoOFwWdDaEeLlAbBSnHhIkKidaAaAciICDTtNoOgRrGRAaDdrEfFcCushHJjxXhSsBcCbTtMNncCmXxxAaMNnvSsBbVmSXrRxBGgbsUuZyFfFfYNnzSaAqQJVvjIRrieESsEeTZMmzTAxXaTmMttNnuUhHzZtDuUdnNsXxJjwoOWCcFfeiSsoOIEzZbBxQqjJoDduUqQOgGWwIiIMmCcFvVfiVBbLXxlabBAvaAHhXUuXSsxrRVbBcCvaAhQqHVdLlHhDnNvtTsDdJjnlLVvtdDTAHhaNOofGqQkKgmTtyYMfFFfxTtBLlFLvVlSsbBfLlLWEewvVvgGVjFfHhJllLKkbvQqzZmtTjWwJMVXxfFXAiIaFwWBbuvVUNnSGbBgGWwgKtfFTwOtTyYouUjJWRraAMmqQMmfiIFpPyDdYZzjzZJpsSPauUxXAcCMmQqlLkYKkpPAaEekKSogGOsyUezZEueoOCcEaAbLlsSdHhDSKkslLeoOEVvhHBNnRNnrHPphncCXxtJjLqQlTdzZDNRrqxXQrEeZzZzDdVvwgGCcWEeHDdvFfUuVhJRrVvdDdDjzbBcCZCcoONJTtPpjgGlLyYuUmkKMOATtsSaovVnjJnNaAnNrRPYyCcpdDjTtdpPgGhzZHDnNNEenAbBamoOquUIiEqQYyBbYylLeTtnNQMNYQquxgGXULlyBbEeYyYynzFfZUmTteEPAplLPlLWwapiIsWJjGgEeJHNnhNKgvVGknjlcCFfLoOaAZHhzwgSswWKkGucCUSpPvyYdYZzyjJxYyXsSVvbBDjJiCcIgGMmlLvVgRrGhuUFfdSUusZzPpDHPpyYJAjJafFjjstTGgdDTtSYwWwWbRrBcyVdDvfFzZrTtRXfFxQPpqNnQqBblqQLquPpBbUvFRrfFfVnbBNQgZzaACOOzxXZoobBGgHhkKsScqrRQGceECAagTtIgGzZiidATtaXxsSWjhHJwxXzZDmMPprqQUuRIBWwWoObBMmqQwbyYeEHhaACcPtTeEpYytKkTYyGLgqQGgOBbEeocCGcvVlNnLhXxjJHClhmMLlHbBZzkUuAaKrRkKRbutThdDHZzUmMBCcMmrFWwPmMpfWgvNnVGUuAagGzZIizZggHhGyYPpOiIrRIiGBbgAaBOobRcCroEemMHIiNntTtzgGvVAjJKkZzcCXBbfRrFAXxaxGghyYHDhHbTtAuUKkaBdWwCcpGgwWeEPldxtTXDdpPDLUuEFfezcCZQqcCjfbBFJgGFTtBbftXxAPpaQXXxCcuURrxuUZAazQqMmnNQQDdqwWvVqfFYycCZzqMAamAaTzZoIixXOiILmMLIkKwWxXiIiMwQUuqWOoSsSspPxXvVbgGBJjmdVVvvDfFGZLsQqSfFlzxXNncCBCcYybTtoEemMKkOoOvVqQkKgjJMRrkKqQoZzOHUkKSsCxXLlcuoNcCnYyUulZlpPmMLeEmMzBbiIPpkyYKrRtKkvVTkKgGzZKubngGNBsSUBoOIMmibkCcZaXxAUuSeEszPIEeiOoGgDdCcVFfdkKDAaaAfFFfhHBKkbIqQaABAabmofFOMyYfFrRxaAXNnQxXqaAimWwMwWxNnWwXvbyYHhBQqnNjrRJiIcCJrlLREUJjuJjeqQmMHgGhzfFoOSsOoQmRrMqKksrRSaANnpPrROdDxbBPWwpXSNnsrcCRrFfRlLNnXxijmtTtTcCSszwWZzoOZMXqQxSsODrRdXxpgGeEPowGgpPiIWgGZztcCDdTJITPwWdoODVnNvpROoyYrQZATtazyYvCcVHhqxAaXeEPpvIiCqQcNnJwWFfZzuUoNndDOedDEgsSGeryYJKkpPxDdXRNnWwrFFffGuAaUmiqQIIiLlbbBQuUqBAaMcBbAalLLlCDdYyEeOZzhHnNiIiodDaArRCcNnqQOLLleaAXxEDdYylPpSsoFzZLlFXxYEtTeYfFyyBbIvVikOoxXKaAdFULlufDLMmdDlBbfXxeDLlOodZzaAaAHhEAaFfoOWwFfPpnNrZjJzqQRmiZzgGABYybaYmMcPpfFjtTjPpJJdYyDdKkUuDprRyybBYYkKeEvVoOLaAlPoOmMIiGgOoiImMdDqfFfCcFRrhOvLXxltzPvVpQoOaANqwWcCGeEgOoQnHhgGEvVeZjJnNzhHHbBXPpxiIQqRxxcCXXnNrhcpPCHhQqrRquUAaKkYpVvoOhHAvuUVFfuUaxXlLJjYBbEewDdLlAkKEeGgaKkWOkKMZPpzmqQAGgaEUuaAKfVvVvrRFtTSskKTtGgYYyySgxXGUuAastTkUTtufFHbPpQqBhihHtTBTtDdbalLAJjGgLlpBbPrtTRlnNGrRgRXxrBbiLlPpImCcMhBbHLfrbBYyhAaGSsUuADRqVRuUrSszZvMmQOorOodaApnNPamMtTLKkdDTtzZFeElaAVvLXcIiCxlRrQqKkjYnXxNtTtTVaAvWwzZyfFXyYxiIJIiwWLpPKeEnNdRrDxdDXOfaAFqQFfrRwWJjKeEGgkkKZzOodvVTtTtgGDAXxeEhAauUHaFQAaqfoOKkXdDxdPnYyNpRrKkuMmUKUukeVvfFkKEYbBQqxXyuUhHHhdNnAaCckKMiImUudDDsvVSewWiIyOoYEfFyYDQqQqxXuQqAaGQqgORwWrlplLqQPLpBbLlrRpMmPkMhHmIiKuqQUIPpiCcCbBcPJfujJUFEeoOjqduUdOoSsDPGgpmzZyemMEYcCzxJjXZdDGgBxXjwWJeDdEUBbuNlLbhHBvVjWwJnXxSDeEdsnNcCFfjJbyrjvVJOoRTLIilvvVEeYynNlLPCcfFMOpPozZmpeEVvyBoOVGgvArRHhIiabeSRrnJsSjRXlLxHYNnyDTtBbdeEcChyXxkCcKixDdNnQqxWwJjXXWpYymMPsbvVBSslLSwIkFfieERfFefFsSToOtENfFnkvVKQqrQtLxXMmriIaVTthwQqYyWHvjJzZTtAUuRvUmMupGgPGgVlxXJjTxXEsSVvvNLlWwUJjlCQqjJcLmMjJmQqmMtPpTAOotPVveEpVHhvAnNJMyYmuUjSsjuUBbuUZjJzKRrbBkJOVvkKosmMSLlwdDcCkKZzFfgTtqyYzZwWQqQkKWPkKNnpdDFfDAahqQHdatqQjJjGgJTAzZCcRDdrcCIidoOxXDFPbBpNKEeXxwWxXDdDdoOVvfYybIiyYpmyYEXUVvsSfFrRgGuxlLBOobrMmRMmcCekZenNEzKzZaAbBgGiOnNoVvIoOhHFfKkgGZkmmMMQqWVvyRrYAazxXzkKZTtsgQqQqPtTpGcRFeAaEdDfrEebcCmgGMGgMmBUukcGgfEnNLHhllysSYSQqPrRpgGtTADdQyYsSYylLsQUuqRpPrNPpOmMKQmtIDdiTMqkxXxpPXAaAaoofFOmMNpPllLLHTtSVvhHliIOoLEeuHhUVvxLjJMmmfWLllfFFfLMiImwkFfKcWwCTuUEetLlfpPeEUTdBbfFDtVvIinCcNEnNeugUuDYyHhdBblzxoOXxXBbxXNnTtZoJjOTAatLmMqKeEkfFTtFcXxCuUfRIXxiaAWwPprTqQseQqDdESGWwvVgRrmMlLZznIiOojJNFfnNeEvWwBbwWLMmUulVySsZzNnErZKuUkzvVRehHzwWzZzZrRZYptQJjqZdDbImMOQHhYyYyqzaWwAZSsoOohHzZiZoOzTtBLOoJjlzQqbBBREeDdpPdRMgGmBbBbnNuUKkrMmQqvVDQoOqUCyYcFfvVUuYyuLbBPdDpCeEcEeudDjfFlLZzvVOosSJwyYwWbBGoOgQqsScCWxwMSzZeEYGdDgUuyMmAamMajJABtTbsAaSzXxZsVRDdrknEerOoUucCJjMmtTPiIiIMJRiKkIrxgGFfXtOlkxXGgKaAfFrRBbyYeEhHMmvVBboaAZzBbODyDdYdUuUFfrGgjfFXpPXxTisSIzuUWwZAZztTdBlSqQtTHhsbBdDcClWwiYcCyInNaAoOLxFfwNAaOonTrRtGekKDdEWYywkBbKQSzZlLyYsfbBFSsEiIkJjKKdDknNJjJjVQCbzZBcinNeEIKZyYRfFGFAafsbBIUuireeQqBbEOoInNwWAaUuTthHiSsSDdsrRnTtNLhHaAiIfFpviIrRtQqKklgGLTmMhHQgVvGqrRolkEeFfKWEpqQPesSwXBfFsSKCctTPpjJrRkUuPpJjtTlDqQqcCQdLlLiKHhjJMyAaYTtTWRrwhHtWwGmeEMdDZRrWxXwgGCclqQLzNZSszOoAllLLGgadDDdTrRtncCPcCpjLlJzZFfqQqQxnNXJjMWBbwZzmIiebsSRIirLlUuhlLHLrRZzlNnjJuPpUWLlLTtyYhHZojoEeOlEeffFjrBbYydDcCuUAacCHbBhxaAeXxEBbXKeEPFIBzLlZrCcbBRXxirlEBbeLrRPpReEIKkKHhGNngiIkMNTtSpOoPTMIibBAasCeJWwcCiIjUuMjJSsTtmKlLAakyOZBbKkwWzAKZzVGgfklLTpPtKxPqXxcCGgIiLlQqmMYyoOvVhHomMOvuUVQgbBGUuYmMyrWwkPpKHhRiIRCEeGgOPpoTtPkBbKaAFvVfpvSeEsSeEpPstIiTVwkDdkoHbBQqMmhOYyHPpGldDFfDnNdgGpPLgZzhdDiCcIKUuDTjMmJozZfFfFpqQdDhHfFSsxXpMmPLlCTzZtuiFfGxXguUgotTOGXxiKkIIkAaTtBbcCtcYMEeiIzhiOHhoPYVvieEIMmypIRrTfFUjJXoOxmsSMHstTUuShTtiIGglLfFHzZgGzZcmmxBCcfFNnyYBbJsSBbuUNnrzZRjbQMmaAcCbnNAaBmOokKNWwrZzmjJIiIiMgiIhgUuGSpSHhYysPsFfnmnNhHBEeeEYykKQqgGKkbssSZrfpPfdAasSDFtTXxzeEHHwWhhZeEEexXYypNnPYoYyOyrRIibHhhHBtTLjJObBoUuogGOvVlPpEwWMmGuIiUIuUHhiEezZjJfFjJMmgkKZujJvVUzyYkKFfePVFfMmFhZNnxXvKkGgLbBlQGghHyYqZzPtCvVfaIiXxiIBbUXxuNTtgmMhHrxXnCcoONRkKkAaPprRKGDdcWmyuhHUYCtTKzwWEeZYySsBqQzZERryGgYBbHhyWwdDcCXuUPpxAalLZzYSsmeEMyYoOtTTyYtiIZmMmMgIKxXEedDAEvQqVKkmGgMnNTKkwWhHavVGgWIlSmMdDsSsuUVWDcyYCdhhHHnlLQFfcCIRriRrTfFtEeDdErRegjeEhNnHMUuZzmJuUWwGAHhaaArbBmMMmZzbBNnRgGqQzsUueESZNZzntTpPQnNapvVVFfRrMZzaAoFfliIMxXmCcyYvVuPhSsHbgGBlMpPmfHhkKFLxXIiQqUuVDdWlvVLwjcSsWwvVOfFoLlCAPVFfvpPfFjJOopqQRraQqvKKkzXxZaAUukkKbtTvVzqjJQHkKaVYfTtVVvyYvZzdaADFwIgGioOWyvsLFGgMbkKBeEjJGgmfiPpmOoMXxZzIVvlkZzZugGavVFCqQUMmucfFfyHhtTzZTPDdNAMmHhcyYCanBdDsSFtmMTRLlRSdvVLzZleEzZBLdDNAanlQJjykKcVoOvCDLldlOZztTFisSIuUDdcBRrKxXeJjWjttsnNUuxIDpuUrrzZIWdsSDErRxXoOjMZzFIdyYBDZzdoORrZzAaGgjhgGRaArZzEeXAhaAHZzYUuQqysxTCcMYuUYhXxHMStzZJjRrSsTHtTVvawIRVvroGgOhIyiEenNIMmosSAaOkKflWwXxAaiAaHhyYyYoOqyYQXxIbkcTtCuZzqQtTxXSbBwWsjYydOZzRrAQqkKaTtKdDbxXlLBkseEYySokKDorRvxXVqQnNwWOJtXxtiIaAVvOrlLRosAameVvvVEfFVvNjJngGsSMNnuUgGlOQsanVvMmNHhAkKScClLfFOofFjJzZwsSqQWqDdihvXlLxNhHnEMmfHhTLKkAaljnNJVvYWwytFcCMnwEeWfRjgGdDcOoqMPDdKkptTmlLQhpPRJjeEKcCsSkGIiVvnKpNQCcCcqdDLlnuKkUuaAeEshHSUGmMcCkKLVvzZluUpPgGgzZktTMmUlzZLaWwpPaAkmJjQqiKhQqAaRrVYvnNZzKkVqNnNxXxBbSsXiWVyYvwWAavJjBbrRVwHsSjJCOorRLlwWOcCocmVvHhsLlBbSFfuCcbaNnAFSsJYyPZlwWieEwWgxSsXGQLlQPpRrvtTrbBRvlLOCcYKkEeyozZYyfFqQHhPpaGWHtThXFZzfxwkyYyYPfFDdzgGGgRyYrlLaAZZzXmMxGgpEIOoixgGXGggGEeMmeUuYyIiLlVhHvrRFrlLRuUHTAPpYyatamMYygGSslLxlLwWhHTtCVvcAaHXxhBbcnNsShHNnJXxNmmnqQLltOntWwTxXxXmdzZzZpPWwDuUZVvIwWiTlLfrRFtOiIizsSPpbjJBYgiIGyiYyMmUFfeEZmOWwhvroORVHZzCIikKZztTcwbBbljJLBUuhATtaGTtcCgOTYytoRrFftFfTpuUcCzvqQQPcCFfAapqVHIafVvyYjJFsJxUuXLlmMSspbGgxoOXiCcfFjuUtyYThqNnQTtEeFfBbykqQpZdDzXxcCSsSonNYykKQfFIzQqTPptzZzRraTtqQUuIiYyVvASZbBVvzdsSbXxBborDZzMBbrkKRGmeEMgLQqluaAUGgRrVIivVvmpPdWwYyfFMmAawYydDtzYyUuBbHuLWwTuUZpPcTfsOovOFfoVcCPpNRrPPaALgGllLpbBoFYvSsVyfMmOSsaKmMkAqFVvNnpMqrRSsKkyYQvTHhCcAaIirRvhHVcCsbBzIXxieNngUuGEPjJpPppiJjInNeEdDbBHhPqRrolLDdlLMmScsMaAmWwSBqAasqHhQpRnmIZuUzSNnGgoOHmsSMXxgpFbBftTUuRriDdtTKkgsSGIyWwYPXxSsGhROWwoUurVvKkmMtiIqQTYynNVDdlZzLNnvKIioOknLlIWwXxeErRwWiHCdnDdbBNWrRFfcvYcCEIiepDdQjJzZVydDYbZFjDdtcVAwYyBbEeWhHkKpPCeEcacCgGfFLlvpPoOCQqTyBbDdFfQuDQqdIiUkhHKuVvUJkvVZzEeWjJwgGBFfaNnJjIFfuMmJjWwXxQNnqUWDduUqQwXauUUuOXxtdwWDnNTPpMmcjJUlLuAXxaeBbECTvVFfVPpfFXxGgBIiNnjJvVVlLvUKkTtudDhHPpXdkKCwCDCcEeEcAajJCKkefeEFQqfAHOohciIxXMScUjrRJurSCQQqwWPnNpQLlqSsqTtcZzsFtTMQRrTtvGuJjvVnRFfrUurbtTwNnYyWBbBRrBqQkxXqQdDKnNGgGtrRFfTPpjJJjMcCUDdVFguUAaSRkMmKttTCcTIhHOoioTtgGnNcChHOiQvnNVqIWbBBYyepsSRbsSvVMMmXsBbEeQPkKpdDqOoPInnNfFNiWTtEWwFKkfyYuToOFfwWZWaiIAbwWBJvjHXQqIixhJjMGzZgZCcEemMpPGgbKkBzsSGEetTsSgcIDdiLlQrHhgGhvVlmMLadlLDApPHJjxIiBbuUKqQQoeEvNnVOXMCEecMmmMXxmxXxoTiAaInZzNnIiTlLZEezRwhxXcCHQbBYyNBxXlLUubnNiIkRcCRrdDHhJjYjJyJjtTnpPqBbRrrRCcyLdIUBBbxXOzZobWwCoMURXxryYPpjJyYumCcEeIlLUCLlwWMmPTtjJJjcbORpPTuUjiIJrRyYtMMvmMkKNnVKkmlnFfEetTNlLnDdOsTtSoNAanITtidDNrREeyesSEwliPptPsNnYySKkpTvVWKoOHhtTFfkKkwWwWwDNGTtgeVuUwvVWryKbIiBXxGgMmhHaVqPpRrQvpBvVWRrJrcCLCclRaAQdDqGkCGgcKwWVvySsYTtAcCaKkkKQFfIEevNQqrRKknGgVHSVXCSsAIisStMmKkToOabBftTeEPPpfFLljJbBrAcCVvtTaRDQqsFfYEeTzzgGZUulLTtpEwWNVvnDDSsaAbBuULldUuDRGgriIObNnBVvtIiTdDdtTiSYysiVrRvMmImMHhtTuSByYbwWsUGDdsSmqQFOofMNnRrgdJjDcCfFIiIoOsMmnSgGUuuUsboJjlLBbEezRrlLZBbjJzwWwfFWZivlLVPBFfbnNhzPQFfvVYyhHKIcaACiCEGgoOebBVvXZgyhHYGHhzoOZzyYktTJjXxZUusSdDzZqQUubBiIHhqQRTtTtXxrZuOoZzkKwOjJosGgRTIiQMADMTVDdStTZKkzsvnNcCyxXIibEMmeEeotLUVvOPpdoKYyjvVbsGpPgQqNnVpbDbiMsWmMwgGSRVvrPnNptTZzLGgYylZzzsSZdDbRzZrfcCFVETcCbBpEePWRrYtTrRypPbBCIibxXvVEezCcfXmMxTtuUsEeuUZFfWpPCwWcfFwzSEeaALloOoOFZQqBRrZYyluTtjJULnNfFUyDdXUsTpNUunUuKlJjLkORrxxXWupPAaUufFULdDTfFeEDdaAXTtEsFfxcCwagZzGbShHnNtTsOfFQmMHYsSIiyfjJFDdhKkeaAEjUuJIeECcucCDdcNxXjJxVvkNmMnKUuLlLDdjMmveEVdDrRSsnNoHhvVoOGkDdnNQqXuYsSiIfFyUnNEepNQzchHiIbBSsBbYIaAioKRrkOyFfFCXpPbjJZztFfThaAZznNDdBQDiIdqbHMmecPoOpOoCjJoOLlcCEuUaiwQqWSWBXiIxbXxwsHRrTtjCcuTOotvhHRrrvmMElLewWYiIylLRrDIHhFfiwTtUugvVOoHUbaAFjZcCIWZzFfwWimMNnNnbBMsbBrRljJYyxIWhHLJBbUujVzOojJLbBAuUaBbUuIrzZJjyYRSpPrRnPpfTtHnHhAobyYBrwWROxXJjaSRVrivZZzzXxXuZzUxioOIkKVMmFfKkpPVAiIRdDcdiIDNvVnMmJjfFcfFZzDKkEeqMjJmBblOoThSsKkHBAicqtRrTgGECczZvHbUuBhvVVeWwfCcaAKkgGeEtTZRrnJjIdhHKkXxSkcVvvVCToOhTFfFoMmbDfkKFdFfMmBMmnNMEenNmMKkDdSslLPpQqRrLnNPafNnYyzeEbnNFiIflsSCwWcyzvJAapzIiIiPpUzZuUUvVLlHhmEeBahHqQkKXFrRhHRsMmRrSQoZzOoOFffuUYyfFxxXXVfboOclLRgrRAKwWrRkaGnmMTsFTiIUuLllLOoECBeEMkKoDbbBgGhHUuBweEixXEeggGyYyYkKGSsIiwWWpPifjOpPUAsSYyjJBbMmayGgEuzRrwWIJjwWIHhnNKkmMtGjNnpPJDdgEpTvVKkdnNQmIiMnNqnDdNrpPXxIdyYKUmMEeupPpPFgGfLCcSsymUuCcIWwBwixwWHhIinOoDdNSSsRrshUuQqSZdsuXMuUmxFkKfVqPpZhpPHReEcCKEeUWwptTkVvHhKsPpBXxDnNFfdeEbWNAcotDQqdTKAaHibBIvVuUAniIhHGgbgnNOVYyKTtkOOOoocCPpeESVvsmLlpPLlUuzTQqOhHoNrRGgfoOCOGCcgpHhPiLlIoLHMmXIbBnNoOiILlFStTsIifqQxXgTtuUHhGiUEeKgQqZzzZkKoGgRrHcCnNgDUQqdDsrsXxoBbNfFneEtTuUOeEGPpgEBxyYXbZOolpPxXLhmMFfrEekTtSUusGghHKRraElLSijgGFWbBwfJEQqhwdlqCctqVvmMLlQSsagGWnJULYxVvYyaAXylEeBbwcCyKkmEHheQqMoORXxHzLZAafFVvwJjSmsSRkKDdNnrMxXuOJjwWsSFfkWGgeLpPlgpFpPiuUFAlrNntVvqQNnUuTYydgZzEeIFfiQzqQqhNnDfgAaNncCFfGwEeWwgaAGzOogGczZCjiITsRJjIiLDdXkRRqIlpwWlZmZzhHMNKkkVvkKKADdayqQYpPqQWwYJIiZzYsSoOSDdJjBxXZgSRrNTtniIBRNnOoVWwvjJrQqIodeUnNwRrjqNnQzaAZpkjJKGGgoXxOQAnRrNjzqQBbZJTFcCftaAHhWwQKxXCinlLXZcUQqHFBhHTtdUeEueKYfHeEhqQWsbBSEewGgRrYyZzFSBeeEEiIRwWrbpZFfbcrRoTtbBEnLlNhHIiVpfFPVBluZzJjUMfFSrRlkXgQwWqYysSNnCczbnsPvVpKkSxbBAavVXAaHUujJDNndvmMiwaAWJjBbTtIxrRDWIfwWLXkqQaFfmdDMAnrTFGggGBgCeEqQQjeEdDdDJdLlfFtqQlhtwFTtMmlqQuoijlLJSsKYQqHhymffFFMmQqWOSaAMgGScCsxUUuujIwWwWQlEdPeEyMmhHUuOBOobTtHVvhJSkKnFCcmMqTZzthHgGpiPWRuWcNnCTuUnzGlLxRwFfgXJQuzZjZzjJWJRJjphjBbFfDdJFwWfHKycYJckKXHsShOoIUDdjLlGQqgnXZbBzmMkKmPqXbBdDTPlgGmMWFfIirVaYQBWcaxMmKkdjJNnDAFncCrRmMcRzHhuUdtSscCEGgeinNbIiBIvoaygdDGJbBRkvPDdLlpvVVrJqJodDBbOjJjHEeFfxdDXUbyYBuPpjJfkKFviIiCcCcmNZzYykKnNnMBbwffFOodxXdrRLlkAaTtNnaCeUuEfwUyhfFIikKUwWxCcXmMRPpYyTtMgGmFflFfcCLrculLgGUFfCAXxHhcCaaARrmmMsSuFkgGCcCcKJjfQqhNjJnwrROTAmbBMZzomMyzZSIimMYysvVRDdrzHhIibqoJfFKkOjJsUuuUNnfUuPpFLluUXgZKkzVeEIiYyLlGgvLlbBtCqQCcAwWnNMkKzZmyYXdDxOokJjwOUeTnNtxKYyGgERAyYBMrlupPUYyDGgsSNjeONcCsSnSsOoVeOonYyNGHQlzRWDowCcQqWObMfCyEeEexNnQqrCuQqUUucRXlklhHLzRrBbxXxEgZzwstTSWGNnxXNIQvuUIwWhxfFOeZzEMsrRcDdUNEeOoWZzjHlLkKXOSkrXwKTceECtQqkkKulLUnqQoOwWhgAaiIKUPkKpuhnNHcyIiYCNyYTtnYaAyXxWaAwlaGgpSsPASsLyKkpPbYyJiILljFfvVGVRAPOovuXnqQNxuEekYDdyKUUzbyYKsbjJmlLMCcgGLRJjrOoNndDWMaAgRrVvEeBbTtLYEtTEebqiHmUuqQlLMFtKkPpTbSshHOeiGqHZnNzdWwDKkhVvxQqcCiPpYTjLnNYyjJxXgkKGiIltrnNRLbBuUZdDzlixYyYjteETJZznjJRGgHITEQqwZEeHhNVvnHhpIMmioZzOPiIFfOoIMmQSsQqHEbBuUpPehPpqFyYthhEeqEebQqBfFQFhHBNnWNnHOwWotOlGVbLzSsZzxXZlxJjaAlBsSMVvmjJcCkmMKjJbPpLHoOONUuzPpZVvaxOoXMmkKACtKkwWAazkTtWYyAapUUuUuNnQquPjoOIiJwyYkoOWTtwKKHLllLhZzxGmMglccTtUaLsxIZAiIgGPpcWwemQqVvMEHhwfuQqUFzWwzZdnRMmUurwWNvVnbBrjkcGjhHUrRkGgcCbBKyYuqQXxvTtzrRZeElLAGRzOowCcWOZYjJCcMYtzSwMNnmEeOmJjMXxbJWsScCsSMaAmBXqbBEqQezZQdDZPpBuUbqQMmuUKQsSqkACrQYrTVvtRCcyqmRrHhnNMeEeXDdyYxDdlLwWAuUaAvpPVaEEhHhHeimmMpPVvTtUHNnhNnHhuAajqQaAJvIivVFDgfkKFtCcTbEejAHHGghIPtNiIxxKkDdLlnNfXxQqXxIXzZxFUuqLlBJzZXxjWwxevGwWEekKGAagJjKzkCcxaAlLcCVOolwIiWLcyYhHCvdnNnYyGLKklhPsuBbkajJTtAKfFUtTcpPiEVeYKQOofxXFLlKuEeqeErRsNFfnStLlpkKQqPSsKnNPXJjUuMmkKxpuUwWyUuxXYPxXilMmLhHIkXxKlDdbcCBIiKkyqWwQYuUoglVaidJiuhbBtSCzZVvcmMOKksXxuDLlEjJedkKqQtTJjAaAhHabktTGLLllgjJDdPbBbeEeEsSjJBprBQqiJjzZzZsSsaAAWUGguUfzZYcChXZqhxXMpPiXxIrvIFfiHhaAfFaAVZEeUuFfzCcsSyaAVKXxlLchdDFZzJzqQZeEDdjfqeErooOODuUdeNnHhETtDdENwWHhhZzHIuIlLrRDdqQIqQipfFQqVGgCcCcBMmoOCzxXdDfFEeWwWwCckKjJdOoagGRryQqlnGwdDYmMydUZzuabByugGUAaYgPpxXPEsSfFgGsiHYyeiMmIVpxXPDdSsgeEdJjrRxXgmUosSOKPpkjmMSfaLlSzAauUHhPprGgRnqkIHbTAanVvQrVsspfFPDdgGSEeneEKknjJnKknNNplgGYyPTtpCcYzZywWEIiZWhAuUatHhylAoGgexXbBEORnNKbBywvuhwPxrPKzDHhdOoYyZTKkrEanNwWqaqQAQhHKkAGgKmePpwNnWCxSMmCpOooOPTgGXtucksUuQqtxXTrRkHJFfQqjGTteEgqQzWTtiIpPcFXTtCWqTtQGGIigKYireExXLlRtXxEeNnZzMmMmsSUJcWXxwWwWpPYdkKDfFLlgGONndCNnkwWpOoPbBUumKoOiLwLlIBbvYbByVUGgQqulLidDWlNnKksbBXSxTteEzOlxUjJNmZzMjGbDaAZWAhHKOokJuKGgkzOohHTtNnFfZmMUBQCqCcMyODQqZSRIirVnNbBIyYhTtHVvikaDfFoXxOpoOTLgCcepPCvNVoOoHXxWpucCUvVKkXkKZzErReFZbTtBvfEejPZiIzHsesYmXgzZCcGmMxsSJtueAgTbBlmYycCsPpOBwRDdmRuUJncwjxXitTOoIkKJaoOALlnQdDqlLEHhetOeMdhIimMPHIkKQqoEehHireERZzbNnWwBJjevLbWBcCmMbdDhtaATqgjNyWwYmMhLlHTtfFZzxHiXvUiImgUPlfdvVibBQUfLtjbBJkZzTttFfTMKkIidHhwUukWhTlLfPpFIwWpxXfFiOoRrIPeEdgdXxDoLlOoDdOhlkXxKeELQeEqxKACcaTBbheEHMmtzZFXxtTyYfDdzZpPAajJmUAaIiuSsMWwTHdDpPbBCzZchrRWzRrBlLPIipWlcCYyqKbzRjMmBwILyXxYBbltvVTetTCcEtTYkzQqxRrNzZnfQqQqhHGaHEeZzmbBsfAKlbBLxWwxRkpJjjJwWFfSoOLLltaoOJrOoRtTSslSKkUuFfcmMClOoLunrRIiIcpEkKTdDFfegGWwsXQHefFEuJvVGHhCjJelLnNUqjJQlLBxnNsiFfIZAazpPnNZFzZcCWwflLCbgGGhikcWwsSWKkwFmeqQcCUuDdHiiIIvLrRlgqEKkgpPGxnNmMdDAaIibBLljpPkLjJlzZZzCHIiDkKiJjIJbdwUuWBfFGhHcCDUAaUuDdUuusEKhWxXCUuEdyYDNntTTirRuUuHnYyPpzZHDRrdIiDkKrRsStTAadDOGBGgbYeEaAaAdeEiIBLQAJjaxXhvVjJHSsypPYaAalNnzZtTaAwWAAaIiJOxXoNVgDxrpppPiIWpFiIbBrRnfFYylzZLERrvzZkXmMwWLuUlIMmhHWQoOqSpPsorzZvkKrRVBxiKZBbzGgkmNsSzRgGEuUehHQkKDdqYeFKkvptnNIcCiUuUujJMmWHJjTVxsSAlOrUuVvvSsxujEedDJFfSLIilOQijEYEeEapPERrNnIieApEnNAanVTHwoqZaAyjBEDxVlLYyRrvTYytzZVIGYygTAUuaRroGxXTrYlwcCWkKBemsjJLlSMmKdDiIUuKmEeMkNtxYiIyrotTUiGGFQTtqQqTtUlKkLoOoVvOCcibqxXWZFOoxXfcCWkVvPoObBjBbrJjEeZUexXxtToOsGgiCcIHBbgGhTyYlHXzgGTtZTYEeIDdzZiyvtNnMLlnwLsSAIcsSeMZIvCgGcViqjzoWibIYyqJjQjJVEevGHdDhTkKEWiInqqQvLlVaEEjJnrDdfFurRBbZzOivVfFZoOzUmseEJBAiIGgKZtTzrVYRdDFzrtTnNfOoFTLlTExXWWwiKnNvrRiLPpVdkKDvlKkBSsHhzAasPUjNnKXxkcCfwrJVDdhAamMHRrvodyGgYOomMwWoGAIKkuUjXOyYwWoMmjYyJtTjJVDpcCdDquUQdMOoyYiQyNnpBbBxawPnNfFpPpjJSHhsbAWwyCUKpfIxXUuBbzfWIiaAmAcpPCtTaWjJXxvYLlyLBbUnaepPEBQaAqnPAcXxqRuNkKyQqooORrsbBotTdswWFfSiHhrgGsSpdDepPdKkKknNkAkKRTtGrRnvVFfNybBYkKtREbyuXxKxvVUufCHWwjdDwWUfFBWXYgGfCqQvyMjJyxXmMkKYxkuihwrSGQqvVsSgEhstTOveOlEeEsSeLozZHhrfFxPcnYECfHlUvRrkBbKqKkiIQkKrVvRbjcCdRDXxPfCSqQsBbnCUuLljJsSwshbTACcOoWOoOZOIUuiXRbuHhUhHzZcvVZnNzCBrtTUupXiIEeoiiOmMPULPaApexZYZzLlyuUmkYlLXxeIiYyPhHZzRrYydizZGgmYyOEkqQtSPqZVvWwDaAdghRrAlQzBbvuuunMUPpumlLNaAUbBUXvVkIJeEcjJHhCvbBPvzZUkpPKCROCTXxPtWwTpCSselYmMJpPjjpPJzLkKDdgGxXhwUuWGgLlQbBOoOEEeeAEUJDxXbBpPrnsZzBDOWwvVodJjfKDKkyYZzyczHhfEeFNYhBbHFOofImMDXxdiKUuhKeQqNvEOoAaHhKkhHpyYPFfgGPkKpxzqAoDdrREeKQbjExXOpLjJgfFGWUkKuYFfNKkpPNnylKlLxXWYzZCcywDSsQWwzZUuVPpiISlFGginNGwWYYycMLlAiIGoOWGdDfJjRsZFfscFFsTkuJtSDHhdSssGWwaQjuUsSLlKyYpFeEfkasgGSuULJjlyYaAACLzZljwWJcgGNCcXszZSxAFOohrRcgTtkWwUuZQqUyPpYXxwdVMmvKkWGsxXgkKGStuUWwpwWiLkvoOMmVIDdqQvfWpTXxPptOKSsFIifkKzibBIZmMMdDFfDSsdmzjJZcNaAzZnGgESApvCcKkDdhHntJjQcIiNnEeUNnrRMJjZPpCCkIiYuUNRECcDhHhHdMhGgHZZkKrTtUOoOPzWwUuUBbkWwsGgbLLQpJijJInsiIDdeESIiNCcJYyoCRfpVRpcBbJnUGgKkpPOokSNVvFfnXxIJjfpQGNbBoOMmcceEbjjJJFYPDfipvVMLQqliIlbdDBkKLsglsrRSSsIiHGTtgBbNtTnhOGgoYNXWwPiQqbNUAamCzrvDTTttKklLdVjJFDdfGgIimMyYhHgeEKRiXkKLSPpsccWwepZzPEeENnNnrpWQZzdBQRrRkKFKkcCKMftJtTMmaARcaQqyaSGgsMnIgGCcSskgGgtWKLlPsRrQcCAaLlquUzmMdlyZzYRXxAamMJOojWtYyDdiNmEnUuhHmZzbVrRvBhPIZQqzPpRrIinNdDidIiMwIyoYGJjPpXeNONlNnZPSTcfFkKlLqiYkrAaNnBbHnPBbZzDlcjyUuEeYgJjUuiIIimbBhHmMackuUmpagGaHzbwfasSSspaANnXMWohHSnNeEzZsSsAfCcpxXoOYbBkZeEsByDVvIiahHfVMcCDdKAxYyENhKSqQpRmMrPRUuMNqryLlyYdDYXxNbMmBqCsScCSsnQcCqNdDDvWwVxuUbEpNYuTqgGQMPpsSSeEswTjMMmykKYWwKkmWbBwPNwWqQAVKUbqQBayDdjgqQhOUoOdFiFmmMrwWRDFgWEeRkKrBbiIXxEebBpOoOovVsPyYpqQOoKkzsSyxDdxGtBbVvTPpgUuXXOoYOZOozFEeeFfbBvVeEhwcwwWWCvVOooslGLYyhHqaAQSqQlLNnwNWwnASngKkofQqFdrRMPhBGzZkDdbCVpQqazZGgIiQejZzcvvXODdIiMCcmLcGlLgntTNOoTtfFBTyYRJUyShIiHiItfBmEeoOoJOoTrHMlLGDdjOJwWGObBKAaBbPpXqZzmMgGfJgGSOPWwWwpCLoOzZDdtrcJjCTtVvhPpaCeEeKYyeEHvVhFBbpkaAVRrvQXxqKJUuCcWHhhqdDQzrjJxfxXFfuDdAMmzYSQPpqsdNnDSszZIrrbBVvukeIitTiIfFvVpRrWyYRrbBtoOTMqQmGQNnqgvkKVwhHMauMkxXKiISscEwDedDEzauUyFfYClLdLLbDdBjJGglzEwWRrEgGcCWwLAVvslUzlLlJnQVxXHrLrGeEgWJjerfoOGgoWQqERrewtTnLzBRyYrJjngoMhHMmHhrRmAaAZhpaBbQhHzqpQCJjGgcIFTtIOrRgzEQcCCcXxppPPxXvsSVLlMmYoYHATtIbBigRhHCjrRaADdXxzDdZJZzSsXKkxIxXHCmYyPPQqgMvVDCNnOhHoAaGgcvsXxicCrVvzZuUzZRfFomMOsgGoKQqkKnNNVIzQNnXxkuUqpPpPQUqQueEkKKqbzqJarRDdJKEeIuZdCCcJQqEeBunNUlWwEhlOEecCXbdDIpPvcVvCZjmaAMJWAQqvdDdEFBbBKkbFffCijnIigOARraAawZvkBYGLlEeNADlzyYrRZlnNoOTgGduPscCJSDoaKktmUuUuApDQoIiOyYJwEeWXwWxDdtPtTJxXHNFfnUiIsYySuIHnNvVhYyVvGlZzsSLgnUxwVRRUBZzbEwWtTexXmMQAGLlrxXmMREeJPpLlNKkRrWwYyTtmbHhCxXXxcIileSFfsiBBNFfnwWULAFgGvVrwhTiIsSDoUuOdzgGZKsxUKkaAxXuAqRrahHACPGgylLRrdDRrHhQDdYrqQAaXdDKkIlCQqcWRsvVSrTxsSQqTbQqNlsSaBMCRlSsLDdqQrphAxXsSeGQAmMniIqDRoxXOlLqdhHaJgGLlZuJjUGkWwKgzbBXxjylNnILlOoRVvkKTtrBbNdDFTUuwBfgQOoCheFAawPRrpWBwPaALxbgaSPSsQqpaRYkKdERQXvVbBxEeTqatTnRvDdVhtTkjfFGNtweEWTnwGJjSscgGzZbBRgLlaTpceEZtTgkKGvpPsiEhHsodDOJIgMWwfFzlwAhHaWLKyHwOVgGebBEJaAehHiIJjteEQQqqTFtiDdwWDaAKCcrYUIgNnRjNMjTtJNrwpPWKDPufEiIpPGuUHhfFRrxtpPTVvVvljJtBxHgGNqpPQnhOovkKucfewuQquUUZzumLWCcbtTgSsGawlLGgYEeyIgFbBxcCzBMQRYEctDWwFeurQqbBRozTorRNnxRrzLlKvVVvgwgGdQPpOTVvkPTvmkPpKaAwuPpMASspLzSsyaOGgKhTedDEfgbBOsYiuULvVnUzsydnNDIiFfznNEenvHhIqBWwuUpEeZPTqQTttxeERMmqzbBZQEBblLXIdJnwbZzZUuBbIFoOETNYyMmZPNboOBhHVpPnOoNvaAsSzZGOAdpUFTaAtWkSGGgbXxBgnIijLcCVvOzxlENnKjQrpDlxTozZrEkKRrlSsHNnhcUuqppPYyPhnNHvlmlLZEevgGPWxeEAadDpqytBbbOlIAaWwwWiDqoRrVurCdcCBbRpPrmMlLeElBbyyYUMmOoAavIrRHAaeEhzEqQeWwCcsWtXiGgeIAaOHhpPozodfMYLnNOoQUIaOJzDKkdFjJIzHhPVvhHbDzZdaABLjGCcFfSKWwwZzZMOvVCcfFTtNYOLlQaADTSvwCcWVFfYjCQqgxbdwWRrlIAlxfObBoFMdDvcLzZBqfTBIHuJjogGFjuUiIiqQmFfDTtZBbzdvHcBbCVrDdRedQQdgGhUuDdetXxfFPqfGgtbOHwKkWRdgpxVvwWioOQqzzAQTtsLlSxDdKkNnVvzSsEtOXZzxXBbxvOCcTLlcCtnNQMmTWwjzlyYNqaCjCTLVvMHlFcCOgTNeEFDyYdNmIPpWyYZbqIoYuUrXzghGgSlNnzvVxgGnNXZCcoODESyYjrgGVJmMsIiwTIQuVvRWbBwTuUTtTmzZhHcRrRmeEiiIIbjGUuMmuHhHAaLlhnWwbBmhGPAaHOisSFxpPbBZjFfMmafFQqfFAJsiIoOuHhGApPRbBrFfxXsBvWwiIYfFZzNYzLejYJjgTFPxpJjPKLlDKlLkNnoeufFIbPwaJgGCcAdKJmMIiIEzwzZWfIbMHhGgmBLtbBZhJjfPUNnuDdeKMmJcCBvYDdiIHFfLtNYyRAQqJjEerHhigKIiAakHNmMuUqOtTOLlXSicpBbFGgebnNBjiIKJjxXToOdDLguuGgSsMhbBHmvpEcCcxXKkCTVvteIiyQqxdDrljkuwqgYhaKbBwcCBiINBbqQnbZZBkMFYyXfFFfFMmfZzxfXxXaRVvrpEeDTtcdDqjJMmCqHUkKKkKkrRlLygfFGQnNkkCJPpjlAaKkLEeMeEaAMwDdWxQxXDzWwQdLjJlFgUuwkKYibBILlybjGgRkYWHhHOdbYgVGMUumGdDRWIipXxxQqLnDYfGoWqtTAwNiITtMQqMNnCcQNnNTxXWwIiIfPpvxHhIZZDRblzRrZylZpURrKkSjJspZMdDcCPIisNnnNUVvzjkkKSBbtTvaMmWwAVlQrRqtTRUuyYymVsSZKQxXqznVvlElwQBzAftTPprHkcEDdHwsSqGkUuIiAaOoiZQAavyYICJDSnNoBrRDFjzJgGjJCcVAavvVvqhHZPpkTtKzWfanNsvtTLioYyOoBsixjJiIyhHKbbBtTBwWzyxNniIkKBDdsSGyYrbBaANntTRXVpPvQLlqWiScvVnOoNIiKVrsMvgGTuKmMkSsLtZXMUuaGARrDLkCqQxvVXHSsOHTxWgGKrRToOQqLNkWwSHmVKFfCABbWYhSecCcprRHdFQEeLjKkiTbBWjYAPROKiKTGgLltuUTPQqCNCJeEBqQQeEBStMfXdpWwPmIiabiyFfxoVNnvOXxLdDlnOowjJlHxXOoeEzZzZGDWwMmMmFwlLWXjJKhHPAZpPAdDCcabNAangteERrgDdgrRNKwnNWfPoOjJtLjFffCcvvVVkWsSwDQTWnXCUufFcYlIiIisUuhCIMRwJrOZhHuGgKkUzMyTUuthbzZuUByYHJjAaFuUfSPyYgCWwCluUYeAYyfFZzaEqQiIGVVlgGLcCLBpPbKEvVfEMAWLnNwWoeEdRrPrsTwtilGgQedPsuUPpSTYyPbBvNVviSdDwWxXLlYbSWPleyKlaZhhuwJtcsjJWwCisShHIcLVGcKpPfFkbWvFfYBuUyYoOVvEeCdDvVcknNxjJSsAzLiaMmBWSFfvXsFSTAEHrCnSLlTSsxXkzZaYtTbfFqkqsJjVlfFdDLssSxXHKpzdDHZYKkISjYySiTvVKkMMKZzvIjZrRLlIAcmIiWYygcpgmKRvVzSsCWwZmEbuUNdYyiVbvsYyNnJwpPoOkFftcCTtTtAjaFRkUuKgcOwfpNyorRODOoMeELBWPlwWVjJOvVpPxXCnQwNahHnNyKJgGjHKJtTRAJzZKTtkssmMDhFYcIclfXxNnnhvVEFfeyMmpPVvHaIiaDdqQttTKksSODjAwWaJmyYUNEBbzZelxFBbYqSsgZtTnNWfFdDInXxNYvVTIPvcHhHJzZSsAjJbsLAaoYHiJjIiIQUaGirjSkgiOoKsSsfFBbxXpPWPkUtkHhETtTBbqQSaAQquUAaETUWrpPREgOXjcFKFJjyDRMmpSuUiIqQHIrFoIiOtLlPjQMGgyBUdDApDLhHsSldPMtTIiXxtdHhlXxbYyBLoGRsSCcGjJNrTVvdMmaYybONGgdDdGTAPaAwCcZGdDfFjtsSBbbTXpYdwWEFfqGgQXPdDaHhAbBwWvByYDdsQqzFfeEECcQxYOcCJdRrnfFkKFSbBskBbHOZzXxPpbwWlLncpPwWolDAtTRRrrFRFoOlbOuUUuWFaAfwvVWtwWTVKBAFPpwWsWMysSAcbNCWAhWIjJaXtucdDCJTrOoNbBAiwgfwWLbCOovYZzPjRlYyLpPhYWwBpffFEMzZLhSsxXxXHlfOopPFHFfmjyYJuUMpMcThLltTEbrRBtTFxoOVvXeenNsoiIfNnaAFmyjbENcpyNniIYmMPcCCQqbVvEBEerEXgGdORrGjTcoOMjrLxlLnNpsSoMyYGgNzZzQTaApPJLljlLdRsYyLNaCCBbEeJIiZyVviessSSMmxnNXdDygFfaAzqQgZzkuRLiJcHhIGeVlLkRrKfFvbDkZzRdkHvVaApPdpppNiKKkkADdnNTEQRWjdDCcAauuUWSswwWurnGRaAFfrFvPsmMJjGgQkKJjZndjJjuDZYVIivyTtbOVvvHhVNnqvYPoOpOVvGgiVGgvOoOoDhHXzOFSswTZcCIizKLELHxcNAyYWnMmGytAlLaTtzZcoOCHhTYNiVvhConRoOnylmMQqKdDQqpMDgsUUXjgGhHTIiSstIpwVgZIkIiDdZyYGgevTDJjMZzmIidetSlExZEKgIiMmvVXrRgGATHLCapWwPeEzIiMmoOMuYlsdyKPpPxGEggqQsSixXGnsrVvCeRChHcSsNZmwnigGeEIameENMfAEePpVxmUJttTJdDkdTgxqQqQNNnsZzwFXxiHFAahHfHqjWwJmzZjJBbLDVbBDFexdcVGqqQQKCceoBOFCRrcfYoOyaCIaBwIEVIHqvVvwWPkKlLqvJfFFShGvVyfFcCcCYicTJJjRrCiVEuyPJjZuiJlgGpQqPoOohzZHOBctTQqKkZzCCcEyYSxziIZXselknNOQDsSIfjAbByYEUukfsPxXaTtAxBbPpHxXEPpEevVwWQhzdeEexKbRrUuBprMmeENnRPkTtjhbnNPpzZBHZfiHYVvCLqLiIXxhnaRDdWstYkXCNuJHxWHrxbYFbBfyBXRqIvVmMicLAzZUADdTvQqwWuUVVIcLlyacdDQjjbdDWwPZzpMmErRwVQqXgEfPOozoOyhBbeYyXOoxOoOoxaVwJTMmtGuSYyIPtaFVvPyYpfDIpPYyfFGgGvVJDoYYugMKkSYREerrDdXbBlLBPMXxmRrBooOCiFcUnxsSacCkfUtaRRAEejIyOoeiIVvzZHZzBSnNsOhaAlLRSXQRrEeTtqUjpPJUuTnfaWYupgRrPYjhHkvVAVvRrvCcwWVwQWkKYYQNnhJcVAnNAxIJjyWwOoKUHLqbQlLgvhTUEwWANfLlFBbPTfFtEEftSmBuHhxdDgyJjyYHhYkpPSAGgYuUeEyzJZkKzZaAkhAmjwfFuAmmCcWkOoVvzEeZmMMSNnErFVvkKQqlLiTmlrRLZVAAaavsKkDdUUesyecCrEjJPpLYyYFfcTUjJhGyoVECWUQjmMTYyGSsfwIiWeEBkVEBAdNWHxGgXxOBbWwuoOYyQqOohWcCwwvshwBYOcDQbtTqQvGRDdrAjJUTtuaLJjlryYSwWRNnhHzYXvVFZdtGofHhebqQfFmudDqTeEtGgiwWIvOoVelAPrSsuLKkLSsqnhYSFqQvfFwpbCzZXxzfFKxXUukUYyueydyiQIiyNQqQZZCCVvsSXRPsSrwSNPPbIgyzeKZzkHhpEWwTYygyqXxtThEeEIJyYBbZLlzDdVvCogGmXOeEKupvoVvyYpEkKdsBuOOoLlVtTviIoUYGgsgdkKDRrFRSsxXxElWwpFAaPnbBdnPaQkKqbBOosSNJfFcrZTdnNrWFfScCMWODJjjLxXDsyYhAahHrRtoqJIaAiogGZzPpDRJOojaZzAwepJJGJrgqRasOohHgapPHxEeIiqQfzZTaAGgtcCXJrRiElLNnUuCclCummDKkdptppPcCuyFfvVLlVjpPRAauUIsbBSRQWwVvEJAaoOiIjvoLjBbKGRrrMVvkKlLoxXjLprJMmbzZsSkLlKfFDSsJTTDbaAtcqQoOIkBbKYyvVXQikuqVXmaoPpQqOyUuGLfFMZzlqkKfFRwMvnMGvWpPxUSyYspPUuxFtkKTIdEeDdtTrgGMvVUfRrcIUFDvoHrRUFrPFfTFpPUtnllKpQPptaZBTKVvZzYeEMCcxteiIEcCcQqiQiXxWOoucCUwXSFNnuUtTuUpVLlyuzMwITtiQWnddDcncCNCATeMmEtlbpzyYzruzSsfsunSyYsLaApPlVtqVnSBbBbEQdjEeuUnPwWOozFdDqQqmlLUuaAKPTtYyUcTBjnNPHhxEeQiIqRrKkyYLltllzwWkKvVkKqrsSRKqSsBeHhHHVvhUuXgGJNErsuCbENhLujJphHFfMxXGguvKRrVAauyFUuhWwIicCIujjYgGaiSvdwHhWFgGoZzBbOuTUBbQqLKkvgWeCrROpmNzIizZZnOXrEBbBRCVvcFQcjaCIibBNpwfzsSZUgaGuAarRKKDdLlcKEmDnGTXwmMmmsShHheDdpPCIEenNgfnNpovyYBFluUTBrRWdBqDpVLkCcRHhXxHcaACVvmhHGAdDaAavYyIihuiLlbHOTRPpNMGqyNHhGTJGUsjVINnNpZpzjhHtBbyYpbXLljHhwZyjaxgZymWOoOOoSsoMzZPCcYypcCQvVqlGGWwgEpZQqzTdgzZigNnWvMhHzZWKzNnZDdNBnDDNiZLlWyVOkBbKZXwWxalLdDAdDAudJUIQXRRuTFoFfOfruUbXVNbpZswWsBvNfJjPpqRcCaAOOOOAAaaoLKGPpQqsaAmFKDqGqQFZzfXCDdZLqXxmsREeFfDdKoOnXxNWpPLJjFCnNFfjUZzZjFXQAaClpgsAgURpUuPqmMnLcCSYjYoJjEeHtThyYQdDKQqcCXyYSpQJEDdtNfCBXxZCSNnsKfsytuDCcsDdyfgzdyYDSmCaAXVLVlCFdwhpXxqjwYyLFtSxipaXxqHhzaTMmQtxPDJjqYiNnFTzGgDagGhHktJvVEejOFiTjyYSsJhHnqNnVvjJSsgGPQFEiqQGVmiaNKkvqyaABKRHIVlldEvkcLlgGfFHyxsHJjcyYGgpVpRhRSsrviiInCmMYaQGTiUsSratboOtFcCJElYSupPUXwWHEhsGbhAaYyHSZEebNWnNLlwWDxXZShVySDdZriWoOiXkoJjObKISeEeEZwiIYyDWwdlkBbKOuwHhRmQnquUeikXMmxWrROEoPJdDFlLfPqkdDClogrRWKHoOMmzAalHjJZOowWgbAKymVxULlpPjJXMmKyWeUGvVgLBNnetTypRrEZzAaewhNnHtTLbBPmeAfgeEGFUuDyjJJmzVxXjNkKKNNkNhDdDFfNNAanXumMhHgygGQfFqYIiGYyOspOaDdeghUudjJRVvCXxcrnOfeEGyXaewtCgaHhInNJHhNnjJjgCcGHsEeOoFgKkKoOECHLgALHkKRruUzpwmznAzZkwWZDkKNwWSsosqpPiIiIxyJaCcOsSVhHTfFBOoaAemIikKfDdFSlLmrZpvxQwtZUubHHHhcgSoOeOokKKCyyYEgGJLhqQwOJeEcCaXpPSnVvkKRoKrRpPxXpPpNnwIiFwQqwwWWNnncskQqSZzSQqCKVeHcmiHhuzBbaAZdKkDCYXxDZwxjaAJfJibEUlkPsPpqIinEeNZyvjJEeYyOSKRrERFfcrRTFfYFtTfPpyveQqEbUONkAOuUQCRsSrNczbfEXxfFlveLsoOlfnDkqQmzhHgFfGvnMkfFoNyXxmfSKayYARrXlKjiIwLqQNcCGmMpPqFfgbtbBdDgbBXkKkbsWAaFaXxWtTJjkKpkLMAuPeEhKUuqQApPetgJSsVBGgbnDdhEQiSMbHGnNFfBSszZNnIYtTOJnNqQKhElLdgGxrRDKkiwuZzjgRVvrffSfINgouQmIiRFsYFiaAPUkKWLIFffZOOmpORroXyrnRIKizZIBSenUtSsnNuUyeEBhiKkmThxgoOHFeSshfFtOoyYHyttbsNACcNrjJCRrKkcNvJjGgYDdyVPpLzZzpffpPFmZzYGgyDoNnOAoKbjlLLQqlvQqVOoGSYzZtWPaAQxSZMcuUGgdvyYHoosTKTNbBJjeyiIZzAaLnRrvVLlfFNlWXIGnBIRKkTpKxXeKXmYNQhHwJtAaTcCNQqnZzjReElwWjOoNIOocxsKkYyVQqDdUCcaJOomMjXxmMmyYMIwWGWrZzaYyxXjJqXGglOoCvVyYppPJrRjgGzSiGgEeRrBAawWLKkzzeSsbxXqCctaJWwAajqQVuUGgLqphyaRzyDdGrRiIdJWsPhyQqgSyqQqQDWwwWBwhHfhYHYbUuBUuyYyhYDdyrqFYlCctvCcMlJjFXmerUOmAalMpAaNSBfMGmOoMgTtckeEVCitQJTMmvCjVvEeQGJjrftEGOghERwCceRmmzawWUuAKfjGgWGgDEvRBCcbrVIiedwfFPpFfJFkZMMrEWreHGogehHTFRgXxqhHOKkoHhJcVtjpPqTIcvKYyCmFaXxAbsnVvTtjJPpPmwWLMQzZqouRlLuUEcCMjJxfLmVTHhmMLyfQRyHFWoObdYaAsGYHpSwgGjDgYZrAYHPQlmMvATWwQTtBEvVIiZZuDlYyLdlLMmUlQqTtpPbJjIsZPpPcUuLxQpPxWwXARwgGgiAuUutTvYySXCinsSDdJLiIyYrWqnyMxKjJkkENnrkKzTtZbUlPpLilZzLiIIuBGgRxXkPtribNgiqrRrzZRQxwtTNnYPpEDdntktSOOhVDCmzsXlLqorkXcDdCxKROpTysgMmJBkdDOaYydMFPZQcCqlvbBXxVnHcChRCcnanSBTTAaYhOoTnNnNyYHEfhGXXxQqHtMIeWwEHbOoYDdTuQqRrNEsbkPpvVwWirNRYxOoPMosSAacCSsorRnMmNSszgGFillLwupIflLyLpPlSfrMioOIqHhIwWDdiEeUOGlLxXHzZmMhniFDdsdDFFGcCJoOUWyPpVAavYIkdDKdXDTteHkyuUBbYDdEejoVgGbIJjiBvNngGyizZbghRrBmsIqeHDdNwWvjGTEakHpUaHhmlKPwAfwXxsSSpPBCcKxGBbwWiIlLFfTBGQgnKkKklcCWJkLxumMpPiIUksFMYnOKmNVZxXMKdNFLSlEVUuLesCcdDiISRrFrRQqBZCnQqcqoQqaKnouBJjZzVthHSsCrrRerRksoVYznNQwWSpKLueBIjFJjXWzdycCCccXxXxUIMCKkBbhEvkcssLyYlIiKSCNwWWfWSsmMdDPpPbBkOrNTtsGIigUrRurRrRNnxlUuLTtAjLLlloWMNnfcCFmaAiIJjHljeYcVvkEsGCHtThhhBIizTSsWqXVPzRMsnNSEesQqMJjsKkSEbtvpPoAHhsSjYXiIQSOndzKaNiIjjJJZoOMWPZhBblaGlPphBbceQsSqjJkPpgGGfcCShNnyYiAGnNcrRTWEAxYGEeggeEFoNDHGEAoPBbrRSolLOYyojJOoLlUxeEpPnPLlpdHkKfHhFnKuUnnknvVJvZMjoOWoOwxXYdOoasFfSEMpXsSxuUlWcCPYLYylEbZzluEwYkoOXxxuXvWwMDdYXxkarRBGHhzhLZwWodDOhaAkWwwcCGOLcUuKQpjIipOPpeowUuKIXxEDRrdUnNuanXxNAQNqweEWMrWeEUoLWkKzsikBKxIwIRZJjzzsYvHszmbBbBMdaAwnBzsBgSHehwWxSsSnNsRrwOoWsivIjJiVRrUuIyLejfTBTzZARuItgqAyXRhHrRNRrnrxfFchHNDdIVHrPvmKkMSsPqXxEeeEsSQChScCTtXYhCKVeDLLvihrkbYQVnAiIIEeMQMQqmqvgIUuIuUiyYefqpfFQNvVqQhHtGgIfoYyZzTyYKAlLdZtfpPIpPyQdpXTqtAZQAPkKIiIoGgOXsTflWJMmQPvVHWBbDVvfcLvyYlvxcMXxPpsVvNnZGFjJQiDdIqhHYSCcdUTYSFkczbczZFncCpPIiFfTqQejzASsoOaZqPsxkqJjOyJyslNMmQruLlGaSGPLcAaMmsSdUuDqxfJzuaAcCJcflwxXHhkQWwqiIrSMEeQhHLllzVvbBFfcxtTgQdkhHfMSgklooYyAaosSrLlLlZzHhQFnVbSSzPBnvxBRtUgGrrlPFfpTtLxwdDWqiujDUaDdQqzKkovYwzIPpnZzddNbntTkwsfFsrqQRSSmDdVwlLHhGICcGDtPegLXSIisxmMmQqHhxXwMBxXbYzGXAJUuYzWJxSstTBPTJZPzKkgVvGPpPnGgNGBbgnivJSugjEetgntTYQgmRrnrtohBIBbUHBbVgMBbhrKlvpPPdtTQbDCcwbtLfbVjJfFOPQqFGMmoOishOoHScjJdgGDEHZZzzMMWxtgzhLlHkKZNEoVdDfFvOeAadMekCWMXyYdDxmwkkbBUgAGuFWPdDncAaAxXoOJwWCqtTfrbesScCrGhHgRRhaXbBxAHxoMNnPoXxcEwGVltTuUutUfJjDVsIWfFwAyEeJNnJUiWwHfsSlLYUvCcsSkVUmeEPIiUlHiIneBcPpUSRenjEexsShEbHhnNQkQrRdDpaAPZpPaAPpHhLLTmMiIXpTtJboOtCutTpkMQrTtRfZpNJDqesNvQTBbvSsNUjJSFZURZZPBLZHhzauUDNguUGwFfqhHWsSmZUYvVvPfsOoxIqICPBbpTXmyQqktPpxXbzATyYyJjCIiZzWwhqQHcYSsqPkLLNTxXuowWOoOdDftVvYypRfuhOVdfuiVvCPnNppPFumRDifFfXuXYyBkKbwVgmwWNVmSmkKMtTsfFAaWrQLkKmlgYpPdDAAaMxvLlQUKIqaAxIiEeirrRRCEeTBdttjdBIiVvbvVBMmjRPlJOmRuUgkXeExJlOVKkepPqEWwAaCcernNiISsiRrmGgMrJZzvkKYUPTPMVUuMmvMUcLeNnIhHfFjxJjFXjJhAGUuSArQGRjgvVjEejPErwWTttTRWDXxdaArdOEeAmMajQOTHyRrYyYSCcYydfFlJdFfowmQCcqswRDtzRQqCjnNQKkqnNnbUmMuYyBQMmqwWLlApNDNpfPLmMeXeWwErfGSGgybSDePqQOVPURrkoeExmMWfFwMOcDdzZjqVvQiQqeHQkKYGHhtFeExuUXfePqQKkEZYGiSsBUuppnsjJrbBRRrWRprxccsSsSzzqnYbBuUqIYDYEOoZcBPWVfCcsylduUDmMLbBkzZKHNQllURpaLEPpQUQqMBsSEFgGOgTDzGgfeEeEYyxynNZXxZzDdrsjMmzHhZJRIiSsgVBqdajJADdDiIdCPpoNnybOoxXWHmMSfFVWiIHhRrHYyyrRYIiUoXNnhwnDTtabevEeKbFgzZtJquwceDvVFfdvOYIQYyqigHuwWtNQqnyYGgCyeCcEUuleRMmEPpXxYRrSEuuynNYSzfFMtIgGEefReNWwnlLsmKwMMaJjUWZyOoYzJMbBaHIiKzjZaswWKGXUhHbMZzsLlTFeelLpJjgGGgnaRVvreuXxQqtjJnNHVGqBQliIhukYfFiXmKkMaFfavCjHqAgGTtaTtyywqWaxXqQrRKJtTNnjJypTiItGPfFSsUywRrAFNtuxsrHobiIhnNeErROoZqQkKXxmhHMzVvvVESsYaAHnNhHwWhiJarrATuFKAXNPEepuCetTEfSsIcObpbxRXxXLlxXxdDysrRmGUyyOdjRrgiRIirbBIidAEeTfFkCcKKkpispgGkKPUgMKkmjWvAXGgEHnNCcYZpFeGxvWekKoOxXhUKkuHdDQZTtzqBJJqPxXpbQqRrBWwCAYCivtauWBbwHhalCQhwXhjUncxKMmXxyTSwrANHMiImlxXQlcyhIFzJsSiIXxXRrnNPpKkrREvVDZHqWweJQqjhXDdpSFKBbqQfgJjnKkNGFeaJvBbVFXxKkVgGwWyYvidqoGgWwQqiIKLbdDLjIUpPzpmMYUevIcJjjtCIgHsfjKkVQRrtTpwKkWVQhiqQveiWbAicATtoYybOEDaGgAdfEcCbaSPpoOSszMmZsSsACcBeqfnNFQnEeIiNFkgvHhCcCDDdXEkKfdbBvDddlOogGMQrRrRhFfsShIfWSnXGtDKjTjOoaAuMXvaFmneEMLlAcCTtNWMJjnlLNznsSCcrEcVvRSNgIGGegGgXpkYDSLyUHheEmeEoOZpPALlclhtawWUuxGWwWwkaAezXSseLsScCsTETNnttoOvVVEJjmMzKizGFfvWPiJOoxuqQUQquuLlSGdpPmPtTkLQqYNWwrNOcHIoMmOngNwalLnCdDXhlmMEeepPlSsktWfoZTtxdtTIxSsXoyzZVQbBOooOoBNQqnhQqHAghbBJjiIhqQHHGmMVvazdUJRrtTJjDNzJjqSpVxXfgcCNmMdDRKkFfsSUCjsSJcUCcXxJaAwsvVVvSrqGgetKkDdVvFUuMmfaInPPPDhKDrKdBClLZlLztTJjXbWJjLlpPwBDdtTxcWwNGgnElLgiCCcfOoFjIlrUnNKGLlNnMmZGYRrQqYyPpEIYVvzjUuccACxXcnOolBpZzPiImkKPpMboOSrDBbGgtZzqwTtWQqZnmOPAaXlRJmFfoOCtJgoDxGgyYeRbcDdCBJjjJPpbRxXrePpBcvLyYlVCnfFeBJGgYMihHIOSnnNYyNEzZSsnZkKzhHNERrfeHtCuUmPbBmDhHdMhmeLlcCFPbIiyKkTtHrJkKpyVcBlFGbBjJWIabBjuSsUmMJnlLOxXoRXxtjeEcCUTxAiwXxHaeEPpwRrcnBgGCaYUDduhHmcCHhwSfabkvwTtkUuQqKGUugWwfFaAUXxukKoBLfrfYyadEeLOCCcNBcCohKfbBxXNDjoyXiJjXxIqeZSeEbVpxHheDyPxnNSstBiIsftTFSqQTJgXxzWqQpatgDnoBAlLDtRDdRrnjJgOoeEfFrgfFOXxkZzCEecKDDdTwRrgGCcmMWmTtaAayYubYmqJmMpTDwTtmHvTtVhkKTtMWdoOzvKtTkVZzZfsSRihseEPrdYfkfCJxoGnNePpiIwuteUuKksXxtTYyteKBbTudDKpwTtSkIGXxKsJcCPpRxXIwWgAuwWmMqhjfFJqQyOlSBajhCWwfFUuVpityirRwKkZzPpzGQjJBbyfXkKMmLnupPMjJLHhIildoTAvVdPpDAneBbEeENtThYMvVmoONnHNNnFLVvkKCiCyfbBHpPdSSttTTEeZzEUuejarjkhkYAYynWqcCaAPpNcovwWLpwblzZeEwWmdcfFCYnKkPXxFWoCGSsrzZfAJaTZzSsSTpPtGIigsKWjSVBgGVoOvIiFxXfvEeIwWDniIOoBeMzcZrkMGqQnNWwNnPCcCDdGwMZzBbCaZziHhzJtTiVkfXxFmmtzZpPIzjgGJZsJsDdzZmMiyzhPpFftWtTwTZPkhQAeEaqfFSUulLGgvgZzGKkqlLQSQKQaAXxByAMmaAKHhtuUsAaNcRheatsfSxVswbAIdnNAaDdDlZaXvVKhHbyVwBiIGglLCaAgvlSCTjWCcUHHzAqQOoLkYELpwsBFKbBTtkjJfPpysInyYGgVPgGpptpDEqLITnAVvaIiNnNWtSRuUXxpDOlzkKpPcCZwamerRFAtTaVvekrSsRwjGgJWliEeIvMmvXxgeEYyqQyLccGpsdDYmoRjWlNnLrmttTTicHSQqQqsSbBLyxNFfwfFBbtqdKpPUuyYFJlUuTpFoZztTOkKkKjJkXxnGiIGRrBbTGBzzwghHGWSpPsZapnNGgkxGgfyYdHhgkKGghLWAIiaKkNXJjYJjhHIBHhJEpPejsSAzZyYfFMmMDxFuUmThQqxXHsbhkKGgHqbiIjcncptTtkHhIgQqGHQqRriIhkorqQpSsemwWMEaJzZjyJwtaYyAOoIJPplqfDhPOoCElLlLhHsHyYuUvVywZzapPckYyvMhsKjJnlEeJaAjtkwMmXtSshoOovkKTtVKkhHhcKldaAagAeSsbBESsmxLlzQqTlUlLuUtVmSsSaFfgGARveEkCsxXIwxgvVxXbfFkKtTXcCdDYZgGkYXISbfFOIlVSAFvVwaALoOlQVjZfFWwaAJfdwWbOsdjcKkiVqzIKgQWhhHGVvgqQsSjJTteCynNpPYKhRFdDaZbqWLeLqQNUugGZeEkkdDKzvMYrqQcCWsmMSGgwLMefFEmsKFfKkIiUupPSrRsFfJZPpuXxeESpmiIzXxPdFfPpZzBYybDuxcCHhXPkKDdzaAvVLYeECcLBrdzKkRrziEIieAaaAXVPpFitnHhqmNnmZzkUuKnBbAaWapLlPQwOyYgVvFydlNnQqLNRrmMlQKkDDddFfwWZzQqbBhHqXyYBbpPPwbBrggvcCRtTrYyTlLsStGaAyBDnNohwPpSsyKrJBZzGgWGfjmMbBJnNqQDcCEeqZmMdDkKdJjFfqIiXAtTamVvgGmoLlOcKKqYDduhLlQzZczZUtTBbuQCCAacSsdPrRAxmKUuoObzHhzkKWkAHIiyGQWUKWwrRJLRXYlLRrPVJjpfFPUUGltKkHsShAaicCIkJEfPCCcIsgGKkxTtSsobBHhoQeEIinhTtjJGIRByYbaLlrdDnTlGghyVbjHhkDvVuUdEkCcKPpUupFHBbzTliFFfZeijkDajAWpBVSsvVviUkKEyYOdkNnnNEezZXOoZzpxXftGyJuUAaElZiIymMnyVbSHbBhTtupPUyYLlLlagcCUOoSDdzXFflLfhHAaIzZoFfFfhpmMgHMNUmMMmzZMmTVwwWPpWrRvtUuliILgJBTtKkMaArCMttRPprrUqitWSjJjvVvRJseqQnNdPpiILnmMNscXuUStFfTsxCjJWwHGZxRyOiQBzZLlzYywiiIMnfntmXxMGofLgGhLVvlmLlltcbBJcAQDwWdnVBbvLjJZCcJOotqoCcVofFTenNZXqaZZtjJTIXPGDrhoBTFQpTEHuUWwgPpGDqkKqDEvhVMIJfOsSHhQJjqUhiYNnylpAaPKkSsDdLbtbBaQqAtTKkFpPQdDbdDlCWwXHhxVmlLXFfLCccCrRcCaiUugGgGUuWwKkLzZDOoBXlLabBAGcnNJysthHdqKkoCcyWwbwWBMmnkHhKCcomzWksguUJJjlQqhHpHsQqShZUuieEfcCZQqjoAiFaAfuqOdDoKklymXxFDOYQqyZQqiEIxTwdRrDSZiVVvuYtTrRLsSlLDGPSspKkNngcmMmMRUvOQdLmZzHjJhHhMmMNKkMmgGnozZBTHhGgPIirRpYQPvVXwjJNnpYYyyVzkKMLyYVQCLJjeEDdeRPpfFOtXLgGYxuUPpXydPzwWZTtAmMaRqJkrReLXcCZEeoqQlJNsoOFWwfSsXFfxKwZcCzfclLnNUugGmMCFfgrRGuPDaognpzntePpfiQqzBJjWwWNjDixNnBbereEXpzPQqsSxXCcbQBbiVNZYRrSZuRZzrNlIySoGFKktHRrkoAYSsZlGgPanNXxEehHaAmUSsWRrMViItpaAmMCcJjEeEeKtoqDWfFxXGkyeEYSsZuUXnZzNOtfFZOUEfdTCesSySsrqmbZKkXfGizZrRWABuUwlajJAMUWEsSTwWtFCUnbBVvNVXbLlXLlxTLRriIFfhHXgeFgGUIipdBbGgkfFsSRnmnibBIaAKkXxJrLlGiuyRkdpMoOmPiIITkSsKfEjvoWhYkvROoraSsAVpPBbZkTtKmFfGijSeNnIiRfFrISVzYyCPtSRraAsAGybBYjJraArdDRytTYSpPkKsCgWglLJKHrNAQOotbBdDbBHhjJiIqOosSoOrxXeDeEXxybJjByYraAAtTsAGBXqQlpHhWbhHulGgLUYRryHiIhfSshhHzZHEHMmxXIicqGPpFCmMcUuSHhCcsbWtfIinarRKXxQqkSsALluUiLvVYvVQqAvVDQUETttTeurqQdQNaqgEaHPcmLlbALuUvVnFfBOokKtmwIDdpPiWMCtTcXthPpHvVwTTttLiIsFpPfUuLlSfFixRhkaAKHyhHhHedDEqJjYpcIiQdDjJaXkKSktNcCnXxHWRfaDdlubbIVvPpHjJmMhdDPpjJEiILBMYynOowWmMyYjgaqRrbBIiurrvOozZJjWXumMNiUqQWwtTuhiIqQjpQqJjAgGaTAajqdxXFYyfPaWwMTAOdsjFrRfSpUAaAMmaYyJjDaAwdDtLzxUbjJBuXqaAQZLOodaxXnaAxaAGgXwiIWfvVFgGEegybpPKVvXxVzfFWBbrRgGoGNJXxIcmwWMFfeDiIVdNnDTrUuRedDEtHhDPpdawCcAaCXxMmczZzVvtTVuUigLEebBlGBxoLHeLbjcfFDIiyYzUikjAjQZBzZqQZeEivnPLlpTtkOSWwISVmMwaAWdmrfFRPpGppMWwchiXxcrGahDdJjyOyrRvVqcCeZGmbBMolLWwiJjfiIiqPQZUmMuqOoAPtTdDLHiIhhHlHzavSsVdnNDkKOGNbZXKXHqQfFKCckhHrREehxtTtVfFvTkxlNtTOoOIiFREwpaAPBbROolfFRDVvxOoDeEPpddDXMOAaomdXFfxSPpshvWwqNjsSLZuUuSssaASLSaZzJhHDdveEVrpPmMFfgmMIiGRfFCcjlYyeeZQqlDcYyTPptxXAGgAtTaZdWeCmHxXhUEeAHgGDdlLhmPVvVLlvFfEKWiIUuwURRieEeEXxSFfsyZaUFrRUuXCcQqcCRZHxXDYTtybBdwJjifFIjPfkKtTHhkEfFcAbBHmMfFmsSMRCcTkKXxlcodDsFfjFQSstwWTxkUuokKaAYygjoJgIGgiQqmhBSsbRtjOMkMmKbFWJjwtTTsYaAlLlLujJjnNYyOortuUbWrRwGgCloxVVCUCcuJEqvVsSAPOoveEuUcBoOHhfFLlKgbHpmlLHHhhDOGNPpsSsarxUQquXRWNwWnKkOWaAMmMmHiPplLaAIEfIikKHhsSQqFfVvoZPpAyYHhaSPLKklwGLlfJjdMFffIfDuohqQHzuUZHJjoOIitTGwzZWMmDdJYATtuksSvanpJtWnjJlUYyuBbLNoOmtUynNnPTteBXdsSAamMcoOQcCnRKkQaAnmrsVvkdbBDHndiIDKktTIWweExXieXaaMmrRvdKIWwikqQoODVAkmvFAdYeEbjJSzfFKyPiIpPdMmsSDFaCcYyOwmxXxJjPxXAFWUkKuBZhZzAAPMKoOCQqCRrcAjJrRMGOdDoJOoxXCLdIhHiJjtbBrRTKkeUutTaAtToOEpZgGOoUuzNhMmRKyBbIsSDdQyYVvqQCtsfwWFpzLnonpPEgGMmxgyOYiWmcCAajOoYyBbJJkKjDmMpHMYVvyNecPpCiIMnPpITwZzmgGFfrRaAMnNrsSLDvgwfFWGVAaZQqdBbDSpkwTGKqQrRKkzZBbiNHhmAHhHhYACrjTFmkftTFwWfULlurFfTtqbDqwPReSsxXECCSjJslwyYWAwgGWahHxaAIrkGtTRZcmhHMMunsSBxXITqQtpsSxAaCcnlLyKkLpPGSwWpVlLvPmPtTfFrRIFdcCpyfBCCtTngcCcCqgGoOeHhEPZzXxPpFisiEeIKulLYywCctpPTTtWNTVvtjWeEOowCPqQrVvvPFwWraQqAcOjSkKwWsIijNhHnPqiUuIlPplIiBScpPCIiKJjXxuSsZpoxXEecCxXBcCbaAuFwWfRaATtHhgGzxXcCzHkKhNnmeBbrzZYynyjJKcczmuZwWzlLCqTNCcVPxXaVvrRhAaHzZswWeLlDdCkoHhpPeEPwsSFcOoCVifFKdDlZzIPtTkKTgwDjJWuPpIxXiUuzqQKlLGCdDtTHfanKPkJqAgTjZzUKtgGQqQcCqSoOffCAaKkSgzZGmMuUgGzSraNnAFgwgamCygIpPQqfLsvVlLqQvliILqdkHhLYnyoOwXxwlLlLWmMgMSsxuUXQzZqhHMmmqQGlPNnoeJBqkOaqQQFfgGZtTXqQeuUVhHgddWwDDGnaAEkHFfkoOoOyFfeEnZCYdknNrRFbBgGbAaYySNtTRBbFfbBwWdjDBbdNnueaFfkzCcZKoqwWlLHlnYyNZyIiLhHEGgcRrtcCJjcdDoaArKkcuVpVHhjiKxUdaAvVuUQqDNnVZYyqZPpzLaHmJjMbBGzQpaAHhqQPpsTKeFfyYxXoMGgIDpWwEjlNnLJyWwmftTFMKWwMQCcqKiIkzxcCzZXxXpPwWSsXzZEluBbpoIIOxHhPGgptTnNPxozoKgGkwatBHTtSWJdDjcPgjJGxXpVvNcFpSsJjxXdrDJBjJjJLKklVxXuLhYqQzZyuUFceyZzAaNCpXXYyxRlLOxXoEVdDoSVjJTtvtTTtZsSzsSLlHesOoFfRWHIiIrRUKXVvyYmwWYVnTUutNyYqQcFyxLlwbdDuJbBKkhTtcFXkUTtYmMAavLlkKVHhBerYyToOQqyAaaAYgraHhKdDDFtTnNfyYEPRcCbjJlLkKmMBlfFLIDOSwWjJKkAaOsDdSYnUrQfFCaGgpNbFfAiJjUuINYyBbOPpowWulVpPNSsnwgGRrMqQwWwDdpPOoFFOoJjfZiGgFPkmMucYaBWAXIoOaAibPrRcCYTtqImPjJHhiIpBCcbDiIIiPdyYvVHeeErREhvxJhOoNGgnHBbcCbBtTsSQqiuUIKkYyAaTtwiIWVIiefFEvQqDdtTriKrRMmkIRihHsSQzZqYyZzaGvVgGggOeEDOjRWcCOoBbFJuvVpSDdgIiGrRZbxXIVYykBbIwettRZrReEfryvKkRkaSsDdUubjSMuISsUmMujJFPpfMmRrolKkLNnURNKdDAakeeEeAyYzZsSQNTtweXxtgiBIhHbBwOZJQzpPmrRrRECibBalxXWNtTsSmHhBbTViISstxhLtSSsXbByYEuzRJZzZbcCBbBzDdpSsKwFrRfzwAaQBIlJuUjkKDdLuzBbZcbBbwpPWBCfgCcgvVbIiZHPphzBIuOfFqjJQRroUuQRJjHhrqRrNIinMmFfyYWwwRrIiSuUFfdDsWZznNTtTtORVvoOXTLlnkMEbVvLyEeGgbBRtuJjJjUnNgzlLZhHJjOtiVvuUmMnNvXlLdgGebSstTJyYAvVaYaAzPFnNfKaAkpnNzRrZQOWwWbBhtvNeNnPnyYNeyeJDdTtnNIJeEsSjqyYTtoeeEEnNsUXVWwcCUuRkKobkYKkPpyKBLaOoXvthwTrRPxxXXVfEkKyrZcuUwWCnMJjfFIrRnNvVCcMmXbCcRMJjvVxXmOjVvJXxLlKkwihHxCcKGgVWwfFeNdrRDfyYSsiyYrRISGgskKPGgwmMPPQqRLlIieEXdpPrRGviInjaxXCcLATtqlRrbLlLlYyDyDVvFfpBbPdgoZzzZGyYgdhNhUTtItXxTtXxLlSXxAaZzsNnecwbBHkukKUeSGgmMdtGgTgfFqQbnNXOozZxkKDLlBwWjtqSmMSssTtQTdnNhaAcSJjuXxUwWsKdDPEeVvpJIiXeQiwWWwsoOSDdIGkKzZNnbeyYMmEBfaADTtdTtFkKSFfsVJjHhhEriIRPtTpjqQJMtTfCKIJwWjGAaQqgHqQgBoOJjcaALlzdDMmSXfFbHhNnuBRrbqQaAEcjJgfFmMOojOoUBbeEhqxSDdEPpdDVLlvteOoPCZtTjJzXxiNUPTttTeEpyYaArRGgsLtTjfFADdaAgKkXPqQpxGTMmloOsKkPKrXXYyiIkghHpPGBbayXxYFDdSMhyfFYlLvVAQqcjJkKDdYyCgvVFiIOojJXZKywWoOXxXxidvMmVDPpWbJrcCZBGgkQYyLwIiEuUeEebZwRsSRPpotTOrWwrtTrRtkXNnmIiMHGDdDiLltkKHTtwKWDbBaAsSmIiKwYyWTlFCPpUuzVvZcuDdsSYyqkKYgGEeyHMmcChPpPUupIDFLpuGKkvTtViIMiIKkuVXxPpxhHIhVvmManNAXIihHZzAaVvxXnJGQpIiPFfZzqQRrHwDdBiIIokKLlOisSlVEIVvQfFqEeOeEyYgGihpHDmeZhHzEAaCcEhHoTsSCclLwNnWdDNVBbjJlLvKkWGUugRrWSswZzCzZhHNjBbYqCcQyrMmMrWZzwWLluUKkbjJoFfVvSvVMmMfFnNmMJjLtCcuUGaExXUTVvbBjOgGlLoJjwWCcNOonMyeESEaAShGmMWwgcpPCpTaAtkKJFAaVDdzfxDKkQnNqdPUvVuwiIXxhOEetTvnVcEGVvlnJjNUznNZutfFPwSsWdFfATtKvKkTtszdoOPpoiCcrRIYMmmTtvVukvVwJjWSsdDKUCcQDdEecqUubBbjawzdBJjfFgJnuXcCLdDSssRrSoZKkXxXsxSepPEvbBGgVYvVyIkbBzZMKcDcBXkKxQqbaACLmMloylLwCjuThMmDdRrwWbBHIykUugwcUuPpPpxLlfZzNnCwTMmtdDZeEnNnNhKWGgwRrSKCIiaAYyGgNNnNncCnUTOQqoxtFfRVvrcsXiuUIHheEcKkEYyMkPpRRrrejJRtqQUEebBukSspRnaevVcCEwWQqbBADdQqVvNXpRrRrWHAaUVWYPpkraGZzgLLlNnYuUPWwXxpTHXxiIwMmVFfvBbzKkeFfLzZceEGfFglLCPpKwWkvJjjJVvVgGPNfFSsbBNvVfFSWwoOdDvVxXvfFAaXxRsSsSznNZqKkNtlLlLQqZzBhsSVvOoOokKiKQbBlLXxcCNVveEZmMsAFKGWwgkKksJoOuuUMrRGDGvsSVQqEevEkKXxhIyYMmVvReErSeGgpnNGABbDgGVvWgyYGgWwaANLcCYADMmZcgmMUuGbZzvSsFUuOoIifDdPpTtPyYiUiuWwUYxXPpuUPpymnNMneRrKkRUpmMFfPTtGqQxXmeEtTMtTfTtFXxguQFYyfMmpqQaaAGgGguUHhAvVNnPmuUMgGFfdDyYHGKQqkFfZzgLldDCkiIiIvIiYWCcwRmRSssIikKSrQqHQzxHEecCyXxFNnLlUuuGgsSyYwaSIkKCcbXxcCRqfFYyQKBeEzZUSWVviIwosBbTHUZzlLjJBbSsIxXjDIASsvLPpGOUuLpkNnTQUkdDfFkKmPPppuUuVvUCczZMTtdDqkfFqQyBQqbpPCcEviIexXtTtTICYQqyzZSpHjLlJgNDVYfaAFyrgGREevVvrRPpXbBVvKSyYsDdZVvvUuVNnGgGgcCZzkoOwlLWoOAiIlLlLxfFXaXaAzZxbBhZzvVFfHLhHzZaAltTgVrRFffkJjKgUxXuYyBbGFEeUslLBlLbSuEWwVvQqXbQfiFNnYyvVNnYnNyZlLzXXGKkTtiIlLeEaVvpqQPZEezAgBbEenTpihaZnNzQqbBJRloOLrnNBvVGdfVLlzZMIBbEsSeDSsmMdRcqQazLlAakMmKYvDdcCUuVjJHaAhyCcxFfbtTwffFUuFjBoWIiIisZbBTymanNAqQOodDyzoZrmBbMgOnNoNnaRruUhHRfoOFRGgjGgJrrVUuJgsyvVYiGmMgISYysCcSCKxXJaALlvhHVIRriRjJeVvxhHXEqQbBNDAaZKkWRrSsCJjQqBbTtagGziXSlRrAuIiCbBCLXZTZzcipPInedDEohXxXBvgLoCNncuUIiThCJjcwbjJfUuacCAdDGgqGgjhHJQHHTfizWetIFfitTihYyrNpIiPyjfFJCcXIXxXxTvVBblBbGgLxYyuqQUXvbBVnNJvVrlLNlLnRGgIidxPCcpVqQvXcCBbnNDOohHtHvVhyLlIXQXxeEgGgIGixXIgEoiIUuBkKrcCbBQaAqwWRGrRgYyfhcCIoFfOQmaAMBeyNnlYykKGIimcCwlPDdpWwKkKkBbBSksSBKkEjJeVvZVparWrRQqAawvgBOoYklPpLcChHCcGWwHNoOVvDddXoPpOfFHhiIxdDaADPpWWwxRiIVvKsMmoxhyYJwnUJjuuCRQqrSmopPXHibBOaAohHVqFfidDneEkKvVeXGRrgZnNpPKDdLHhYcFmRrBbBwWdHhgGwrZLuUrbBxnNXREUrRueqqQxXosSOhtTQqgOoyYoOtsSTEvoEexXEJUucCnRrYydLtTaAHhYyRbBYBbmMymbmMsSJjmMareWwcQqhHCkXwWVvEuzZcChHoWaAKacFfqQxfFMEeAaKkAeKkEamMNnMRrmmXHhTGxKkvVeEKhHkSSCcsNnojJjzZOcCQYyBsSZcCYOfFXxaojYSsyJCcjJUuOgGtoqeEQNnWHoOQqUMuHYuWFcAXmMEekKxtBbTKDDlLJjFWmMOomwWPpMmaAMIVhQjRbaABsSKlrRLrjYQqAOVEoOePwWpTDEeJVvjZrbBCNfqzZQaRsgGSrJEejnNemMEXcCADdCqQwbqyhZzHRrbBPpAvRfpPQqmMFbBFxXfxXinNIUXIixuwLptxQpMHhYyxoONJuigGxCOAZzuUaAaEKkefFoMmjyCjJDxXdYktpVvPEeTPrjwsSkKVvJUeEqlLjxsSGBbrReEWNnrXPpSsgnNpPRKkrqiIQZxXVvFJjfNtwdDUuUrHZzdfFDmMhxXwpzxXZIPmMOBbwWoWwTtQMmfNsLljoJkKjaAYfdDFqQtTdDPppDULlueCcLzZIiqiJQqLlnNXfFmsoyYwMkXxKkXxIYyWwxXnqQAayYNBbOUdDLZzMUumfLlWTtwWTzZgEWwFfaAeGOoHxMZzyYYymXLTFfDpPAaOcCoqXxWXxwWwQqcvQqVVvGZzZzbftRNKXxxCwWdDchHtiITIisSluUdDFixBbTtXaAwyYdXVhNKkBZpBbPGxKLxXjJYyvVsmvVuBwWbUDdyYLGgZCczbvCcrRvvVPpeOaAipzZnNmMuUPDdqQfmMFSGuUgsoOICBUuzaAPZmMgeEGPnNEedDpIizpgnNGhHLlPsysSLltTkEQsSqpPmMmMPpDvVnNbdDCcfsSvVheEuCzxNbBmMIcoOkqVOoFfvarRrCcuZzURCqQcqqQuQKjJkBbqUgYyMmPzZJWuNnAFfDdaEDOikKTtFflLbTtEeFfjJjMmJsGzbsQqyMmkKjyoOnvuUVznNLPLzZIiiQrPprKkPpKTmMtxEiIzZelTfFsSkKVvLltaAMmrfFAaGJjgGgStqNXrRxOonQOoJZSQqsWwWrRFOtTodHhYaAyHQIotVvvVTaAoLlXxOOixXGdDgZqIyYiWMmwGTtDRLafyYhHIfUuOoPtTTtGEfFwfxDdmMXcCgGFKopPxXUsWzlZzmMZhRrrYzWwZWipPIukKjRrNpPwYySmMsAZzTZdVvbKVvEeRrkxuUXBDmXxMKkeEzQJjLMmRrRrvufFUBpPbVEeqSsQtTDlLWHeCcIIQqisebnNBAfFRhHHzYyPpWwbBeShHmMRSuJjdDleELdgGdLlGgtTDGlLKkhOzZXxVvLltTGkQqufMmfFFxfFYyEeeEhdDpPlGIigNnGguUlLcFnWwtZMTtovkKoHhGBNNnGTtguUaUuhRrFhHfrRkKkOekKEZgWwGLlwOoWzCaHhBbnwSPqQbvVBuJGKkgjXxPLlZzpkrmMmMvVzVvQvsSjJUSDzNSsnsHXIWbTtiAaobBOMMpPPoOpmYlkDiPpRDtSsrRJjPeTOoiivTtIiVYyKkZTtUsSLPplwUutTfFlLWjJBbehHGgDdYvVMmbnmOeEoVvMNnNBuoOoYyJFXxIwIMmWdOkKTdDTSsttmbEeEZzekKjJcekKoOyYGgteEfjJSzTtZtNrCBFvFJjPpUuqGgaAfFEerplLcCiIPXxCcUufzZxzZBbMmhtaAcCTkKHAoOzMmZfFbMzZudDucQqCZfFfRrFPHhlexXELjVUuKkZYpgGPLSswWVtXxTCceECFfGgcvBZKkhHFyYApyiIYsSlmOcFfDdCftHUutTtKBbGmMaAWwgsjJhlLIiHkKDiWvVwJjNBbzkKTtxXkKTtFnJjNcCfFpPYynNQCIabdDQqtLXxomMDdOQXUuxfCcTtFdSsjJCroZzObwWBJjavPlLppVvPIRhvVqQXxrRczZCFfHvfkKcCFrsiINYJPpCjsSXxpPyfjJeEWeEwFpPhLlFpPIVbFcCfBviRrNDdbpPBsilzZDdZvnOGgoNSsllLMmKkQzZLMWwyYKtTkmlqgVvGIiwsSkKvViXmMLSmZzIriInNRwnHhWwdDNizJGgfjfaAQqFJBuhEeBbGpPcCWgGdVbBRGgVTWwBbjJoOMmFfTttJuUYyjkKkKUSsJhkKIlLlLCcyYHhgGAzZCdDckWwKnNAbBavVBaAUuoWwmMWwtTRqQrOfFhYYyyHvVkKVvxBbPpcVvfYTtnIiNStTsUuzZyfiIFjJDdDdmMeEIiuUJjITtYyvVZzVviaAgGFfRrIvVinNTtZzUuCCcZqvVgckKVcCvPtTpCGnxSseEXDYWJjwydpPPKknBbaANxKmMgOHhRrJEwWFfmMelXaAnCnOoNOoUimMTtpPjCcJJjJdSslLDhHLljXxxjJXLlqyYQqoSvVMmrPqCcCXmMxNKkAKkKkRraDdnqQlaAMlLmBbLpPcQpPpRtPpTsBAKkWXxXNnSeBbyYUuxdDDdiIAFFffanHhkKDdNtuUrRlwJjXHhoPtyYSSsEeEeugGxmMlLWwYumXxMrRWwWWWwetTEwwzlLyYcRrwtqQxlLXeJjnNtTaAQqvBLNYynGsSglmgGqQIBdZzGgCcBnwWNDdPrRvSUuBJxXRrkOzZKEekIiQqDDdousSlTOBYbBHHhfFhAaEOokbBKeqQFfPpKkEDdMmYyIPpiqQeRrtlLmvVeEsWwgwWGSdamNnqwWJjtrnNSuUeEWFhHfUpGgPAazzcCtTTtdXxcCDGgQEeqOoKFUuLlfUuxboJjOBEMmeEeciItTkrRKkqpdDLlZHnSsNpIjJgWwGqQgGOBbBNJjSTtsGqaAQZzNvgGVnUmMuuUFWwfgSDoKkMnNmuUdmMdFnJjNXxLJjlfFfRrCceIiPgtTGZdDtEAaeySXKEekxdEeLlpFzZcHheEvVZCczAaqOoSZzsvVQxvcgGCzwWZshmMisSvVSZDyYJjdzsVwWvqIaAiTtnNgpPPpjwbPATtbBkXxYZzRLsuUfFSlvcvVCFfsSBbbBEnIieEViNnmMlLSsxXIvdQqyYwSlLsWEeUuILWwwWWZzYLmBQPprRhMzZmHqsSbrtKkTOookKBDdpPClLplLcuiOcEeWwSsvVuLlIiiBZzNYynNnpPbDBbxXrRUuNnlYNDUudnZtTVvzQNTtHhwWcSbBsCrSsKnqWXxPdDpVLljJvvVjJrtNtkKOjLlPpJDdqdDXxtTkXaRrAwWbBKkgGZzAKkaHWwhuURKkqhHgGCGgmNnngGNJrRSsUDdukKVjwzzZdDgGdDpfnNFPtHhKkyYcvVGgfFCUyYtTyYFfMmJjyYVkKveHhxXtTEYyqQVvQqeEXxewpaAQqeoOkKESmMxPpmmXxzZUvVuMvVXxqQoFfsSJjONnFfpDdFZzLSslFAaffhHPpFfFffFIihiIHgGTtHhiIPoOoEufAaFUdDjNnhHJeLlHhIiOaABoOeaAErPgGSsEVvbyYdDwtTrMyLlYzZbBmTtSsSLlNnsaAHhsGfviIujgGJJjmPSspyXxYCcYygbRNVRrvUMmlLRrgVtTqmzZYyoOqbBQfRCrRNnhAlLazZAaHXBbxsTtfFFfdDxXmFYyfCawuUWFdcgGpEEUuebBiIezZPtbBTmmMMueEUWRrcUuDdDzZKzZkAalLxXxbfdDFvYyUutfBshNnHSbYyFAaogGgGShHsAMDdmfoOWwqQFxiOomJjeEUiIuMAbOoKZAazjHhoOHhJjbBkhDdHOoKRDdrqXaALlrRYyxYJHhfVvEewWAazLlbBZzyMiImCcYsSBPpvqxpPJvVuUCcjiIiIXPJPpjyXxcCVNSsnCLlvVwiIXxnXrRzZLlpPxUuNzZYyuUWwTtDctTCchzZIWfDdquUxXfFsSQFSsbBwtTirRNQqQqwWHxXqbBQRrhrVvRsTtiMNUMmupPriIEedSsDPScOoClLQbCRrWwsWmMwoOOQsSZSOoTgGttDdVzZmyYjJhHPfzZAacCQfFSwWVObBoZqQzvspnSjJrLlRIuUiFtCzoOtCclZQqBbNnOoEeAaLkKlIiPpVvzUTtcaAQqCXJjxhPYykHhKpZCdkKDcWlLQqeEwTVmMUuvfFKkWQqROBDGgsapPAZnNXxZZzzCzZVvLlcCcZijJqvVOsPKYbBfFHTtITtyYCQrYyRuqQUuUAaqoOczZIieLdDlTtuUvVEihzZHfFASsaJIBGgPSvvJjVVoOsjSIiBbAlLiWNnwHhXbcCBmMxaAtrRTgGhcCfFcCZPDdkKbaABpPHIJjVviWRUurFyYYyfDdEUcCiIOouhHzFfZeoNcjgGVvJsSqQCnMzRzZrpPuhHtTZzIZIoMmBbeEzSsMFVvfoOVcUuCOowWvUsSMmuNXyYHhxouUTmMNMmMMTXxOopPhHtnVNnvjCDSsdqGgGgQXlLxXAeEBbheLlgBbbBXxGElLfFfwWKkKzZJRkKeEIiwWrjLlkOoAaKhMPpmTgGgGUuMmtFfkKjUuJLixrRXBbIlCdDcGgHgHhAZzzZgGUKPmFfMpkqQdDukWIiQqsWwSwvFfOIoOtTiWwomMRrGgcbuUkKBCfFRrAaRrVKhHVVqeEqSsILzpQqlLjsSsSfBweEWcCUJXxYyFfnNLlkKjMoOEehFfIqQhtTHhHnNnxkKAaXWwQyQoRnjJNrLKklOxXqvQqUMmxXkKuHgGvVhbBrRHCeEZRrOMmozckaABbuUlLIMKFfoOLlAdDTtaAupSsZzZzPKJjzZHsSQqhkLlKzZuUnJjNgGsSEeXwNiInWBzZdlPpLoODbxPHhvQqENnegGQqCYcCybBcCDQqdVUEeuvViIZzZzOoFayYuUgGGgAnNTtsjJSfGFMmfvVBUubgvNncVkRrGDdgyYNVvZzhQqHgszmMZQhHBbqSrfFXxKMmTToOOottkEesSrRHTuUtZzCJirRtTIhxXyYHTtRGgrSshHrKkFSsNtTovVgGEeOmgAaGhHZzeWwlLAaVBhHbeuUEFfHIDdmMhHuUomMXxWwLSNfFnTcCTWwtjJKkTwWPpZzlLhHZzUsDeEdSKUcCFfuBLZqQzWRrqgGIbTtBSsisSQwQqIiNnGHTtdDhggGFYzqQSsZiHirhUuHILlZzEeUudDiReEWmEJjeMAhGgZzdwWDsmPpyYwWEtTecCyTKkQoOlLqtpPycCmcCtaAzZESseXeTtEaASPpNGgYMfFmwSsSsWjJYyoOynhHWdDyYvVwDdafUuFGgVvxHhgcMmCqQcCrRGHJbDmMDCcRvVrdiHhWwfmpPJnNewkKkCcKaAiIiRRwWjJPdSsieErWwRXREekOoKrFfxXxEebwWBXUuELleSTUdDxXRYyreEuOofFTJwfFXxwWRiIrCcVvttTTEWwxOoXkbgGEbBYygGejJEeSsCjJGgfWDiIdwokPpKLUuYsSqsSbAaPuUpDMmVIivZPoOOoALlaHYyhAaqQqQUCconNOuJYylLjsSpNnNyYnqkRrKQzsrrfyYxXUuFMmfMmbpWwihHmMNnGgKkkKIiItuUSsUuxXYAUuaAnNcGgCKkULlzlLHhSsuTiItPpUYyKSnmcjJCoOqQeEMFfNhSsHChHcAQDdpPqLleoOEgGhkKZJjzZlLBVaAjJceEnNZhHzsSCBbzZJvlLSWwspaACIicpPuUdDyYRrULJjriIUuRrKkROUuDWwoOdqQmvCcPCcTtAqqmMZzxXNjvzZVJFfIQqhHHcCEeNnhiwsSVvqQrRoOvoWwWwOLAaPpHhnNujJBbzZiDzZCcdDsSdnNmMjJrRuUIWwnNUiwBbfFKkVvLllLpPAyoOYtwWIDdiejJaAjJZzgGhHbBfFiIaqSsBbQkuUaADPTtpNndvgGYyVNtTnnkKNlLXxivVGpPAaSsiIxXzBbCeEKkceLpZzPlPJYDdytTnNmMSsCmMcqvVWwQxXjOoKZzaAtTkSsgJjGpbkRrABbaUpPyOoYuPFffEeFFjJfpcRrXxMmMwSsCsSyYVBbszZTtgGVvqQIiSXxvneYtTyaHhAEoOAFVvPpWPpwcBeEPpTtbjJTVvFfvVpVzHfkKvGgZzpuUPpFOsSovddDDVSgGsjjJnNFfJRtbjJgGkKBbBaATrdDIJjiRzygsSSTtsGkKrRVvsGgSYSQqaKkoOAPdVvDnNpoOfFjwWfpPkKUuFJXxMtTNHGoXxHhZvVzeEHhOlLRnWwzZGgMZzqhHCcXvVMglKGgkLoPpaAOGMChjbBLScCslJpPutvVmzZMAaXxHZpJjPfFtTmXuUAaxyCLlXxAaRAarTeFfgGHBnNbxXhFfJjnNlLQqTtEKUuURrybpcCjJPBYoIiOyYFfSsceEZzaACdGgDcIiVdDvtToYyOYyaAPjJBbOTttssSSdNntsSTDeEdIiKWlLfFcCIiRrAabBccRTtrCrhmtTzZxXMaAZzHpkKxXXfVvyYFRrFvkyYaXxUuIcCiWwoqQNnyYRrYEcSIZzBOobiEeTtmZOoOyYoNnztpPjmMKkqRrQJVOodDtTLlvsgGLBbAalnmbKkvViXxPZJjhHzpfxkKXpLltfFrTZxRrXzYytRTAaeExXAaOBboLlpPaAkVFfeEvxgEeCgGUuldMmDxXLhHxbvVKkcCBXKnNkcaAGnNWwqnNvVuUQXAaRJIiFrRXxLwWxXsSJOXxzRLlJjrlGKkgUuwVKkYyvFnNfOTtoodsSSsSsnNPpouULliHhIODdDpRrOoPOiFGGggffFmMWNnwIexXEBYBbBTtblLMlLfFmyEFfjJVvgfFtRrUuyYTmAueEUzZatuUrRvVTtwWTOokoOKkcUCcuCnYyNbBEzZeOoxXIbIixRmMLlrLmMlkKSseqQEIiwWlMmaAWwvVLSbBsFHheEbBKkXWwPpxLMmlGgfvVUulLlLNnwWSrTtRMHhGJZzjTtiaJjUuAlLIRWwWwhHpPdDrgAKkawYfFtTyWBLlbmQLlnNqsLNDdrRIinOVlLgvVGVaAvpPGyYgPTtGgpPikfFKeEIVvjJVvlcmMCpPLluuUxXSsqQSsSMmsBboOUPkKpqQzoOZAaERZzScCMmBPpbdDqQvVHxXhsSgtbAagGBTrvyYDdHhZzcrRCNnXiIxzZyIiYdeEDWlLlBbLOowVzhnNHoOlBbLKQCuUrRcqYyklLBbZzkRCcrZzzRrFIizWwZHjJpPGghoxAaapPGgAqQeEXOaAfKkAaZPpDdkxXaACcfFoObVviIiIBxoOXrFfpPWPpURrTtuCuUchHwENRYyJjXxrnebTUutJjrRjNnCcJTticCIbBBRKLlnNdHhDTtwWUuqyYeMmEsSveZYyrRRrzJSsjjMmJZzKkUoOaAEeuVvqJjgUuWXLKkbhHeEgkKlLGDiLlIhHTmMtdxXDwWQrRgGqkKqQoOZYyNMmnaAntTNVvuUIizxXyYbDdZzoOBaRJjrQqLltxLlSWwsCckKqQNnJLlRMmAaOoBbUuuxDhHxXdXLsSoKsSkTzoOZYGKkgdDxuaAUXyFftTjmpRZzzZNKJjvmWkKNnXRrAatTdQqoODrRARrNIiLlLfFlAaEoOonNOenaAafhHQqFLHhlUqaiIAQVvlHVvhXaAjJxrBYlLybHhbeEAaUuqQbBjJeEIzrRZZpPzeTtJaAKkjbzZBchaAHCdDEpPiXUuOoeEcBbCMmxTmMNyYnJjLeEuIiHhUtTZzlSlLsvVSshHPdDmMuOGgBbocFfwWCUUutLlnlLNJjmTtWwMyYtTPHdFfDsXxSUuWwmMNnhwEerRWpkKAanNgnNBbQCcGaAjOoJFrZuUzBbRYMmyFOocCwZzWMwWjJvVNnpMhHDxXyYoYyZPpzOdKkbBVfFvmFRragyYNnbAaBGAfFfwWzZPkKIiwTomMOtLlWRrxXFflNOidDgGIoaAnDdXLkKfFlijJoOrRGgIdDNnQqpPVvshpPnoZzOnsOoSzZmKxXSBbskxXMIXxioOqQwKwWkKkWSXxqlLaHhGgdDMmFfxXoOEzZuUhHbBvVEeeIiZOozKjSsxiIpPXHhJkcCsIiZzqsSQLIieFGgPpCKCGIivVgqatlLTSsAQNQqngqQZzhHTtvCqQcVGJjSOoQqUDbpPBiIOodQdCPpcDqqPpQXxubBzGgaAkKZIitTTtZwjJYeEDTtMmdyKkKYJjlLyzLbBlgGHhNnMWwAaLlBbIciIHWwhCiPODdzZoGgQqtAaTBFiaAItTKKgGHhkWAawTbBMKkcCoOFfIiRrmGgGgtkKKkoqQOkREerDrRdSIiWlLXxwsknSIAYyaiIinVvlLdlLDNsqQHhfmMwqQWwLUuGglWwGWDdalLIiuTtGgUWfWwFsSdDUuwwWXxGgmfFMzZTaKkKktThHzrRZLlsLlSMuUunIPzZpZzrpPEzZeRiVeOoKkXxqiIzZsKkfFbBSYTOotaAyIKbBYgGsZztToOrRSqQSsrVvNyYsEYVzZXxEeRrtdDYOoefFEqQVvJjJjCcSsJKjJkjBxXjITtNngGmMMmMEeoOmiavyYJjVAmMsSjhHOorsSRWwhHIizZsSUuIizZQqJcCJBbbbxXQqTmMturUuIioORBbyPpYZzdDDdUBCceoFgGUufOyYCfFcEnNzPWwpZMxjnRrNJUuFfeckKCEWwXDfFdDQoUQqvVUuGpPjJZzgowWDQyYqJGgjdcqxXQQqkKEeJjWwrRQqCceEsPpuUoOwjJWjwWJSoVvOZzCqgGQqQYybgGuuUUNnbYyBuUBkKwWrNnRGgvTuMmUtVssDdSYySkkPpKfYyFJjJjbBWwtTXxqXDdxQAiInUuNaWwmfFMVcCvfHhKMmsSklmPHhpMdDJFvBbVfsSrRxXiIKkalkKjJLAVvxvVXjgnNAapPYyHRIYyBbiFIxXkKfhHPpLQqRvVvKkVbTtBrFflESseAfFaVvSsSsFetYyTdLlSssShHJjCcUZzhHIKkicCIiZzbeETtbBeEVWwvBrRQquauUJSEeszHhZEejgGAZzdDKkLlsSYyDLlFfKBbkoyEexXHcCOoEekKhqQfrRKWBbrRLlwkFPXxpWwdDPxBDdqPppPQPLlIipbVvXGgewkKWhHEqQyZKkXxoOnNTtPEeJCzZiCKkcIcuJjFfUVkXxjmMJAaKvdDhHOoHhjEeVvpuUYrRyEebBTVEeGgBboHNnDdQnNCyKkIMDRVvrdAkKaJjJjrbYyaAtTBRQYyqfOkKIhotTOcCHIioKkHhBKbcCTtBPhHpmMkfLlXxXkKyWwYxwLlnesSENWZoOzyYYykKnxXNFeFfIiEbHhRrlLcCcCqQgiINhHnHSsiIhRrnNfFstTSYywtTWfxXFpPjgMmGGgwWlTTttTiItLaAlLOoqQaAQqRBbxiIvVJfFPpjXRBbrEQqjSsVnNMmSUcsSCuDdsgGuUmjJbBMXxiRrIhHpPtoxXFBbQCcqOvasSdDAVxZzYeEyOoXodDPpfcClLGgTtEeGgpPEeZMmKLlTtNeEKkGgHhnNSsnmoOMkPpdhHZzDqQKkguUhXxCcHoOLCclhHKgGkGcCgKkeEYyGrRxXjcCvMmVpCcInNcCQqAamzZXxMZziIUunNwCoOcWFCPpzZNXxnJjOoaGEegoqQOAcGZzgfLdDdDZzYykIiwWRrKqQyYQLlqlgGCcMFfAamNgGnbBCclWzZwLiFDdfjrRJqBbQGEegiIswWSLmMyjJYKkOcCaGjJgxXVvAJBbjhtcuUCTMmcCPAapTtPpvVmFfpPqQrGgWtYWqQmMwyTnNwRqQkKTtQFuUPBbpfqSsMlMeEmdDLdrRDCLlWbBwcVvwWlLmOLlojBbJfFWwmMtxteETXTlfFLaACcCrRtTcHIihuMuUmUjmMDdJXxoXPpyKkEefbBFYiIxOUuAaReEFfGJjgrjJlLTtIillahHSsvUAauJkKjPpoOVZWkyYNblLBjJnIijJKyYwSsgGEeyWJjJCcjwuUYIJjiemMwrRQgmMGqjFTtfrRJGgWhHLxXjvVJzUuZeElbvFfVlTtLBNnEfXxFipPIWkKJXxjFftJjnNOomMTtwWTKwlKkLeExzMmPrRpZXyYGcCsSBSUusbWwMmgWskKSkDdNbBVvnNnWwwSxXpPVXxAaJjvEeCMmcUuXxTlLtMmxXwWrRooOAjnNqQCuUaAGgcJNTVvtJjnQqEepOoPTlLtaOspPJnNLlZlUuLzEeNXxbBBbnhHfFjCctUuFXxKkmjJpZzPyYMHhfThhHiIiIJOojgGPpHTNnLUulVZzvTaAthjJGwbBNbBFmMfUuSwWsGgnaAnNRrSwNnWsdaHhmMADYqQfFJjogCcGEeaAONniTFVOovfXxnNWiIfFYywlLtIhHSkKzZsCwWQqLQqlXxUuBuUbUWwGguymzZMJrRBbjSsDdSsJHBbhwctTaIirRNnAChHoOuKHhkUWZrRzpqQPLlkKPpBOobJVvjDdqQhHpPFfhpPHBbSsUuyYebBHhuUPpEhVvJjHBboOVatTARrckmMKMmCIiabsILliSoOBfoOFGgAflLFhHRrvVYyyYMmuUyYqQUPpuMCcucTttTCSsJuUFDdfrRNPpnLlCaAVvcXxUmMutTEeRrSsTtdDiIiIRPpoOEetTXpcCBbPHlkKLluUUuLwRBbrWSsSOohHiKkIgGfAaFuUDPpdSsfPpFKkkhHCcHhTtfFbBpBbPKoyYOduUDKkYymMCcUKknNevVObBeEoeRLbBlrEebBNnDcCAabBIwWiZGgLKkcClLhyYHUufFlZhHfFzXUulLxCcaAkKweEUuWDdCcCccsSyYCxXOoQquOLloLlxXsiFfISxXUckKtTCzhHHhxXmgGcPpCMdheEKkHqQhHhHyYbrRYyjJXWwoSsOxtTsZzSirRILveHhEfFVvOoOXDdxsSqDdkKQosSRLltTKkrVTnNAawWrRhHtZzwQqewWESsWooOoOrRxTYytHhXNWwwWnQqOxXOoiWwINRzZreEnelaALELlCclLeEKkOzZmMooOSszZBbSVvTtsLllSsiNnWwIqQZzLlhHmMyYXCcxWwBbJGkKgzCcZQKCckZzvVqaAxXpPjNnjJTtOoZIiAazdgJjGrRYyDzwWZAaZzMmGgoAazZQfFQqqtTlsmMSJPpjLpPloOceTGgjJtECbBLJjOKEekwWQqOEewWoqGgGgNnnTAatCcNZzgGQSsBFxXZzoOBEedDbBbvGtTgVTtfKkRrWwGyYgaAFiIfT diff --git a/2018/05/src/main.rs b/2018/05/src/main.rs index e7a11a9..d840ce9 100644 --- a/2018/05/src/main.rs +++ b/2018/05/src/main.rs @@ -1,3 +1,88 @@ -fn main() { - println!("Hello, world!"); +use std::collections::HashSet; +use std::io::{self, BufRead}; + +fn react(polymer: I) -> String +where + I: Iterator, +{ + let mut input = polymer.collect::>(); + + loop { + let remove = input + .windows(2) + .enumerate() + .filter(|(_, chars)| { + assert!(chars.len() == 2); + + let left = chars[0]; + let right = if chars[1].is_uppercase() { + chars[1].to_ascii_lowercase() + } else { + chars[1].to_ascii_uppercase() + }; + + left == right + }) + .map(|(i, _)| i) + .scan(None, |state, i| { + if let Some(n) = state { + let prev = *n + 1; + + *n = i; + + if prev != i { + Some(i) + } else { + None + } + } else { + *state = Some(i); + + Some(i) + } + }) + .collect::>(); + + if remove.is_empty() { + break; + } + + input = input + .into_iter() + .enumerate() + .filter(|(i, _)| !remove.contains(i) && !remove.contains(&(i - 1))) + .map(|(_, c)| c) + .collect::>(); + } + + input.into_iter().collect::() +} + +fn main() { + let input = io::stdin() + .lock() + .lines() + .filter_map(Result::ok) + .collect::(); + + println!("part.one={}", react(input.chars()).len()); + + let units = input + .chars() + .map(|c| c.to_ascii_lowercase()) + .collect::>(); + + let min = units + .into_iter() + .map(|u| { + let stream = input + .chars() + .filter(|c| *c != u && *c != u.to_ascii_uppercase()); + + react(stream).len() + }) + .min() + .expect("failed to find shortest polymer"); + + println!("part.two={}", min); }