From 87ab487d59fa85dbe2afa55cc841b02805ae42ca Mon Sep 17 00:00:00 2001 From: Louis Burda Date: Fri, 7 Apr 2023 17:18:18 -0400 Subject: Reorder days into src --- src/05/input | 1 + src/05/part1 | 40 ++++++++++++++++++++++++++++++ src/05/part2 | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/05/solve.py | 30 +++++++++++++++++++++++ 4 files changed, 146 insertions(+) create mode 100644 src/05/input create mode 100644 src/05/part1 create mode 100644 src/05/part2 create mode 100644 src/05/solve.py (limited to 'src/05') diff --git a/src/05/input b/src/05/input new file mode 100644 index 0000000..1b4b16c --- /dev/null +++ b/src/05/input @@ -0,0 +1 @@ +HKkOohaAXxHrjUbByYuFfJMmOoZdDWVGgvwzZzUuUrRueERkIiKhnNpPdDXTtxMmwLlWGBbgTtoOmHOofSsFhrwWRWwytTwgGrRWYdcCUYyuqQHhpPiILPaApeElEeaAjJVvoiICIicdDOmnNMNZznoOgJmMFfjcCCcxXAaWiIwyYWwaAakBbLlJRrBbbBQqXrRNnHhcvVCxZzjKnrRNsSgGvVMmrqQWaAXxwRaAbHhBLlfkKCmMchiIHwRZJUujVvMmzrPsSpWZyYAaznHhNlLTtfSssSFuYjJyUWVvLlwqWZzqdDvVQNDdnzZGzZFqQfXxoOuUCcgRrSsHhbFfJPpjBdDyllLLdOoBXxtTqQRdDrrRbAalLyYvVqQYoOyDrRfFfFKZzkXxxAyAGgRNnrrRbJjzZWwBPpzZnNaYvVUsJjSRgHeEEehwWGrvVuZzfSsJjFaoOXesSDdHhwWEHwWMKkmkKeEABZzbahtTHhMpPxxXbTttTBhHXVvlLNngGyYvVpXxERrewiIVYyvWzTtEesuaAXxUUuuUSPpKqQwWkNnrBbRrRXVZzvjJAaIluULJjixoPpVvDdrQqRzfpPHRrhqQISsirwWNYynaARrzxXpPxXuURUulLrSswkKWLDdRFfrrRssShtTHNnkKYYylLlGieElLIgLqQIiySQsSqmMyYwWyIioOYbBlZMdDmnNzBQqbUfFuCcGYEeIiEeuUOqQoypPnNMmbBgHLlKdDkFqQfEAaeQBbqYbBnNPpyAHkvVfFgKkGIiKhuUFfaMmsLltTLOqQochfFgBbGHiICiIYEeUDdSssSKZzkaAuDdWeEweErRySZlLpoOPzpPjSiIsUuJjJPpkKDdAasxtTXCtTclDddlLDeEgkjJKrhHUBxXbVvDdhHNSsMhHmNnqNnsPpSoOQRrBFBbvKkBbkSsKQeEqqQQyYyYYrRyZPpzDdCNsSnwWGgcqxXCtNnTcOJjqCchHQegGEeEJjSsjdCcOoWwyVvYlLDnsSKnNkNKkQqAaJAaqQYTtDdSsipPItTyRKkrBdDblGWwJjganNABTtbLCcNNndnNDkKdzZDWwzaAZEeUdDzBbZrPpRHKkVDXxdvhoOWhHnNjZzJwkJjyYJjKLpPlvVMmRyCcnNYRrAfFtTbiINOonuUBEenNaCctpPTCTmMaAttrRTrVvCcpPTtRRJjrmMcnNnNnNpPrvrRgGcClUuLjJQqfkKxXWmXxMrkKIDdiRwFrbBRzYyZVfNnFKWwvVOokdDoUfLleEJjFuUUuNnJjbBEPcCrRkKmMpeEUubBeGgQRrqrhNnxuZzjJUPpcCLzZlXHeEHzfFaAZiNxXnqQEeIiFfIUulLGgTtHhwWhsCiIcgGWbYWwTtyBAfFlLfgZzGFXxGgOolLAaabBbShoODdHAatbUuDdvVTlVvLVvkPeEpKORSsrntTNCJjchKkEbBefFDMmdHhmMHFGgpPnNRrnNDOVkKHhXNnxvPrRMjJmpdDCcAalLEeybBYrQngVvjIiJGcKKEnNtTiTTttIyYejkgkKGKJkhHjvNaAaAnVJkKRriIjJhHvSsVQlLqTMUuitTImyYthIzFfZiyPpYHlgGLWwKCckKkzZbBNniHhwWRrfjJFrRyYtTbBZjQqdDGgTtWwJBbQqPpLbBlNhHnQqjXxJdDjKkpuUPlLAvREeryUurRxXYbGFfPpGgUuoqQNnOYXxHhsSTYhHhHytJbEJjehHBjgGGgsSyykKYYHNnhzZuUzzZRNnfFTtrjJeEZuUcCnvVNoOTtebBMmEcCPbaATzwWZtSOoCcjEeDXxdMcOoyYtTEeXCHhcjJZzUnNeEAadWwIiwWDsnNSupPxKkBbFmMcCiIrQqRygGOTtfOoFTtGgXxEeiILSsloVvJEkKXoOeExejrOoLiIMmUulTGKkOoaAhHCUuKkHhcoGgOTtCciIYyYygVvkKkKDvjJdlnNSceECsLcCDNwWVvnLxdDQqXxUuedDEkKXfFWwLVvlsSdDkKdDvwWMyYJjmPpjJVzZcCIigiIGgoOXpPxdDkKcClLVvpPIPpihHKkIbNnBPqjJQpGglGgnNLZXxziMlkKLsNnSxKwCcWkXpcmcCMCtTxXPoQqiIaiIzZnNAOMmckKCryYRcmMWkKwCzZmPpoOtTqNnxXLIilzpPZbrRJjIiuUBQMXxPPuUpZzpmpPOXxoMoOBHhbgPpGmeECcDdgGYGgiIJjyOomcBbsEeEexWnNlLOowXNntTjJAaqwWdvVtLlOopPeERrmMCcTeFfZbPRrpxyYhHcCWhHwaAhhHHthHTXjJcCsSeSsunNUdnlfqdBbDrRUuQFQqRLIBbiRroOccCkKSsCxXlQkxXLlKqiIsSWwmMrRrRrfiGgIGsSXAaLlsSxgfFpPlDdLxXkKJjFJClLjJcjLKZzkkKMmkYMmyIHhiJjmXszbBenqQJjIiWwNEvVKZzkMmaqQlLRronOoTtNfUuFhDdHbBUFfjJuMhHmvyCcYLoOyYlVxXGifFeEPpIbiIDdSqQsCckKRrAaqSPpsQBjJbEedDgGBYYynOBboNEEeeaqQeEAxXFfaTtFfwWrRAvPNnbRrBDLVvlPpHPpKkhxXpZzpPPjJdGkpPkKKgGgYyMnNerRbnZzqQNwWmMwOoObwxjJXkKxFfavAUuaVQqiIVvhHZzAQouLlKkDTtdJARramMjUxXOqdDjJorJjlLRhkKHOCcsSiIhHfMjJKkmFWxXwzZXtTcCLlWkKBaALlKkotrwWxXAaREeeEgGJpPjCcLlzZAasSiphCECcecPpYypYyJvVjuUfFrGglLMmdDRBNnbmiIpyYPyvcsSCVAaveEFRrbBfnNgDdLIoOUKkuUumMiHhlvVXeEsStTyYxGcdDtBbTUrwUVksvVSKxXvIiuqQoOQqJjWRMaAGOogmrsSRqQFfcCgXxAaPpogYyGJjrRQHhulLUqOGvVPpvVRrFWwfrpfFeIiWwSTRrtsNzeErELleRHhnvUusSVjaAcCJNAaVJzZjvsSoRrORrZoOqSsSoQqfFOmsSbByYRwWMmrMYcCyPpsufFMMjJmldlLDpPPWfUuPPpxXpQvVMmqqSnNsQMmFRrwWwWwzjuUJoAaZzOZpPpPrRMmdfXxFDXJjxfFEeOyJjqQhJQhHQGgcIiCqUCcujJbBqCmPpMdZhHiIeExZzDOodlLHjJfUOoNnLIiIVIiviDduUlAayYWTFftPpwLlCQqPpcLRkSvVsKrdDLlhHgiIDpXxOoPCYyDrRdSscdkmPpMKlgnNnVvNOzZVvJgGTtHhnNjoMmzZdkKDIkKiBvlLVoObGcCRLrgGTiHhtTNnVvYySkKLlsFfItBbYrRyYqQHhOWuUkiUuSRrsIWwcwWHhCGNngCUuSciIJjRrRQqrLlCqbGgbQqWwJjBZztThHRxXrWPeEmMpRBbbGgBIAaiWgqQHhRrIiGjTBbZzZgGdDVvMcqQiICWGgwLlmzgdUTtEeuHhDaAGfoOFFfUHhuSiIsXIZjPpzZJSsoGgQfFqOhHhMmLlUucCHpdDPmMvVmMlLoDhUuHeuUEuUdMmgtIiVrRvjJSsdBYybPtAHpPhMPpmtfFaAHuVvUAagGGIQqilzZLmHhMgCtTmMyYvEXxWwrFeEfeJjEeEdDRsgGSKkgGOoMXxaAXHhxMmMQrRKkMVvaAyYmSsuwWUUuBozZObZmMxXzBbKkqQUuqmOZzdcCDMmBbzZdDpPQqvVTtmcCpIinMJssSSjeERUuCcNnVapPAvqMmglLGSsxNnQFLlzBlQqjJrRfFLekKEdDVvuUNnTtcwiIbBKkmMWgGxFfXkKVvCFfMUumcCTtEeNnSsLlMmWwPpIiPpoZzODmMcXxClLdeEcCLMmQqEmfFwWpPejJlVvLEeUucHhRrCIiJjWwEeUChHcuLDdlxXHhBzLlNniIZLfFldpPDAyYNKknpPNdDUuyzZECcQhHbBqHMEemhFsSfeYuUfMqQmtOFfgGoHhTnNMmFnINniwWaAhXmMuOofeEgyEeoOuUcCYKkOoCtTGgcWkKWwwlQEeXxwoOWdAaPpoAaOwaANoOnNKkiIyYnVvWWmMIZrOowwWWRjJnCDdcNftGgHhFfPsSayYAjJpaAFfHZzrRhzZPijUOouJxXXxXIzZJnNSscCDdNnQqrRYPMSrNWwnNneVuZzUYzzZZQOoFfqQqcCoOnNyLRrlPTtkKXxgFfOOrkKsSRooDRcYypPiDewHoOhyrRiInNUuoOSVioOIRrbBHqQhoOUPyYHhFfpuvpJxXjUTQWwqpPljkKkKJwDdDKkDdlSsoOyYLrCcOoVAagGLgGnWGgwNlzZvCdDcEeqQqQzZWwOoKbBzuUlLZZzTtDkKdxXbBcCCcQqiuUUucCIKkeEZWATtZzawmVvBtTLhgGUuyzZYgGHDdlQzZqHhYzZtEOoVdDvKdDdDkeTQqysSpPOVPRrNKkESsikKuUCGgZmuIiKsSkuiBbISsyYvVXxEqQNnEwWOJjoRresvVlvVGgNYoOKkykKQqZznqQLmzZpPMkEeOpPUAaUuueEANnbQTtqtjJTBndDNOFfaASsrbBRbBPpoFsSfEetQqTUueEDAnNaTtIiiISLGglhHZzjJZgdDDdGzWwZwDdWtTtoOBbTagDdOoKCcuUkGAoOgGdDsSooWzXxZAoOaWUuwzgprRPSmMdDJjZbBzNfIiFpPfWgGwzZcbbBqQBzJjTtZrSfnAaNtTtTJNnlLzRKkjJVsSOoWwRrvhBbHXOorRxiIsRrmMSwWJxyYAaDxXuFfpPUkTtBbKhjBueEUbcChoOHCJjcSkGgKsJoOosSBbNOonBbAHhaOnNLrRlYnNJjyDdsdGgDoORsSZhHbfFBGgRZzvVrcCMmzokKOwIQqjRrJgGEebYxXSsyBiHiIqCcQJPwHKuUQqkPpPeEphDuNnrRMmUdQqvVcCWwWzZOoOYylLopjJTiItQgIatTtDdTKkAYyiNngUuGgLlLlMWlqLlcsSKmRGkAaQqKuQYyqpPuUXxNnQqHhvVlLuUOoFfMfRYJjAaHhyJjDVvNnxQqXGgdxIXxiLlWpCcvVKHjJhyYJjbqQNbBOXxoIinJjyYKkamMJjAIWwiGsSgUuKgyYGkBpPbBrRUVtTCcvzZuUDdzQqlpPXxySsIDdfFdiIaAOoWwdDDwWIiYybBmBlEeVzZvsSuUgGwWMMmAyYAdDFfatMmTKNnkamLPHhpdVvCcDaAaAlLnNuRrUNxXKkTtPpsDNneBmMPpSsblxfDIiscCSdWwXxcWwCFXaALEHhaRkAaRrKyYDHNqQnhVvUFfuTtVvgeEGTLCKkcluUrReEQmMqnNBMCxoDdOXiIUurvVReZzOoGgNnkKEcsDdlYyLkKSlLWjJwPQqpoadDAzZOjtTJdirRjJIDaAvVjuUJTtfctTRrCFOozAauUyYZPpzZeExXxwzZWDddDXVtTvfZziUuIFbGwBoOXxbWzZUlLSfRrFsuNcOoGnNgCcYNZfFZYyzoOznYyMTpPzYyOoKHhIiaAkZTTcCHhFlLVzZvfCJHvVvVSshWwjcPnCcNfFnNiIpoDdOtlLjOobBAknNKIZziVcUuxuUXEeSsUuAlvOoVDdTwhmMaAHINnSLlswWsSYrTtRyKkxXDdijJADnZzNdaWeExEeUuXoOguUrsSqQxUuXAaNndDabBSsAFfoOUuMFfIieEGgmRaIpPWwusSUiqvVpPrRGbiIxJjZzNnXBFSFfscCfMGDdnNgoOjToXxOMmfpbyYzPEqMIiDmmuUMttTCIcCihkoOKHdDcBVvjJYyzZeEYSaAeEsWwjJdDlLZTvzZVtnNTfhHJjFOoPpdhAaGgHtqQTHhiIsYnOoqRrGgXxXmBbEYyeUlLuBPpbnNGgMfOoFOodoHhbiWwIBSsUuOSsfGgFFfFlLfVvZSszDWwqWTtwljJFDhTtfFBboAaAlMmQqLkiqQunXxNUOobBIivQqQzZqOoIiyAaulLHjJhUJjlLlWHUucChwtTsgGSqXlLxHhQqQaASsgndDRlNnLrNGLZfFiIDQCpPciIcvVCXxVauUxXAvwWNEeoOcNZUpPnshHSNueVRbkKBrTtvcFZzXxBbSjXxJBShywWYruUReENncCfbBLTUOoOoLlkeCcEKucgKsSNVvnooOqBbWCcwWwDfFaFfAuUFfvwWVvVsSWJYytTjZzTtwxXxXqQqQtTdMnVJjbBGgItTiwAaCgaVvABbBGKkgbGGIJjiSswWBUuIiHianaAoYpPyjlLJZXxzdTtDYHMmUuhSdDsnNyueEsScfFeECUVvPuUwzZdtTDzdDygOoGhLlfIiFUUXxumMzTtsSZvVYyuJuUUyYvQqwqQWdKkDVbBoEeBpiIFfPoOFsSfLlVvaATxzZXBbtqmtkKTMOocClLkKdHTtWwqQhKuUFVvXxfTMmHhskAakKKSSstiZGgzoOYyIkDHKWmeEZzoOMgpPYDcCHaAjJOpJjsSdWHhZzTCiIRrKJjkAaefoWXxMHcChyYmOMmowEexXZzOtxLlyEeAaVvLFfYNJrRjnqQyoVvOIiyfFBqQdDphHUdDuQqxduEedVvDwWIiNnUUXmSsUuMTtkKxiIranNAgGESseRtDdUumMfFtOoTylMmLYMrRmRVvMmrEeQdDEdDeiIlLuUqJVpPRHhrvOqHhINnivVqvVQQKkSsdDohHcHxGgxXmMiIXhwowWOWWWLlwLRlEetTBimMIQXxqIibeRrEQiZTtzVvSNnjJmbvVBVvpnNPrsSaAiIJJiIcCrRkXYtKkWHhuUVvvVTpuUbuUyPauPzZpownNhyJjbdDBiIYAbBIoZzOaRvOoVYNmMFfJxXlLjCCcsGgbnyYRrNIdDGgihaEZygJpPjMmOPCcskKCcWwvcCVSpdcrRfwJjlLrRveEVHAaXxRrDkOoKlLCcshHIiByYdoODtBbzZTmkIJjiKPpMSBbPpIiSVdDuhdDDdHQtTqQIiJhHyhHrVvDdYeEepPEUZzuWwCcUWwLouUjJXCcxnTuAOoadhHztOolLXxIHhZzdDiWwQSsoymMYgAcgGCcaAmxAaKkXxFsSfWwGgLFFAXxaknNRrsSSsKkKFfeEpPoFlLfBbGgZzzZbBZzPHpPPpDdhpKkYySRrswOXxsNoOnMmZmMzkEeKRZUAgGajJeEavVAdDGRdHhmMUuUufmCcMzZFfDctxztTZuUXgGzJjZYlKkLOXGDdMHJjHpPHwmMeESODdossbBSCcWhcsXpPaFfMoOmCmLfqQFlZsSxZzlzZdDLxSspcCPmMLlmlLMyYRrCckKxrRXeGnzYyZjGgJvVHhUjJZFfWwzVvVAYyRrdJhttTfFTqQDvVdQPEepkKqUJjucCHKDrkKXxMgmMGmRAEOEPplLoSsHhoOUdyYDEeNnQmMqcCJjuDdXxrEeHGoOVNfFTtsSnNPAPpMyYmFfavVAapHWIiAEeeHpYybNeaAVvPpEQqSskArRXxEeYyoORDZzhizFfZtTIYyHQqeEtTcQqLlOoRrYiZpPBbzOeZzfFWwRrKkjNnJZgGrRYyzIxXrRKiIPpCckTtvZZzvVxXfRrRfZzFNDdtTIiVJhHwWwhHDeiIEKhBQqwWaAajNnbBmMHhYyUusSAaRrrbBIuURrbBFuUizzpYyXyDroOlLRNnYycoLlVvQqhHOkpPUufSsFUZzaAxoyYOYuiImMXxUBbylgGAPpRrzXhHvGgiMwxXgEeKkGpPuSsCcvuCcHhvVXxUaOoAalLgGXaAijJZzhHYyIyYiYYbBTtGgyVvrcCRyDdPpVvSshHMOomRsCPpPpSVBbBbXxvEeJjsckYySsCuUclMmLOoKdDqXoOyXxYJjQqPpxXlLpPwdIkKvVDdeEMmtTiDbPFfpbYyrRrRkKcCDVvAazHhIiyIAaifiIzYyZvVNYynaAvVyVvgGjJpGgjVFfRKmnHhRrNcCADwWdbBaOGPpgSRXxFfgGrsRHhKknNryYPUNnGtgrBdDbPpiIzZAmMdNnDWHhYvVGgyiILMmRkKlSsCYycYBnUulPqQPpCfFcOoSdDelRrLSgGKfxjYyJBbuMmVvsZlLsSXxwLxIDpPdiXIfFizyYZxVWwvtTjJPkKmMpXQqQqUkKuwLLllWqQGRmMrMmkQqiIPpXxHWXxwhKhGgzZHJQqdDjfFhTaNnAgJjdDWwlLNscCSnfFIINnPVoOyYvpxgGYykKlzdaAAsSacadqEdDRmMcEeCreEeyYbtQfZzsgGeXuUxEAaLljEecCSsCcyYxXLBblNqQcCnkKRrxyIigGsSYKOoxYyXkrRdYyDQlLFrWLrUVtcWwChyCxlLfFGlLzOoEeZgBbXcRrueEUMPbBhJjYyXxuUZtEedhMMmAaSCcssSmYaATIilLMLlvVmOotyHeEPpFfiIXxqQdlbBLDhHGTtEwWMmegFVTqQtBDdbyxtpPTbwWAagiIGjUYfFHYyhTtPpbByulKQqkKnbBAafFNAxXUlLuJSsDdoOuZzBmMbfFBbdkxyYiyYIzrenNSTtsVIiFftpPvoOvVpLlpeBtTkKkKbrjJQmIKkUhHcoOwuUngGgGnNdRrRrDPqjJSsQIQqimiIuRrdgxXgUxUvVuXYRiIwWyYBIiCczZrRRrAPHhpBbGgUIisHUuhQYyUFfuqyGggGfNnEwoOZPiIYyYHhypuljJrRQNnRrlLLdqKksSQbWwBSTlLfHhFDINnzLUuYylpCYhHmTJQvkKNnVAVNRTtrsSncoOCrrRBBbAQqanNbRKQqkvoOiIYyLPplyYYsSMevBFTtfbIGgjIiJOrRdDgkKOZzoWwMlLmGiuYyMoOeEAbBZvMvKkVjJmJZzjmMnwxXWpgWnNwGrHhIiwnvVixXanjJVsSFfYyzcIgRrGfaLlASsoOzKFfoOwWkpPuUZFqQiJjMmKDNndyDdYlLSsUPJjpcCuJzoOZQqSuUsjlJjZzWCcwoPZjJzBkMmYyaAcUuCqQdlLTYpyYPytDcmbUfXahjgGJHAxGgFPpQaUijJjJIKkFfuJjHjGgaAJJpPjwWhrRCcLlsrRTfMmYySHhtDdTNxXaTtptTlLfIilbBMmAkKesvVEeIioOSZDuUdtQqTgWlLlqqAMmaQURmlQqupKyYRrkPUvdakgGKADMKrRkxqUuQkKXmIiQqVkZzyHhYMmLlXxBbfFOUuMYsVvSYylLeLWBjJbLOoukKAOzZowWMmaFfUIilVUzZueEIiPoOIPpiptpPrRZzuUTJmUCcFoOwrRWaAfQqQYyqhnNhHBbHXlLxYyzZTpPpTtaAPpDMmiIBWCcuZzXJbBWwjybBYcejdZWwyYhVvbBNnJjyYftLmMyOnNPpopYkrRcdyYDKfFkxuUPVvqQpqNnQhnNpPHxsSXXCgGNntrRgOoEedDyYyWMmFEeqGZlLgGRrzAahJoVvUAaSsbBukphHPHhrRznNDdAadPpDHhzZdbBoOpPbPnNpwWBNXxnDaRrpPLlSstDdIUuiTVvtfhKkHFQHhRYyoOrnNSLltTgGkLnkKNOgDdZvVzGbZQqzBoOEPmMppxXPoDEemMsHhSEeMcHhCqWwQsMVGluUuhHgGUHhZzkcCdcrRZzxXCuUUrRzoEmMDHAajJSsyYOMmmMuUOKHNnhnvWbBwpPOobPefFeVLsSlvQGgqGiIiOlLoHwWhhrRHAaAYjJTtPwWYYyyFEekKfYcfXfFsDdnydDYNyuhxaAjvpPVCdDwOoWPTMfFmtOuJjUwWyPpSZzaWQqIilqQUutTSmMPpXxztIiTzNnJpPjIwWwWfHYkjJFfKBbymCcWIiHhjJwVmMJLljvjJOTSszZivdDVEeHfFLbpPxGgOoXBhzMbQqWwzZeFfvVrNnxXckKCemMEuVvvxbUWwuzZcCpPHRrHhpCrRStTtTDxXYdsSDkKIuUyYNnCczZKPpOokcKETtevvVVaADxfFXTxwWBHhHWwhcCQqbXPpiIRrTtkDzZdKQqhttTTHPJjbpcvVCcsbBSIiToOtVvHeoOEPphiPpoeEOAaQeqsMmaAbFbBmMLdDbBjJiItTGZJjuUzgwkRrkJFzZUufbPpYMTtmAaAmSsUuPmUuMUpoqRrQZzJjYyObBFxYyKkjJwWEeZHhzRrSHiWaaAYyAwdDBBoFfWweEvVSDwWAIiadsOIiFyYYykKrRkKQTtOtdwWDTGgrapqQHfFELlIyoWHhUuYyLWwUVviBrMmClRGguUWmxbBMHhmXmPpMPAaAapUuOokNnLqQloOfFbSsSsIfFiBeEoOOoqNNsSOonMmXgXckKSHhsCUAadAPpEeTtXxAXJjxSsSLlzqvVCcHPpyaAnNYFfYIqsSIiQtKkTTqQYyPmMeECcpIhHnNaBHOHCQfFlLjJqlYyzyYyYfFZCcJwWjLKkDdoOOoQCcqcqQvVejJfFEhyeEYaARrStTsSsgvPpOEeoVGPNnxXzbFfyYnFfDLldHhXxDQqwpPDSsmMMmdEecCTtHhIiHhkKCcUuPpnWCcCXxAqQaJjTmMYGgFgGfiiRrICcIyuLhYkKaAySRrjmBSPiqdDHhQDdTknxXXxNnJEepXxgGTfFnXxcmtxRrTtXsSavIiPpUYyuUTHhyOoYtdDHPKkpmyIUuiYOzZrRonxXNnoONTCctUrUGgJxXfFjaAXxkuUKdyptrkKRTnNnsSxmMIiXCcTvgGVkKIiGEekhHywrRWIdIXFwWkKOhHgXhTteuUHhEcCgGdFfDybyYBNnrNlOUVHhMmQqvdDAaNMmzguURNnrgGWGgwdACcpPavVkgdDZzuUGfFKYyHJzZjubwWKkwXoBhHVGgsFfEeiUKkfMmHhFiTtxXnJjNxKqQkXzJPfCBbcgeAaEjrRCDsSdnNcJHzZDzQKkKSsRXxjJIYMrIiPTZztMmCmMcGgSsCnDUudsSdDjqSskhHoOPNWBbrfrRWqQxXwFPpXxjJxXBzZGyYuUSsNnMmgbHhBbrRjJhHhHSJUHuQTtxYLlyXVqSslJzZyYtTjzZOXIiOnNrlLidgGLTaDFeEfdAfAiIaZCXxKkpPLuUlcvnIFempPKkBLlinsyYSAabTFzZfvHrqFPYyCcpWweEfIpPcUGrRgrRfjJOoFmMWiIGgWwTtwHhAahEOoeVuUAzHhdiraARIiIeumAaMuUKkZzmfXxeEXyYxHfFIEpPrVvIieEhHLldDYtZdfFfFoODhHGgUEeIicFfnNCbPytZzKZzkTYPpWwNPpEGgehDdqlLMmLtyYJUEgGewjJQqKoZAOnbdsFfPpyYRgGXbBDdEepIixmXLqgniiFfIqZHDHOlNnNnWSsDdJFfjPpVvAIiamMQkKoMmOdKkrRDcXebkKBpPrRNMmnJDdjOwSDcTDdtXsSYNnEVvCcoGgHJjDdhHhoOgdDfWwygGYFnRDMOFfoeEYymSiIZBIiIisSvfFVaAxXKkDnNhHxXpLlMCcuUmkVWwEfOxXtTjAbBVvfFNMfHusFqPpEsSeQCfgYyiIXbIiBbRsSYMmsaWdcCeECcJjyuUSsvVIgGuUcyWwYkKwWUuCMaAMmmzZVjfAaUuctTohPRrpbzZBKkpQXvuzbpHvLxYyfZzFvVYeEXxPpyUjOovVTvVxXiItMmbTtLljJfuiiIILYylUtzhrNnNnGwWrRtTPpYzVTuUtQYyJjqTxXtgXxXcGgESoOwWsmMmMnNwiIdDLeENJNUuiBbnNfFYgBbtHhcCrRNjwFfdDWUOZDdzFWwOonqQgGNSsflLExKkZDdmMzuVUSLyYpJBbjbBPlWpjJXlwWLxZzEeoOBwWDRmnrDCcNngLXxlAhSswMmWtnigGIXYXxSpPNbbnNBOoETteqsUqhHQNnAauTCLlSscucCpPNnmMWMdDmTtwUoOaAMeEyYItWwQSsqwBbSKGWwceQDdgGVvMMmvXrREexpOlLtToOoGgEWwezZoOquPYykKpeNOoxgrKkRNYyiIBGpyCchFFkKfBbJjcCYiIyczpdDSfGgwWFWFAapqgGigaRrMfFRyYhHHvVHoJjPpOoOzZDOokkKFftZuUnRreEwWZLALyYdDQqmnTtQqwBbWxXwWAaNipPxXIJBisDfFdgAazZHhdDGgGWqQwHUuGgoOowWOJjZpPAavgGVbuUhHAaBYsEIieMmVXxknClxtqQgSZzPuUpLVWsRrWwWDQOoAavEecEYyYyeOoCYboOfvnNVJYyjzjbqQnEeaANgGikKZzRrmhHMbcsOoSzZROocXxwWCrRQGgkXdlLHKYykhDZqQzMtTtDMXmMOlLaAlLIDdVpPHhLXtTPpwPpeEvpOzwruUfFRHtOfFoTXNnxhTRrtXbBTBdDmsSXTugFfIvvBdDlqfHhBsxXSbjjJJQJjqoOYytTQFNnHaASshSvVfFiXEeLlNnDdLbZzgeHhEAaVfJRifjJcuUkKWlThpntmMTIisScGgCAaavVAJjMmbhkjJifCLuMmzMAaYyehHYyEIiczZCPKpPEEeUuIierHzZvVTYytHvhHWwVUuxzZNnciIlTtAasInjJNOnNTcCcvVVvCdDwMZUuxXcCzwsSgGWhUuHOCcHhlxGRrfFaAPCpzZAfTtJfFgGVVNnvvzKgGkJDkNzZnKzaxAxXayYnNWpPSTSDjJJBbxWOowbnNyYXINniVvBbubBUHOfipAsSTiLenNRIirUfzZFuQqUYtpPWveEZzVWbOoCwWYyTBddDRtTDqQCAuUYfXxtTFDMmfhYyHOBZzOoOdjFSQqCcsfSsQgaARrNngGyYpPpPGQBEUdDuxXLpWKEDdyrRYrRdEeDeIifFxXHJuUjsaALlSCczkdGqQgxPDNnEeCczTttTeEZQqHZIixdDWmcCMQwWqhpPHvZzLqBvVvVVHhWaAFfwqTlLFfyBIYOoCcvzfFiYymYyRrBegGECzZcvVHYyYNnlLhbMbfVvFPpBrRJjOonSGgsMWXWsSzlLBbaARyYQqrRWptTYTtyPjXgGtDAaRSYyIiIkKiMmMmvIWwdDiKiIhmIiMJjEbBekZzuWwmMRQqwDdWqOoQQZzVvvevaAVzpIyYiJjUurnYyTaKxXkKyKkYVvkSKwBpPkKbNnWsbwQfFqJLPplcCZzXEMQqmFJheEjJNlLsynKkCcCZgGzGgcfVhHRRVvEeOopwJrpvZzeCFACdtTpPSsdoOtIiTdDrREFqMmUebWyYMmDCFWwZzdxqQqOoDduUhzRvzZsSVnIiNxXAaGgmGgnNMXosCcShcCHVgGGgWaAEQdDsCtTAacWwMdDAhHifFRrGgSsiVJBOoeECzXxLIimMrbEeKksBlWpinNniCcGeINniclLzZBCFjSQqsaHhLlKdDDyEeYdqPpQGPByzRmMWwEeCccCtTSswWsgOyQDsSQdivVDdIEeykhfFHpsSmuUuyyYYUMjJKkZyHXxFfmNALlpPauUjJVlLhWNyNnYnwMapPvTpBzzZZSsSfFiIskfIiFeFfLABbaLlhHiPpIfFMmIixiIcvuKkOOorQqVvyYjqQEUTPpIZidVvPpWHhXxYzZywIcCGGggGXxAhHaGgvVIGxXrIqwWITtmMDqWvcHhFklLKGrRSxpPXEwJjYymuqQaWOowXGSpPFHeeEmMjmLliDCUucdCBbVvcIXYylSsslcVMmvgXZKkdDpIGgijDdQIiqwqQWfFytTiCpRwWeYBmFjJLmoOtTKwXxXxpPaAZzNNNgGEeqQaGgItRRrrRrTStEeTxrRYwAJjasSVvGXyvdDKkxoOXVYiIeExpVvsQJjeXxJkdAyYZOooOTQqfFlLMerRRtwWpDdCZjNnNwSsRrwzZnSkKsSsNTavjJHhqVvWuWwCJjCcWFfWqEjmFfqHTcCHhIymMVvzJlLeELQZzzrRPpZwVvWScukKnwifbBOZzIizLlQyYCMTMmtmwWqVzIiZEevJfZQzZAwNDdTgDrRdIiGKyRrbBnZzNZzBfFjJQqbjJSxXsuFAafzIiZHhtTzgdzZKhHynwJVvjhHAaRrPpWNFfaAZzJjRHhFUuviHhdbXxHMmaAIXxWQqPoOrVvLnzZNiIlRVdDEepbXaAjJCtTdDcZXxlLPFxXrklQqAgGJCcMmCdDNnNSvXwWIixYTmMnNgCchHgGSdDsPDsSoEeOdZzAaOoGKFJjxpgFaAzygGuUYbBefwWYkwWwsoOSrvvqkMmKjJDrOgJjpeEUuWeEwPvREcRrComMuksZKBgtIiTkCeEPpKDdTtkKhHtTDdgpNnQVRrxDdJjpWOceKdqQtTAdDafKVscCSmCjJgFtTPxQqiIhCrRxXnQzmEhHYQNnWwWTtSFfljaWCcwvxJVvFFfnNZmMzZcCfuUHFtZdmMrRVvFbRrZQXxdDdDqTtNLVvtTSslVNnvOouUeEUhHKkhHCjiGgIJMmkNnFfKoOjfWtkKZzjJTnNFCmjFfVXxmnNMviwUuWsRnCccCjTtwhNpYXDdpPxDeXGfpcIiIuUgGseEjJvVZNuxkKXUhQkKTeECLlaVvfhldDXKLltTdlLDNzZIRrqRrfFQMwbBWkKZzmMmMOoQquBUubUJjmFiINTZhHHjJSAOMfFLlRpPCXxuUVvfFUubkPphHxXviguUxXpPOuUsQrhWSsWwtTrOfFQTtzzihHtfRryYOogGyhHuUYGwWtTgnUuziUuJYRsnEFfOELxXkKQLONnuUoeEiPpIBcCBbSEkKeSsrRvVMOoTtTeaAFeECRxpEehCcCvVceEwWbBAaUrkhHalvarONnoPpdDtTvHhVUuiIUlMRryUGnOoNEePppbQLlFJRrbDrMniIEeCcuUfsUXMmOoQquZzUNnxaQqywWEeYjNnJlAaBbiFfPpulfFValAkOoTtqfrRMFfmFCclbBJezYoOkKRrpPAaZOgGdsBbRrNHgGGnxXXVvdarRRqQqxXRkfedTtBbDEsSSsPiIpZOoTtshHfHhFjDExXYyoOSsHhYutTFhvVpaApOoAaPnNwWyYPwsSbBhfFHWUplLTtOoksuUEoOsGgSeVvhWgGpvVNlLqEeSshLDdxtZzTXZzuUyXxwEGgekKpznNZelfrDZGoOgyNAQzWwZqKksWwILgGeCmMqQlqLlQRrLDxgXxGTtSsQqWMbBDdmXxQqNnwlicgGCIustTlLpDdZzPtimMQeEnNkxXKoOCcwFfWbBsEhHDPpdOohHRrpeYyhLOeLoNnOWiIINnFfxAROjVvoRpPXoPpFdoGzgGXqvzZuxzLlZhUSsIicGhqQRrhrmMLlzZuUwWAaAamRrpPVGggcgzXxHlLGghaAtThQqwWHYyjJZzZzeEbsvOoVxPAfXfFtTOoxlLNoOgtTUbkKrlLAaGJjPSsgGaAJjJKsRvVbtkpPJjnmMlLNinNmtmNIiZzwWnfFtiAaIbwWajJvVhHNkOMWddzZGiIoeZYEeMaTQqIOzocfTfOhEnGgNjJevnNVOooLlHhEDPpwWlIwKGnNgOWkKlrRZlLsvVGgBBbDQgAcazQiIWzoOLHgxbBIZrxXsQqcCAHhaPLyiioOgDHhdsMmnwYKkyEBbeIiWDdjJSeZzzToBtTxqxhtvVwWexXqoOenNasCUTtDfFHhvMsQoPpGIJjigLNuSsFfXxXxUDdWwogGIZvVCrWKTtnQqJjyvmMojFcLlCUgsSGoOfFHmWMZuUlLvVDdBWAXxVvwdBbqSsQnNCczvVZqFfRrPpQOozJgSxQLhsSrRMmEahfGYCcmFfMLrRQpEgVcctTCQhXgrRlLGYydDfJwJKQGzEeZdCcXyaMnNMmmhHeEwWGxDzZYgwWGyBpSlLkKsmaATPZudDvbupPcjJCfrDdCXxgLrxXxXmMhFfHrAaVCcvAbBquqQhHUiImMjQtPpFZwWdDmIlLkKJkqjJfkKdDRrMLlXxefkKTyOTtqnNqqQquLlzZUQPpnKkRruUNeuXWdyKkvwqQZizZITmMKzfEXgGNRlitXQLlaAbuUKeENnfFogiINJjScoHhcCIiRqQpPvgvVDlDdjfRuUKkrDdfFFJLdBbGVpKrewIiYlLskKrznNahHQxdDfPxGgXFUbBqgvVGRrMXeAAaWwZcagYYyugUudpSsoOPpjfYFYGBjkgGrRMmCcBbIHgKkRrGrZjPgGgvkhOoHhRjJXxTZcuPpUbtTeEKkBTtXfFlLcClPuKdzQqZGZzDcSsRrvVjdqtsSSsTNngGjrRLlorROJcCxLlzVTfFzwWZvVtTdrRGgaTUutHjvVYnwWNUumpGgSxXsjJsnvVNhOoeBbGCLlcgWwpZzKhVuNbWBHoOOhYVcCviQVrRKkCcuwWUWwTgtTGtlLuqkJNnCpPcHBbocYKpPYXDeJtyYSHjugsUFfusSckKmMzZnuUpPkKkgpYLvmMazLlrtmMDUHuUMjQTtqxTSTtcxwsEshWwHpPUrCfqzRkKrXTtiINeDdLyYcYyYyoPNnlQleEyEJsSsxpPPpnIXQyzNnZSsUuYGgFfqjJAJjBENnebvbMOdDfFuBwWbQpPfdBbTtsOlUuLoXwAHkdPplLUuNnrRGNDdBbnATMNniIoAanNKIikKefFpPEQwxHhLlKUudDZlLRrtlfFsSMIqQuUoOimrRRYyswWYLFfloOwfrRFWjJwWyJfxeEtpBboOguxTtXenNmMAHJTlpYPlLXxpgGXxsaCbBeJjWwENRfCzZcFbbIiLHAaDcCCcxzZkMgGKctEeThHCQDdPOoVZZXbBKkpPDQqdhXxBxXbHeoixXrRjuMmPpTlrWgnNGwNfFeEXxnAFVvnNXxrpjJOLloPsSSxvfvVgQqGBgGbkRrKEetLbBLlFvekbQWVvmslLvZWnsSaOoqQAbQqXxWxqOicCZBbFHhfMmGgYWnxythHqwEtTUuyqQRrYUHHtTaxeVYGgzZAazZysSSsBbGgZzqOSstEetTwWwOolLbzZfglLNyYnDdGKkdrQtTHXrRxkzqQqKkpmQzqQAIiyYaXxIQlpFfHWBbPpDDddDYvUuMuUENNRrrRnnfFbBNPGMmqZMziOoIJGgLlbzZkKBqcmouUmgGMXxOkuVqQQJmMjFCcCRCJPQquNoHhfFaHhYbBBbNEzZLbaAWGgvxOLlzZueGgjJEURryIuajSsKYykJAUpPsSOoieTdrFhAlWwASzZsgGUbHhMtTucBAaBFmtPjJxznNlLOCesJjfyYrNpGTfdzZznhSwBbzZKGgsLGglhHScpetTzhQqkLloObJjBoOzJpNniwWSxWwYbuVfgGFfxXYlLykAXtAxGXUXxhhHHOfFmjJLWDSsdtTuerRLlFLlovVBUzZdGgBbdDSyXcCiLlOoBAEnOSslBbToOoOXxfFkTcwmDyYpPUudrXxGkKpVvfVvclyYLTzZdBbJVvLBbkKGFIorzQXxskKSRrQqGVvaUrRUzhHZNKspHhRzVEeSsvzZVvNARLlkKuoOUZXxFNnVkKgGvyTZztUPpoONSjwIgpoOpHhjJxcCJIwGggipPJmsSMjbGgBWnAEejqQXpPOGoOmMgoOGgoKkLsSlsYYywWAPpaAHlFCQqhBPJjJYYXGgbeEBGRrowWjJPpyGrRxAapPrrGlLkwWDNyYLeEtwWiITEJixXIzGPTkKCroOaoUYyuPpqQGgLllLlBeUuDIidrqQkFcXlLxxXCrUMmGbGgNwvVojtRrTJWwEeOsSWfFaHNniIeExHLxXsSqtpWwPTQvQLKGHYSqNnqQgGRRAJzZtTvVjIfNaZMTEeVvLWwtgGXmbEeWwuTtUAkUuKSATIiUQdsLuFlJjLrAafFwhHGPkKHDdkKMXxMmmpPpksSRrXVRWaAyhHuhNgUOoHfWybtTgGHJSsIiEXxAfFakoFVlXxvvoVqQvLSEeCcQkspPSujNnCcJIOVpPpcgkfFNoOVwxXhoOlLpuUMmUUuXMNnTzyKuUkYdqBblLyYwfjEeIkBfFaiISRNdDZEeUutTzsSqOFUmYtiBFRhHrfrjXHnNUuheExYyAaDotuUTaAOCccqWwmtTMMmTtqeDDMcvlLYyAvQqqWiIeEOpPDdmMnNovVlLYySsVCcmAZzeEuYKkyIiCcRCcPpEcAGJhHXYfsxBjJkxVvWwXrRieEsXwrCfBbYEjyLlXvjJBbzrGgaAnIrdXyCQOgGhHozcuLlUsPpETzHhqIbBbBcdSsYBQZEVveBbEezRKQnDrbkCcDdrAaRByyYYblLClDAadLgGCKTtoqjJiwiIubBNnnnlnkKIGgiIilyYLNoOVvcwuUgyYrIicCBbsYySNrqLlNwWwVEFiEUvVWwkLlEebPAapfFBjzreLwFZIkKDdJiEkKeOotSsKybBYkAFqQfaOIilcXhmLDcCdeIDdRBbtTmiIEeYVCTflBbZyYlTtzKwvVZGgcFEnToOGafqQQqYyfTtFrkkYwkFcTtCiusSkKInNgGWwihKQWwkgGKaAKksSReEyYjydHhUYJjpPyuJBYrLRrKkXNzZKkHTEgkbQfFqHgJwPMAOTzZvseExJjwjYdDOkKwFfWVqXbzZDeEdboCVvcDnNWwdmMfjnNJrRzjhJcSxnNHhkKoOztefvYdHTtoXxVCaRhHIiAiIagLOobBavFHhBTkKiMmAalKYykdfaATxXLIAaigohAuHpFfHhwIMmHhQUuDdqigGoOTUkxXTTvhCtTcHIjuYyTArgGbBYhHbIxQqRMKaAkvVeRrDuSXZFfHzZhNXxhkTNnodDXxUuPNnMXvJAOBbBbPLvAcCazduEeeEyZlbPpBKHhGpPoQyxqQcHAahCfKfFNkKFgsRpPqMGgJLlWzIiSQDJjJttMYjJytbNdSRwWDFlDdZhNrLlqhywWuUHysSrUuRlGgkKLYKXQoOFvVyvVYNnIMmiAwPpXIhHinNbOoXxEeBVvIaAFfsZanhHNfKOofFxXMmwkLYuxKKkyubTtvtTJZYFTtfTtgGAaYybByKZzkTMVOwQBbDjluFDfFdfRGoYdiKiYCcEenNgGspMlLmzTsSNnUBbOoEeERncqQFRCcrjJfyZgSsLltmfIiFMsUuhHQJiYaeWxYyCcIXPppFULWwHKRrxqefFZzmuqQkDPebqQWwNnpPvxnhHCGgvVuGgXKbBOsSDSnNsokKQTtVRrvNHkKaAhBVvoRzZrOxXLcuNoOquUQnUdudkBbvVBafECcQyGtTgYUuDdyLnPpIjJjJdDiexXWZzbOTtoBVvimktDrrrrRCbmmqZtwJXxjjJXxpaAPLlpUuWwWwCcxGIwLldqvMlyYLKkdSIilbDwMmgGjTyYgGtQVAMfyTtQUuyebGqcCchHNnChHIgGsSPpHBcCkTnbZRBtjNnRrJTaFfrRAaaFKkHGgmMrfICclLEmMXxeDdssdDjKkJUulXwiIkKZOoUNCbHWwbIFfibtRHiwYpkvVrRYXxVvyrpPRrkWGAyVvCaIMfyipmMZfbBQQRDdiHhImMxcyYCXfUuFEVwWPkKpvrJyGomSsnuCWHhHJjFfshpWTOFsKkSPpYJRyzZZgfFgnqQPXsEeSFfDsSiaACcVKlMNnOPLlFGoPggZilLIkbOokcDdzYyHhZHrRiIeqQNOoEdEeGgwWYerRCcEEeWueQqnlDnGzBVJlLpPfNIinFjTRrBbSLpPBdvVtCvAOoWsMIOVaLUulnNlxwnNWXkdRlWLPpMyxznNdDXxCcsfUjOONoOiWwbBdRrTtMmfPMIiCrkKToOfFKtTUuaQQqIAXhyYHBeIAaiaAzffybYtTFiqJcNiCcOikppmMxnNnNahHNQGPCOvVoOBboSkKsBYyfFpWwbKkRDqaGPpqVvOoUuzZxUtTJjRreEVlNpPUuSsqRrvNDeEdnrafVvvFenNrRgQqDrJxXKkoruURKfFbWXzZtzZpsVvSEeGgMfZzFiOoLlgxSsLJCGflLJjgQDPyYLasnfWPyQqYeSsQlLkxhHXFfKrRsrPSdDsePbkNXxedYyNncCVNrRFDdfoOEoLlJiIKNaAaAQqszZLlSnNiAaYdBbDyIHRJjlLsQlpPuULdDEbNTTUugIiNLlpPYIzZzZDPpGgvNnVKyIiYQmMqEEePpwWVsAIGMmtTaYyKeEMeIsVSsckKRdugOoGKMMKkEdDTtAtBfFKucMYmMtrRKxYuJFXEeumMUiuAireEKkdDycRrzZBtmNnFfwWXRVzZxXvyYZzqIiTtfIvJZzouVOoSNRrZpMAxcCqmMaFfhHWibhKxXkeEHBYyIwyVlXxeECctmvYPbglTpFfNnvlIcpPCEBvVbUfFUxlRrJjUuFJtTjgHVfFvvfaukKVmAeEslLrTSCIicHNZzhHMmHhCAaMmIfFivbBJewfcCFWIcrRRWoOwtTwXxoQqkKOIskKSdNnGeEgDgCcLnCgSiIhHUpCeWcCFfQFdDSgGTZeLldDEJzMoLzZlNnOamyEBbTPpaRKhWFfUTyVvrGLAPHUuqQJoOHhRrjexuNPpUmMHpRVvBbrOoPhAnVEeMqYyEDkDdhUWwlLQxhTQFzQqCFPpiIfcZAafxkKsqkKuCRjJupLMmlMYEgGeHtpFlLONGjmkdGgDlLskKykPqRRzxXxXDSsxrIirJbBwKtlqAkKaPpQLVYyeSsuRCxCccmSYchsIzZekIkKgGrRyxXHIihTovHhDGgZJQjJQZWwzSvVbrxlgGrMYyjcImUJJTDoOdJfFUujqXxFmdDlmxvVqnNweEEeLLTtppPPlAxNnrRqtTTsTPpeEctTIikMaOoAWXxypyeEafKHkKhzojJdWwbBfEehHFjaqQkKAkWwUuURtbSSssNmZJagGoOAjZPpYzZKsdDmSsZSsTtcwWeNnZzbBkyFgMwAjXCcxBbQqCaCmCLlcMhHGgCnNAwhZinBbNyhBeIiVvyYNQqSsnsSjYqVvlLQuWwInTtEQOlPdsrRSjCcAdaUzkQbBhybBYsTtHKgnggDuUpPkfFScCstTDvlodDLlAaPhlakKgOobiIBLpPwWFVLldDmrRYiBbiwWIECYQBUiIslLRWwwGxXtTdZzOoDtLmPXmEGpPwWgtThHcwfxYxxFoOwLoSpCcPRTCcULrRlOjTtAtAyYiVvrRdshUugwWGzZjJGSjgGXVmMjyYvCcmMVSsppNnciIltNqQjWMotTEhBzFfqQZOKexxMmZzIyWcxXCxXCyZjvWUukSsMmUhxXHuKyTmjWnORaAcwWbPJjpTSPVMQqNLlgPBbQqahlaMIHbBhrhHsSyuyYUdmzJVvNGraAiIRWEgeEyGnNCcpPlzmMXxSsCKCDTDdvAvVaCWMmxMZzuHhuwWEeBBBSlLclLAaCLEezgwWDDrGbvblLBbSHTLlsvheElQqqlpPLtTkiIkKKkRrZKkUxXuzvuGsgvHYYosSwIxJjWwllLfFOoxdDBgucWwWOdDucArylBALlUufAiskKZUlYnADhKUuACkVkwWwDnAVvavlZzGgMzZcFyhHdWwnOoNFfDpPKksSvVWwaCcSFqnNLlLlMLbSPpcCgDYevVEhHMADpArouUZFmVvMgGfQqwoOIiPIMrRtQFYsqESseEuMlLmAtTSOiIwYxEjsEFfiIenGgNDyYlkdwFhjJOgGoBnHhukFfzhaxJGCzZTWGgHhckXxdLlJMvwYybAHjSxMOolLRuUhlLFfbMMmDZrRahHAzSkKssScLlMmCdmmMOIiBFfHAfjORUuruQICdRfpbYSxyWvfFVmMqkWgGgGgPpliILezhZrRBBvFkBXxkKShGgkKdhMKrEWxHBbVzZvowWPCcplQIqxXCcImWJSsbBjqgGeIAdHJjFiyYIfWWDgpPGudpPDdifFBbYyINcCdOocyYCDbtiITlLBzZnjhwOrRVvyYdzXinNxRzgBJSIqUuTNsuUAYksSkiPOoDAaLHygQqGdovUWwcTtCTtGgcEDMmjJvOOMmBYBbywWNnkEAdDEJPMyUskKlLSGnNghsRPHzMQqcUChSsHyRGhmUkNnlXuVwWjJvUxdDiHAaOVztFyeYwkrKkRmwuUsaZeHeZytvfKOoPgthHTHhhHWKQqIAGgyYaiQqkwydDDYyeERlLSsRWsSXJuEerJiIhIiVvpPNRjzoBXXxxNnrlmgmMJjDdGoOJjZPJszOUuBzZVXmVvMnMmGgIqQWmLTjOooOJPvoxCclhOJzZcIIiiskKSCcClLTTtPptlHmJjLlPpQqMhpPKImnNMhHhEetieEVvaAwhHWtUuUAAGQmUUEgYHZiUCDdciIsDaipIxxXYyKRfFAIPzWpPHJdDaKDAnPIuBjJbYSMwWAlyYMOPEaAuRrFkJepJprNSVvgKMmYuUMmvZzbnHhmvVAaPpnNCOgGIWwJERQlLXxDvVVviIdcCqrwWYCBHvTthYMmyIinNOoZxCcZFfdDjJlkEdCcppPPcCDJjGOulzeEkKZFpbBgUxytTXxxXNlLcsSHGGpPmXxJBbTBbQqDPgGtgGdLBblAMXgLHMyYBeEbBgWchHXxoOZbvpFCuUFfuEuRLlzPcCpZpPnNBbpXCckPUTtYXWDDARrcwMmWCgNofegxGBlduUTwWtDLdDWMmBWOyYflbYZbkxHhXwJMmqXxQNhHqlLYyRPDeZueEUtkQqeEFfKjJKhSHINnQwWJgGWzPkmWwMKyjZdAkPdDBbzrwWqifFImPRreOovVXqPgNQlXuUSsoOZziIIbRrFFfyYbBrgGouYFLVvjJevPXwvVXDgGgGZzXVCKhDdqgQTtuUuPpSQdqZzGrRFzJjSPFlaAAarAzxNUeEvGbBrfmlLpWhVlzZBaACcgMhHSfUGgiGwMTlOvbYnDkKVHQYQqoxiIOoqRqMnNbrsSckVvnYgGwejiHkDPHDuDdJjpQvVlLqQBbqQpvVPQEtuoxduTtrOAaBaxhSjJZWzZFfjJsqffFfFxhadXzZtoGrQyYkKUucCxhWxNrRSsKkeEBkFfTuUDaAQWoJcUuuvVyYAaRfFvdUAaBzqQZZdCNFDaAdaASzRdDrYyzZzZEeDfdDFQqgJjGftTQqFdodvWeKcCzdFjJNVbRBHkKKKkbMhHmBkvVzKGSffsVQqqxoOxYyScCsuGtBiReEeEeEffrrRMmkKAaDuUQKkjyYmBbMJxPmpPfgGRxsmiSOodDsShHgOTwZzWtqQHpVvXxPboSsKkOMDdDPpxDfMdeEQqTLoYmaGgtTAinNOoFfIpwWSPQEfaDdceEmxXMdKaAhpTEeDMwWOqDhIbGWHfFdDmMeJuUjexOjFyykMmiIKQIRYrxdorRfGkAaJsEajEVzBOWvSKksVJvVKkjwoMgQbWZKkrSdPlWwLflwWFfuCconSiPpRrtTwbhHlLBdDaBDYGDoOlLzucaotTgtbrKVKwyBZQqwIPGgwbIiBWxmgmMtUvVuLlUzHEFTtfoXxOlLTKnlyYECcmllLMYTtlLZznxwkMtANlGgddzBCSTGUoOsQZzPpgFnGSgxXGsEZWwCcbIiiEYvlMrqZiTPpcittBTkKtbroFfOpPRfuUFsSIiLQqeElVSsbXdPNIlLpPlwFfSQoQYSkKsywWlphWkhtyYiytyDXllfFMmHJjuZqGCVDYydmMAoojQSjTiICcvOaAdcUucDavVssxBIioodDEzzZrRlAarVvRzpKQqZRkKTHhqFGgNvxGqsFfSsLYylSAuUaHJyCvvVPOYyDwWdvPtZnuXxvwkQqKyViIijJqcqQNWNdFIXJjxXwcChcPpxXCGglEHfqQonzZAyHzdRkReCRCgqQGcFvwQqHhdjevHhVkKgGtchAEtlLxqwWmMQSaAYotOeEhjPpPIfeNAanEpWvfezZZzWBbNawXoOxYyvMmGqQOzZeEogjjXXEerRYbWDdiITJjWHhwpOfFOfQAgGhUjJHnzUuUZKreZzEbZNSsSsghHpLBFxxXHhPQqkGgIirEVDUSgvpPVQqVwUuBMaOeTYeLlRrSToWwESsEaBeEWwTmyDdNsngGkaALncrYZsAEFqQnNomcyHmEfzZFeykKmSpUyYOouPsGkHkjJIiGglrYFgaAGLjJPtMmxXUBDNvwJjWnbBNSQqwjJbmDEeseaeEnNTtIiGaHhWwpvNgGVtTzZfinRrBRLlsSrbRbWdMiIJfibeWBxutTpgGZzlmZzjJODvVJJMsqAJJjBHiIgGIiOzFajzSVCcOoOovDdXxuUJkKoOhCcQqTtRBkshHqQBIJjwSTJwDdWOAaqmkKMjJQkIiWwQqKorRbBQqizMlNnpKzcpjIiMRrmPmMZzpJWAafYyDkJjQlLqAbBadDKdtkKTblgGXVhHRusqrovCHVRJYgGsHaANlBbLnNnYyEyWuoOkTIifEHeEpSfFZzsBlXeXKtTTtEFAafmyRRnOozZAnKAftdDjqcGYnNRYbGXzZVuTsJJjjkZzLEhVvBbAQqRbGvvqOpvcGJieyEakxdGLdaVIMPpmiWtTYuUpQmMqAaZzrReEgZoXGqFsVvGgchaToEeuUyibPpBWwIQSsqCcEHVAFgSfbHBbhBbUIiLZoQtTfFqtBbueHYsmMFPABbaCAhHagyUUuLNUVvcyYujFoYtqQqaGgZFHzZlcCcCNOoMmnJasODdFfFcsiISnOrRoNFOoaAhHftCmJnQqlWEiIDxWfPVlLDPuYTUSOWeEuUdAffpIekDnKcDdHjJhCaXxFjJMGgNvyYHMzgoOUiCNOmMEejdxXDrqxXQFSsVCEejJctpnNpPWLpoAaCcOFfVHAjezYQkdgGhHTXMCBvBMfcCNgZUuzaAhHdIbBiiIAEYiuzGkrwWFvVfEeTtxlGIubqQEtOogGyhafFANnjRGNhhHSsBeRFfFKtznUHrRTsCJssXlLPkKRrpxSSqQjcStRrhuNZTkfrEbXxHngGgrJHYTOoeqQBYyUigLXRrRKKkgZUjJIyAaeaDBbnXaAxNGnoVvnNBbOcaACHhKPpkFmbVbcmxUutgGDsSWwKqyiIZAaEJahvFfPlwhHPTvgGfRJhRrHKkpPoncIuFfGgGAaZmcChVMmnGgmoOjJfAkNlLyYdKEiPFFUuaDeEwoaAsutyxXUpdeEvpZzFwXdewLNjMdDcTFfhgGHCxXfoIiSATtaAjNNnvVnLYUucoKeRrEkOCysShfLlzAQTyOfJUONnFfoLULlulCunPplzZhHuYGcUjJupfSyhEUTOzZzluBFZzsGfavhRrepPYOtAHCSfQgxOzGVvWwPeEjBbJymZzMwvADlgDIiXTtKAeYEIjgCVPTtoXxQUueEVDdVgLluUXxBraHoOelKpPStUvxgbBByrCcygyfFYCBbQJTPpFaJwWjkNaqQNrrYMekxExLbPBbhewBbWkKTtJjtTFkKsStKoOxXUKkwYeyYaRrAuUhSfFGgyYyjrvhcgIiGUuVORQzZGgSUrvHhLBPpFfFwPCuqQUZKIiGgkkPLmZIPpUuIisSSsqKkQjtJdSsZgGzDjsgGWibSKbpPrZJjzHVvjnNsZrFfRJSKksAfZoeEWUuzZxiITAatXdDDdEewhbjaQSOwWokKmjjIiKsSYykdomwWMokKOMLPUXbwExXBIVvFjmDwBrNIoWjPpWwPpMmJwOFvpPnVPCcAgtTAESEeAadvVMuUBWsVndbzkKZuTpvVlnNnQqxXNfyRLSsKhKgYoOyMYAZzaMhYCMWwOlLfeaSiLlIvhHVzyRCNlaAKNSnYMtYyxXbAeeuUmMjJOtslLEytEmMoXxTwWtWRzZaArwAmbaAEeuUWvGsuFfdveliILRKMmpHhKkXfEeblPAaGAByYbasSSskKnzBRkzuZNkKhxXuHaqcCFooPXxQqwWtwNnByxJjxJUuZzJSsVuUWADKkyYdnyYyYwWwEFVlLnNwPFizZcCpJHSsoTOycnNCsqmMQXRYyrlLTeaYyHCTsSEJFfxXDRrWqQVfrcECcMZznNWwmWwIirKBbrDKkZtTwWrRhYaNOFheLHWxifDfFxXnZlLkRrKzwnCQIvYWVUNzTpVbBlLMdDmopvVVcYPpjKkhQgaAXVhHnfQtkKrzVvwWkPZQqLZeTvVDdtOObXSSXxAeEdVvCCDoVtJsqJOOafpPFvvVAacgQzUPphLVvLxdYTYITHKQqwHPLqOqsVvWiMmILieWwEnDdpPpDxBvTtTYVvyTtTICmMtIzQRrRmLVyeZzIzZBjJzegIiNfGAaqSugtscbZDDLnaWwlMmLTEemKWpPXAaNiyYMmIymLMeLNktehZuBvVbTkKGHhMXwWDdZzpDdiWzLlXxbYWkvkKkRjJBTGOACYyUZdgydOoiIbAWIsNOULFpDsRzjSsJwEeDvVLlhqQiIpPHdpPBVvPVvpqQqGmjJbZveJzZlpPLqQAeSFfjKgUuFOQqGgDoOrRXSsRyrCciqYYXfFNnFfxqQfLlJoXxaAXpFfPEEhpPwgwWBjJiHdQWwomeElLdtnNtTZzPHcCTtMmkDaACxtTXAFXxeqEepsEehHPaGgXxAMyCcFfOeEltDmFdXiIdmBfMmFhTtouSsUuCcUGEesIMSXrFfFMpkKBbXGgqdgGRQqFFOojJgGrIbuVYPcCpyvUTgUdCcDXDdXQvcCSFFsgkZkKnoONhdDbWwrBvuXxUPpnfDZQqKkkEwVDPpOTtDwIiWdEewWZsyYfxXncDzbyYutHhTqQDVuUfFEerUdDJOojCjRrOwqdDGgdmMUvVufFmMuUtKbnXwHXGgbBMmbBqRgOrRDdTxDAPpLlHXFHheEQSwxpBbPXcRXxrCzsHQqXAdDboRUDwjJWXORrUTlLeqqauUAPXxUdwWhpyYdKPphIJEWyNQqKCRBmQIiQqrfTtFjIiJVvQXOyqhvdJjNyVqQvBVoLtmWwWgIcCuvVFsBbmqQuHhUGbLvHwjJwWPjJMuUFRgVezZEuhHnXZaqQRLfBbpsgGZfgQPbBpDqsnSsNUPpqGQHkqQcvxAVvaBcCbENnedxvVWxpVEbBsSlfyUOMmRVvqQoOLgGlfjJHWwhBdDixLqnGpBOovVbQxqSsOoWYywQdDIieEEpPpMQUKkuSssSRZpElLeFNngBbCciIGfxXnNKadDMJjmDzdDJYqQpZKtTkwjwWqihsbAaBpPHXxgGJkKjkTMmzlLEdpaAiICFfHWPXxpwEARraecdBbDChcAarQnPpjWKBzyBAAaaLFonNwbwYyOoCHhcbgXGEFOnoOGaddDdwNnxyTtupKxPPsJjSpreBbEUyYXxeUcfpPPIvViVbBBnNzCwGNnAabmhlGJjxmUjJuahHDTpdEaAeteEuUjMWtTwpPgghCyYnYWaAwRaEeArXRMmKkruGPfLUiIogAawuUuoOUWeKLqXxQeENnQqzGgXzaALbBlwWHVvRrVhbcyejiodqQDcyNnYMnNEeNBZlQyYqFfLzVykGsnRPjPuUEjKkKeEfLleEUepomLAaaHCchwWmsyUiyYOolLlLpNadkAjEbBehwAaZpiabBbBVvEedDrkXiMmCMEqQefFmcvVSsPIAbBXxqQdTtDdSiIuIzhyGeuuAeEaMqgaaEeuTEeITHqQikLQqjJRrGgjoRrHLzZvVtTXOVplLtTtlMwiNKrlLRkxvboZSjpzMLlLRbOMmZEeJrnvVJjHqwoOWQjRrRUjxwpPrgGZFfzlLrdYkKGpAakFVTYzEhEzAWwCxXcxhHXSWMAaKWvQqKkVyEYqkKQZzfTZvohILKlLuzZMHlfFnNWwLgrYhEeHcuCmZhprSHurRYPpmpWjJwcCjGgeGgMmaeOoKbmMidTtDIooVdsSeaACFfueEVODWwmAUuaQqLlXxmMMjzZJnrDdRNYhltTdpIKKyNnXxaSntWwjJQisjbGZrXIxZgGDcCrRoWuUHJrRGgDUgGdwwsCcSHhhkKDaiEQwfFMdDijJQinNqcCGgLjJWwYyOZzhXpPwewnNKkWAaRkmHDHBbsbKdeEDfVbIipPbzVvHZEPzdDqBbQZpqtTQKkGwKZzQfFwYXsuUVvyBPFrDdDvVcyYiIFfiqUsSoJFahbVvoOoBHrmXsJhauUkPpiGgsSIKaABvIiVyYWVmdDjDKaJjACQqiQqIrRwtcHhgjXAHZkKkKfFKUUuNjOoJbHfWDKxXnKkNQqEeLUutTcCtaATdSJeXyWobBUusarRGUugGxXuUgUeOoQSypPfGTtgqrRTKkmipEAaeWaAIizORajJPdzZamydOoGsEeBlmQfsAcnNCoeEOlLkhHKAaYVvfCmrRLVNdWKvKcsSaKkkaAHdnLlFftTBbNaNyLbBuzSkKdDImMmMaFiIabUuGgLYyZhXxHzYRCcaaACUowCUGEeaAbXKkLXwSsWiWOySsyhVGcCSGggUVKQLHVIiSHlLhtRJjrhsBbkBbKBVBgRduUmMkKdKQzZzZlLuhHUqkSDdsGZEGgajUDEeduJAelmRrMsbtTbIibUDdUlLmXwcVdDtoOdGgKkckmMcumMUZLgYGNQqmMnewgnjeNnEYyNnNhHSsPVvpnVjJvZMmMUuDYRimAZzLHAuUBbpGndDQqmvpnNstBPpCroNwJGgMtYJjGgAarRweEPpVicCLlIJzQqeEYcHhwOoYiXXEkOoobHeOmNnwxXJnXRrxTfFLCPPiIaAJvxJsgHSwWkKDIDdaTiIaJoutuUrsOlRrWgGfXXyFfXFWCwWdDeGgSsMxpMlTTtgWKkEVJjverSubqQqycxXeIiIDdsSyGgbBMvfWeEwlGALHpOLVdsSKdGGNGGgkhSjJHqWwKTtZuADaQIiqJycCTtYDJEejpLoqeuUBbnNfFNiUyJBxXbNWwnEbHYIzZzHjqQJWacAauUcAcJaWmGfykKgGYYKrREmkKMfFCvVzwWMSkBbyzjJzMnDdlLeEfFBCcTruKkaAKIiJqQKkWwDOZmMkFAYPYwmKjkWlLwKJCeEtcBbHhCSWwtQfFXmMaKklWeEMlLkKmQXDdMLMCczZfQcCtfFXxjjuMifFOoCJmRLnNPpXRBAasqqjrVvRzdVhHOtlPpLYiKEBYybiSHCscCSXxysMCXcnNrUEvleJjELTkWRrjRuyYUXuUxRXMmGqQJjgcCMmdaAVvDdWuUwZrrsSnNzZBbQpKYSKMPpJgnofPUuTLlhZzuUlLZiIzymnNFfkKPUrSsKkcTtbBVvTtUQSXqQqtHXquIiHpPKdeQmvNrRasaASunUMmXEdDqQhpqQalUnNugRRrYtuwAaHkrrRAteqrRQYMkKAgGIimMQqmZjRrsSztsftTlYyLoOpPpyYPqFfQVvqwEcPusGcNldLlDGiWrCiEjVcTteEnhstRSzZaMvSswWULlAqQFEvVeVhGfLCcXuhHuyYWLldDweiLVWwPtLiIGBpyVMTqQLvPpYWiIwAVvQNpsSPBbvVBJzZjbnlLXsSamPznsvUXxOjLlViFQlLzZCpPcrxMTiIbCYCcGgRIppPPaUIxfjUyhHXsSkyqmMQYTrRytTmCUkXxXxbTOoaemmkkKXZEeIOyYXxolLizJjxoOUDrzZCvSiEmTtUukALlcwIiWCAaYyOogiaSvWwekaAxXyYQqBbuBbUdiynliILaAOoGttsSnBeZcCWwzEoOeXxqCcvVShQVvqWbBlLwdDHrhHhcCnVvkjUuOcClLeNnnrcCTtRvqQZzgGDEnKBwWpEpZzxDdIiOoXRSdDMmzZoOkLTtMmPplKHhIiPpqEpwFNojJiXxIBjQqJbyYtTOSLlYyAlpdqGtTHhzZCcTtFgcjleEIiXxkKXGdDIZzmPTxMmZzwBkvCiIcVObBjRdGExXfVlLFFfARoOVQDxXPpdnLvdDlLjdDJYyuwWXuUGLlEegFfXxOoQCcgzZAQdrBPbjJcpgZzqnAXlFfLPPKIOoqQoInsSeECjMgGmQIfyBYFFMmZQqEbhOoHxoOaiTlLlLtPpqAktrRhHRCccDqQdmpFDSOosIVvqQvVnooIiTtJuFSZXYmlwUrRWwYyuvVLQJjqsxeXxENnXSrPpDKxuUXnNLnzZNLXxlkKAvoirRsSFfMmRrmSwaVzZcTeEkKDbBbAalYysXxuUmOoMmMtjJvjKkJHhxXbZzZSsgNzMmMmZdiILNEyYUwwWyPpDHJgGjhkKekKkmdDMnznNZNKnEBbCchDKkdEezYyZCKBnNKhHzGGpOYyRrgfpomLvVkycCYvAaOoIdxpNGGOozwXxRrCcIiWfFFfYlDdLrjyfokKtwPlLHRrSZzvVFfuUvVZzhwcURDmMhHdrupPOouUUNMxXOgYxXjWOowSsYyRWwiIsyYgGmLlMSzZNJjnNneMmDdrqqFzPIYFminNnNAMmcXxYagwKRKPyVZzvWSssSIeLlEhiIrJDdHDdhOuUojTBBhBcnbBuzkKOoWxLSSfpPFcCiFRVvhfAAbrnNRrzBNbBtTtKeEzmGgBbMiIZbhweEIizZWiQAavVgBEBJjbYQqqFeElLfYFmavVvkAaFLlfKqJWwvVdDWtTBbdZhHzBLsfFDSsYrRyGgmNnGBjJAabgVHhQRrDqQWigXuZzUBrRbPlLIiXSsxOoyYwWNnWTzQMMsnNSBcRRfFRIUuiyYuUqQddDbBSswpPWTKMtkEHhetTKTIwERrlLNlDdKkKxXkYqeEeKeEeEVlLvkFAbKWwDTtUpiIPuOojHnNhJUDHhClsSoOcfFCbuXcCemMExUnleELqQiIqOjJdoKkkBbxUcHJjhLlNJjWwXVhHDdSsBAapPEFfpdVvKUVvulLUyXxYJbBjMEQXkVvKkrRhluflLSsprRPPxibBvVmMXNnQqVvwIfLlFiEApPyIjDdqSToOwWGTMmthHQqTtHhzYSsUuBbmvVMCNrehHutZEePSaApPrQjJwWqRHKkhyIkqQIeESTtswWDyOszZSgrnNULJdpPIDdYyiqWNnovmDdttTmMiIzjVBUXxYzZSDdskXQqUylnNesSEgGIiPpKWDdkFQqWwAzSixWaEZzeaAEUXxqYyQQMmqVvuAaHhaAPHhpgvVlLgUuqQgGGGebBfLgFfGlqxkFfhYHZzQHhRKknBbHhHhHzLftTdrPpTtsqQDKcCknBTmTkKTjdqsHhEeqyYQaAZwIidDjmQrSGLPplVGgZzvfnkFnNXxXYqrROgeEYyiIkLzYJjXxUDCGgcpPZVEekKlpoEekKaZzjVhHxXxKuUxXkBbmtTpOtKHnrRgGzSshHSvVsEexscpPCrRpPFfUdEeRrETUKjJkXxsSutAsSavTtVmrXiKkBodDOGzZkcCKMmgsDdLlSyROurlLPpIiRlLUDdDdomMatrRUJJjiVtwWtKcCuCmnNMctWPpPhUaUuHdLlDOGeEltbBFDLDdInNtBbbfVArRKklzZGfFMfFmrAKkcvAaOhDzZyVFETpPZXsNnMmCjxXrKkRDdJjHJXxZFOBASsaBxQvoLUubKkBlyJWXKkSVtoampWjGBbUuhXxBrRKGethnHhxlRybjDhHYCcJrsSIiqFPpfkHGgUIhHfKWyKKRIiFAgtcCNefxXCzWNnhHrRkZLzLFtDdcvyMMmriElMHxCLoPpTIirRUuIjfFxXizfWlERUyYubaABZJbBQpPvVOojJqKuTteHhaAMmIfePpvWnQRnmMRGeDdNnEWWGgwCTsSbhHBtLNzCTtcZNUHhWILlQOQqkgXxGcyYISsiUucOoVvCcLlSYDdydDsfCcFKDdBRdNqkrZztTqbyaAJjDCiQZteOoSCZqzZwWdDdDJjcdDYxbBDRiNcCFfRZsSVxYJFferRJjyFcREeWxSJjIeEKQqkKbeEXbBSFyTtxuGgUjgapPCOoNnerBoOjJbhHjJMmUyYaMVvvFfwQVaYyXxVCmEhHrRedAadEpPQQCFfdyCcYwWvVwWJRbITyMufoQSsnRrreEsAKkbKiPpBbEeJFWyYRrQDKSsFfkKDdktTHhAaZtAamxhHuPHWSsvnKmMMXPpfFpPxmfFGCPvoiMmjSsEeJaAUsCwZzCcEeWcgGowWHGghuiIUOqQwWSKqsRPprljJVnNIiuUyhHYvOwWVnNkKlLXmMqQxVGgLvXxfOKeoOjhiIBaAYwFhwWIiuGnHUhHYIiwrvxKPhQqpgWRfIiUHhRrlZVvzeEXxsSSSsDqusSsStassSXxOoaBMxXxTlthHmKkzAniIFiqQZzarrQsyhgzZdDklqVKklhXogGOiIhAnZzGTtgUuBgueERfKREbWIiwLOAoOREwWectpFfgZjAaelRrnduUtTKgRRpjJPeEXgYOgxyyjpbHceEEefLhIicCVvAahnNHsSaygGhHIiaASeExAaJaNwJBbOoPpQxXMmjQmMqJyYXxqzZjqQIlLGwbvVBWWijXwWPPIiGtQqbKkBRrTinNIiWJsncbBCJjuYfzCcranZrOHhoxXFfPSwWqsSkKQknaAuWwKkjJKkuAgyYqZROlLcCiHhfgljmkqjJQKMVvKkAaJjDtCcmMWwCQqFPgRMWCtMmKSstLoqQNIiIdDieahyYVvHhfIiFHKkbIYytTxYfFszZDubOyYfEUwlmMMMmouyLlYxlLeEgYyXrRvVatTTHhxKPpghHeExXGfFkabBqQKFvUByhHGgXsIPSsTkKtJjjZKGgiXxItTHZREHherEPCsRrxXsSSuUkWwZNnaAzMmtrdDReEiIQqTWPSkKspNnsHNZDFtgPXxnZzRFOxiIXLlpPbBoSCcECccoZyYHhXpTMfbbjlLJCbBUFfmBQquEeUuvVyYaLayYHfweEWRQUuqDtgGEYqvVQoDdXVwYyBnIiUuMmNMmxYyCcXlPpenyAOnUrRpjwWcEercfqvUHhuRrUKMCoOfFQjjJZESsiIgGemxCcXzgGQLlgFfXxpgGnemUSsumMVydwlLeEhzZPLqiZqMPQZdDxXBRrbKhvVqzZRDBwWxXbFBWTeEeEoQSsvEXJYyBbjAhdDhuDsNnSdeWQTYXNwyNnOoOoUueEzIRrUuosYySQXwBKEekPJjXxpNwzVSMRrHhwqBKEVflcVvCWwTFVXsKqnNRrQkRHWwhPpfaRrrRRLvVtJjKkUJIOExzzvIXxiHhpqLlUuFpPzZfBhHbkpPmFfKXnNvVduUhMfFmdDlRrBBkKrnFfcASyPfFMXdDWwxmLtJaAJjjAajhnwWPYyowWOpUuNaWwnNETtUEexXUuzZGPHhhHlLTXSshHFwWrRjSrfFLTbBAaWwzUuJJjjkkdDKXWpGgGgPqcCOwWoeEkZzOmxXGgpPtAaNnaKkGgglLDKhaWxSHEehDFcCqUmMVvLlvVomEeBAayYVYqQySZzUuuUsfFaxiNXSjeYLqLpOtmRrMTpPIxXicCCDdlSsuUEnEexKkgGhHZQFLlcRuSjJeSWXCsLlthHXJmyYhudTZxXzJyYjRTtsSZLlAVCcCccvVlLClRryTMmBbtPuUGwWKNYyhHCSxXVvGUucCUJzZhhHOosyYMmTjEdxykyCOJjhDdLgGcCluUHVvhnNjKQAaUvaAqIjJyjJDdUmMvVEeuHoOohSzZsQsSqgEeLlGcCbwvVURnNXxruhaAHBnUvYyTtsSQqHkZzPqQVvLlEHstTSGgTsStSPpSmMsEenNPgSsSAasGCcMDdgTIioOtGycCJhdhHDjWwJAGgjJHhoODtGgvZQoODrRJrHhRppPPkKdDNnCSsdSsmMmMglyWAawYLjJDkIQqiUpLiIxtsSlLTCztReuUxXErrHKVGpKkJzTtRrRhuaAUirRKJUutTbgyfyWwxXnNFJPDHoOhGhHUyGexsSXEACSszAaarRExmQbBSHhsDdSsxXufpYyFXkKqAZRSyWERkQqRxXrPrONnCuUsnGOkBnNTtqJjQqxHhTBhHHhbMmILwWrnGgxGgeFqQZklLmMQvVqtzWVYbBaAaADwXxxjJUFfEQQdDbBoYtFHhEmRrFQKVvjiMeEwoOWzfTqJjJvVQaRRMmLllnNGcfFRFqQULPpzZlqQQYyXeElLxjJqXxwOoWBmMVUtTzptMPbdQqlLXQqgAYuUxDAdDzZVvagqPpkjWjnNFxpPHjJeEqCvGeTORroYyOobBtbBACFfcaPXxqWwEelaAcCywWgpPFHbBAeHliIqQqXgjJGsGjZvNnVdDYyjyKkYrRJEeEedDbBdDPwWNnpTtZzDcCWawbGgzmKkwYyMhYyCcufJjpPJORrVYGgNkwRczkKRrijYyJOjJckZzKCmMSshOAaonNHnlUrREeuHhOqSmVdyYucSAEQEIiTHSsXQqLlQXbOtZyYEBbsSPIimMpsfFNSGIkKIYlpSRzHhGRrgXxiXGhlZwvOoVzZiFfIqZACaGqVvdGgbSFfzLwVvokWiLdiIfLlNWwxXnYyUuDdFewWIiOHorRFtFCOZYyoGgitAmyzEOXxpPgSsFfJhHjxXuUDSUusDwmoKtTnABDDddTMIiTMKkxXIyYVGgvKTevVEBkLlKrSkhdDHjpZzgMmyBbWwYRzZMmBuGNnnHhFavVpCcNgGnkKXSBZZzGCGWwvMRHHgRrrwNnWRJjCuHhHbBuUVvXUTtVQxZgsSHhODfMmOxtTrOJoZhHyYzrpWwPPpaXiwNqQZzMhHrRUHhumnoOmMlVvaABbEEeeEolohHOmpPTtMdDmYyMHEPtTeSqITyYpPpCcHhXxPSULMUuDdGgmXxQqvqQVlgOoGqQVvjJLNnxXXdDdzZkDdKgGmMVvUucElmMBbiSanYmMbPpBzdKkRLlFMoOmZCcCczpPLEPWYlkKHhPpPzIiZqQHUuQnEsShHeBbPwHAfFajJSKvVOoSsPuRYyJjrjJHHQVPpvjuEeVvUJqhfUqQydDxXeFfqFfdCcDQdJzZSdDzPptTFKyYQqrRBbpPrQrADxJjHSshuqQUNghnxXfFBaAJjSsFfbSDozlLyvVZEMmjLHhaAuUQSsSspPKaLcYyaACAVvvLfFUWwoOIFfhHNnyLlnNYnNLuUfFXxAtTuSBbFNAamltTvVSsLRdvkqQKPIMCcmPpifFKkpVIiBxvVXaAjfqsSfFBPLlPEetuUTpguYmpPIiLXxpPpPulLwWRAaAKkaAdDVPYypLAKRwzZmMWuHVvPXAarccCfjJgGXxEmMzrRZtTtGgmstTbVvfFlMmqgGplLPjJOoleoeBbNOoSTtrEeyjkKKBbkIuUZNaATtweEpPWFTLlIZZdDkKiIlLDdqjJUuKtTkiTtSsIoRSswHHhRqAaUwWjJueESoGIMmVKbBkoRPprOKBDdvDdVcrmkVvqgEeyYGrRzZLlQKoawWszGgRrZjJMmhVveElLztnfzZLYyUusScClMNHhdeEDpPnTtiIminvVkbBxLyYHFActmeEMqJjHQqnNnmMnNFfdDgGzSuMmUHheYyEiCvIiZzVPFvpTtPrRaAVgxHhiINRrngGEGgSsdyPUunHWIiJNrSIIiAPRhHrNnpahHNCUxXwWucnJMsSmMccCfwFJcunyvVYjJBeEbyYQqzNnBfmMDzTfhxXqQFjJzfjKkXhHCUucVAxXmMgGJvyYJjVLPpsiIEewwWUuGgnNqyeMZeEqzBbQqZNImMicXxHXphHfGcpPMviKRrknZzNIkWwFDIiaAfFvVkECokKPpwBlLbPEmMeXvVvEeqPgGGkVvVZzvcfgLlHhGFKUwWuGbkzSCcKUiIDdOOofFePpVvEewWQqrVGoRHfXxxXhHJEejFhdQVViIRWFfKyFnNdDpPrRXxJfFjXxjcCpPJEBbVvyYxXZIifbBGPXfUnNuJRuUrjkgptTGOolLtbByBaAbVshHncjqEeQEefFaLKRfpnFfCcNzCcalLOoEeAxBPvnsSNreERpLndDkKNkKCcXxUuAaZzleEwihuUBDKkeEIyYOosSVGgfrYkDGgGjpPJZUgGhHXSsxuGgUwWYksStTtfiIFnWIiRrfFXxaMmiIqzHhFgGjQcmMqxXoOHhmMtTZpZzPhHoAaFIWNkKUCsdDKkqljmMaAkKZYithYyEeQMJJgGjEeeSsQwNnWwJJjUHzZBbhbBufFjBbHyBbYhwcuaAUUfFwmwWnNMQmMSKiILlkHZzhsuUVAKktFfjJWWnJvVSsBwWfFbhHzlOoLcPgGPpTrEmtzaDKjxaAXEqxSsXJjeESPgWMmpVvPyXXxgGMAamsZzmMiAGgEeMmIqQvVlPpLiSsbNnBnnpPnSsWpgCckKGPkMlfMiDdIiUlLuGOofFeEgCcIbgGJjyErRrPcJjIJjYJPzxGCLSLlVvLxMJEhqQfcCsTtgAWwtTavVxAUMrxXRpoJjgGaAOPWCcemMtXxTsgfCVWwEdDenNwQgGWwDdCBbNneErRcdjBOobtTJVviRreEQiOoRlLgoOigiyYDIGgziZzVvtueJCcRoEeRiIrYaAyfFUVCjQqXQqqQxJgGXaOoAltThTlLtMrMmPpsqQSPpRwaAWHhmHzZEMmMmKeEsSbHhlLPtVAuUmqQHvnMVvhYGlLgzJjjlLJPpBbNnVvmMOoQqWwPKYDqdaATtqKkYoGSEeLRGnNgGgrOoJjlccvVjJCVvCrZYbpgBbkAaAqQPpJfcbCEEeIigINIPvMmFfdDUuvVrRQqBbZzuUVtTwLbSBzZRMmlZcbjLlvISsfFTtIamPpSqJDdjeoOGgwrRGgdmzZVvMDvYyqQsSMmOawKkWlLAxFfrZHHhQAxXqQaeEXGgLlxXDfcRrdwdUKkuDbBjJxXBEYyuQfeqRrQAaDtTPcCpDXxchHaAafcJjELeElNnVPRyYjBbZzWyYPwWrrvJjFNWIiwYJjSnhHtTHoOjfeKEekTJjtxaAjWwEeWfFVvnNBEeSsSksLlcCAtbBNRPZEGgVDdqOorlkKLUcCkdDPpaAKKlLxjJXhHHkMmVsrDdrRdTxJpPwrZAawjkaAOzZoLlKVvJxwqCcQAamheEPhHoOwWfFnWwhHTyZzYxXtzZdDNNIinpHnNxHmMhIgGipPXNzSsZmpPqQBZoOzHyhocqQCDRrAadQqObIKkiwGgUuSsWMIaiIAZVMmcCyBbxXisfFyYSbbKkBXxrRYOotQvaASBbsbjJQqQLzZllcfdDDdFCoOVAawXzGghvVUucCdprcCbBRdcCwmMWDTtXVCcvlLDKaABbGgsSRrFffFZcCIifFhkwPlhBWwbtuUTHgGbPpBDdebBLlbqqJDobpDdhcCiIHPoBbFdymMakKcYyUutTdrOuUohHDpPbtcBwlLwTSsyuUuQCcqQDdEepPmMqTXxtfVvFxXElIpPtaPYyIhHFoOoyYdDOoZxXGgpPVvEezhjJxBXBbjeEjiIrRJdsbBtswrRrXlLxRwWykKZzRmMrYSeEmMszZHBbHhxXhGgXAZoOdjZqQuvVUcCQqjFaPhHcSsvVcCpgXLmMMKkmoxXsAaSPpQqmWTqQttyYqOoFfQoJRXxOosSFfTtpBbCVvcPruURrjmkKMiSLCXhhRkpnNeEmEeZmDdTtxXqQRoOrMUfhHCcFlcFbkKBInNKHbBbrRBBvVZfFYyzNPHRgGroOaAtLwCFInNrjFvaAGVvBIiaAtTdDlaAxIsSsfqFBbeEQLMmbVViGaApPUtWwxoOMbtfRPprtjJTFxdDUuHrRoOhWVvZIizLlZrRoPVWxmMlQqRrGgviZEGgezDdoxmuUPpMmnNNnJjVvxIizZXdTmJjdxtTXeYyEDxxXpPsSKbBqrmMPvVpCUhHuBCcIBJZnNzHhuUZFLlBQqeEyUuVqdwSwvTtembBEedDtNnTMjxxGOogXEeCBbVvcXmMcCvVJNnKkqQEUuaAlvVsGTXLcNKvSpaAPTvVdDtyoOvVzrRsSEeCchSIiIbDKkdjMfJjFqQlOIioaSsltTlLeEDdXxzRNkGgKnrNzTLlibBTtSsIKMmMmdhLlhhHrSfFsmFoOZBbzKNnZBbzkKkcCjJjJPMmpfqJjQsSAjJRrnNSsGarRuUAnNJjmMILlQPFfKPpxXkICuUciCcfwBbsgGPoOLHhlnNZiICYyfuUHYPWBbwgbnGPQqzZpXnorRtTOEUQPAatTguUGgGgGVmVvZzqeEyYXuUJjxPppPrvVuUusSxXURECgkDdGgsWnAaNHhTimBbuWwUtdDSjJaAmMQZzfFhHBrRnsyWcCwNncVvNlLTtnDdHhCSsxNTBbHFfadDxXJjGgGMmdRNMoXxOoOoOrdhHYybBgGbTtPFfrRTtwlLBbcCfBbWDdwwrRvVWFsuvKkURuUmMNYyMCcmnJjrnNtrRWwTtTOlLozHhZEeZzqQSsXewNnWXxFAaVvmeErRMfuUmMouJnTGAaoOtSsTykKdDInGgjnNOonNnDdIilYyWehDdHCxGYyYyvrRZDdhHyuUAagNnRHMmKkmCcMZTWwegGEzZfDdFFsSkKBlLhMmHLlKkJuXTtlVWwVvNnhPBZZVvzUVxqlLPYyHsiIEeSOwWvVCfFshZOYyozXGhyYHgMmxHfFSOoUuSuUsjrhHSsXxRJPpFJvOYnNyoioOZzIcxXCZziYzQqpPdDZDwpPRrSsAoOSyrYoOEeyBxGFYyGfFeEgwWXxaAcfSUhkcCHaAhKpPeXxEHcCHhhIiFmeEnvVvVJXxjabBXxaAJPWwpoAxXaFeYyTgTtEtTUueGGyTSssvVvVStrRShHsvWwDdVuUYgtviIeEBbEJjeMjdRdDrDFfJmKPdPFZzfpPpJjbzFfLlXxsdrtNnTNEmPpFfMWwmMPcCpaAeJbBjGsSOOUuHhoeYUZzuNnnNyywWxCdMSsvRrkIiKuUVmsWDdofFYEeyoOExCWiIwtZzFHhqQPQqpDdfBbTaAwWEeqwLctOoTXDdxUaAuBvVbxXeEciIUSsuChHCohdhzQFdDfINGNnQPUuplxyYMvVFfXkwWCVvcbBjJSsKPxYypPrShZzHDINnLlYySsHhiSsbBbcCaABafFAyIiYIibmMMmBBrRlGgLNoEeJjTtazOkYyWDduKkHhZzbBKkjCcTCclEeQHQqnpBuTtzpPojeEJjJOTDdypbBaAPRcEeCezLlZihFmMMUKkKklLyYFfQqEDVvZXhHxaQqvaLlzZcCcCAeEgDpPEedsSSsGYynNNngGsSKkkKpOoPnNmMNZznLlvVHAalLLluCfFrRihHQcCRhVqQtBaANIbMiImMEMmfiNTtPpFfVzFtTzZBbbBtzKkZwWNnZzlJjRrSsOoPpDIRLlVvoxoLjJQtTbBvgGCcgGjJqUmMhUPsSZzpuuvVjsibbBzZaABIlLkKyYkKHYyhTOotOoIJjiIigGcgGDbBoOdXEexCNBbnYyjJRzZTtDdwnpRvVrcCEefFKQvrRuEVveUvVVJNchHOooObByYpRQqIimyDGIigdirkKOokOoqZdhGFpjZIuISvQqQqqQbOxHpPpPyYYyiIhWBOowEeWUhDGZVvTtRryQqYtTbBnQAaqurRcCUBfFbuPvVfFpoLfFDFfkKjqQJdHhnbyYyYBQqyYmMRYiIGgfFWwHxeEGfFHhofxiDTCctTCctJjvViYKaIiAgtNvMmVPNnoOBVvbYIiyYDyYurliOoIHhLrRRUuRuhHMetTEhqBbQqQyQqYPnNprRQquaAVATMBbPpNnCjJeENaAsVFfvShHtPjsSNKIitZPpzqSstTxBbXQIPppJjoPpOsdDbbBoyYDdvVpPODdMpPXxJsHFbBGGggfEHhelWQqWwzZwzZAaUtuUwWctTwNbBnNAqnNQaWdgGNluULNvVnBZwWiIfgGvVFpPpBbvVbBosShSsbkKAmWwMiZtTWFKkfwqfFQzpPkKEbBeuUtiyMnjJNmhQZsNQTtPpqjlLhHJeRrEnIwWiIiBZEezZzsjJOrREYyeoQqSbaaDubBnpPDdNxGhHxnWwQhHEeKMYywrLcRbOxHhXoOoSsIVvuBblwOYiecCUuhmMPARkHMmhKsSoaAasSizZIyYAYyqkWwKXxfDdQpxXPtVLlvTqkSsKbbRrXxryYRIhUuDUudEeOKkFRBbrsSfuUuUorRRhHrsXCOoVJjvcfPupBbMaxXfFWwyPFfpBjKfFKSsLlSsWRrTeEtlfBSmMsLlSMmMmQEnNqICPnNSsBLDdlpJWwjtUudzZnNRrkCXxiMsSZzXxmYyylLdsRrcdbBDPhtTTmMtBjtTJsSXVURoxXOJjEBnNfFmsnNSZHlAahHhgGiIhJjHbBItobJjNnBoxXOMkgGKYyhHhzjJZMPpmiIFyYOofRrHhsSFVwWTtnUuNvikKZAsSaZpPsjJLwLyYlAsYoQqppPTgGpxXPRrUVvBGgbrxXRuCcnNLltcYZwWfFzyJFeEXxeqQEfCcwWXZzZzHUuUAbBaHhWeEVvwYSnNhGgncCNnNHxFSsCyBHhbUuygGrRyYoHhOYpyxiIXfFaIJjgEEegGEKkpqQBrRVNvVkvVgeEGodDonNAvDAaAadVavQqVZzhnNdiIQqtTeOZuDKLgvVLLllvmOoSmgGdNnOyYCMmcdoODhYyYyHeomMPpmkCcKfFMfFlZzyYKsHhVvMmcCiIqQhHHhGgkuUKMmqaVuUvAOodDTpzZPgYyJjlLXxROoLllLrGEvVeAsSiIqQlLxXRrZKvVOxXjHQvVbBqZqQzmKkMgtThHQfrRGgqQSaApPJjswOoGgYGThHBbPpIiVvRrKuUjJyPYSsleUuGgiYyHhFfHYygGmXxMuUhHYyhIEPtTZzIipQqyYzJzZjZMfFmpPgGTFpPHXxYyzDJjJHhCrRcAarRUuVvvHhmMPpVECxUwjEeJpPbdPJbBAaBbaAjDeJjEFfdAahHZzLIioOYwfFWyltuMpPeEjbUuBvxXoOEeYTtyYyuUTtwNnjJjJlnNoOgGjJEzZymoKpPzZxXQqLMlLruQmMwWAaLwFfGzFfEJjauuUULFPAKjJxXQdDqRrqQqQTtdJXxjZzYwyfFYRroOGNXxKkbBnoOgWyjJDpdWwDlLHhPkuUTtdDdDnGTtgzfxXFuuUlLvVRrUoOZzZGgNnsdDYyMmyYFHhBbCcQqqQtSrRxDqQdOVvYyoVviIXjvVRqQrJtTrRokKOMmyYjWwJAqNnukfFdDKXxBJjBbMnNjJCjkKJtTOoqQKkKCcbpOLlLKsMmSHhrRLlkkCZzZvNAbBTtINsFfSWHFGgsrRSrRfhRzZPNXxVzayKkxEeXZzYmgGUIoiKkVESJjsMmtGgPpTQqYymyMFfeEXxmJjhKkHvVEeaLloEeOfFrRZzTAalIiLmfFMtqyYjfFtAauUYFfyMmfBhHbPpnNZzhHFMyvVmMxXcJjqQzZLltjJTPZMmidIXxitRrshHDSsdcCHhDwWXgGxmxXxTtXMluUqLdDbYDdyBUzVvdDWbBTOoPptMmnNZzeRrcCdhHDFHhYIiMUuYyUubBhHmSuuUaPpMUumixXeEaAIbwxJjXhHnNCUucstTSWwWKkrXxsUuSyoNnOQEEeequnNnNQqGGDgGoOLlUwWMphtfFTHNWCuBbiCcJFftTRrjEeMqWwXxQqKkREiIPPUaAuVgGTvRrEMmRZvVXKTtDUjwWazZuUYIiGgykGgEeLOoJBbBXaAEQqkKeifFIZoOzTtDdjJYIivfmMDTqFfQzNnHpmwlLWYHTFCcSdDsfFcCfvZzKGgQqiIkelLEqQueERlwJjDdvgGgGVmhxHhXHpTtoOPMTtRQqfqQDoOdqqQXRrXxiImMfnyYNFJcCSzZFyYqdRrDTEeBCcJjcCMmdTtDOoQDAiIMmcCCKkDZJjdDdDLiIXPcCpwWcCiiGNntHyYHhKkrRgjJpOnNoPrRufFUlWzCcHhVTthHvSsSlLuUbBgGUrbBRAaTtXSmAaMJjsoOFMmFLlfkQqXxsEIirRBbPpEeJjbBsqQpLcCNeAaEaAaAbyLlnNwWRlLrCcVvkwxXWKRrFXxbBpPfLUurlwzZcCaRGEeTLlgKkuNnOoqQNnYycCpfVvDtTdFfFRDdbBPpcCLlRrroMmjLlvVJMJjyYHhYyspSJwWaZkKIixXzAjJjkrvJZzPeHVvAadDlLhERrYFcytTYCYZBbLldBsShHAUvVuaBwWSsWyYxQOooOPpoOSrIcCiIxJjoCcOAVYyVvUBQqbWmIVxaAWkKwqQZaLUuwQqhHWXXxiIMmuJjKgGCcaACdYeExPzZMmZZIfvOoVXxkKiInNiBbELleRrRZPpWwzIiaxXAeExfFXvSGgsshHShuUMmHqQVcPpCJAbrqQwWgGBbzZTtXbBBbtTxytTgGYRwWHuUkdpPWjvaNAanxXAnrFkKzVSRcNniDdIhgGzZvVhHpPXxAaHCZzrsEeuUOoTfbBFtRtTmMbxXBriWwEkuUKNnQqEvVebBomMqBbQILGglyCPpMmSFfsdRrNnSzZwZzHhfFWfSsbBFIiLlsrayYKnBhHHhPzIiEewDDddWZCcTcCtVvMmgGtTlLhEaSzZNnYyNnsJjdDwVvCchZznvvVQuUqdDgXyYvDdVwODdoLlWxhHvVhiIPpNndcCDjJMmNaAnHheaAERsSOLlHhkKfFeoeaPpdRrEekdDjuUDavbBRrIiuuUIiMmNybBzZYgUukxXXxKCoOJjcEYyXXzMtTbUuBZVvmMKkTtzcczZCAxvVSAaCMmaAhaGgJjAEKOokehOoIiXxjJrRMlLlLmmgxKkMmxRrXiIJjIDdioTtyTpPCgQqGdFMmkwWIijJytTYKjTtJumbBZzMCcgGiyYBfkKFbIUDGMZzcCmuUgFfMmbBrdDtTPpTtbBgrJjBbLlaARdGgDtTuJjzHxXhYMmybjJBcCcQqeEYWWwwtTrRyyYmMhHCAarPpSoOSsoWOBbuUqQffljJXYyCcMAUuabBfFCzzZIQqijJMmZaIiGyIiYoOnNOqTbBHhXxwWgGmMZyYFfMPpBbZzmLsSeEnNlkKDjJUJVvjfFUutAaLzZlsJGwWgjQqKLlkkKcCZKkztTSwWUOouuUQqPpbBOoKkNqQhHOtTXxjJlKkuxXyDdjJOolLPuUpRYbBjqUvsCcxXsbBEeYykKBbIiWwvVZzFHgGhfbSdROorhWpPFIdDilSdDsDdLUzZOouFfCeESsDjJdjJpPXBbxDLlEeiIpPozZgGDdNqQnRrGQqYzTtukKMmdWwDGgWGgwUBbeAHBHEehSaAeEPpcnyayAaEeHhYArHRrhHhAzZiaHmMizZKkHKuUkBZqQzqQkRYyLlrKLEelbhHhYyhHdfFDIkKHhWTtPFfpEeOUMmARrKkpYEiCcXSsxITtXxeBPkJtBcCbTjnNqQKyzZFfbBxzyYZGuUuiIDuUdWQqwumNnMUVkvnNVLGglKvEAarRenNjlLJUvVaAgWPpwKjYvVyjetTEPpamMjJPpARMOKkozZsIqrqQzreEReQqEZNWwDdngGCcRLGgrEelwwWZzyYCgGjPpeETzZbBLlOiIouDXFfPRRrrLlitTIbrRrRYCclYpCcPXTFEcbumMkKwWaAUuUBtwDPohFiIwTtWUuAafSseQBbqELxXlsSIiBbqQGgpyYgGGhHgfmtTHGghFfMrRfFFPnNrRFfRbBrdVvKSRrskHhKnNkNnTtyOocswWlLTtzZStTCGwkFfgGSshbfwEeWFBuUnNQyfFUuiIrRsSVvZzBbrRwWBWwCcbBVvaAqQGmMgQrdDdDaARoOqUucCcZziIPpCWwbKkYTtVvjJjJLlbNnOHhPTtpRrqAaYyQLluSsHJjhhTtHjkKLFflHYZuUEeTtjEeJjJQqWOoXxpUuKkgYycOoCGONQhHChHcsSYyqkqQuoOaAULAaOolKHhIiAaAgGQqIhbKkzbBFftwWTCcwWZgQsShHFfbBkKYydDiIqcKkWJMmTtjQqeEvDdFfHhUuNxXSsmQqQOkGCjJPptlFDdzZHTtCLlcsevVJjEIiqQMmdDSsCFLlfvVWOowcnNkKKsSLlkbmMsaATtzZfaNnFfxXACyFfLlYEdDSsznbrRBmMWwCRrnkKOoczZlOoxXAOoQOoqoOasShDdMmHcCBbBfFbEsSetTnNbBAaAaxyYXSsABbapSvVsiIPLCQqhfFfFIoOiHjJqdyNEeyZzYpPnMdDNnAanNmYfFtTzwWZVjJLlvzYVHhoOmJEejMEexXBbIibBIKfFaWawWAwtTOryYzZRrCchHqUuWwQRfFHdzZZzfSsKkLWwAajjJqAaQJQJjzZlLQqmDfFdBndDlLNbCcuUpPfbBzZFcFfMmsxXqQSEeMmCMSsGgEexEeSsWkVvKlyYgGLwQQqJzWwZiKkIEVvxXejbjJBhHOoqQMmNySgGlLfFfFDYyLltbBXQyqQYqvVCcjJMmpPxWxXwwtTNnWaAPpzEeUuVvtUuqQsSTflMmLbBFVveEfFybUuzZDdIiIGgiTMdwcCWIilbBLmQAVvnDdcCNDdaOoepaAzjJZGgVbZzBvrRZXxBPQwWqXxAaqQBbGgmMFtKkJmgQerDdRZOozNlLyYZCcVvzJjsSnECcGgcCqQAGOodXxQqnqQNkKDtLAaiIaNfFnqQucCUCDdvHhahHJPplLzdDZtfEefFWwFzZXxtTMagGhmMHASCcsiIVvwuUWmTtHhjJtmyoFfOCngyYBmbkIiKKfsrRuUSFBbkoOUuJjlHgGPphLuUvVpPtdYynLHhTtoOlNrWwDtTdwWvVAdKkJfFfKkFjAaShHFfnLiIlegGTtEbcCxXuUSsOoMlHhLiYhHLOooOZuQqUMmnNuRrRrHfFUupPhGgkQqPCcEejTtJDPpdwXrXxkKFzZqLlKkZzQmUgrMvZsSCcIiwWzVgGBbRuUyYrkZzXbBxUDdugGyYfFGgCQXkKxLwJrRGBbgWwjlLCLlcmxXWwGeEGqjhEeDdNfeIiAartTRBbcCNnBbEoOFPpVvtAaLlTnEeuUWrSsSbBTGgtyYYwWfPpFBbeEyHKkgqLlQUuBbEeGVWwmMaAveEBUulLGgbmMHdDhkKLlXxQqWwZWwbBznNQqEedXjnNpJxXjBbPLyzZYlryYxjJYYyyXZhHMHhSsmjALKkuUlapPDddDFSsIiwcClhcCWwHdeEDehdDHpPyYCYyceNnZzdDaATtEoOgGnNBZzbNDZzdnOobBBZzChHcGgbKdDAakELeEWsRHhCMmOVvoFvVZzPpfFYyZznjJQqtDdTscHwWhCzuUuUZGZHhwjJqQRrOUuOPbBsSZzpZbBuGgUzrRfoSsOoQqxXOMxaAXCcmNnfdDFFGgPUupzZzyYsdnNoOHZzTthawZzWourRUKSdBbDxXjJBbeQqUrRmMOKkZEezoUTtMEemSsMzcYyIerZzRZznpuUvoHoOhLldDtTHhDdbtbBTMGVjJvcCwWgzCcEUueklLRTtWwXkLlKyYxVvoOQqoObBUuMmtbBAaTNasSAdDWpPwnSsMmLweRrwWEnNWnNpPlhHWwdWmMBbLtAaTNnMmnNdDtkKudDIlLLliPsKkslLDdSywWYjJYEdICPpnNHNnhMfFtblLBTbbBGghLlHBmFfaoOWwArcCAawWeEEGgedbBUuGHRrhYyCcpvjJERcCNnsmOomMAafFnNpzAaEeZcBbCKkyjuUrRbkKJYyjBkZzKpGgPpPixSsNHhnanxXNQqOorrfFRvVRhHAxXqmcEeCMQrRIpxxXXTVvFdNnVvcCDzkKEeiIixbBoOXiqQIwDqUMmuLGyWwbBTtyYYZzljkKJLDdfuyYUyYFFsSyYUmMiIxHqQfFYrRyauUnNqQbUutTdBCcbDNnGPpHhgUuEiILlYyOhHTtoAafFMFVvyYfeFflLlAabZsSAMmafqIijJiAPpEeadDIXnSsNkKQrmNLlMmtTBbhHEePMjmMBbKhHkxiIXJqQoEezZBbfFmUueyYcpPCuKkRrUVIcCiHhcoORDdrhTapPFiIfThyYHTtpDEeTKkQqvQqVOoSsGORHhxaAXUurziccCCAaxaAWiIwspPxXQqnhLlHNOoZzSlLsGgSDdcJqQQABbakKqNnMmFxXfjCSeESsbBsyYpPtFbBfTjJtfFmMTtjJIisSSSssCYGuUaAgoOyWCcwcwBbWuUJHhOoEewTtouUOrhQqpuUPHwEeBSsZzvVKkQolLOsDEedsSTdDtNnhkKHEsSMmeEeoMmbBObeENnBuUcYyEeJjEtTeHhEyYsSxXUuoOeKwdDMrRvVmOooyYIigGbBnnSsNncFfCNmMHcChPpzZNyKMXxmkGnNgxsqQSJjiIXRJjlhHXxrLGXxlLlRUrRuiILlrMmLmrRMlSsdDrRQqfPpFXxjJuUrRkKOoWwNnuFfWweEMmvsSVkKGMmgfFfFLlnNmMCgWwbIiSsBnNGWwAacOoFZPpzzlLZMmhXVhojJOHvSjJsSaAXxaAskKUuzDIiXLlxcFNnfpYyZzPjjJGgwWKZYymMzXEexkSreERsHKkEeGgKkYPpjZGgzJjvVJoEwzZWePpWrRwWBbgTjJtFfyYkKpPGwppPeEpPdDwWwWLmUVhNnHRrpPcCvQqTtFfQnVsSvrROTtTgGtJWwjxXQqCZzcePpWwENnoiIErRAaPbEFfeBVvRuxXlLUqQuXxvVCqQcxDdIiPpXCBJjbVYJkKjQyYqXxoOFBbfODyYdavVVvIiAoIBbjJiMdDTtxsSXPRrmMPpfFHGpPgRrPiIITLlvVjiIJOqQpPidDIYyxGgXCcoAabBCcKkQsSbBqTeFfEqQBbDvlLVdUCcuUuSstWzIiuUZBvhHVAahpPQqHvVPXxpfJjFrTtRoTthHOEMmRZzrmVvHhUupsSLlVrjJRyLFfxPgGjRrJpNRrnHhIiLnvVaANldDPzZzZpOaAbcCBohHXllQqLfFGgjJBwWbIigZzlYyLlLORBJjvVbWwrJoOZzjsStTeEiICJjvVuUcNndDAxXuUEhZzzZHhHeQqqMmDUudQeEZzZShHhHcCxMmMYnNyfFAaEezBbBbZAnuKkUNGvVgSmMbBsMqOomMQmaKJjZZzzYyndDhSGjJIigsvVmMPpHNkKKkVuULWwIilvmmMOWwoqQzyYCcKrRkPpoLeElOZnNxXbLlZzBIiayYAtTjgGRriIGmiIMgJbxXBvfFOobBMmVuUsbBOoOortTNnRdjJDwszZScCWSIiXxZpIiPXxOoKkzswnNWSkKMmMgGYyNXxOouUxXnNEeVvBbnKkNNqQnNnnNmMUuyYUuzZDEpPfFQPpqIXSsGgyYLluUxjyYJBbiHhpPsSqQbBwWXaAxBwaWwAeEDdWTFDdffFmMIEebBLliIiNntpSsPeGdDgTYytEoOZzPpztTOowWEgGPpIpHhPOoaqmMgGnNQYyxXNlLHhaAnfFpPhHIfcCQqFbmMOFrRuUVGgvfEefFoZzsSeHhEBVQqcCGgxXFbsSIiBaAHhHDdXxhlsSLvVZzkKXXHhxNnnNxfvYyiaAiIVZzTtIivAgGGUiISszZXxCeEcYyuFfFfnykKEeYKkQtTExXxXeqewWwWvgGEeViIEAaeElLNLlFfgijLlJwGgWNxXnxXUmwAETteaWMBbuubwWBiIPdrRiwWIkKCcDpUuKkUOoSsOoDtTsSQVjJvmMZsScPpCzQuxXnNWwUHhPpJjRrRrNLltTDhHvVBbpPdnqSCSIdDkKiscMmqQlKkIimkRrKMDdXxzZsSftTFgBYyZzbGLSIiPZzkKjnNJpszOoZqRjJrQzPzZpTtZrRBbCPpMTtFfqtTvECcYaAyeVbBQDZdDzPpRrdzZGmMmXxxXMlnNzZLlphHPVdUujJtRPpCczzqQZHfFoFfOWwAahXxVJOojXxTtvZZzJNncCccCCzZNnyYQTtqlLXxjFvVYyCEeJjlLcjcCJfyYbwWBYXxZzMmAafdDkXQqxMmKCwKkWmnNaAKUuaAqKvVkQkzgGZJsBpBbBbYRreEygZWwYIiyzGlLygfDdFBPYypGgaNnnlLNAVaKaAnNkUIiYTteEmMyuPpXXxnNxJPpzrMNnmRhHdumMKkUjXxJtTDwWHBbdDhIuUBIitTVzZBbQqvIilqkUuKQmMLbWwjJZzkWsSVFfDKhHkdTteEPAapVOovvZzwvMmqQVxHnNhwfFWKkXdDzcCZhHCbBEeEwWmMEeezZNqBTtbRCcFfoZBbsSaAmjJMVvJjlLzAaVvUuKZzViIoOOovhHkdDdFwWpIiUuPaAffonDdNgGtWyrRYyQqYwVvBYlLdDyiITpAQqcCuUadDkKPRruUReVAavEGgkKGgrEXxetTNnrRshHBMmwGgrRSpjJeExXdDdDvVPKZzktTZMmzkKRBbrcCPpDdpuUPifFOosSgGzhHZsMmSUuIoCMmcORuOxXOoqQiIJyYyFfYWwOoDdAacCkJjRrGgcgDdGgGCWpyYPwjJKZfTtFzeEjqQLlWwuYyrRnLlmDUQqudmMMAaXgGxYpPViYyzZIfsSOovVFSsIiyKTtkRrYbBJjkUuKiIWOowvIiPpIWwitrRvVmMTkKCcntTNEeQqcOGgoIiOoOoCrEegGxhHXRkKFfsMGgmLlSDdwLQqCMmdDYZzycEeXxCcJjtRrYykKpPTNnlyYbBRrnpPZzeEhHNehLhHSsljJHoOJlpPBbtIiMwAaWmTzGXxgDYydZLMmMmjPpRrwWvVvVNMvaAVmeExXzZkKnNniIksSKNHlLEuEeUuUevFfVFfSshbnNBRrHhnaAVvEeYyEKbBksSWDmMduUQvYyPpVqLTtdVFYylLKkfvzZIiDRjJrlEesSyoAaVJaAjaAoiTdDtOogGPpdDpIiPNnOwWzaAZlLTtoIwxiICLlcXWOIiRrcTeEtCsSoOGsSXxeEgYeEiIjdDJEeyHhrRrUuRHhfgBbyYGbnXxeEuzYyBbZmMJkdDKjFUuflLTeEtkKoOkKrRZzRIiCcGgGVvCcVvYaWwBBbNnbBmMXxbeEXxWwlZaAtTzLAyRrSBoOqiIuUQwxXWCcMgQqeEKkPWwpGmyYkmCcRrMKaTyYSsBbtMPQqpcbBCmdDzZwWOWwoKOoXxklLAIUuCcGgiNnUBwWcCrRrRbuBPDdrRRrpiaAIGgrOoRbWwvVxxXXbyxXYaUGgLllLuHzZKkWwhAhZcCJoOjXxxwWCwWBbcuUeEzPpZJjsCcSCcXRFRiIruUiIEeUBbSsQquZLUuUulHVvhwWHhVvPSspZBxXbbBzzMxDdXmZlLyYXAaIiTtKkxWJqQjcCwOoOjJdDlLSsNYQqyqUQquQhHJlLjnrRJBWjkKqQJwbNnhHlQqLiIYyOojbBTzZtwWoOLqQlTkKRrWwDMUSsumrRdtTtISszZJAOoHhaKkjitTJjZaeEAPaXxFfAfFhHUEethHTuKkLuxXUHBbhwWDtThHdJjAaJjhfFnNnNXxHaAAalUuZzeCcvVxXEhTtHQqCsSIEePpizKkuUGgnWwTtCcNWwzjJFfydDYtOogGTtmaAMTUuIiZZcinhHNiIJjTfFFfFftTtbBfSsFImbjJsnNRrSOovbBVQYUusSysQqSPpqPpHBnNblLyJjYyIiDdYTtgGhOoazZAsrRSdoODBDedDEdYnmMNUkKIiVQqrRrMmRvDduYyTVvtfFBbwrREeZzdDhHviIVbBfFQmMoOLlAayCcyYyYYqQNMRrmirRTtTtInwWySeEsYNuUpPnCWwGLlgcZAazoOALlWwanYyNloOLZzoOhFfgGHhtBnNbTqQHiqoOQCcInNFAoFfdAayVvYKCcaKkVvAOoRrkxyYXTzsSZcmMCtDyYpPOPpZvbBKkVzGDwGgPpoOJjLlWtTfFM diff --git a/src/05/part1 b/src/05/part1 new file mode 100644 index 0000000..969c1a7 --- /dev/null +++ b/src/05/part1 @@ -0,0 +1,40 @@ +--- Day 5: Alchemical Reduction --- + +You've managed to sneak in to the prototype suit manufacturing lab. The Elves are making decent +progress, but are still struggling with the suit's size reduction capabilities. + +While the very latest in 1518 alchemical technology might have solved their problem eventually, you +can do better. You scan the chemical composition of the suit's material and discover that it is +formed by extremely long polymers (one of which is available as your puzzle input). + +The polymer is formed by smaller units which, when triggered, react with each other such that two +adjacent units of the same type and opposite polarity are destroyed. Units' types are represented by +letters; units' polarity is represented by capitalization. For instance, r and R are units with the +same type but opposite polarity, whereas r and s are entirely different types and do not react. + +For example: + + + - In aA, a and A react, leaving nothing behind. + + - In abBA, bB destroys itself, leaving aA. As above, this then destroys itself, leaving nothing. + + - In abAB, no two adjacent units are of the same type, and so nothing happens. + + - In aabAAB, even though aa and AA are of the same type, their polarities match, and so nothing +happens. + + +Now, consider a larger example, dabAcCaCBAcCcaDA: + +dabAcCaCBAcCcaDA The first 'cC' is removed. +dabAaCBAcCcaDA This creates 'Aa', which is removed. +dabCBAcCcaDA Either 'cC' or 'Cc' are removed (the result is the same). +dabCBAcaDA No further actions can be taken. + +After all possible reactions, the resulting polymer contains 10 units. + +How many units remain after fully reacting the polymer you scanned? (Note: in this puzzle and +others, the input is large; if you copy/paste your input, make sure you get the whole thing.) + + diff --git a/src/05/part2 b/src/05/part2 new file mode 100644 index 0000000..fce9042 --- /dev/null +++ b/src/05/part2 @@ -0,0 +1,75 @@ +--- Part Two --- + +The air conditioner comes online! Its cold air feels good for a while, but then the TEST alarms +start to go off. Since the air conditioner can't vent its heat anywhere but back into the +spacecraft, it's actually making the air inside the ship warmer. + +Instead, you'll need to use the TEST to extend the thermal radiators. Fortunately, the diagnostic +program (your puzzle input) is already equipped for this. Unfortunately, your Intcode computer is +not. + +Your computer is only missing a few opcodes: + + + - Opcode 5 is jump-if-true: if the first parameter is non-zero, it sets the instruction pointer to +the value from the second parameter. Otherwise, it does nothing. + + - Opcode 6 is jump-if-false: if the first parameter is zero, it sets the instruction pointer to the +value from the second parameter. Otherwise, it does nothing. + + - Opcode 7 is less than: if the first parameter is less than the second parameter, it stores 1 in +the position given by the third parameter. Otherwise, it stores 0. + + - Opcode 8 is equals: if the first parameter is equal to the second parameter, it stores 1 in the +position given by the third parameter. Otherwise, it stores 0. + + +Like all instructions, these instructions need to support parameter modes as described above. + +Normally, after an instruction is finished, the instruction pointer increases by the number of +values in that instruction. However, if the instruction modifies the instruction pointer, that value +is used and the instruction pointer is not automatically increased. + +For example, here are several programs that take one input, compare it to the value 8, and then +produce one output: + + + - 3,9,8,9,10,9,4,9,99,-1,8 - Using position mode, consider whether the input is equal to 8; output +1 (if it is) or 0 (if it is not). + + - 3,9,7,9,10,9,4,9,99,-1,8 - Using position mode, consider whether the input is less than 8; output +1 (if it is) or 0 (if it is not). + + - 3,3,1108,-1,8,3,4,3,99 - Using immediate mode, consider whether the input is equal to 8; output 1 +(if it is) or 0 (if it is not). + + - 3,3,1107,-1,8,3,4,3,99 - Using immediate mode, consider whether the input is less than 8; output +1 (if it is) or 0 (if it is not). + + +Here are some jump tests that take an input, then output 0 if the input was zero or 1 if the input +was non-zero: + + + - 3,12,6,12,15,1,13,14,13,4,13,99,-1,0,1,9 (using position mode) + + - 3,3,1105,-1,9,1101,0,0,12,4,12,99,1 (using immediate mode) + + +Here's a larger example: + +3,21,1008,21,8,20,1005,20,22,107,8,21,20,1006,20,31, +1106,0,36,98,0,0,1002,21,125,20,4,20,1105,1,46,104, +999,1105,1,46,1101,1000,1,20,4,20,1105,1,46,98,99 + +The above example program uses an input instruction to ask for a single number. The program will +then output 999 if the input value is below 8, output 1000 if the input value is equal to 8, or +output 1001 if the input value is greater than 8. + +This time, when the TEST diagnostic program runs its input instruction to get the ID of the system +to test, provide it 5, the ID for the ship's thermal radiator controller. This diagnostic test suite +only outputs one number, the diagnostic code. + +What is the diagnostic code for system ID 5? + + diff --git a/src/05/solve.py b/src/05/solve.py new file mode 100644 index 0000000..263f9fd --- /dev/null +++ b/src/05/solve.py @@ -0,0 +1,30 @@ +import sys +sys.path.append("../common") +import aoc + +data = aoc.data + +def react(s): + i = 0 + while i < len(s)-1: + cs = "".join(s[i:i+2]) + csl = cs.lower() + if csl[0] == csl[1] and cs[0] != cs[1]: + s.pop(i) + s.pop(i) + if i > 0: + i -= 1 + else: + i += 1 + + return len(s) + +def solve1(args): + return react(list(data)) + +def solve2(args): + react_wo = lambda x : react(list(data.replace(x, "").replace(x.upper(), ""))) + alph = "abcdefghijklmnopqrstuvwxyz" + return min((react_wo(c) for c in alph)) + +aoc.run(solve1, solve2, sols=[11364, 4212]) -- cgit v1.2.3-71-gd317