From ad1af7fee3bf8b499ebb2516ad3dd3f7504b934f Mon Sep 17 00:00:00 2001 From: Juho Haapakoski Date: Tue, 22 Oct 2024 11:15:13 +0300 Subject: [PATCH 01/21] AE-2282: Add comment about oikeellisuuden valvonta liite destruction --- .../main/clj/solita/etp/service/energiatodistus_destruction.clj | 1 + 1 file changed, 1 insertion(+) diff --git a/etp-core/etp-backend/src/main/clj/solita/etp/service/energiatodistus_destruction.clj b/etp-core/etp-backend/src/main/clj/solita/etp/service/energiatodistus_destruction.clj index e4fbceee4..2ded9ed09 100644 --- a/etp-core/etp-backend/src/main/clj/solita/etp/service/energiatodistus_destruction.clj +++ b/etp-core/etp-backend/src/main/clj/solita/etp/service/energiatodistus_destruction.clj @@ -69,6 +69,7 @@ (defn- destroy-energiatodistus-oikeellisuuden-valvonta! [db aws-s3-client energiatodistus-id] (destroy-oikeellisuuden-valvonta-s3! db aws-s3-client energiatodistus-id) + ;; Valvonta liitteet are destroyed via energiatodistus_id in destruction of liitteet. (energiatodistus-destruction-db/destroy-energiatodistus-oikeellisuuden-valvonta-note! db {:energiatodistus-id energiatodistus-id}) (energiatodistus-destruction-db/destroy-energiatodistus-oikeellisuuden-valvonta-virhe! db {:energiatodistus-id energiatodistus-id}) From 48fb1ed890f372e90bf515412960dd01ab78f1e1 Mon Sep 17 00:00:00 2001 From: Juho Haapakoski Date: Tue, 22 Oct 2024 11:16:09 +0300 Subject: [PATCH 02/21] AE-2282: Keep the energiatodistus version when anonymizing --- .../main/sql/solita/etp/db/energiatodistus-destruction.sql | 4 ++-- .../solita/etp/service/energiatodistus_destruction_test.clj | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/etp-core/etp-backend/src/main/sql/solita/etp/db/energiatodistus-destruction.sql b/etp-core/etp-backend/src/main/sql/solita/etp/db/energiatodistus-destruction.sql index 78f29bd97..8d4b2b21c 100644 --- a/etp-core/etp-backend/src/main/sql/solita/etp/db/energiatodistus-destruction.sql +++ b/etp-core/etp-backend/src/main/sql/solita/etp/db/energiatodistus-destruction.sql @@ -124,8 +124,8 @@ update energiatodistus set -- Keep the id. -- id int generated by default as identity primary key, - -- Set versio to same in all todistus. - versio = 2013, + -- Keep the versio. + -- versio = 2013, tila_id = 6, -- tuhottu allekirjoitusaika = null, voimassaolo_paattymisaika = null, diff --git a/etp-core/etp-backend/src/test/clj/solita/etp/service/energiatodistus_destruction_test.clj b/etp-core/etp-backend/src/test/clj/solita/etp/service/energiatodistus_destruction_test.clj index 74d5cf2f5..36c058169 100644 --- a/etp-core/etp-backend/src/test/clj/solita/etp/service/energiatodistus_destruction_test.clj +++ b/etp-core/etp-backend/src/test/clj/solita/etp/service/energiatodistus_destruction_test.clj @@ -264,7 +264,8 @@ {:key key :value value :valid (case key ;; Here are what anonymized values should be. :id (number? value) - :versio (= 2013 value) + ;; Versio is kept + :versio (number? value) :tila_id (= 6 value) :laatija_id (number? value) :korvattu_energiatodistus_id (or (nil? value) (number? value)) From 4247496ab37b8dfa6d2a30d41da6ad63de97a1fe Mon Sep 17 00:00:00 2001 From: Juho Haapakoski Date: Tue, 22 Oct 2024 11:18:45 +0300 Subject: [PATCH 03/21] AE-2282: Refactor vo toimenpide publishing to optionally not send emails This is useful in tests --- .../main/clj/solita/etp/api/valvonta_oikeellisuus.clj | 2 +- .../clj/solita/etp/service/valvonta_oikeellisuus.clj | 5 +++-- .../etp/service/energiatodistus_destruction_test.clj | 9 ++++----- .../solita/etp/service/valvonta_oikeellisuus_test.clj | 3 ++- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/etp-core/etp-backend/src/main/clj/solita/etp/api/valvonta_oikeellisuus.clj b/etp-core/etp-backend/src/main/clj/solita/etp/api/valvonta_oikeellisuus.clj index 19ea5a815..7b74a6e12 100644 --- a/etp-core/etp-backend/src/main/clj/solita/etp/api/valvonta_oikeellisuus.clj +++ b/etp-core/etp-backend/src/main/clj/solita/etp/api/valvonta_oikeellisuus.clj @@ -298,7 +298,7 @@ 404 {:body schema/Str}} :handler (fn [{{{:keys [id toimenpide-id]} :path} :parameters :keys [db whoami aws-s3-client]}] (api-response/ok|not-found - (valvonta-service/publish-toimenpide! db aws-s3-client whoami id toimenpide-id) + (valvonta-service/publish-toimenpide! db aws-s3-client whoami id toimenpide-id {}) (toimenpide-404-msg id toimenpide-id)))}}] ["/document/:filename" {:get {:summary "Esikatsele tai lataa toimenpiteen dokumentti" diff --git a/etp-core/etp-backend/src/main/clj/solita/etp/service/valvonta_oikeellisuus.clj b/etp-core/etp-backend/src/main/clj/solita/etp/service/valvonta_oikeellisuus.clj index e14126866..ed161710c 100644 --- a/etp-core/etp-backend/src/main/clj/solita/etp/service/valvonta_oikeellisuus.clj +++ b/etp-core/etp-backend/src/main/clj/solita/etp/service/valvonta_oikeellisuus.clj @@ -343,7 +343,7 @@ (defn delete-draft-toimenpide! [db toimenpide-id] (valvonta-oikeellisuus-db/delete-draft-toimenpide! db {:toimenpide-id toimenpide-id})) -(defn publish-toimenpide! [db aws-s3-client whoami id toimenpide-id] +(defn publish-toimenpide! [db aws-s3-client whoami id toimenpide-id {:keys [inhibit-email?]}] (jdbc/with-db-transaction [tx db] (logic/if-let* @@ -354,7 +354,8 @@ (asha-valvonta-oikeellisuus/log-toimenpide! tx aws-s3-client whoami id toimenpide)) (when (toimenpide/audit-reply? toimenpide) (add-audit-reply-viestiketju! tx whoami valvonta toimenpide)) - (send-toimenpide-email! db aws-s3-client id toimenpide) + (when-not inhibit-email? + (send-toimenpide-email! db aws-s3-client id toimenpide)) (valvonta-oikeellisuus-db/update-toimenpide-published! tx {:id toimenpide-id}))))) (defn find-toimenpidetyypit [db] (luokittelu/find-toimenpidetypes db)) diff --git a/etp-core/etp-backend/src/test/clj/solita/etp/service/energiatodistus_destruction_test.clj b/etp-core/etp-backend/src/test/clj/solita/etp/service/energiatodistus_destruction_test.clj index 36c058169..965aea233 100644 --- a/etp-core/etp-backend/src/test/clj/solita/etp/service/energiatodistus_destruction_test.clj +++ b/etp-core/etp-backend/src/test/clj/solita/etp/service/energiatodistus_destruction_test.clj @@ -369,7 +369,8 @@ ts/*aws-s3-client* (test-whoami/paakayttaja paakayttaja-id) energiatodistus-id-1 - vo-toimenpide-1-id) + vo-toimenpide-1-id + {:inhibit-email? true}) (valvonta-oikeellisuus-service/add-note! ts/*db* energiatodistus-id-2 (:description vo_note)) (valvonta-oikeellisuus-service/update-toimenpide! (ts/db-user paakayttaja-id) (test-whoami/paakayttaja paakayttaja-id) @@ -378,7 +379,8 @@ ts/*aws-s3-client* (test-whoami/paakayttaja paakayttaja-id) energiatodistus-id-2 - vo-toimenpide-2-id) + vo-toimenpide-2-id + {:inhibit-email? true}) (t/testing "There is some toimenpide before deletion." (t/is (not (empty? (get-vo-toimenpiteet energiatodistus-id-1))))) @@ -401,9 +403,6 @@ (t/is (true? (file-service/file-exists? ts/*aws-s3-client* file-key-et-1))) (t/is (true? (file-service/file-exists? ts/*aws-s3-client* file-key-et-2))))) - ;; wait for emails to finish - (Thread/sleep 5000) - (expire-energiatodistus! energiatodistus-id-1) (service/destroy-expired-energiatodistukset! ts/*db* ts/*aws-s3-client* system-expiration-user) diff --git a/etp-core/etp-backend/src/test/clj/solita/etp/service/valvonta_oikeellisuus_test.clj b/etp-core/etp-backend/src/test/clj/solita/etp/service/valvonta_oikeellisuus_test.clj index ff20b4702..904daac2c 100644 --- a/etp-core/etp-backend/src/test/clj/solita/etp/service/valvonta_oikeellisuus_test.clj +++ b/etp-core/etp-backend/src/test/clj/solita/etp/service/valvonta_oikeellisuus_test.clj @@ -108,7 +108,8 @@ (service/publish-toimenpide! (ts/db-user paakayttaja-id) ts/*aws-s3-client* (test-whoami/paakayttaja paakayttaja-id) - id toimenpide-id) + id toimenpide-id + {}) (service/update-toimenpide! (ts/db-user paakayttaja-id) (test-whoami/paakayttaja paakayttaja-id) From 70de98960c757ce43a5f9383d102caf352d6d09f Mon Sep 17 00:00:00 2001 From: Juho Haapakoski Date: Thu, 24 Oct 2024 17:52:20 +0300 Subject: [PATCH 04/21] AE-2316: Add new tila id to energiatodistus for expiration This is needed when the todistus can't be deleted after its expiration if there is still a valvonta that has to be kept for 2 years --- .../src/main/clj/solita/etp/service/energiatodistus_tila.clj | 4 +++- .../main/sql/migration/repeatable/r-energiatodistus-tila.sql | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/etp-core/etp-backend/src/main/clj/solita/etp/service/energiatodistus_tila.clj b/etp-core/etp-backend/src/main/clj/solita/etp/service/energiatodistus_tila.clj index d76fab0a8..3c9f936c3 100644 --- a/etp-core/etp-backend/src/main/clj/solita/etp/service/energiatodistus_tila.clj +++ b/etp-core/etp-backend/src/main/clj/solita/etp/service/energiatodistus_tila.clj @@ -1,6 +1,6 @@ (ns solita.etp.service.energiatodistus-tila) -(def ^:private tilat [:draft :in-signing :signed :discarded :replaced :deleted]) +(def ^:private tilat [:draft :in-signing :signed :discarded :replaced :deleted :destroyed :expired]) (defn tila-key [tila-id] (nth tilat tila-id)) @@ -13,3 +13,5 @@ (def discarded? (partial in-tila? 3)) (def replaced? (partial in-tila? 4)) (def deleted? (partial in-tila? 5)) +(def destroyed? (partial in-tila? 6)) +(def expired? (partial in-tila? 7)) diff --git a/etp-core/etp-db/src/main/sql/migration/repeatable/r-energiatodistus-tila.sql b/etp-core/etp-db/src/main/sql/migration/repeatable/r-energiatodistus-tila.sql index c1ee86823..6ea9cf561 100644 --- a/etp-core/etp-db/src/main/sql/migration/repeatable/r-energiatodistus-tila.sql +++ b/etp-core/etp-db/src/main/sql/migration/repeatable/r-energiatodistus-tila.sql @@ -6,7 +6,8 @@ values (3, 'hylatty'), (4, 'korvattu'), (5, 'poistettu'), -(6, 'tuhottu') +(6, 'tuhottu'), +(7, 'vanhentunut') on conflict (id) do update set name = excluded.name; From e8deb2bf213e758d6210980c15b6f2db58744514 Mon Sep 17 00:00:00 2001 From: Juho Haapakoski Date: Thu, 24 Oct 2024 17:54:12 +0300 Subject: [PATCH 05/21] AE-2316: Add functionality to make the energiatodistus vanhentunut There is still a potential problem that now all of energiatodistukset that have tila_id are repetedly set to tila_id 7 until their valvonta is old enough --- .../service/energiatodistus_destruction.clj | 20 ++++- .../etp/db/energiatodistus-destruction.sql | 18 ++++- .../energiatodistus_destruction_test.clj | 74 ++++++++++++++----- 3 files changed, 86 insertions(+), 26 deletions(-) diff --git a/etp-core/etp-backend/src/main/clj/solita/etp/service/energiatodistus_destruction.clj b/etp-core/etp-backend/src/main/clj/solita/etp/service/energiatodistus_destruction.clj index 2ded9ed09..e1cfe6650 100644 --- a/etp-core/etp-backend/src/main/clj/solita/etp/service/energiatodistus_destruction.clj +++ b/etp-core/etp-backend/src/main/clj/solita/etp/service/energiatodistus_destruction.clj @@ -3,6 +3,7 @@ data linked to it." (:require [clojure.java.jdbc :as jdbc] [clojure.tools.logging :as log] + [clojure.set :as set] [solita.etp.db :as db] [solita.etp.exception :as exception] [solita.etp.service.complete-energiatodistus :as complete-energiatodistus-service] @@ -130,15 +131,26 @@ (destroy-energiatodistus-audit-data! db energiatodistus-id)) (log/info (str "Destroyed energiatodistus (id: " energiatodistus-id ")"))) -(defn get-currently-expired-todistus-ids [db] - (->> (energiatodistus-destruction-db/select-expired-energiatodistus-ids db) +(defn get-currently-expired-todistus-ids [db {:keys [check-valvonta?]}] + (->> (energiatodistus-destruction-db/select-expired-energiatodistus-ids db {:check-valvonta check-valvonta?}) (map :energiatodistus-id))) +(defn- make-energiatodistus-vahnentunut + "There is an edge case where todistus might be expired but can not be + destroyed as there is still active valvonta on it. This function can be + used to make it 'vanhentunut' so that it can be handeled differently from" + [db energiatodistus-id] + (energiatodistus-destruction-db/make-energiatodistus-vanhentunut! db {:energiatodistus-id energiatodistus-id}) + (log/info (str "Set energiatodistus (id: " energiatodistus-id ") tila to vanhentunut."))) + (defn destroy-expired-energiatodistukset! [db aws-s3-client whoami] (when-not (and (rooli-service/system? whoami) (= (:id whoami) (kayttaja-service/system-kayttaja :expiration))) (exception/throw-forbidden! (str "Can not run destruction of expired todistukset as whoami (id: " (:id whoami) ") (rooli: " (:rooli whoami) ")"))) (log/info (str "Starting destruction of expired energiatodistukset.")) - (let [expired-todistukset-ids (get-currently-expired-todistus-ids db)] - (run! #(destroy-expired-energiatodistus! db aws-s3-client %) expired-todistukset-ids)) + (let [expired-todistukset-without-valvonta-ids (set (get-currently-expired-todistus-ids db {:check-vavonta? true})) + all-expired-todistukset-ids (set (get-currently-expired-todistus-ids db {:check-valvonta? false})) + expired-todistukset-with-valvonta-ids (set/difference all-expired-todistukset-ids expired-todistukset-without-valvonta-ids)] + (run! #(make-energiatodistus-vahnentunut db %) expired-todistukset-with-valvonta-ids) + (run! #(destroy-expired-energiatodistus! db aws-s3-client %) expired-todistukset-without-valvonta-ids)) (log/info (str "Destruction of expired energiatodistukset finished."))) diff --git a/etp-core/etp-backend/src/main/sql/solita/etp/db/energiatodistus-destruction.sql b/etp-core/etp-backend/src/main/sql/solita/etp/db/energiatodistus-destruction.sql index 8d4b2b21c..3b863b58e 100644 --- a/etp-core/etp-backend/src/main/sql/solita/etp/db/energiatodistus-destruction.sql +++ b/etp-core/etp-backend/src/main/sql/solita/etp/db/energiatodistus-destruction.sql @@ -1,13 +1,18 @@ -- name: select-expired-energiatodistus-ids select id as energiatodistus_id from energiatodistus - left join (select max(create_time) as latest_toimenpide_create_time, energiatodistus_id + left join (select energiatodistus_id, + max(create_time) as latest_toimenpide_create_time, + max(publish_time) as latest_toimenpide_publish_time from vo_toimenpide group by energiatodistus_id) latest_toimenpide on energiatodistus.id = latest_toimenpide.energiatodistus_id -where voimassaolo_paattymisaika < (now() at time zone 'Europe/Helsinki')::date - interval '1 days' - and (latest_toimenpide_create_time < (now() at time zone 'Europe/Helsinki')::date - interval '2 years' - or latest_toimenpide_create_time is null); +where voimassaolo_paattymisaika::date < (now() at time zone 'Europe/Helsinki')::date + and ((latest_toimenpide_create_time < (now() at time zone 'Europe/Helsinki')::date - interval '2 years' + or latest_toimenpide_create_time is null) + and (latest_toimenpide_publish_time < (now() at time zone 'Europe/Helsinki')::date - interval '2 years' + or latest_toimenpide_publish_time is null) + or :check-valvonta is false); -- name: select-vo-toimenpiteet-by-energiatodistus-id select id as vo_toimenpide_id @@ -119,6 +124,11 @@ delete from audit.energiatodistus where id = :energiatodistus-id; +-- name: make-energiatodistus-vanhentunut! +update energiatodistus +set tila_id = 7 -- vanhentunut +where id = :energiatodistus-id; + -- name: anonymize-energiatodistus! update energiatodistus set diff --git a/etp-core/etp-backend/src/test/clj/solita/etp/service/energiatodistus_destruction_test.clj b/etp-core/etp-backend/src/test/clj/solita/etp/service/energiatodistus_destruction_test.clj index 965aea233..d85093114 100644 --- a/etp-core/etp-backend/src/test/clj/solita/etp/service/energiatodistus_destruction_test.clj +++ b/etp-core/etp-backend/src/test/clj/solita/etp/service/energiatodistus_destruction_test.clj @@ -8,6 +8,7 @@ [solita.etp.service.viesti-test :as viesti-test] [solita.etp.service.valvonta-oikeellisuus.asha :as vo-asha-service] [solita.etp.service.kayttaja :as kayttaja-service] + [solita.etp.service.energiatodistus-tila :as tila-service] [solita.etp.service.file :as file-service] [solita.etp.service.liite :as liite-service] [solita.etp.service.viesti :as viesti-service] @@ -31,11 +32,18 @@ energiatodistus-id energiatodistus)) -(defn expire-energiatodistus! +(defn expire-energiatodistus [energiatodistus-id] + (jdbc/execute! ts/*db* ["update energiatodistus set voimassaolo_paattymisaika = CURRENT_DATE - INTERVAL '2 days' where id = ?" energiatodistus-id])) + +(defn expire-valvonta [energiatodistus-id] + (jdbc/execute! ts/*db* ["update vo_toimenpide set create_time = CURRENT_DATE - INTERVAL '3 years' where energiatodistus_id = ?" energiatodistus-id]) + (jdbc/execute! ts/*db* ["update vo_toimenpide set publish_time = CURRENT_DATE - INTERVAL '3 years' where energiatodistus_id = ?" energiatodistus-id])) + +(defn expire-energiatodistus-and-its-valvonta "Sets voimassaolo-paattymisaika to two days ago" [energiatodistus-id] - (jdbc/execute! ts/*db* ["update energiatodistus set voimassaolo_paattymisaika = CURRENT_DATE - INTERVAL '2 days' where id = ?" energiatodistus-id]) - (jdbc/execute! ts/*db* ["update vo_toimenpide set create_time = CURRENT_DATE - INTERVAL '3 years' where energiatodistus_id = ?" energiatodistus-id])) + (expire-energiatodistus energiatodistus-id) + (expire-valvonta energiatodistus-id)) (defn test-data-set [] (let [laatijat (laatija-test-data/generate-and-insert! 4) @@ -72,7 +80,7 @@ (time/now)) laatija-id-3) - (expire-energiatodistus! energiatodistus-id-4) + (expire-energiatodistus-and-its-valvonta energiatodistus-id-4) {:laatijat laatijat @@ -82,7 +90,7 @@ (let [{:keys [energiatodistukset]} (test-data-set) ids (-> energiatodistukset keys sort) [id-1 id-2 id-3 id-4] ids - expired-ids (service/get-currently-expired-todistus-ids ts/*db*)] + expired-ids (service/get-currently-expired-todistus-ids ts/*db* {:check-valvonta? true})] (t/testing "Todistus with expiration date set by signing it today should not be expired." (t/is (nil? (some #{id-1} expired-ids)))) (t/testing "Todistus with expiration time at year 1970 should be expired." @@ -116,11 +124,18 @@ (let [{:keys [energiatodistukset]} (test-data-set) ids (-> energiatodistukset keys sort) paakayttaja-id (kayttaja-test-data/insert-paakayttaja!) + [id-1 id-2 id-3 id-4] ids add-valvonta #(partial add-valvonta-and-modify-create-time paakayttaja-id % (time/now)) _ (doall (map #(%) (map add-valvonta ids))) - expired-ids (service/get-currently-expired-todistus-ids ts/*db*)] + expired-ids (service/get-currently-expired-todistus-ids ts/*db* {:check-valvonta? true}) + expired-ids-without-checking-valvonta (service/get-currently-expired-todistus-ids ts/*db* {:check-valvonta? false})] (t/testing "None of the energiatodistukset should be expired as they have a recent valvonta" - (t/is (empty? expired-ids))))) + (t/is (empty? expired-ids))) + (t/testing "Valvonta should not affect the expiration as its checking is skipped" + (t/is (nil? (some #{id-1} expired-ids-without-checking-valvonta))) + (t/is (some #{id-2} expired-ids-without-checking-valvonta)) + (t/is (nil? (some #{id-3} expired-ids-without-checking-valvonta))) + (t/is (some #{id-4} expired-ids-without-checking-valvonta))))) (t/deftest get-currently-expired-todistus-ids-with-old-valvonta-test (let [{:keys [energiatodistukset]} (test-data-set) @@ -129,7 +144,7 @@ [id-1 id-2 id-3 id-4] ids add-valvonta #(partial add-valvonta-and-modify-create-time paakayttaja-id % (.minus (time/now) (Duration/ofDays 735))) _ (doall (map #(%) (map add-valvonta ids))) - expired-ids (service/get-currently-expired-todistus-ids ts/*db*)] + expired-ids (service/get-currently-expired-todistus-ids ts/*db* {:check-valvonta? true})] (t/testing "Valvonta should not affect the expiration as it is older than two years" (t/is (nil? (some #{id-1} expired-ids))) (t/is (some #{id-2} expired-ids)) @@ -142,7 +157,7 @@ paakayttaja-id (kayttaja-test-data/insert-paakayttaja!) add-valvonta #(partial add-valvonta-and-modify-create-time paakayttaja-id % (.minus (time/now) (Duration/ofDays 720))) _ (doall (map #(%) (map add-valvonta ids))) - expired-ids (service/get-currently-expired-todistus-ids ts/*db*)] + expired-ids (service/get-currently-expired-todistus-ids ts/*db* {:check-valvonta? true})] (t/testing "None of the energiatodistukset should be expired as they have a recent valvonta" (t/is (empty? expired-ids))))) @@ -191,7 +206,7 @@ (t/is (false? (file-service/file-exists? ts/*aws-s3-client* lang-mu-pdf-fi-key))) (t/is (false? (file-service/file-exists? ts/*aws-s3-client* lang-mu-pdf-sv-key)))) - (expire-energiatodistus! energiatodistus-id-fi) + (expire-energiatodistus-and-its-valvonta energiatodistus-id-fi) (service/destroy-expired-energiatodistukset! ts/*db* ts/*aws-s3-client* system-expiration-user) (t/testing "Finnish version PDF should not exist after deleting it." @@ -217,7 +232,7 @@ (t/is (false? (file-service/file-exists? ts/*aws-s3-client* lang-mu-pdf-fi-key))) (t/is (false? (file-service/file-exists? ts/*aws-s3-client* lang-mu-pdf-sv-key)))) - (expire-energiatodistus! energiatodistus-id-sv) + (expire-energiatodistus-and-its-valvonta energiatodistus-id-sv) (service/destroy-expired-energiatodistukset! ts/*db* ts/*aws-s3-client* system-expiration-user) (t/testing "Swedish version PDF should not exist after deleting it." @@ -243,7 +258,7 @@ (t/is (true? (file-service/file-exists? ts/*aws-s3-client* lang-mu-pdf-fi-key))) (t/is (true? (file-service/file-exists? ts/*aws-s3-client* lang-mu-pdf-sv-key)))) - (expire-energiatodistus! energiatodistus-id-mu) + (expire-energiatodistus-and-its-valvonta energiatodistus-id-mu) (service/destroy-expired-energiatodistukset! ts/*db* ts/*aws-s3-client* system-expiration-user) (t/testing "Multilingual version PDFs should not exist after deleting it." @@ -287,7 +302,7 @@ ids (-> energiatodistukset keys sort) [id-1] ids get-et-1 #(first (select-energiatodistus id-1))] - (expire-energiatodistus! id-1) + (expire-energiatodistus-and-its-valvonta id-1) (service/destroy-expired-energiatodistukset! ts/*db* ts/*aws-s3-client* system-expiration-user) (t/testing "The values are anonymized." (t/is (empty? (->> (get-et-1) @@ -318,7 +333,8 @@ laatija-id (-> (laatija-test-data/generate-and-insert! 1) keys first) energiatodistus-add (energiatodistus-test-data/generate-add 2018 true) [energiatodistus-id-1 - energiatodistus-id-2] (energiatodistus-test-data/insert! [energiatodistus-add energiatodistus-add] laatija-id) + energiatodistus-id-2 + energiatodistus-id-3] (energiatodistus-test-data/insert! (vec (repeat 3 energiatodistus-add)) laatija-id) select-toimenpiteet #(jdbc/query ts/*db* ["select * from vo_toimenpide where energiatodistus_id = ?" %]) select-notes #(jdbc/query ts/*db* ["select * from vo_note where energiatodistus_id = ?" %]) select-tiedoksi #(jdbc/query ts/*db* ["select * from vo_tiedoksi where toimenpide_id in (select id from vo_toimenpide where energiatodistus_id = ?)" %]) @@ -328,6 +344,8 @@ select-notes-audit #(jdbc/query ts/*db* ["select * from audit.vo_note where energiatodistus_id = ?" %]) ;; tiedoksi and virheet do not have audit tables. + select-tila-id #(jdbc/query ts/*db* ["select tila_id from energiatodistus where id = ?" %]) + get-vo-toimenpiteet #(select-toimenpiteet %) get-vo-notes #(select-notes %) get-vo-tiedoksi #(select-tiedoksi %) @@ -358,7 +376,11 @@ vo-toimenpide-2-id (:id (valvonta-oikeellisuus-service/add-toimenpide! (ts/db-user paakayttaja-id) ts/*aws-s3-client* (test-whoami/paakayttaja paakayttaja-id) - energiatodistus-id-2 audit-report))] + energiatodistus-id-2 audit-report)) + vo-toimenpide-3-id (:id (valvonta-oikeellisuus-service/add-toimenpide! (ts/db-user paakayttaja-id) + ts/*aws-s3-client* + (test-whoami/paakayttaja paakayttaja-id) + energiatodistus-id-3 audit-report))] (valvonta-oikeellisuus-service/add-note! ts/*db* energiatodistus-id-1 (:description vo_note)) @@ -381,6 +403,16 @@ energiatodistus-id-2 vo-toimenpide-2-id {:inhibit-email? true}) + (valvonta-oikeellisuus-service/add-note! ts/*db* energiatodistus-id-3 (:description vo_note)) + (valvonta-oikeellisuus-service/update-toimenpide! (ts/db-user paakayttaja-id) + (test-whoami/paakayttaja paakayttaja-id) + energiatodistus-id-3 vo-toimenpide-3-id {:template-id 1}) + (valvonta-oikeellisuus-service/publish-toimenpide! ts/*db* + ts/*aws-s3-client* + (test-whoami/paakayttaja paakayttaja-id) + energiatodistus-id-3 + vo-toimenpide-3-id + {:inhibit-email? true}) (t/testing "There is some toimenpide before deletion." (t/is (not (empty? (get-vo-toimenpiteet energiatodistus-id-1))))) @@ -403,9 +435,15 @@ (t/is (true? (file-service/file-exists? ts/*aws-s3-client* file-key-et-1))) (t/is (true? (file-service/file-exists? ts/*aws-s3-client* file-key-et-2))))) - (expire-energiatodistus! energiatodistus-id-1) + ;; Keep the valvonta in energiatodistus 3 + (expire-energiatodistus energiatodistus-id-3) + (expire-energiatodistus-and-its-valvonta energiatodistus-id-1) (service/destroy-expired-energiatodistukset! ts/*db* ts/*aws-s3-client* system-expiration-user) + (t/testing "Energiatodistus 3 is 'vanhentunut' after running the expiration as it has an ongoing valvonta" + (let [tila-id (:tila_id (first (select-tila-id energiatodistus-id-3)))] + (t/is (tila-service/expired? {:tila-id tila-id})))) + (t/testing "Energiatodistus 1 valvonta documents are destroyed and energiatodistus 2 are not" (let [file-key-et-1 (vo-asha-service/file-path energiatodistus-id-1 vo-toimenpide-1-id) file-key-et-2 (vo-asha-service/file-path energiatodistus-id-2 vo-toimenpide-2-id)] @@ -488,7 +526,7 @@ (t/is (not-empty (select-liitteet-audit energiatodistus-id-2)))) ;; Destroy et-1 liiteet - (expire-energiatodistus! energiatodistus-id-1) + (expire-energiatodistus-and-its-valvonta energiatodistus-id-1) (service/destroy-expired-energiatodistukset! ts/*db* ts/*aws-s3-client* system-expiration-user) (t/testing "The liitteet for energiatodistus-1 are deleted but exist for energiatodistus-2" @@ -594,7 +632,7 @@ (t/is (not (empty? (select-viesti-liite-audit viestiketju-1-id)))) (t/is (not (empty? (select-viesti-liite-audit viestiketju-2-id))))) - (expire-energiatodistus! energiatodistus-id-1) + (expire-energiatodistus-and-its-valvonta energiatodistus-id-1) (service/destroy-expired-energiatodistukset! ts/*db* ts/*aws-s3-client* system-expiration-user) (t/testing "Only viestiketju 2 exists after deletion" From e0189c1d10b8cfa4a750c37ad5f9924c87c7ccb6 Mon Sep 17 00:00:00 2001 From: Juho Haapakoski Date: Fri, 25 Oct 2024 18:59:53 +0300 Subject: [PATCH 06/21] AE-2317: Add capability to call database in e2e tests --- e2e-tests/cypress/cypress.config.js | 26 ++++- e2e-tests/cypress/docker-compose.yml | 2 +- e2e-tests/cypress/override.ports.yaml | 7 ++ e2e-tests/cypress/package-lock.json | 135 ++++++++++++++++++++++++++ e2e-tests/cypress/package.json | 3 + 5 files changed, 170 insertions(+), 3 deletions(-) create mode 100644 e2e-tests/cypress/override.ports.yaml diff --git a/e2e-tests/cypress/cypress.config.js b/e2e-tests/cypress/cypress.config.js index 96030195b..4c1811543 100644 --- a/e2e-tests/cypress/cypress.config.js +++ b/e2e-tests/cypress/cypress.config.js @@ -1,4 +1,5 @@ const { defineConfig } = require('cypress'); +const pg = require('pg'); module.exports = defineConfig({ viewportHeight: 900, @@ -6,7 +7,28 @@ module.exports = defineConfig({ defaultCommandTimeout: 15000, video: true, e2e: { - setupNodeEvents(on, config) {}, - baseUrl: 'https://localhost:3009' + baseUrl: 'https://localhost:3009', + setupNodeEvents(on, config) { + on('task', { + executeQuery({ query, applicationName }) { + const client = new pg.Client({ + connectionString: `postgresql://etp_app:etp@localhost:5444/etp_dev?search_path=etp&application_name=${applicationName}` + }); + + return client + .connect() + .then(() => client.query(query)) + .then(result => { + return result.rows; + }) + .catch(err => { + throw err; + }) + .finally(() => { + client.end(); + }); + } + }); + } } }); diff --git a/e2e-tests/cypress/docker-compose.yml b/e2e-tests/cypress/docker-compose.yml index 0ae5d571c..c485a9622 100644 --- a/e2e-tests/cypress/docker-compose.yml +++ b/e2e-tests/cypress/docker-compose.yml @@ -5,7 +5,7 @@ include: - path: - ../../etp-core/docker/docker-compose.yml - override.yaml - + - override.ports.yaml services: backend: diff --git a/e2e-tests/cypress/override.ports.yaml b/e2e-tests/cypress/override.ports.yaml new file mode 100644 index 000000000..df561a250 --- /dev/null +++ b/e2e-tests/cypress/override.ports.yaml @@ -0,0 +1,7 @@ +version: '3.7' + +services: + db: + ports: + - 127.0.0.1:5444:5432 + diff --git a/e2e-tests/cypress/package-lock.json b/e2e-tests/cypress/package-lock.json index 106b12cb8..6421856f6 100644 --- a/e2e-tests/cypress/package-lock.json +++ b/e2e-tests/cypress/package-lock.json @@ -8,6 +8,9 @@ "name": "Energiatodistuspalvelu E2E", "version": "0.0.1", "license": "EUPL v1.2", + "dependencies": { + "pg": "^8.13.1" + }, "devDependencies": { "cypress": "^13.6.4", "prettier": "3.3.3" @@ -1451,6 +1454,87 @@ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, + "node_modules/pg": { + "version": "8.13.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.1.tgz", + "integrity": "sha512-OUir1A0rPNZlX//c7ksiu7crsGZTKSOXJPgtNiHGIlC9H0lO+NC6ZDYksSgBYY/thSWhnSRBv8w1lieNNGATNQ==", + "dependencies": { + "pg-connection-string": "^2.7.0", + "pg-pool": "^3.7.0", + "pg-protocol": "^1.7.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.7.0.tgz", + "integrity": "sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.7.0.tgz", + "integrity": "sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.0.tgz", + "integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, "node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -1460,6 +1544,41 @@ "node": ">=0.10.0" } }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/prettier": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", @@ -1709,6 +1828,14 @@ "node": ">=8" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sshpk": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", @@ -1965,6 +2092,14 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/e2e-tests/cypress/package.json b/e2e-tests/cypress/package.json index b8ea53587..74906b521 100644 --- a/e2e-tests/cypress/package.json +++ b/e2e-tests/cypress/package.json @@ -11,5 +11,8 @@ "devDependencies": { "cypress": "^13.6.4", "prettier": "3.3.3" + }, + "dependencies": { + "pg": "^8.13.1" } } From efcbdea36190ac6f991a692b49af6e731ccf71b9 Mon Sep 17 00:00:00 2001 From: Juho Haapakoski Date: Fri, 25 Oct 2024 19:06:22 +0300 Subject: [PATCH 07/21] AE-2317: Add capability to call backend from e2e test --- e2e-tests/cypress/docker-compose.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/e2e-tests/cypress/docker-compose.yml b/e2e-tests/cypress/docker-compose.yml index c485a9622..1bc78e4c7 100644 --- a/e2e-tests/cypress/docker-compose.yml +++ b/e2e-tests/cypress/docker-compose.yml @@ -3,9 +3,9 @@ version: '3.7' name: 'etp-e2e' include: - path: - - ../../etp-core/docker/docker-compose.yml - - override.yaml - - override.ports.yaml + - ../../etp-core/docker/docker-compose.yml + - override.yaml + - override.ports.yaml services: backend: @@ -26,6 +26,8 @@ services: KMS_HOST: kms env_file: - ./backend.env + ports: + - 127.0.0.1:3444:8080 healthcheck: test: curl -k http://localhost:8080/api/health || exit 1 interval: 10s @@ -54,11 +56,11 @@ services: WEBPACK_HOST: 0.0.0.0 WEBPACK_PORT: 3009 healthcheck: - test: curl -k https://localhost:3009 || exit 1 - interval: 10s - timeout: 10s - retries: 20 - start_period: 0m + test: curl -k https://localhost:3009 || exit 1 + interval: 10s + timeout: 10s + retries: 20 + start_period: 0m ports: - 127.0.0.1:3009:3009 From 371dae7fd434fe98ae6296e8ac765133f2b42b82 Mon Sep 17 00:00:00 2001 From: Juho Haapakoski Date: Fri, 25 Oct 2024 19:06:52 +0300 Subject: [PATCH 08/21] AE-2317: Add e2e test to test effects of destroying expired todistukset --- .../vanhentuneiden-tuhoaminen/laatija.cy.js | 54 +++++++++++++++++++ .../energiatodistus/energiatodistukset.svelte | 6 ++- 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 e2e-tests/cypress/cypress/e2e/vanhentuneiden-tuhoaminen/laatija.cy.js diff --git a/e2e-tests/cypress/cypress/e2e/vanhentuneiden-tuhoaminen/laatija.cy.js b/e2e-tests/cypress/cypress/e2e/vanhentuneiden-tuhoaminen/laatija.cy.js new file mode 100644 index 000000000..0b89400a1 --- /dev/null +++ b/e2e-tests/cypress/cypress/e2e/vanhentuneiden-tuhoaminen/laatija.cy.js @@ -0,0 +1,54 @@ +import { FIXTURES } from '../../fixtures/laatija'; + +const baseUrl = Cypress.config('baseUrl'); + +context('Laatija', () => { + beforeEach(() => { + cy.intercept(/\/api\/private/, req => { + req.headers = { ...req.headers, ...FIXTURES.headers }; + }); + cy.resetDb(); + }); + + describe('energiatodistukset', () => { + it('should see energiatodistus before it is expired', async () => { + cy.visit('/#/energiatodistus/all'); + + cy.get('[data-cy="energiatodistus-id"]').contains('1').should('exist'); + cy.get('[data-cy="energiatodistus-id"]') + .contains('1') + .siblings('[data-cy="energiatodistus-tila"]') + .should('have.text', 'Voimassa'); + + const query = + "update etp.energiatodistus set voimassaolo_paattymisaika = now() - interval '2 days' where id = 1;"; + // This does not matter but it needs to be parseable by our database audit system. + const applicationName = '-6@cypress'; + + // Call the Cypress task to execute the query + cy.task('executeQuery', { query, applicationName }); + cy.request( + 'POST', + 'http://localhost:3444/api/internal/energiatodistukset/anonymize-and-delete-expired' + ).then(response => { + expect(response.status).to.eq(200); + }); + + //cy.get('[data-cy="energiatodistus-id"]').contains('1').should('exist'); + + // This is kind of flaky as there is no way to know when the expiration is finished... + + cy.wait(3000); + + cy.reload(); + + cy.get('[data-cy="energiatodistus-id"]').contains('1').should('exist'); + cy.get('[data-cy="energiatodistus-id"]') + .contains('1') + .siblings('[data-cy="energiatodistus-tila"]') + .should('have.text', 'energiatodistus.tila.undefined'); + //TODO: + //cy.get('[data-cy="energiatodistus-id"]').contains('1').siblings('[data-cy="energiatodistus-tila"]').should('not.exist'); + }); + }); +}); diff --git a/etp-front/src/pages/energiatodistus/energiatodistukset.svelte b/etp-front/src/pages/energiatodistus/energiatodistukset.svelte index d95de20ae..ecd318036 100644 --- a/etp-front/src/pages/energiatodistus/energiatodistukset.svelte +++ b/etp-front/src/pages/energiatodistus/energiatodistukset.svelte @@ -339,13 +339,15 @@ data-cy="energiatodistus-row" class="etp-table--tr etp-table--tr__link" on:click={ETViews.toETView(energiatodistus)}> - + {i18n( 'energiatodistus.tila.' + et.tilaKey(energiatodistus['tila-id']) )} - {energiatodistus.id} + + {energiatodistus.id} + {orEmpty(energiatodistus.tulokset['e-luokka'])} From 98fe3c6adc74108d16235271c8bb04bd8af411e3 Mon Sep 17 00:00:00 2001 From: Juho Haapakoski Date: Mon, 28 Oct 2024 07:13:22 +0200 Subject: [PATCH 09/21] AE-2317: Refactor backendUrl into config --- e2e-tests/cypress/cypress.config.js | 1 + .../cypress/e2e/vanhentuneiden-tuhoaminen/laatija.cy.js | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/e2e-tests/cypress/cypress.config.js b/e2e-tests/cypress/cypress.config.js index 4c1811543..36b4bc095 100644 --- a/e2e-tests/cypress/cypress.config.js +++ b/e2e-tests/cypress/cypress.config.js @@ -7,6 +7,7 @@ module.exports = defineConfig({ defaultCommandTimeout: 15000, video: true, e2e: { + backendUrl: 'http://localhost:3444', baseUrl: 'https://localhost:3009', setupNodeEvents(on, config) { on('task', { diff --git a/e2e-tests/cypress/cypress/e2e/vanhentuneiden-tuhoaminen/laatija.cy.js b/e2e-tests/cypress/cypress/e2e/vanhentuneiden-tuhoaminen/laatija.cy.js index 0b89400a1..81c61753a 100644 --- a/e2e-tests/cypress/cypress/e2e/vanhentuneiden-tuhoaminen/laatija.cy.js +++ b/e2e-tests/cypress/cypress/e2e/vanhentuneiden-tuhoaminen/laatija.cy.js @@ -1,6 +1,7 @@ import { FIXTURES } from '../../fixtures/laatija'; const baseUrl = Cypress.config('baseUrl'); +const backendUrl = Cypress.config('backendUrl'); context('Laatija', () => { beforeEach(() => { @@ -29,7 +30,7 @@ context('Laatija', () => { cy.task('executeQuery', { query, applicationName }); cy.request( 'POST', - 'http://localhost:3444/api/internal/energiatodistukset/anonymize-and-delete-expired' + `${backendUrl}/api/internal/energiatodistukset/anonymize-and-delete-expired` ).then(response => { expect(response.status).to.eq(200); }); From 3db98cecd3af4a85e167d8cb520021e2cd9105a7 Mon Sep 17 00:00:00 2001 From: Juho Haapakoski Date: Mon, 28 Oct 2024 08:39:35 +0200 Subject: [PATCH 10/21] AE-2317: Add two new energiatodistus to test data that are expired The other one has recent oikeellisuuden valvonta --- .../part.1 | 15 + .../1/energiatodistukset.csv/xl.meta | Bin 0 -> 389 bytes .../part.1 | 16 + .../2/energiatodistukset.csv/xl.meta | Bin 0 -> 396 bytes .../part.1 | 15 + .../3/energiatodistukset.csv/xl.meta | Bin 0 -> 396 bytes .../part.1 | Bin 0 -> 139921 bytes .../energiatodistus-10-fi/xl.meta | Bin 0 -> 363 bytes .../part.1 | Bin 0 -> 137504 bytes .../energiatodistus-11-fi/xl.meta | Bin 0 -> 363 bytes .../part.1 | Bin 0 -> 137505 bytes .../energiatodistus-11-sv/xl.meta | Bin 0 -> 363 bytes .../part.1 | Bin 0 -> 137514 bytes .../energiatodistus-12-fi/xl.meta | Bin 0 -> 363 bytes .../part.1 | Bin 0 -> 137515 bytes .../energiatodistus-12-sv/xl.meta | Bin 0 -> 363 bytes .../part.1 | Bin 0 -> 137573 bytes .../energiatodistus-13-fi/xl.meta | Bin 0 -> 363 bytes .../part.1 | Bin 0 -> 137570 bytes .../energiatodistus-13-sv/xl.meta | Bin 0 -> 363 bytes .../part.1 | Bin 0 -> 137564 bytes .../energiatodistus-14-fi/xl.meta | Bin 0 -> 363 bytes .../part.1 | Bin 0 -> 137572 bytes .../energiatodistus-14-sv/xl.meta | Bin 0 -> 363 bytes .../part.1 | Bin 0 -> 140092 bytes .../energiatodistus-2-fi/xl.meta | Bin 0 -> 363 bytes .../part.1 | Bin 0 -> 139924 bytes .../energiatodistus-3-fi/xl.meta | Bin 0 -> 363 bytes .../part.1 | Bin 0 -> 140439 bytes .../energiatodistus-4-fi/xl.meta | Bin 0 -> 363 bytes .../part.1 | Bin 0 -> 140114 bytes .../energiatodistus-6-fi/xl.meta | Bin 0 -> 363 bytes .../part.1 | Bin 0 -> 137510 bytes .../energiatodistus-6-sv/xl.meta | Bin 0 -> 363 bytes .../part.1 | Bin 0 -> 139964 bytes .../energiatodistus-7-fi/xl.meta | Bin 0 -> 363 bytes .../part.1 | Bin 0 -> 139957 bytes .../energiatodistus-8-fi/xl.meta | Bin 0 -> 363 bytes .../part.1 | Bin 0 -> 139967 bytes .../energiatodistus-9-fi/xl.meta | Bin 0 -> 363 bytes .../valvonta/kaytto/53/11/henkilo/4/xl.meta | Bin 0 -> 59886 bytes .../valvonta/kaytto/53/14/henkilo/4/xl.meta | Bin 0 -> 95710 bytes .../part.1 | 7590 +++++++++++++++ .../valvonta/kaytto/53/15/henkilo/4/xl.meta | Bin 0 -> 363 bytes .../valvonta/kaytto/53/18/henkilo/4/xl.meta | Bin 0 -> 63811 bytes .../valvonta/kaytto/53/5/henkilo/4/xl.meta | Bin 0 -> 77914 bytes .../valvonta/kaytto/53/6/henkilo/4/xl.meta | Bin 0 -> 77152 bytes .../valvonta/kaytto/53/7/henkilo/4/xl.meta | Bin 0 -> 121148 bytes .../part.1 | 8241 +++++++++++++++++ .../valvonta/kaytto/53/8/henkilo/4/xl.meta | Bin 0 -> 363 bytes .../valvonta/kaytto/54/25/henkilo/5/xl.meta | Bin 0 -> 77914 bytes .../valvonta/kaytto/54/26/henkilo/5/xl.meta | Bin 0 -> 77152 bytes .../valvonta/kaytto/54/27/henkilo/5/xl.meta | Bin 0 -> 121148 bytes .../part.1 | 8241 +++++++++++++++++ .../valvonta/kaytto/54/28/henkilo/5/xl.meta | Bin 0 -> 363 bytes .../valvonta/kaytto/54/31/henkilo/5/xl.meta | Bin 0 -> 59886 bytes .../valvonta/kaytto/54/34/henkilo/5/xl.meta | Bin 0 -> 95710 bytes .../part.1 | Bin 0 -> 176468 bytes .../valvonta/kaytto/54/35/henkilo/5/xl.meta | Bin 0 -> 363 bytes .../valvonta/kaytto/54/38/henkilo/5/xl.meta | Bin 0 -> 63811 bytes .../53/15/henkilo/4/xl.meta | Bin 0 -> 67241 bytes .../53/18/henkilo/4/xl.meta | Bin 0 -> 67241 bytes .../53/8/henkilo/4/xl.meta | Bin 0 -> 69192 bytes .../54/28/henkilo/5/xl.meta | Bin 0 -> 69192 bytes .../54/35/henkilo/5/xl.meta | Bin 0 -> 67241 bytes .../54/38/henkilo/5/xl.meta | Bin 0 -> 67241 bytes .../files/valvonta/oikeellisuus/1/2/xl.meta | Bin 0 -> 64225 bytes .../files/valvonta/oikeellisuus/7/2/xl.meta | Bin 0 -> 73462 bytes .../files/valvonta/oikeellisuus/7/3/xl.meta | Bin 0 -> 73474 bytes .../migration/repeatable/r-x-01-test-data.sql | 137 +- 70 files changed, 24195 insertions(+), 60 deletions(-) create mode 100644 etp-core/docker/minio/files/api/signed/aineistot/1/energiatodistukset.csv/4c2580c5-32cb-44b2-9d93-b0d7c2f6287b/part.1 create mode 100644 etp-core/docker/minio/files/api/signed/aineistot/1/energiatodistukset.csv/xl.meta create mode 100644 etp-core/docker/minio/files/api/signed/aineistot/2/energiatodistukset.csv/9e6463bf-70ce-441d-91c1-6f03ab6bbe83/part.1 create mode 100644 etp-core/docker/minio/files/api/signed/aineistot/2/energiatodistukset.csv/xl.meta create mode 100644 etp-core/docker/minio/files/api/signed/aineistot/3/energiatodistukset.csv/20daf962-4039-41c2-a552-07220e27e853/part.1 create mode 100644 etp-core/docker/minio/files/api/signed/aineistot/3/energiatodistukset.csv/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-10-fi/990ee454-cfdc-46b7-b8ff-f444e6515e17/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-10-fi/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-11-fi/f58fed55-9a5e-4ff9-a3b7-0c7975b55c1e/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-11-fi/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-11-sv/6e1e5229-bea0-43e0-ba1d-eed43a553bdf/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-11-sv/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-12-fi/8a13a41c-301b-4195-b818-fa5ea37ae3a9/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-12-fi/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-12-sv/5395e388-685c-4cb3-a937-86e73291a195/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-12-sv/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-13-fi/2ed0fa93-6fe1-403c-883e-43d0d9641904/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-13-fi/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-13-sv/8efdce3d-01b1-48d2-a076-3433b5c771b7/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-13-sv/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-14-fi/42dd75d3-4304-4a1c-b015-b9b65791fa4d/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-14-fi/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-14-sv/66ce4285-7579-4d34-99c5-1d3babc751ef/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-14-sv/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-2-fi/fa221ff9-eab4-4934-a8af-e7a0ab4c129d/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-2-fi/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-3-fi/f7822890-9fb4-492f-aab0-e65bc5c45c67/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-3-fi/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-4-fi/8e22f884-a567-478b-9da1-9f9c709227a9/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-4-fi/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-6-fi/d30ba30e-1325-4088-9a68-4f3f3e31c01e/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-6-fi/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-6-sv/169be96f-0a65-4325-8b0d-7d3ea29eb8f6/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-6-sv/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-7-fi/02122903-afaa-4503-8e04-3172d74d22eb/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-7-fi/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-8-fi/f1752fbd-e8f1-47c9-88c8-23414a8eb022/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-8-fi/xl.meta create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-9-fi/f865b59c-86b8-4d9a-b11a-cdada47798e8/part.1 create mode 100644 etp-core/docker/minio/files/energiatodistukset/energiatodistus-9-fi/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/53/11/henkilo/4/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/53/14/henkilo/4/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/53/15/henkilo/4/d7d622d0-bbd9-40ae-95d6-d4fe7890b102/part.1 create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/53/15/henkilo/4/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/53/18/henkilo/4/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/53/5/henkilo/4/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/53/6/henkilo/4/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/53/7/henkilo/4/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/53/8/henkilo/4/0d60954d-e737-4117-ae65-a2f522463ae8/part.1 create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/53/8/henkilo/4/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/54/25/henkilo/5/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/54/26/henkilo/5/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/54/27/henkilo/5/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/54/28/henkilo/5/dbb1d8de-7635-48be-b068-bb4d92f06216/part.1 create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/54/28/henkilo/5/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/54/31/henkilo/5/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/54/34/henkilo/5/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/54/35/henkilo/5/1bf56b30-bf00-4063-a16c-7a7dc66167b5/part.1 create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/54/35/henkilo/5/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/54/38/henkilo/5/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/hallinto-oikeus-attachment/53/15/henkilo/4/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/hallinto-oikeus-attachment/53/18/henkilo/4/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/hallinto-oikeus-attachment/53/8/henkilo/4/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/hallinto-oikeus-attachment/54/28/henkilo/5/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/hallinto-oikeus-attachment/54/35/henkilo/5/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/kaytto/hallinto-oikeus-attachment/54/38/henkilo/5/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/oikeellisuus/1/2/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/oikeellisuus/7/2/xl.meta create mode 100644 etp-core/docker/minio/files/valvonta/oikeellisuus/7/3/xl.meta diff --git a/etp-core/docker/minio/files/api/signed/aineistot/1/energiatodistukset.csv/4c2580c5-32cb-44b2-9d93-b0d7c2f6287b/part.1 b/etp-core/docker/minio/files/api/signed/aineistot/1/energiatodistukset.csv/4c2580c5-32cb-44b2-9d93-b0d7c2f6287b/part.1 new file mode 100644 index 000000000..8ac7d45e6 --- /dev/null +++ b/etp-core/docker/minio/files/api/signed/aineistot/1/energiatodistukset.csv/4c2580c5-32cb-44b2-9d93-b0d7c2f6287b/part.1 @@ -0,0 +1,15 @@ +$Us^H.Gz.IŽ1'"Id";"Versio";"Allekirjoitusaika";"Voimassaolo-paattymisaika";"Perustiedot / Kieli";"Perustiedot / Kieli-fi";"Perustiedot / Laatimisvaihe";"Perustiedot / Laatimisvaihe-fi";"Perustiedot / Havainnointikaynti";"Perustiedot / Nimi-fi";"Perustiedot / Nimi-sv";"Perustiedot / Valmistumisvuosi";"Perustiedot / Katuosoite-fi";"Perustiedot / Katuosoite-sv";"Perustiedot / Postinumero";"Perustiedot / Postitoimipaikka-fi";"Perustiedot / Postitoimipaikka-sv";"Perustiedot / Rakennustunnus";"Perustiedot / Kiinteistotunnus";"Perustiedot / Paakayttotarkoitus-id";"Perustiedot / Paakayttotarkoitus-fi";"Perustiedot / Kayttotarkoitus";"Perustiedot / Alakayttotarkoitus-fi";"Tulokset / E-luku";"Tulokset / E-luokka";"Tulokset / E-luokka-rajat / Raja-uusi-2018";"Tulokset / E-luokka-rajat / Kayttotarkoitus / Label-fi";"Perustiedot / Keskeiset-suositukset-fi";"Perustiedot / Keskeiset-suositukset-sv";"Lahtotiedot / Lammitetty-nettoala";"Lahtotiedot / Ilmanvaihto / Tyyppi-id";"Lahtotiedot / Ilmanvaihto / Label-fi";"Lahtotiedot / Ilmanvaihto / Kuvaus-fi";"Lahtotiedot / Ilmanvaihto / Kuvaus-sv";"Lahtotiedot / Lammitys / Lammitysmuoto-1 / Id";"Lahtotiedot / Lammitys / Lammitysmuoto-2 / Id";"Lahtotiedot / Lammitys / Lammitysmuoto-label-fi";"Lahtotiedot / Lammitys / Lammitysmuoto-1 / Kuvaus-fi";"Lahtotiedot / Lammitys / Lammitysmuoto-1 / Kuvaus-sv";"Lahtotiedot / Lammitys / Lammitysmuoto-2 / Kuvaus-fi";"Lahtotiedot / Lammitys / Lammitysmuoto-2 / Kuvaus-sv";"Lahtotiedot / Lammitys / Lammonjako / Id";"Lahtotiedot / Lammitys / Lammonjako-label-fi";"Lahtotiedot / Lammitys / Lammonjako / Kuvaus-fi";"Lahtotiedot / Lammitys / Lammonjako / Kuvaus-sv";"Tulokset / Kaytettavat-energiamuodot / Kaukolampo";"Tulokset / Kaytettavat-energiamuodot / Kaukolampo-kerroin";"Tulokset / Kaytettavat-energiamuodot / Sahko";"Tulokset / Kaytettavat-energiamuodot / Sahko-kerroin";"Tulokset / Kaytettavat-energiamuodot / Uusiutuva-polttoaine";"Tulokset / Kaytettavat-energiamuodot / Uusiutuva-polttoaine-kerroin";"Tulokset / Kaytettavat-energiamuodot / Fossiilinen-polttoaine";"Tulokset / Kaytettavat-energiamuodot / Fossiilinen-polttoaine-kerroin";"Tulokset / Kaytettavat-energiamuodot / Kaukojaahdytys";"Tulokset / Kaytettavat-energiamuodot / Kaukojaahdytys-kerroin";"Tulokset / Kaytettavat-energiamuodot / Muu / 0 / Nimi";"Tulokset / Kaytettavat-energiamuodot / Muu / 0 / Ostoenergia";"Tulokset / Kaytettavat-energiamuodot / Muu / 0 / Muotokerroin";"Tulokset / Kaytettavat-energiamuodot / Muu / 1 / Nimi";"Tulokset / Kaytettavat-energiamuodot / Muu / 1 / Ostoenergia";"Tulokset / Kaytettavat-energiamuodot / Muu / 1 / Muotokerroin";"Tulokset / Kaytettavat-energiamuodot / Muu / 2 / Nimi";"Tulokset / Kaytettavat-energiamuodot / Muu / 2 / Ostoenergia";"Tulokset / Kaytettavat-energiamuodot / Muu / 2 / Muotokerroin" +15;2018;2024-03-13T13:41:34.527654;2034-03-11T13:41:34.527661;0;"Suomi";0;"Rakennuslupa";2024-03-13;":Vg:&yXv6";"~1";2020;"x8!wtyYV";"P!G";"00100";"HELSINKI";"HELSINGFORS";"176993494J";"Lr25#%Tk";1;"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";;;199;"1. Pienet asuinrakennukset";"^:";",%<93dp8, Vesi-ilmalämpöpumppu";"V-#>93dp8";"2f}{&Pb";"}";"F(uo";5;"Sähköinen kattolämmitys";"#8GEi:GE";"3?BjX,<";1;0,5;1;1,2;1;0,5;1;1;1;0,28;;;;;;;;; +14;2018;2024-03-13T13:41:34.498494;2034-03-11T13:41:34.498501;1;"Ruotsi";0;"Rakennuslupa";2024-03-13;"HU>dp";"bq?io";2021;"hV=";"Og";"33100";"TAMPERE";"TAMPERE";"793478530L";"gFkS+/X;";1;"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";;;199;"1. Pienet asuinrakennukset";"|";";jmdmY6}4/#";1;4;"Painovoimainen/koneellinen poisto";"&1(BBRsh#v";"UwWg";2;5;"Puu, Kaasu";"pRj|Vjj@";"drRN";"1'";"{";2;"Vesikiertoinen kattosäteilylämmitys";"^'!^";"-e.";1;0,5;1;1,2;1;0,5;1;1;1;0,28;;;;;;;;; +13;2018;2024-03-13T13:41:34.464840;2034-03-11T13:41:34.464846;1;"Ruotsi";1;"Käyttöönotto";2024-03-13;"07>[";"0e";2022;"Hwm,=Y'w";"d8El G3E";"00100";"HELSINKI";"HELSINGFORS";"908982025T";"!u<7s";1;"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";;;199;"1. Pienet asuinrakennukset";"xXa";"6A(dQi.S";1;0;"Painovoimainen ilmanvaihtojärjestelmä";"ZL#PK^g.";"OH/Wv]P";8;5;"Poistoilmalämpöpumppu, Kaasu";"lh/L,#";"F";"LC>1748";"){sCaW";":ygW9~";2018;"#O7_bpi1";"PHhyaO?";"33100";"TAMPERE";"TAMPERE";"876098870V";"gw6),n=h";1;"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";;;199;"1. Pienet asuinrakennukset";"WwJ";"33100";"TAMPERE";"TAMPERE";"321327045J";"v3T)Dd";"sA`@&";1;6;"{aJk*@ N";"{aJk*@ N";" N|(a#x66";3;5;"Pelletti, Kaasu";"w`/]k00w8 ";"1*E t&4";"OmEYutZ$l";"(;d`<0l6";12;"AC{9_g~+~";"AC{9_g~+~";"=L";1;0,5;1;1,2;1;0,5;1;1;1;0,28;;;;;;;;; +7;2018;2024-03-13T13:41:34.071465;2034-03-11T13:41:34.071477;1;"Ruotsi";1;"Käyttöönotto";2024-03-13;"P;+)CZ";"BU&m3G6l;p";2021;"#e";"u'+)";"00100";"HELSINKI";"HELSINGFORS";"294233023U";"I%]Qr7";1;"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";;;199;"1. Pienet asuinrakennukset";"v*Axb";"v,@";1;5;"Painovoimainen/koneellinen tulo- ja poisto";"HVu%R214`UG";"'P";2;2;"Puu, Puu";"FXu?'";"7)u";"^b@P";"(K";0;"Vesikiertoinen patterilämmitys";"fz";":?,tM";1;0,5;1;1,2;1;0,5;1;1;1;0,28;;;;;;;;; +6;2018;2024-03-13T13:41:33.997663;2034-03-11T13:41:33.997671;1;"Ruotsi";1;"Käyttöönotto";2024-03-13;"$p*Pq&+";"?AML^R~{j5";2019;"sI";"8";"00100";"HELSINKI";"HELSINGFORS";"673610149M";"-B,EY";1;"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";;;199;"1. Pienet asuinrakennukset";"n";"rQSR4Eg u";1;5;"Painovoimainen/koneellinen tulo- ja poisto";"E@G ";"=+^!6N[r)|";9;6;"7>?onJxQV, Maalämpöpumppu";"7>?onJxQV";"~";"k>X94";"$";12;"f,";"f,";"Tzg-a";1;0,5;1;1,2;1;0,5;1;1;1;0,28;;;;;;;;; +1;2013;2024-02-22T14:10:24.283032;2034-02-23T00:00;2;"Kaksikielinen";;;2020-04-15;"Rakennuksen nimi";"Rakennuksen nimi SV";2016;"Katuosoite";"Katuosoite SV";"33100";"TAMPERE";"TAMPERE";"101089527F";"Kiinteistötunnus";2;"2. Rivi- ja ketjutalot";"RK";"Rivi- ja ketjutalot";322;"E";105;"2. Rivi- ja ketjutalot";"Seuraavia toimenpiteitä voisi tehdä: + + * Toimenpide 1 + * Toimenpide 2";"Keskeiset suositukset SV";5000;0;"Painovoimainen ilmanvaihtojärjestelmä";"ilmanvaihdon kuvaus fi";"ilmanvaihdon kuvaus sv";2;5;"Puu, Kaasu";;;;;7;"Uuni- tai kamiinalämmitys";;;0;0,7;5000;1,7;0;0,5;550000;1;0;0,4;"Turve";100000;10,5;;;;;; diff --git a/etp-core/docker/minio/files/api/signed/aineistot/1/energiatodistukset.csv/xl.meta b/etp-core/docker/minio/files/api/signed/aineistot/1/energiatodistukset.csv/xl.meta new file mode 100644 index 0000000000000000000000000000000000000000..7b1505c140ff6f63e49dbdd6cbf01b8ad6234bb5 GIT binary patch literal 389 zcma#>F;ZY;U}iYRz`$6{#Kd?+W$F+$t*e|;G^1b)abO!rn!?hTtDBI63@;L=>MmK6bsMJ0Zvxy2J1 zSAv+XA&Ke52f$2_{^E%j70<2$NjSo}OF%53@KWE9%-mGCUzYo(mLvvO7B}vR(DlvC z%gopH%qvMP%1g}AO-wE+1yaR8eMeX<%uJ2JYD0^Qn${%e0~O_!=#~IIzd0#0FR`dn zKR>x7wM4hLq$o8pcL~tY^qWd)iAJVIX%?2|<_1Q|hAD>T<|ziLrsihmX{Kf-mZp}v Sh6~HirC#7Td#)p6XFC8S9*dR$ literal 0 HcmV?d00001 diff --git a/etp-core/docker/minio/files/api/signed/aineistot/2/energiatodistukset.csv/9e6463bf-70ce-441d-91c1-6f03ab6bbe83/part.1 b/etp-core/docker/minio/files/api/signed/aineistot/2/energiatodistukset.csv/9e6463bf-70ce-441d-91c1-6f03ab6bbe83/part.1 new file mode 100644 index 000000000..4ea91f7e1 --- /dev/null +++ b/etp-core/docker/minio/files/api/signed/aineistot/2/energiatodistukset.csv/9e6463bf-70ce-441d-91c1-6f03ab6bbe83/part.1 @@ -0,0 +1,16 @@ +'Vw(6&lߟx +"Id";"Versio";"Tila-id";"Laatija-id";"Allekirjoitusaika";"Voimassaolo-paattymisaika";"Korvattu-energiatodistus-id";"Korvaava-energiatodistus-id";"Perustiedot / Kieli";"Perustiedot / Laatimisvaihe";"Perustiedot / Havainnointikaynti";"Perustiedot / Uudisrakennus";"Tulokset / Laskentatyokalu";"Perustiedot / Nimi-fi";"Perustiedot / Nimi-sv";"Perustiedot / Valmistumisvuosi";"Perustiedot / Rakennusosa";"Perustiedot / Katuosoite-fi";"Perustiedot / Katuosoite-sv";"Perustiedot / Postinumero";"Perustiedot / Postitoimipaikka-fi";"Perustiedot / Rakennustunnus";"Perustiedot / Kiinteistotunnus";"Perustiedot / Paakayttotarkoitus-fi";"Perustiedot / Kayttotarkoitus";"Perustiedot / Alakayttotarkoitus-fi";"Perustiedot / Julkinen-rakennus";"Tulokset / E-luku";"Tulokset / E-luokka";"Tulokset / E-luokka-rajat / Raja-uusi-2018";"Tulokset / E-luokka-rajat / Kayttotarkoitus / Label-fi";"Perustiedot / Keskeiset-suositukset-fi";"Perustiedot / Keskeiset-suositukset-sv";"Lahtotiedot / Lammitetty-nettoala";"Lahtotiedot / Rakennusvaippa / Ilmanvuotoluku";"Lahtotiedot / Rakennusvaippa / Lampokapasiteetti";"Lahtotiedot / Rakennusvaippa / Ilmatilavuus";"Lahtotiedot / Rakennusvaippa / Ulkoseinat / Ala";"Lahtotiedot / Rakennusvaippa / Ulkoseinat / U";"Lahtotiedot / Rakennusvaippa / Ylapohja / Ala";"Lahtotiedot / Rakennusvaippa / Ylapohja / U";"Lahtotiedot / Rakennusvaippa / Alapohja / Ala";"Lahtotiedot / Rakennusvaippa / Alapohja / U";"Lahtotiedot / Rakennusvaippa / Ikkunat / Ala";"Lahtotiedot / Rakennusvaippa / Ikkunat / U";"Lahtotiedot / Rakennusvaippa / Ulkoovet / Ala";"Lahtotiedot / Rakennusvaippa / Ulkoovet / U";"Lahtotiedot / Rakennusvaippa / Kylmasillat-ua";"Lahtotiedot / Rakennusvaippa / Kylmasillat-osuus-lampohaviosta";"Lahtotiedot / Rakennusvaippa / Ua-summa";"Lahtotiedot / Ikkunat / Pohjoinen / Ala";"Lahtotiedot / Ikkunat / Pohjoinen / U";"Lahtotiedot / Ikkunat / Pohjoinen / G-ks";"Lahtotiedot / Ikkunat / Koillinen / Ala";"Lahtotiedot / Ikkunat / Koillinen / U";"Lahtotiedot / Ikkunat / Koillinen / G-ks";"Lahtotiedot / Ikkunat / Ita / Ala";"Lahtotiedot / Ikkunat / Ita / U";"Lahtotiedot / Ikkunat / Ita / G-ks";"Lahtotiedot / Ikkunat / Kaakko / Ala";"Lahtotiedot / Ikkunat / Kaakko / U";"Lahtotiedot / Ikkunat / Kaakko / G-ks";"Lahtotiedot / Ikkunat / Etela / Ala";"Lahtotiedot / Ikkunat / Etela / U";"Lahtotiedot / Ikkunat / Etela / G-ks";"Lahtotiedot / Ikkunat / Lounas / Ala";"Lahtotiedot / Ikkunat / Lounas / U";"Lahtotiedot / Ikkunat / Lounas / G-ks";"Lahtotiedot / Ikkunat / Lansi / Ala";"Lahtotiedot / Ikkunat / Lansi / U";"Lahtotiedot / Ikkunat / Lansi / G-ks";"Lahtotiedot / Ikkunat / Luode / Ala";"Lahtotiedot / Ikkunat / Luode / U";"Lahtotiedot / Ikkunat / Luode / G-ks";"Lahtotiedot / Ikkunat / Valokupu / Ala";"Lahtotiedot / Ikkunat / Valokupu / U";"Lahtotiedot / Ikkunat / Valokupu / G-ks";"Lahtotiedot / Ikkunat / Katto / Ala";"Lahtotiedot / Ikkunat / Katto / U";"Lahtotiedot / Ikkunat / Katto / G-ks";"Lahtotiedot / Ilmanvaihto / Tyyppi-id";"Lahtotiedot / Ilmanvaihto / Label-fi";"Lahtotiedot / Ilmanvaihto / Kuvaus-fi";"Lahtotiedot / Ilmanvaihto / Kuvaus-sv";"Lahtotiedot / Ilmanvaihto / Paaiv / Tulo";"Lahtotiedot / Ilmanvaihto / Paaiv / Poisto";"Lahtotiedot / Ilmanvaihto / Paaiv / Tulo-poisto";"Lahtotiedot / Ilmanvaihto / Paaiv / Sfp";"Lahtotiedot / Ilmanvaihto / Paaiv / Lampotilasuhde";"Lahtotiedot / Ilmanvaihto / Paaiv / Jaatymisenesto";"Lahtotiedot / Ilmanvaihto / Erillispoistot / Tulo";"Lahtotiedot / Ilmanvaihto / Erillispoistot / Poisto";"Lahtotiedot / Ilmanvaihto / Erillispoistot / Tulo-poisto";"Lahtotiedot / Ilmanvaihto / Erillispoistot / Sfp";"Lahtotiedot / Ilmanvaihto / Ivjarjestelma / Tulo";"Lahtotiedot / Ilmanvaihto / Ivjarjestelma / Poisto";"Lahtotiedot / Ilmanvaihto / Ivjarjestelma / Tulo-poisto";"Lahtotiedot / Ilmanvaihto / Ivjarjestelma / Sfp";"Lahtotiedot / Ilmanvaihto / Lto-vuosihyotysuhde";"Lahtotiedot / Ilmanvaihto / Tuloilma-lampotila";"Lahtotiedot / Lammitys / Lammitysmuoto-1 / Id";"Lahtotiedot / Lammitys / Lammitysmuoto-2 / Id";"Lahtotiedot / Lammitys / Lammitysmuoto-label-fi";"Lahtotiedot / Lammitys / Lammitysmuoto-1 / Kuvaus-fi";"Lahtotiedot / Lammitys / Lammitysmuoto-1 / Kuvaus-sv";"Lahtotiedot / Lammitys / Lammitysmuoto-2 / Kuvaus-fi";"Lahtotiedot / Lammitys / Lammitysmuoto-2 / Kuvaus-sv";"Lahtotiedot / Lammitys / Lammonjako / Id";"Lahtotiedot / Lammitys / Lammonjako-label-fi";"Lahtotiedot / Lammitys / Lammonjako / Kuvaus-fi";"Lahtotiedot / Lammitys / Lammonjako / Kuvaus-sv";"Lahtotiedot / Lammitys / Tilat-ja-iv / Tuoton-hyotysuhde";"Lahtotiedot / Lammitys / Tilat-ja-iv / Jaon-hyotysuhde";"Lahtotiedot / Lammitys / Tilat-ja-iv / Lampokerroin";"Lahtotiedot / Lammitys / Tilat-ja-iv / Apulaitteet";"Lahtotiedot / Lammitys / Tilat-ja-iv / Lampopumppu-tuotto-osuus";"Lahtotiedot / Lammitys / Tilat-ja-iv / Lampohavio-lammittamaton-tila";"Lahtotiedot / Lammitys / Lammin-kayttovesi / Tuoton-hyotysuhde";"Lahtotiedot / Lammitys / Lammin-kayttovesi / Jaon-hyotysuhde";"Lahtotiedot / Lammitys / Lammin-kayttovesi / Lampokerroin";"Lahtotiedot / Lammitys / Lammin-kayttovesi / Apulaitteet";"Lahtotiedot / Lammitys / Lammin-kayttovesi / Lampopumppu-tuotto-osuus";"Lahtotiedot / Lammitys / Lammin-kayttovesi / Lampohavio-lammittamaton-tila";"Lahtotiedot / Lammitys / Takka / Maara";"Lahtotiedot / Lammitys / Takka / Tuotto";"Lahtotiedot / Lammitys / Ilmalampopumppu / Maara";"Lahtotiedot / Lammitys / Ilmalampopumppu / Tuotto";"Lahtotiedot / Jaahdytysjarjestelma / Jaahdytyskauden-painotettu-kylmakerroin";"Lahtotiedot / Lkvn-kaytto / Ominaiskulutus";"Lahtotiedot / Lkvn-kaytto / Lammitysenergian-nettotarve";"Lahtotiedot / Sis-kuorma / Henkilot / Kayttoaste";"Lahtotiedot / Sis-kuorma / Henkilot / Lampokuorma";"Lahtotiedot / Sis-kuorma / Kuluttajalaitteet / Kayttoaste";"Lahtotiedot / Sis-kuorma / Kuluttajalaitteet / Lampokuorma";"Lahtotiedot / Sis-kuorma / Valaistus / Kayttoaste";"Lahtotiedot / Sis-kuorma / Valaistus / Lampokuorma";"Tulokset / Kaytettavat-energiamuodot / Kaukolampo";"Tulokset / Kaytettavat-energiamuodot / Kaukolampo-nettoala";"Tulokset / Kaytettavat-energiamuodot / Kaukolampo-kerroin";"Tulokset / Kaytettavat-energiamuodot / Kaukolampo-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Kaukolampo-nettoala-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Sahko";"Tulokset / Kaytettavat-energiamuodot / Sahko-nettoala";"Tulokset / Kaytettavat-energiamuodot / Sahko-kerroin";"Tulokset / Kaytettavat-energiamuodot / Sahko-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Sahko-nettoala-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Uusiutuva-polttoaine";"Tulokset / Kaytettavat-energiamuodot / Uusiutuva-polttoaine-nettoala";"Tulokset / Kaytettavat-energiamuodot / Uusiutuva-polttoaine-kerroin";"Tulokset / Kaytettavat-energiamuodot / Uusiutuva-polttoaine-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Uusiutuva-polttoaine-nettoala-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Fossiilinen-polttoaine";"Tulokset / Kaytettavat-energiamuodot / Fossiilinen-polttoaine-nettoala";"Tulokset / Kaytettavat-energiamuodot / Fossiilinen-polttoaine-kerroin";"Tulokset / Kaytettavat-energiamuodot / Fossiilinen-polttoaine-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Fossiilinen-polttoaine-nettoala-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Kaukojaahdytys";"Tulokset / Kaytettavat-energiamuodot / Kaukojaahdytys-nettoala";"Tulokset / Kaytettavat-energiamuodot / Kaukojaahdytys-kerroin";"Tulokset / Kaytettavat-energiamuodot / Kaukojaahdytys-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Kaukojaahdytys-nettoala-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Muu / 0 / Nimi";"Tulokset / Kaytettavat-energiamuodot / Muu / 0 / Ostoenergia";"Tulokset / Kaytettavat-energiamuodot / Muu / 0 / Muotokerroin";"Tulokset / Kaytettavat-energiamuodot / Muu / 0 / Ostoenergia-nettoala";"Tulokset / Kaytettavat-energiamuodot / Muu / 0 / Ostoenergia-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Muu / 0 / Ostoenergia-nettoala-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Muu / 1 / Nimi";"Tulokset / Kaytettavat-energiamuodot / Muu / 1 / Ostoenergia";"Tulokset / Kaytettavat-energiamuodot / Muu / 1 / Muotokerroin";"Tulokset / Kaytettavat-energiamuodot / Muu / 1 / Ostoenergia-nettoala";"Tulokset / Kaytettavat-energiamuodot / Muu / 1 / Ostoenergia-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Muu / 1 / Ostoenergia-nettoala-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Muu / 2 / Nimi";"Tulokset / Kaytettavat-energiamuodot / Muu / 2 / Ostoenergia";"Tulokset / Kaytettavat-energiamuodot / Muu / 2 / Muotokerroin";"Tulokset / Kaytettavat-energiamuodot / Muu / 2 / Ostoenergia-nettoala";"Tulokset / Kaytettavat-energiamuodot / Muu / 2 / Ostoenergia-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Muu / 2 / Ostoenergia-nettoala-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Summa";"Tulokset / Kaytettavat-energiamuodot / Kertoimella-summa";"Tulokset / Uusiutuvat-omavaraisenergiat / Aurinkosahko";"Tulokset / Uusiutuvat-omavaraisenergiat / Aurinkosahko-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / Aurinkolampo";"Tulokset / Uusiutuvat-omavaraisenergiat / Aurinkolampo-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / Tuulisahko";"Tulokset / Uusiutuvat-omavaraisenergiat / Tuulisahko-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / Lampopumppu";"Tulokset / Uusiutuvat-omavaraisenergiat / Lampopumppu-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / Muusahko";"Tulokset / Uusiutuvat-omavaraisenergiat / Muusahko-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / Muulampo";"Tulokset / Uusiutuvat-omavaraisenergiat / Muulampo-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / 0 / Nimi-fi";"Tulokset / Uusiutuvat-omavaraisenergiat / 0 / Nimi-sv";"Tulokset / Uusiutuvat-omavaraisenergiat / 0 / Vuosikulutus";"Tulokset / Uusiutuvat-omavaraisenergiat / 0 / Vuosikulutus-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / 1 / Nimi-fi";"Tulokset / Uusiutuvat-omavaraisenergiat / 1 / Nimi-sv";"Tulokset / Uusiutuvat-omavaraisenergiat / 1 / Vuosikulutus";"Tulokset / Uusiutuvat-omavaraisenergiat / 1 / Vuosikulutus-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / 2 / Nimi-fi";"Tulokset / Uusiutuvat-omavaraisenergiat / 2 / Nimi-sv";"Tulokset / Uusiutuvat-omavaraisenergiat / 2 / Vuosikulutus";"Tulokset / Uusiutuvat-omavaraisenergiat / 2 / Vuosikulutus-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / 3 / Nimi-fi";"Tulokset / Uusiutuvat-omavaraisenergiat / 3 / Nimi-sv";"Tulokset / Uusiutuvat-omavaraisenergiat / 3 / Vuosikulutus";"Tulokset / Uusiutuvat-omavaraisenergiat / 3 / Vuosikulutus-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / 4 / Nimi-fi";"Tulokset / Uusiutuvat-omavaraisenergiat / 4 / Nimi-sv";"Tulokset / Uusiutuvat-omavaraisenergiat / 4 / Vuosikulutus";"Tulokset / Uusiutuvat-omavaraisenergiat / 4 / Vuosikulutus-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / 5 / Nimi-fi";"Tulokset / Uusiutuvat-omavaraisenergiat / 5 / Nimi-sv";"Tulokset / Uusiutuvat-omavaraisenergiat / 5 / Vuosikulutus";"Tulokset / Uusiutuvat-omavaraisenergiat / 5 / Vuosikulutus-nettoala";"Tulokset / Tekniset-jarjestelmat / Tilojen-lammitys / Sahko";"Tulokset / Tekniset-jarjestelmat / Tilojen-lammitys / Lampo";"Tulokset / Tekniset-jarjestelmat / Tuloilman-lammitys / Sahko";"Tulokset / Tekniset-jarjestelmat / Tuloilman-lammitys / Lampo";"Tulokset / Tekniset-jarjestelmat / Kayttoveden-valmistus / Sahko";"Tulokset / Tekniset-jarjestelmat / Kayttoveden-valmistus / Lampo";"Tulokset / Tekniset-jarjestelmat / Iv-sahko";"Tulokset / Tekniset-jarjestelmat / Jaahdytys / Sahko";"Tulokset / Tekniset-jarjestelmat / Jaahdytys / Lampo";"Tulokset / Tekniset-jarjestelmat / Jaahdytys / Kaukojaahdytys";"Tulokset / Tekniset-jarjestelmat / Kuluttajalaitteet-ja-valaistus-sahko";"Tulokset / Tekniset-jarjestelmat / Sahko-summa";"Tulokset / Tekniset-jarjestelmat / Lampo-summa";"Tulokset / Tekniset-jarjestelmat / Kaukojaahdytys-summa";"Tulokset / Nettotarve / Tilojen-lammitys-vuosikulutus";"Tulokset / Nettotarve / Tilojen-lammitys-vuosikulutus-nettoala";"Tulokset / Nettotarve / Ilmanvaihdon-lammitys-vuosikulutus";"Tulokset / Nettotarve / Ilmanvaihdon-lammitys-vuosikulutus-nettoala";"Tulokset / Nettotarve / Kayttoveden-valmistus-vuosikulutus";"Tulokset / Nettotarve / Kayttoveden-valmistus-vuosikulutus-nettoala";"Tulokset / Nettotarve / Jaahdytys-vuosikulutus";"Tulokset / Nettotarve / Jaahdytys-vuosikulutus-nettoala";"Tulokset / Lampokuormat / Aurinko";"Tulokset / Lampokuormat / Aurinko-nettoala";"Tulokset / Lampokuormat / Ihmiset";"Tulokset / Lampokuormat / Ihmiset-nettoala";"Tulokset / Lampokuormat / Kuluttajalaitteet";"Tulokset / Lampokuormat / Kuluttajalaitteet-nettoala";"Tulokset / Lampokuormat / Valaistus";"Tulokset / Lampokuormat / Valaistus-nettoala";"Tulokset / Lampokuormat / Kvesi";"Tulokset / Lampokuormat / Kvesi-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kaukolampo-vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kaukolampo-vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kokonaissahko-vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kokonaissahko-vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kiinteistosahko-vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kiinteistosahko-vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kayttajasahko-vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kayttajasahko-vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kaukojaahdytys-vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kaukojaahdytys-vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 0 / Nimi-fi";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 0 / Nimi-sv";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 0 / Vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 0 / Vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 1 / Nimi-fi";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 1 / Nimi-sv";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 1 / Vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 1 / Vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 2 / Nimi-fi";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 2 / Nimi-sv";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 2 / Vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 2 / Vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 3 / Nimi-fi";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 3 / Nimi-sv";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 3 / Vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 3 / Vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 4 / Nimi-fi";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 4 / Nimi-sv";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 4 / Vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 4 / Vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Kevyt-polttooljy";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Kevyt-polttooljy-kerroin";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Kevyt-polttooljy-kwh";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Kevyt-polttooljy-kwh-nettoala";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Pilkkeet-havu-sekapuu";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Pilkkeet-havu-sekapuu-kerroin";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Pilkkeet-havu-sekapuu-kwh";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Pilkkeet-havu-sekapuu-kwh-nettoala";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Pilkkeet-koivu";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Pilkkeet-koivu-kerroin";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Pilkkeet-koivu-kwh";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Pilkkeet-koivu-kwh-nettoala";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Puupelletit";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Puupelletit-kerroin";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Puupelletit-kwh";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Puupelletit-kwh-nettoala";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 0 / Nimi";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 0 / Maara-vuodessa";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 0 / Yksikko";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 0 / Muunnoskerroin";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 0 / Kwh";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 0 / Kwh-nettoala";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 1 / Nimi";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 1 / Maara-vuodessa";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 1 / Yksikko";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 1 / Muunnoskerroin";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 1 / Kwh";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 1 / Kwh-nettoala";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 2 / Nimi";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 2 / Maara-vuodessa";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 2 / Yksikko";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 2 / Muunnoskerroin";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 2 / Kwh";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 2 / Kwh-nettoala";"Toteutunut-ostoenergiankulutus / Sahko-vuosikulutus-yhteensa";"Toteutunut-ostoenergiankulutus / Sahko-vuosikulutus-yhteensa-nettoala";"Toteutunut-ostoenergiankulutus / Kaukolampo-vuosikulutus-yhteensa";"Toteutunut-ostoenergiankulutus / Kaukolampo-vuosikulutus-yhteensa-nettoala";"Toteutunut-ostoenergiankulutus / Polttoaineet-vuosikulutus-yhteensa";"Toteutunut-ostoenergiankulutus / Polttoaineet-vuosikulutus-yhteensa-nettoala";"Toteutunut-ostoenergiankulutus / Kaukojaahdytys-vuosikulutus-yhteensa";"Toteutunut-ostoenergiankulutus / Kaukojaahdytys-vuosikulutus-yhteensa-nettoala";"Toteutunut-ostoenergiankulutus / Summa";"Toteutunut-ostoenergiankulutus / Summa-nettoala";"Huomiot / Ymparys / Teksti-fi";"Huomiot / Ymparys / Teksti-sv";"Huomiot / Ymparys / Toimenpide / 0 / Nimi-fi";"Huomiot / Ymparys / Toimenpide / 0 / Nimi-sv";"Huomiot / Ymparys / Toimenpide / 0 / Lampo";"Huomiot / Ymparys / Toimenpide / 0 / Sahko";"Huomiot / Ymparys / Toimenpide / 0 / Jaahdytys";"Huomiot / Ymparys / Toimenpide / 0 / Eluvun-muutos";"Huomiot / Ymparys / Toimenpide / 1 / Nimi-fi";"Huomiot / Ymparys / Toimenpide / 1 / Nimi-sv";"Huomiot / Ymparys / Toimenpide / 1 / Lampo";"Huomiot / Ymparys / Toimenpide / 1 / Sahko";"Huomiot / Ymparys / Toimenpide / 1 / Jaahdytys";"Huomiot / Ymparys / Toimenpide / 1 / Eluvun-muutos";"Huomiot / Ymparys / Toimenpide / 2 / Nimi-fi";"Huomiot / Ymparys / Toimenpide / 2 / Nimi-sv";"Huomiot / Ymparys / Toimenpide / 2 / Lampo";"Huomiot / Ymparys / Toimenpide / 2 / Sahko";"Huomiot / Ymparys / Toimenpide / 2 / Jaahdytys";"Huomiot / Ymparys / Toimenpide / 2 / Eluvun-muutos";"Huomiot / Alapohja-ylapohja / Teksti-fi";"Huomiot / Alapohja-ylapohja / Teksti-sv";"Huomiot / Alapohja-ylapohja / Toimenpide / 0 / Nimi-fi";"Huomiot / Alapohja-ylapohja / Toimenpide / 0 / Nimi-sv";"Huomiot / Alapohja-ylapohja / Toimenpide / 0 / Lampo";"Huomiot / Alapohja-ylapohja / Toimenpide / 0 / Sahko";"Huomiot / Alapohja-ylapohja / Toimenpide / 0 / Jaahdytys";"Huomiot / Alapohja-ylapohja / Toimenpide / 0 / Eluvun-muutos";"Huomiot / Alapohja-ylapohja / Toimenpide / 1 / Nimi-fi";"Huomiot / Alapohja-ylapohja / Toimenpide / 1 / Nimi-sv";"Huomiot / Alapohja-ylapohja / Toimenpide / 1 / Lampo";"Huomiot / Alapohja-ylapohja / Toimenpide / 1 / Sahko";"Huomiot / Alapohja-ylapohja / Toimenpide / 1 / Jaahdytys";"Huomiot / Alapohja-ylapohja / Toimenpide / 1 / Eluvun-muutos";"Huomiot / Alapohja-ylapohja / Toimenpide / 2 / Nimi-fi";"Huomiot / Alapohja-ylapohja / Toimenpide / 2 / Nimi-sv";"Huomiot / Alapohja-ylapohja / Toimenpide / 2 / Lampo";"Huomiot / Alapohja-ylapohja / Toimenpide / 2 / Sahko";"Huomiot / Alapohja-ylapohja / Toimenpide / 2 / Jaahdytys";"Huomiot / Alapohja-ylapohja / Toimenpide / 2 / Eluvun-muutos";"Huomiot / Lammitys / Teksti-fi";"Huomiot / Lammitys / Teksti-sv";"Huomiot / Lammitys / Toimenpide / 0 / Nimi-fi";"Huomiot / Lammitys / Toimenpide / 0 / Nimi-sv";"Huomiot / Lammitys / Toimenpide / 0 / Lampo";"Huomiot / Lammitys / Toimenpide / 0 / Sahko";"Huomiot / Lammitys / Toimenpide / 0 / Jaahdytys";"Huomiot / Lammitys / Toimenpide / 0 / Eluvun-muutos";"Huomiot / Lammitys / Toimenpide / 1 / Nimi-fi";"Huomiot / Lammitys / Toimenpide / 1 / Nimi-sv";"Huomiot / Lammitys / Toimenpide / 1 / Lampo";"Huomiot / Lammitys / Toimenpide / 1 / Sahko";"Huomiot / Lammitys / Toimenpide / 1 / Jaahdytys";"Huomiot / Lammitys / Toimenpide / 1 / Eluvun-muutos";"Huomiot / Lammitys / Toimenpide / 2 / Nimi-fi";"Huomiot / Lammitys / Toimenpide / 2 / Nimi-sv";"Huomiot / Lammitys / Toimenpide / 2 / Lampo";"Huomiot / Lammitys / Toimenpide / 2 / Sahko";"Huomiot / Lammitys / Toimenpide / 2 / Jaahdytys";"Huomiot / Lammitys / Toimenpide / 2 / Eluvun-muutos";"Huomiot / Iv-ilmastointi / Teksti-fi";"Huomiot / Iv-ilmastointi / Teksti-sv";"Huomiot / Iv-ilmastointi / Toimenpide / 0 / Nimi-fi";"Huomiot / Iv-ilmastointi / Toimenpide / 0 / Nimi-sv";"Huomiot / Iv-ilmastointi / Toimenpide / 0 / Lampo";"Huomiot / Iv-ilmastointi / Toimenpide / 0 / Sahko";"Huomiot / Iv-ilmastointi / Toimenpide / 0 / Jaahdytys";"Huomiot / Iv-ilmastointi / Toimenpide / 0 / Eluvun-muutos";"Huomiot / Iv-ilmastointi / Toimenpide / 1 / Nimi-fi";"Huomiot / Iv-ilmastointi / Toimenpide / 1 / Nimi-sv";"Huomiot / Iv-ilmastointi / Toimenpide / 1 / Lampo";"Huomiot / Iv-ilmastointi / Toimenpide / 1 / Sahko";"Huomiot / Iv-ilmastointi / Toimenpide / 1 / Jaahdytys";"Huomiot / Iv-ilmastointi / Toimenpide / 1 / Eluvun-muutos";"Huomiot / Iv-ilmastointi / Toimenpide / 2 / Nimi-fi";"Huomiot / Iv-ilmastointi / Toimenpide / 2 / Nimi-sv";"Huomiot / Iv-ilmastointi / Toimenpide / 2 / Lampo";"Huomiot / Iv-ilmastointi / Toimenpide / 2 / Sahko";"Huomiot / Iv-ilmastointi / Toimenpide / 2 / Jaahdytys";"Huomiot / Iv-ilmastointi / Toimenpide / 2 / Eluvun-muutos";"Huomiot / Valaistus-muut / Teksti-fi";"Huomiot / Valaistus-muut / Teksti-sv";"Huomiot / Valaistus-muut / Toimenpide / 0 / Nimi-fi";"Huomiot / Valaistus-muut / Toimenpide / 0 / Nimi-sv";"Huomiot / Valaistus-muut / Toimenpide / 0 / Lampo";"Huomiot / Valaistus-muut / Toimenpide / 0 / Sahko";"Huomiot / Valaistus-muut / Toimenpide / 0 / Jaahdytys";"Huomiot / Valaistus-muut / Toimenpide / 0 / Eluvun-muutos";"Huomiot / Valaistus-muut / Toimenpide / 1 / Nimi-fi";"Huomiot / Valaistus-muut / Toimenpide / 1 / Nimi-sv";"Huomiot / Valaistus-muut / Toimenpide / 1 / Lampo";"Huomiot / Valaistus-muut / Toimenpide / 1 / Sahko";"Huomiot / Valaistus-muut / Toimenpide / 1 / Jaahdytys";"Huomiot / Valaistus-muut / Toimenpide / 1 / Eluvun-muutos";"Huomiot / Valaistus-muut / Toimenpide / 2 / Nimi-fi";"Huomiot / Valaistus-muut / Toimenpide / 2 / Nimi-sv";"Huomiot / Valaistus-muut / Toimenpide / 2 / Lampo";"Huomiot / Valaistus-muut / Toimenpide / 2 / Sahko";"Huomiot / Valaistus-muut / Toimenpide / 2 / Jaahdytys";"Huomiot / Valaistus-muut / Toimenpide / 2 / Eluvun-muutos";"Huomiot / Suositukset-fi";"Huomiot / Suositukset-sv";"Huomiot / Lisatietoja-fi";"Huomiot / Lisatietoja-sv";"Lisamerkintoja-fi";"Lisamerkintoja-sv" +15;2018;2;23;2024-03-13T13:41:34.527654;2034-03-11T13:41:34.527661;;;0;0;2024-03-13;;"[Ok4xrPe";":Vg:&yXv6";"~1";2020;"0aV*_Yj";"x8!wtyYV";"P!G";"00100";"HELSINKI";"176993494J";"Lr25#%Tk";"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";true;;;199;"1. Pienet asuinrakennukset";"^:";",%<93dp8, Vesi-ilmalämpöpumppu";"V-#>93dp8";"2f}{&Pb";"}";"F(uo";5;"Sähköinen kattolämmitys";"#8GEi:GE";"3?BjX,<";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,6;2;0,6;3;0,1;6;1;1;0,5;0,5;0,5;1;1;1,2;1,2;1,2;1;1;0,5;0,5;0,5;1;1;1;1;1;1;1;0,28;0,28;0,28;;;;;;;;;;;;;;;;;;;5;3,48;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;;;;;1;1;1;1;1;1;1;1;1;1;1;6;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;1;10;10;10;1;1300;1300;1300;1;1700;1700;1700;1;4,7;4,7;4,7;;1;"y&/TL@";;;;"O&=*";1;;1;1;1;"^;:@L*T>$";1;;;;;1;1;1;1;1;1;1;1;4;4;"Ih12Dz!e";"ipS77Hg:";;;;1;1;1;"L:]WOb]Wc':";;1;;;;".y[`LE&";;;;1;;"WxM<|";"|V!GvjN";;;;;;;;;;;;;;;;;;;"! *+;ue&j]";"rkK9Gi_>!";;;1;1;1;;"G%3LMf8>";;1;1;;;"_tJ1";;;1;1;;"""s";";k";;;1;;;1;"qa";;1;;1;;"$0";"'";;;1;;"ckjk(Q";"qLLX~!b8 q";"p0$>c";;1;;1;1;;;;;;;"FO3can2";"P,osTfADYb";;1;;1;"xTgYE.";"]`U3.";"*%";"SU2";"MwVXFbtOdp7)D7g";"HU>dp";"bq?io";2021;"TOg*Umu]";"hV=";"Og";"33100";"TAMPERE";"793478530L";"gFkS+/X;";"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";true;;;199;"1. Pienet asuinrakennukset";"|";";jmdmY6}4/#";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,167;6;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;4;"Painovoimainen/koneellinen poisto";"&1(BBRsh#v";"UwWg";1;1;"1,000 / 1,000";1;1;1;1;1;"1,000 / 1,000";1;1;1;"1,000 / 1,000";1;1;1;2;5;"Puu, Kaasu";"pRj|Vjj@";"drRN";"1'";"{";2;"Vesikiertoinen kattosäteilylämmitys";"^'!^";"-e.";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,6;2;0,6;3;0,1;6;1;1;0,5;0,5;0,5;1;1;1,2;1,2;1,2;1;1;0,5;0,5;0,5;1;1;1;1;1;1;1;0,28;0,28;0,28;;;;;;;;;;;;;;;;;;;5;3,48;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;;;;;1;1;1;1;1;1;1;1;1;1;1;6;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;1;10;10;10;1;1300;1300;1300;1;1700;1700;1700;1;4,7;4,7;4,7;;;;;;;;;"ci+";;;;;;"oG}6=J.0K";;;;1;1;1;1;1;1;1;1;4;4;"4)*dD[>*}";"t4";"jJa";;;;;1;"m5s5iXTqw";;1;1;;1;"0X1O`";"^,";1;;;;"RO";"}bn+H_If";;;;1;;;"cxfUwn#5z0";;;;;;"L^g;/b|B";;1;;;;"8t`";"9qDe";;;1;1;1;1;"qPK9bBp&";"Ufub";;1;1;1;"oMW";"y0Vfi:.KeB";1;1;;1;"+]";"NYOM";;;;;;;;;;;;;;;;;;;"oh9r";"KMM<";;;1;1;;1;;;;;1;1;"*";"}UWh*P";1;;1;1;"&8;";"R&N";"""";"/V-PIuu@O";"3";"'Q'yMIF" +13;2018;2;23;2024-03-13T13:41:34.464840;2034-03-11T13:41:34.464846;;;1;1;2024-03-13;;"xGlC.M9[";"0e";2022;"?'f|Y""|-Bo";"Hwm,=Y'w";"d8El G3E";"00100";"HELSINKI";"908982025T";"!u<7s";"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";true;;;199;"1. Pienet asuinrakennukset";"xXa";"6A(dQi.S";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,167;6;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;"Painovoimainen ilmanvaihtojärjestelmä";"ZL#PK^g.";"OH/Wv]P";1;1;"1,000 / 1,000";1;1;1;1;1;"1,000 / 1,000";1;1;1;"1,000 / 1,000";1;1;1;8;5;"Poistoilmalämpöpumppu, Kaasu";"lh/L,#";"F";"LC>1748";"){a";"2pZ);5";"lWk^-";1;1;;;;;;;1;;;;1;;;1;"I~";"vk:";"J";;;1;;1;;;1;;;1;"N";;;;;;"y";"L6B*'";;"o""@";1;1;;1;;;1;;1;1;;;1;1;;1;"iLdPHKGd3@c";"|OB";"MA~M";"8I$sCaW";":ygW9~";2018;"IYDwAnV";1;1;1;;1;;1;1;1;1;1;1;1;1;1;1;1;4;4;"=3l";"h<0gm/+?=";"m'wetN";;;1;;1;"qVi_";;1;1;1;;"P}";;;;;;"g0";"I A5E";"?";"AIZjhDV _";;;;;"wz]/Es|(-";"Jsr";1;1;1;1;"g&{SR*0ob6";"z";1;1;1;1;"G`5";"yr7awGE";;":w5(ffsT";1;;1;;"7C>+Z+1@2-";"9";1;;;;;;;;;1;"iQ,UL";"OjN/:";;;;1;1;1;"E:";;;;1;1;;;;1;1;1;"xJ";"U[E 8";"V";"9[:|M?g";1;1;;1;;;;;;;;;;;;;"V";"O8#";"cG,te<";"hy:P_x:1]";"<";"Vkac0D^55""" +9;2018;2;23;2024-03-13T13:41:34.272528;2034-03-11T13:41:34.272537;;;0;0;2024-03-13;;"FBaM";"AZ&a) N";"#-";2021;"8i~yzf)gMC";"GiA";"GM";"00100";"HELSINKI";"8637346502";"?=J*";"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";false;;;199;"1. Pienet asuinrakennukset";"*Rp[-Va}Eg";".-NNBwpU";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,167;6;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;6;"t_-RK";"t_-RK";" {";1;1;"1,000 / 1,000";1;1;1;1;1;"1,000 / 1,000";1;1;1;"1,000 / 1,000";1;1;1;9;7;"i+&.fnHQ, Vesi-ilmalämpöpumppu";"i+&.fnHQ";"RDO8";"2D63";"Hd_|?66Q";6;"Ilmalämmitys";"Hmi";"""98";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,6;2;0,6;3;0,1;6;1;1;0,5;0,5;0,5;1;1;1,2;1,2;1,2;1;1;0,5;0,5;0,5;1;1;1;1;1;1;1;0,28;0,28;0,28;;;;;;;;;;;;;;;;;;;5;3,48;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;;;;;1;1;1;1;1;1;1;1;1;1;1;6;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;1;10;10;10;1;1300;1300;1300;1;1700;1700;1700;1;4,7;4,7;4,7;"{+y=ZJ@Nr";1;;;;;"CnmuFn~unW";;"tN";;;;;;;1;;;1;1;1;1;1;1;1;1;4;4;"q`O,s";"x""(";"lE9fl:(1";;1;;;1;;;1;;;1;"i";"jH";1;;;;"*";"?nku/x !P=";"7w";"f-=";1;;1;;"mT";"]""RrZsu";1;1;1;;;" _2ZYK]^..";;;;;"TBur"",<";"p""0";;;;;1;;"E/I;8=cev";"n%t*GZZC";;;;;"bHGKKCTEJ";"JZ-[$";;1;;1;1;",aL{j:`(G";;;1;1;;"2N,";"Nv";;1;1;;"Ke";"+b&D%!Ui^x";;"""W09a+";1;1;1;1;"Q/y#=";"A/=86V=w;m";;;1;;"6`[`4";"0";;1;1;;"wPmo73a3Z";"f";"P8YAb?}" +8;2018;2;23;2024-03-13T13:41:34.215121;2034-03-11T13:41:34.215129;;;1;1;2024-03-13;;"(,`";"vm`-r:0t";"[#,nG,&";2020;"A+q>??=""86";"Voe~""Z#C+";"v<3%S[IB|>";"33100";"TAMPERE";"321327045J";"v3T)Dd";"sA`@&";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,167;6;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;6;"{aJk*@ N";"{aJk*@ N";" N|(a#x66";1;1;"1,000 / 1,000";1;1;1;1;1;"1,000 / 1,000";1;1;1;"1,000 / 1,000";1;1;1;3;5;"Pelletti, Kaasu";"w`/]k00w8 ";"1*E t&4";"OmEYutZ$l";"(;d`<0l6";12;"AC{9_g~+~";"AC{9_g~+~";"=L";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,6;2;0,6;3;0,1;6;1;1;0,5;0,5;0,5;1;1;1,2;1,2;1,2;1;1;0,5;0,5;0,5;1;1;1;1;1;1;1;0,28;0,28;0,28;;;;;;;;;;;;;;;;;;;5;3,48;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;;;;;1;1;1;1;1;1;1;1;1;1;1;6;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;1;10;10;10;1;1300;1300;1300;1;1700;1700;1700;1;4,7;4,7;4,7;;1;",9lM%'@j6w'";;;;"jc(R@%,";;;1;;;;;;;;;1;1;1;1;1;1;1;1;4;4;".k+KdVhL";"W*+";;"2jV:9R;W";;;;;"BT`z";"qLHh~QqIQ6";;1;1;1;"-zS4q";;1;1;;;"j";"FZ";;"""+Z~";1;1;;;;"t""&oF*a";;;1;;"J}6KS";;;1;1;1;"""VI vU";"el*|7bqZu";;"M";;;;1;;"L%_IG&B306e";;1;1;;"gy c]";;;;;1;"DF";"gbh .`)>9S";;;1;1;1;1;;;1;;;;"]";"/";1;;1;;"zH.P~f";"0)mT-TcLr";;"z[xy^";1;1;;1;"'>1"".];l";;1;;1;1;"z(_o+6*[|+";;1;1;;1;",2";"@_T";"X5%[}m@uce";"d";"<*gp";"C" +7;2018;2;23;2024-03-13T13:41:34.071465;2034-03-11T13:41:34.071477;;;1;1;2024-03-13;;"$";"P;+)CZ";"BU&m3G6l;p";2021;"f^~hCO7-_";"#e";"u'+)";"00100";"HELSINKI";"294233023U";"I%]Qr7";"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";true;;;199;"1. Pienet asuinrakennukset";"v*Axb";"v,@";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,167;6;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;5;"Painovoimainen/koneellinen tulo- ja poisto";"HVu%R214`UG";"'P";1;1;"1,000 / 1,000";1;1;1;1;1;"1,000 / 1,000";1;1;1;"1,000 / 1,000";1;1;1;2;2;"Puu, Puu";"FXu?'";"7)u";"^b@P";"(K";0;"Vesikiertoinen patterilämmitys";"fz";":?,tM";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,6;2;0,6;3;0,1;6;1;1;0,5;0,5;0,5;1;1;1,2;1,2;1,2;1;1;0,5;0,5;0,5;1;1;1;1;1;1;1;0,28;0,28;0,28;;;;;;;;;;;;;;;;;;;5;3,48;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;;;;;1;1;1;1;1;1;1;1;1;1;1;6;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;1;10;10;10;1;1300;1300;1300;1;1700;1700;1700;1;4,7;4,7;4,7;;;"P2W";1;;;"^LqDHVf";;"<`~";;;;;1;;;;;1;1;1;1;1;1;1;1;4;4;"&<";"hqa~";"c:wpbd";"zeMa8ia";;1;;;"J{b):Fg";;;1;1;1;"3o^Hu~!l[";"GQQTa";;1;;;"7q`";"ceq4Y*";;;;;1;;;"mV";;;1;;;;;;;;"Y";"mHvr";"'*]a";;1;1;1;;;;1;1;1;;;"G: ; ";1;;1;;"2 >A*w]Q^";"}2U6wlHWU[";;"#)u `^0~";1;1;1;1;"95$+";;1;1;;1;;;;;1;1;"`;";"M*D()*3`x";;;1;1;;1;"ZOMCjE(fJ3";;1;;;;;"c>R/f>b]";;1;;;"'sPuCXK.u";"GA_zOc";"x";"9b7";"Q||Y";"F#(sK?" +6;2018;2;23;2024-03-13T13:41:33.997663;2034-03-11T13:41:33.997671;;;1;1;2024-03-13;;"Y`O";"$p*Pq&+";"?AML^R~{j5";2019;"l7@6D_";"sI";"8";"00100";"HELSINKI";"673610149M";"-B,EY";"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";false;;;199;"1. Pienet asuinrakennukset";"n";"rQSR4Eg u";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,167;6;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;5;"Painovoimainen/koneellinen tulo- ja poisto";"E@G ";"=+^!6N[r)|";1;1;"1,000 / 1,000";1;1;1;1;1;"1,000 / 1,000";1;1;1;"1,000 / 1,000";1;1;1;9;6;"7>?onJxQV, Maalämpöpumppu";"7>?onJxQV";"~";"k>X94";"$";12;"f,";"f,";"Tzg-a";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,6;2;0,6;3;0,1;6;1;1;0,5;0,5;0,5;1;1;1,2;1,2;1,2;1;1;0,5;0,5;0,5;1;1;1;1;1;1;1;0,28;0,28;0,28;;;;;;;;;;;;;;;;;;;5;3,48;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;;;;;1;1;1;1;1;1;1;1;1;1;1;6;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;1;10;10;10;1;1300;1300;1300;1;1700;1700;1700;1;4,7;4,7;4,7;;;;;;;;;"'pS~b";1;;;"bB,`b.h$";1;;1;1;1;1;1;1;1;1;1;1;1;4;4;")";"Z?.Cn[tEA";;"""z:-?{-7^j";;1;;;;"inR2ia:H";;;;;"C[3 sJEn";"8";;;;;"$";"sNIsp1GI";;"A";1;;1;;;"bPPK)se56-";1;;;1;"s7LWs_Qpu";"@YI-Q";1;1;1;1;"@=j";"pIp";;;1;;1;1;"zL>_=-";"j|G0wyym";1;1;;1;;;;;;;"e;F.T]";"zm`n`N26!";;;;1;1;1;"pK@Tp";;1;;1;1;"1~;u)";;;1;1;1;"Z!";"S]1'nZO";"M6G";"6io;";1;;1;;;;;1;1;1;;"Oi^KvU7";;1;;;"V9d%p[zBL0";"5F"" _|gr";"y3q#=7I[U";"!f:y{w";"=6>fK";"""-tF]B" +1;2013;2;2;2024-02-22T14:10:24.283032;2034-02-23T00:00;;;2;;2020-04-15;false;"Laskentatyökalu v1.2";"Rakennuksen nimi";"Rakennuksen nimi SV";2016;"Rakennusosa";"Katuosoite";"Katuosoite SV";"33100";"TAMPERE";"101089527F";"Kiinteistötunnus";"2. Rivi- ja ketjutalot";"RK";"Rivi- ja ketjutalot";false;322;"E";105;"2. Rivi- ja ketjutalot";"Seuraavia toimenpiteitä voisi tehdä: + + * Toimenpide 1 + * Toimenpide 2";"Keskeiset suositukset SV";5000;0,3;1,235;12,345;200;0,81;0,5;0,45;25;0,55;2;2;1500;1,9;1,5;0;3031,475;0;1;0,75;1,2;1,2;0,75;1,5;1,5;0,75;0;1,9;0,8;1,4;1,6;0,75;0,5;0,9;0,75;1,2;0,8;0,75;1,3;2,2;0,75;0;0,4;1;1;1;1;0;"Painovoimainen ilmanvaihtojärjestelmä";"ilmanvaihdon kuvaus fi";"ilmanvaihdon kuvaus sv";1;3;"1,000 / 3,000";2;0;0;1;2;"1,000 / 2,000";1,3;2;1;"2,000 / 1,000";1;0,65;21;2;5;"Puu, Kaasu";;;;;7;"Uuni- tai kamiinalämmitys";;;1;0,5;2,24;1,23;0,1;10;1;0,9;3;1,4;0,1;10;1;2;1;2;3,2;555;34;0,6;2;0,6;3;0,1;8;0;0;0,7;0;0;5000;1;1,7;8500;1,7;0;0;0,5;0;0;550000;110;1;550000;110;0;0;0,4;0;0;"Turve";100000;10,5;20;1050000;210;;;;;;;;;;;;;655000;1608500;;;;;;;;;;;;;"Uusiutuva 1";"uusiutuva 2 ruotsiksi";100;0,02;;"uusiutuva 2 ruotsiksi";;;;;;;;;;;;;;;;;;;1;2;3;4;5;6;7;1;2;3;4;21;14;3;1000;0,2;2000;0,4;3000;0,6;4000;0,8;100;0,02;200;0,04;300;0,06;400;0,08;500;0,1;10000;2;20000;4;30000;6;40000;8;50000;10;"Ostettu energia 1";"ostettu energia 1 ruotsiksi";1234,56;0,247;;"ostettu energia 2 ruotsiksi";;;;;;;;;;;;;;;1000;10;10000;2;2000;1300;2600000;520;3000;1700;5100000;1020;4000;4,7;18800;3,76;"Turve";1000;"Kiloa";0,8;800;0,16;;;;;;;;;;;;;50000;10;40000;8;30000;6;20000;4;140000;28;"Ulkoseinien, ulko-ovien ja ikkunoiden huomiot.";"Ulkoseinien, ulko-ovien ja ikkunoiden huomiot SV.";"Ulkoseinien, ulko-ovien ja ikkunoiden huomiot ehdotus.";"Ulkoseinien, ulko-ovien ja ikkunoiden huomiot ehdotus SV.";9;8;7;6;;;;;;;;;;;;;"Ylä- ja alapohjan huomiot.";"Ylä- ja alapohjan huomiot SV.";"Ylä- ja alapohjan huomiot ehdotus.";"Ylä- ja alapohjan huomiot SV ehdotus.";1;2;3;4;;;;;;;;;;;;;"Tilojen ja käyttöveden lämmitysjärjestelmien huomiot.";"ilojen ja käyttöveden lämmitysjärjestelmien huomiot SV.";"Tilojen ja käyttöveden lämmitysjärjestelmien huomiot ehdotus.";"ilojen ja käyttöveden lämmitysjärjestelmien huomiot SV ehdotus.";-200;204,52;-123,45;456,679;;;;;;;;;;;;;"Ilmanvaihto- ja ilmastointijärjestelmien huomiot.";"Ilmanvaihto- ja ilmastointijärjestelmien huomiot SV.";"Ilmanvaihto- ja ilmastointijärjestelmien huomiot ehdotus 1.";"Ilmanvaihto- ja ilmastointijärjestelmien huomiot SV ehdotus 1.";1;5;10;20;"Ilmanvaihto- ja ilmastointijärjestelmien huomiot ehdotus 2.";"Ilmanvaihto- ja ilmastointijärjestelmien huomiot SV ehdotus 2.";10;50;100;200;;;;;;;"Valaistuksen, jäähdytysjärjestelmien, sähköisten erillislämmitysten ja muiden järjestelmien huomiot.";"Valaistuksen, jäähdytysjärjestelmien, sähköisten erillislämmitysten ja muiden järjestelmien huomiot SV.";"Valaistuksen, jäähdytysjärjestelmien, sähköisten.... -ehdotus.";"Valaistuksen, jäähdytysjärjestelmien, sähköisten erillislämmitysten ... ehdotus SV.";100;200;300;-400;;;;;;;;;;;;;"Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus.";"Suositellut toimenpide-ehdotukset SV.";"Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja. Lisätietoja.";"Lisätietoja SV";"Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä.";"Lisämerkintöjä SV." diff --git a/etp-core/docker/minio/files/api/signed/aineistot/2/energiatodistukset.csv/xl.meta b/etp-core/docker/minio/files/api/signed/aineistot/2/energiatodistukset.csv/xl.meta new file mode 100644 index 0000000000000000000000000000000000000000..2f238291307321c938926e89bfbc6063e0433c59 GIT binary patch literal 396 zcma#>F;ZY;U}iYRz`$6=#Kd?+W$F@{FyI?CwRydC08ke}ZWELF}n3s~gzu=sU?8Jll%&W8aH7|2bcFal7XI$)> z>IIIo=T5zvBL@H!^orsD literal 0 HcmV?d00001 diff --git a/etp-core/docker/minio/files/api/signed/aineistot/3/energiatodistukset.csv/20daf962-4039-41c2-a552-07220e27e853/part.1 b/etp-core/docker/minio/files/api/signed/aineistot/3/energiatodistukset.csv/20daf962-4039-41c2-a552-07220e27e853/part.1 new file mode 100644 index 000000000..a4422609d --- /dev/null +++ b/etp-core/docker/minio/files/api/signed/aineistot/3/energiatodistukset.csv/20daf962-4039-41c2-a552-07220e27e853/part.1 @@ -0,0 +1,15 @@ +o*u[LCEDbK=&q8 w<"Versio";"Tila-id";"Allekirjoitusaika";"Voimassaolo-paattymisaika";"Perustiedot / Kieli";"Perustiedot / Laatimisvaihe";"Perustiedot / Havainnointikaynti";"Perustiedot / Uudisrakennus";"Perustiedot / Valmistumisvuosi";"Perustiedot / Postinumero";"Perustiedot / Postitoimipaikka-fi";"Perustiedot / Paakayttotarkoitus-fi";"Perustiedot / Kayttotarkoitus";"Perustiedot / Alakayttotarkoitus-fi";"Perustiedot / Julkinen-rakennus";"Tulokset / E-luku";"Tulokset / E-luokka";"Tulokset / E-luokka-rajat / Raja-uusi-2018";"Tulokset / E-luokka-rajat / Kayttotarkoitus / Label-fi";"Perustiedot / Keskeiset-suositukset-fi";"Perustiedot / Keskeiset-suositukset-sv";"Lahtotiedot / Lammitetty-nettoala";"Lahtotiedot / Rakennusvaippa / Ilmanvuotoluku";"Lahtotiedot / Rakennusvaippa / Lampokapasiteetti";"Lahtotiedot / Rakennusvaippa / Ilmatilavuus";"Lahtotiedot / Rakennusvaippa / Ulkoseinat / Ala";"Lahtotiedot / Rakennusvaippa / Ulkoseinat / U";"Lahtotiedot / Rakennusvaippa / Ylapohja / Ala";"Lahtotiedot / Rakennusvaippa / Ylapohja / U";"Lahtotiedot / Rakennusvaippa / Alapohja / Ala";"Lahtotiedot / Rakennusvaippa / Alapohja / U";"Lahtotiedot / Rakennusvaippa / Ikkunat / Ala";"Lahtotiedot / Rakennusvaippa / Ikkunat / U";"Lahtotiedot / Rakennusvaippa / Ulkoovet / Ala";"Lahtotiedot / Rakennusvaippa / Ulkoovet / U";"Lahtotiedot / Rakennusvaippa / Kylmasillat-ua";"Lahtotiedot / Rakennusvaippa / Kylmasillat-osuus-lampohaviosta";"Lahtotiedot / Rakennusvaippa / Ua-summa";"Lahtotiedot / Ikkunat / Pohjoinen / Ala";"Lahtotiedot / Ikkunat / Pohjoinen / U";"Lahtotiedot / Ikkunat / Pohjoinen / G-ks";"Lahtotiedot / Ikkunat / Koillinen / Ala";"Lahtotiedot / Ikkunat / Koillinen / U";"Lahtotiedot / Ikkunat / Koillinen / G-ks";"Lahtotiedot / Ikkunat / Ita / Ala";"Lahtotiedot / Ikkunat / Ita / U";"Lahtotiedot / Ikkunat / Ita / G-ks";"Lahtotiedot / Ikkunat / Kaakko / Ala";"Lahtotiedot / Ikkunat / Kaakko / U";"Lahtotiedot / Ikkunat / Kaakko / G-ks";"Lahtotiedot / Ikkunat / Etela / Ala";"Lahtotiedot / Ikkunat / Etela / U";"Lahtotiedot / Ikkunat / Etela / G-ks";"Lahtotiedot / Ikkunat / Lounas / Ala";"Lahtotiedot / Ikkunat / Lounas / U";"Lahtotiedot / Ikkunat / Lounas / G-ks";"Lahtotiedot / Ikkunat / Lansi / Ala";"Lahtotiedot / Ikkunat / Lansi / U";"Lahtotiedot / Ikkunat / Lansi / G-ks";"Lahtotiedot / Ikkunat / Luode / Ala";"Lahtotiedot / Ikkunat / Luode / U";"Lahtotiedot / Ikkunat / Luode / G-ks";"Lahtotiedot / Ikkunat / Valokupu / Ala";"Lahtotiedot / Ikkunat / Valokupu / U";"Lahtotiedot / Ikkunat / Valokupu / G-ks";"Lahtotiedot / Ikkunat / Katto / Ala";"Lahtotiedot / Ikkunat / Katto / U";"Lahtotiedot / Ikkunat / Katto / G-ks";"Lahtotiedot / Ilmanvaihto / Tyyppi-id";"Lahtotiedot / Ilmanvaihto / Label-fi";"Lahtotiedot / Ilmanvaihto / Kuvaus-fi";"Lahtotiedot / Ilmanvaihto / Kuvaus-sv";"Lahtotiedot / Ilmanvaihto / Paaiv / Tulo";"Lahtotiedot / Ilmanvaihto / Paaiv / Poisto";"Lahtotiedot / Ilmanvaihto / Paaiv / Tulo-poisto";"Lahtotiedot / Ilmanvaihto / Paaiv / Sfp";"Lahtotiedot / Ilmanvaihto / Paaiv / Lampotilasuhde";"Lahtotiedot / Ilmanvaihto / Paaiv / Jaatymisenesto";"Lahtotiedot / Ilmanvaihto / Erillispoistot / Tulo";"Lahtotiedot / Ilmanvaihto / Erillispoistot / Poisto";"Lahtotiedot / Ilmanvaihto / Erillispoistot / Tulo-poisto";"Lahtotiedot / Ilmanvaihto / Erillispoistot / Sfp";"Lahtotiedot / Ilmanvaihto / Ivjarjestelma / Tulo";"Lahtotiedot / Ilmanvaihto / Ivjarjestelma / Poisto";"Lahtotiedot / Ilmanvaihto / Ivjarjestelma / Tulo-poisto";"Lahtotiedot / Ilmanvaihto / Ivjarjestelma / Sfp";"Lahtotiedot / Ilmanvaihto / Lto-vuosihyotysuhde";"Lahtotiedot / Ilmanvaihto / Tuloilma-lampotila";"Lahtotiedot / Lammitys / Lammitysmuoto-1 / Id";"Lahtotiedot / Lammitys / Lammitysmuoto-2 / Id";"Lahtotiedot / Lammitys / Lammitysmuoto-label-fi";"Lahtotiedot / Lammitys / Lammitysmuoto-1 / Kuvaus-fi";"Lahtotiedot / Lammitys / Lammitysmuoto-1 / Kuvaus-sv";"Lahtotiedot / Lammitys / Lammitysmuoto-2 / Kuvaus-fi";"Lahtotiedot / Lammitys / Lammitysmuoto-2 / Kuvaus-sv";"Lahtotiedot / Lammitys / Lammonjako / Id";"Lahtotiedot / Lammitys / Lammonjako-label-fi";"Lahtotiedot / Lammitys / Lammonjako / Kuvaus-fi";"Lahtotiedot / Lammitys / Lammonjako / Kuvaus-sv";"Lahtotiedot / Lammitys / Tilat-ja-iv / Tuoton-hyotysuhde";"Lahtotiedot / Lammitys / Tilat-ja-iv / Jaon-hyotysuhde";"Lahtotiedot / Lammitys / Tilat-ja-iv / Lampokerroin";"Lahtotiedot / Lammitys / Tilat-ja-iv / Apulaitteet";"Lahtotiedot / Lammitys / Tilat-ja-iv / Lampopumppu-tuotto-osuus";"Lahtotiedot / Lammitys / Tilat-ja-iv / Lampohavio-lammittamaton-tila";"Lahtotiedot / Lammitys / Lammin-kayttovesi / Tuoton-hyotysuhde";"Lahtotiedot / Lammitys / Lammin-kayttovesi / Jaon-hyotysuhde";"Lahtotiedot / Lammitys / Lammin-kayttovesi / Lampokerroin";"Lahtotiedot / Lammitys / Lammin-kayttovesi / Apulaitteet";"Lahtotiedot / Lammitys / Lammin-kayttovesi / Lampopumppu-tuotto-osuus";"Lahtotiedot / Lammitys / Lammin-kayttovesi / Lampohavio-lammittamaton-tila";"Lahtotiedot / Lammitys / Takka / Maara";"Lahtotiedot / Lammitys / Takka / Tuotto";"Lahtotiedot / Lammitys / Ilmalampopumppu / Maara";"Lahtotiedot / Lammitys / Ilmalampopumppu / Tuotto";"Lahtotiedot / Jaahdytysjarjestelma / Jaahdytyskauden-painotettu-kylmakerroin";"Lahtotiedot / Lkvn-kaytto / Ominaiskulutus";"Lahtotiedot / Lkvn-kaytto / Lammitysenergian-nettotarve";"Lahtotiedot / Sis-kuorma / Henkilot / Kayttoaste";"Lahtotiedot / Sis-kuorma / Henkilot / Lampokuorma";"Lahtotiedot / Sis-kuorma / Kuluttajalaitteet / Kayttoaste";"Lahtotiedot / Sis-kuorma / Kuluttajalaitteet / Lampokuorma";"Lahtotiedot / Sis-kuorma / Valaistus / Kayttoaste";"Lahtotiedot / Sis-kuorma / Valaistus / Lampokuorma";"Tulokset / Kaytettavat-energiamuodot / Kaukolampo";"Tulokset / Kaytettavat-energiamuodot / Kaukolampo-nettoala";"Tulokset / Kaytettavat-energiamuodot / Kaukolampo-kerroin";"Tulokset / Kaytettavat-energiamuodot / Kaukolampo-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Kaukolampo-nettoala-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Sahko";"Tulokset / Kaytettavat-energiamuodot / Sahko-nettoala";"Tulokset / Kaytettavat-energiamuodot / Sahko-kerroin";"Tulokset / Kaytettavat-energiamuodot / Sahko-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Sahko-nettoala-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Uusiutuva-polttoaine";"Tulokset / Kaytettavat-energiamuodot / Uusiutuva-polttoaine-nettoala";"Tulokset / Kaytettavat-energiamuodot / Uusiutuva-polttoaine-kerroin";"Tulokset / Kaytettavat-energiamuodot / Uusiutuva-polttoaine-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Uusiutuva-polttoaine-nettoala-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Fossiilinen-polttoaine";"Tulokset / Kaytettavat-energiamuodot / Fossiilinen-polttoaine-nettoala";"Tulokset / Kaytettavat-energiamuodot / Fossiilinen-polttoaine-kerroin";"Tulokset / Kaytettavat-energiamuodot / Fossiilinen-polttoaine-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Fossiilinen-polttoaine-nettoala-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Kaukojaahdytys";"Tulokset / Kaytettavat-energiamuodot / Kaukojaahdytys-nettoala";"Tulokset / Kaytettavat-energiamuodot / Kaukojaahdytys-kerroin";"Tulokset / Kaytettavat-energiamuodot / Kaukojaahdytys-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Kaukojaahdytys-nettoala-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Muu / 0 / Nimi";"Tulokset / Kaytettavat-energiamuodot / Muu / 0 / Ostoenergia";"Tulokset / Kaytettavat-energiamuodot / Muu / 0 / Muotokerroin";"Tulokset / Kaytettavat-energiamuodot / Muu / 0 / Ostoenergia-nettoala";"Tulokset / Kaytettavat-energiamuodot / Muu / 0 / Ostoenergia-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Muu / 0 / Ostoenergia-nettoala-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Muu / 1 / Nimi";"Tulokset / Kaytettavat-energiamuodot / Muu / 1 / Ostoenergia";"Tulokset / Kaytettavat-energiamuodot / Muu / 1 / Muotokerroin";"Tulokset / Kaytettavat-energiamuodot / Muu / 1 / Ostoenergia-nettoala";"Tulokset / Kaytettavat-energiamuodot / Muu / 1 / Ostoenergia-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Muu / 1 / Ostoenergia-nettoala-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Muu / 2 / Nimi";"Tulokset / Kaytettavat-energiamuodot / Muu / 2 / Ostoenergia";"Tulokset / Kaytettavat-energiamuodot / Muu / 2 / Muotokerroin";"Tulokset / Kaytettavat-energiamuodot / Muu / 2 / Ostoenergia-nettoala";"Tulokset / Kaytettavat-energiamuodot / Muu / 2 / Ostoenergia-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Muu / 2 / Ostoenergia-nettoala-kertoimella";"Tulokset / Kaytettavat-energiamuodot / Summa";"Tulokset / Kaytettavat-energiamuodot / Kertoimella-summa";"Tulokset / Uusiutuvat-omavaraisenergiat / Aurinkosahko";"Tulokset / Uusiutuvat-omavaraisenergiat / Aurinkosahko-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / Aurinkolampo";"Tulokset / Uusiutuvat-omavaraisenergiat / Aurinkolampo-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / Tuulisahko";"Tulokset / Uusiutuvat-omavaraisenergiat / Tuulisahko-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / Lampopumppu";"Tulokset / Uusiutuvat-omavaraisenergiat / Lampopumppu-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / Muusahko";"Tulokset / Uusiutuvat-omavaraisenergiat / Muusahko-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / Muulampo";"Tulokset / Uusiutuvat-omavaraisenergiat / Muulampo-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / 0 / Nimi-fi";"Tulokset / Uusiutuvat-omavaraisenergiat / 0 / Nimi-sv";"Tulokset / Uusiutuvat-omavaraisenergiat / 0 / Vuosikulutus";"Tulokset / Uusiutuvat-omavaraisenergiat / 0 / Vuosikulutus-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / 1 / Nimi-fi";"Tulokset / Uusiutuvat-omavaraisenergiat / 1 / Nimi-sv";"Tulokset / Uusiutuvat-omavaraisenergiat / 1 / Vuosikulutus";"Tulokset / Uusiutuvat-omavaraisenergiat / 1 / Vuosikulutus-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / 2 / Nimi-fi";"Tulokset / Uusiutuvat-omavaraisenergiat / 2 / Nimi-sv";"Tulokset / Uusiutuvat-omavaraisenergiat / 2 / Vuosikulutus";"Tulokset / Uusiutuvat-omavaraisenergiat / 2 / Vuosikulutus-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / 3 / Nimi-fi";"Tulokset / Uusiutuvat-omavaraisenergiat / 3 / Nimi-sv";"Tulokset / Uusiutuvat-omavaraisenergiat / 3 / Vuosikulutus";"Tulokset / Uusiutuvat-omavaraisenergiat / 3 / Vuosikulutus-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / 4 / Nimi-fi";"Tulokset / Uusiutuvat-omavaraisenergiat / 4 / Nimi-sv";"Tulokset / Uusiutuvat-omavaraisenergiat / 4 / Vuosikulutus";"Tulokset / Uusiutuvat-omavaraisenergiat / 4 / Vuosikulutus-nettoala";"Tulokset / Uusiutuvat-omavaraisenergiat / 5 / Nimi-fi";"Tulokset / Uusiutuvat-omavaraisenergiat / 5 / Nimi-sv";"Tulokset / Uusiutuvat-omavaraisenergiat / 5 / Vuosikulutus";"Tulokset / Uusiutuvat-omavaraisenergiat / 5 / Vuosikulutus-nettoala";"Tulokset / Tekniset-jarjestelmat / Tilojen-lammitys / Sahko";"Tulokset / Tekniset-jarjestelmat / Tilojen-lammitys / Lampo";"Tulokset / Tekniset-jarjestelmat / Tuloilman-lammitys / Sahko";"Tulokset / Tekniset-jarjestelmat / Tuloilman-lammitys / Lampo";"Tulokset / Tekniset-jarjestelmat / Kayttoveden-valmistus / Sahko";"Tulokset / Tekniset-jarjestelmat / Kayttoveden-valmistus / Lampo";"Tulokset / Tekniset-jarjestelmat / Iv-sahko";"Tulokset / Tekniset-jarjestelmat / Jaahdytys / Sahko";"Tulokset / Tekniset-jarjestelmat / Jaahdytys / Lampo";"Tulokset / Tekniset-jarjestelmat / Jaahdytys / Kaukojaahdytys";"Tulokset / Tekniset-jarjestelmat / Kuluttajalaitteet-ja-valaistus-sahko";"Tulokset / Tekniset-jarjestelmat / Sahko-summa";"Tulokset / Tekniset-jarjestelmat / Lampo-summa";"Tulokset / Tekniset-jarjestelmat / Kaukojaahdytys-summa";"Tulokset / Nettotarve / Tilojen-lammitys-vuosikulutus";"Tulokset / Nettotarve / Tilojen-lammitys-vuosikulutus-nettoala";"Tulokset / Nettotarve / Ilmanvaihdon-lammitys-vuosikulutus";"Tulokset / Nettotarve / Ilmanvaihdon-lammitys-vuosikulutus-nettoala";"Tulokset / Nettotarve / Kayttoveden-valmistus-vuosikulutus";"Tulokset / Nettotarve / Kayttoveden-valmistus-vuosikulutus-nettoala";"Tulokset / Nettotarve / Jaahdytys-vuosikulutus";"Tulokset / Nettotarve / Jaahdytys-vuosikulutus-nettoala";"Tulokset / Lampokuormat / Aurinko";"Tulokset / Lampokuormat / Aurinko-nettoala";"Tulokset / Lampokuormat / Ihmiset";"Tulokset / Lampokuormat / Ihmiset-nettoala";"Tulokset / Lampokuormat / Kuluttajalaitteet";"Tulokset / Lampokuormat / Kuluttajalaitteet-nettoala";"Tulokset / Lampokuormat / Valaistus";"Tulokset / Lampokuormat / Valaistus-nettoala";"Tulokset / Lampokuormat / Kvesi";"Tulokset / Lampokuormat / Kvesi-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kaukolampo-vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kaukolampo-vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kokonaissahko-vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kokonaissahko-vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kiinteistosahko-vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kiinteistosahko-vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kayttajasahko-vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kayttajasahko-vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kaukojaahdytys-vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Kaukojaahdytys-vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 0 / Nimi-fi";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 0 / Nimi-sv";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 0 / Vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 0 / Vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 1 / Nimi-fi";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 1 / Nimi-sv";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 1 / Vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 1 / Vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 2 / Nimi-fi";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 2 / Nimi-sv";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 2 / Vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 2 / Vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 3 / Nimi-fi";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 3 / Nimi-sv";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 3 / Vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 3 / Vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 4 / Nimi-fi";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 4 / Nimi-sv";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 4 / Vuosikulutus";"Toteutunut-ostoenergiankulutus / Ostettu-energia / Muu / 4 / Vuosikulutus-nettoala";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Kevyt-polttooljy";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Kevyt-polttooljy-kerroin";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Kevyt-polttooljy-kwh";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Kevyt-polttooljy-kwh-nettoala";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Pilkkeet-havu-sekapuu";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Pilkkeet-havu-sekapuu-kerroin";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Pilkkeet-havu-sekapuu-kwh";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Pilkkeet-havu-sekapuu-kwh-nettoala";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Pilkkeet-koivu";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Pilkkeet-koivu-kerroin";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Pilkkeet-koivu-kwh";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Pilkkeet-koivu-kwh-nettoala";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Puupelletit";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Puupelletit-kerroin";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Puupelletit-kwh";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Puupelletit-kwh-nettoala";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 0 / Nimi";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 0 / Maara-vuodessa";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 0 / Yksikko";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 0 / Muunnoskerroin";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 0 / Kwh";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 0 / Kwh-nettoala";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 1 / Nimi";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 1 / Maara-vuodessa";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 1 / Yksikko";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 1 / Muunnoskerroin";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 1 / Kwh";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 1 / Kwh-nettoala";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 2 / Nimi";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 2 / Maara-vuodessa";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 2 / Yksikko";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 2 / Muunnoskerroin";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 2 / Kwh";"Toteutunut-ostoenergiankulutus / Ostetut-polttoaineet / Muu / 2 / Kwh-nettoala";"Toteutunut-ostoenergiankulutus / Sahko-vuosikulutus-yhteensa";"Toteutunut-ostoenergiankulutus / Sahko-vuosikulutus-yhteensa-nettoala";"Toteutunut-ostoenergiankulutus / Kaukolampo-vuosikulutus-yhteensa";"Toteutunut-ostoenergiankulutus / Kaukolampo-vuosikulutus-yhteensa-nettoala";"Toteutunut-ostoenergiankulutus / Polttoaineet-vuosikulutus-yhteensa";"Toteutunut-ostoenergiankulutus / Polttoaineet-vuosikulutus-yhteensa-nettoala";"Toteutunut-ostoenergiankulutus / Kaukojaahdytys-vuosikulutus-yhteensa";"Toteutunut-ostoenergiankulutus / Kaukojaahdytys-vuosikulutus-yhteensa-nettoala";"Toteutunut-ostoenergiankulutus / Summa";"Toteutunut-ostoenergiankulutus / Summa-nettoala";"Huomiot / Ymparys / Teksti-fi";"Huomiot / Ymparys / Teksti-sv";"Huomiot / Ymparys / Toimenpide / 0 / Nimi-fi";"Huomiot / Ymparys / Toimenpide / 0 / Nimi-sv";"Huomiot / Ymparys / Toimenpide / 0 / Lampo";"Huomiot / Ymparys / Toimenpide / 0 / Sahko";"Huomiot / Ymparys / Toimenpide / 0 / Jaahdytys";"Huomiot / Ymparys / Toimenpide / 0 / Eluvun-muutos";"Huomiot / Ymparys / Toimenpide / 1 / Nimi-fi";"Huomiot / Ymparys / Toimenpide / 1 / Nimi-sv";"Huomiot / Ymparys / Toimenpide / 1 / Lampo";"Huomiot / Ymparys / Toimenpide / 1 / Sahko";"Huomiot / Ymparys / Toimenpide / 1 / Jaahdytys";"Huomiot / Ymparys / Toimenpide / 1 / Eluvun-muutos";"Huomiot / Ymparys / Toimenpide / 2 / Nimi-fi";"Huomiot / Ymparys / Toimenpide / 2 / Nimi-sv";"Huomiot / Ymparys / Toimenpide / 2 / Lampo";"Huomiot / Ymparys / Toimenpide / 2 / Sahko";"Huomiot / Ymparys / Toimenpide / 2 / Jaahdytys";"Huomiot / Ymparys / Toimenpide / 2 / Eluvun-muutos";"Huomiot / Alapohja-ylapohja / Teksti-fi";"Huomiot / Alapohja-ylapohja / Teksti-sv";"Huomiot / Alapohja-ylapohja / Toimenpide / 0 / Nimi-fi";"Huomiot / Alapohja-ylapohja / Toimenpide / 0 / Nimi-sv";"Huomiot / Alapohja-ylapohja / Toimenpide / 0 / Lampo";"Huomiot / Alapohja-ylapohja / Toimenpide / 0 / Sahko";"Huomiot / Alapohja-ylapohja / Toimenpide / 0 / Jaahdytys";"Huomiot / Alapohja-ylapohja / Toimenpide / 0 / Eluvun-muutos";"Huomiot / Alapohja-ylapohja / Toimenpide / 1 / Nimi-fi";"Huomiot / Alapohja-ylapohja / Toimenpide / 1 / Nimi-sv";"Huomiot / Alapohja-ylapohja / Toimenpide / 1 / Lampo";"Huomiot / Alapohja-ylapohja / Toimenpide / 1 / Sahko";"Huomiot / Alapohja-ylapohja / Toimenpide / 1 / Jaahdytys";"Huomiot / Alapohja-ylapohja / Toimenpide / 1 / Eluvun-muutos";"Huomiot / Alapohja-ylapohja / Toimenpide / 2 / Nimi-fi";"Huomiot / Alapohja-ylapohja / Toimenpide / 2 / Nimi-sv";"Huomiot / Alapohja-ylapohja / Toimenpide / 2 / Lampo";"Huomiot / Alapohja-ylapohja / Toimenpide / 2 / Sahko";"Huomiot / Alapohja-ylapohja / Toimenpide / 2 / Jaahdytys";"Huomiot / Alapohja-ylapohja / Toimenpide / 2 / Eluvun-muutos";"Huomiot / Lammitys / Teksti-fi";"Huomiot / Lammitys / Teksti-sv";"Huomiot / Lammitys / Toimenpide / 0 / Nimi-fi";"Huomiot / Lammitys / Toimenpide / 0 / Nimi-sv";"Huomiot / Lammitys / Toimenpide / 0 / Lampo";"Huomiot / Lammitys / Toimenpide / 0 / Sahko";"Huomiot / Lammitys / Toimenpide / 0 / Jaahdytys";"Huomiot / Lammitys / Toimenpide / 0 / Eluvun-muutos";"Huomiot / Lammitys / Toimenpide / 1 / Nimi-fi";"Huomiot / Lammitys / Toimenpide / 1 / Nimi-sv";"Huomiot / Lammitys / Toimenpide / 1 / Lampo";"Huomiot / Lammitys / Toimenpide / 1 / Sahko";"Huomiot / Lammitys / Toimenpide / 1 / Jaahdytys";"Huomiot / Lammitys / Toimenpide / 1 / Eluvun-muutos";"Huomiot / Lammitys / Toimenpide / 2 / Nimi-fi";"Huomiot / Lammitys / Toimenpide / 2 / Nimi-sv";"Huomiot / Lammitys / Toimenpide / 2 / Lampo";"Huomiot / Lammitys / Toimenpide / 2 / Sahko";"Huomiot / Lammitys / Toimenpide / 2 / Jaahdytys";"Huomiot / Lammitys / Toimenpide / 2 / Eluvun-muutos";"Huomiot / Iv-ilmastointi / Teksti-fi";"Huomiot / Iv-ilmastointi / Teksti-sv";"Huomiot / Iv-ilmastointi / Toimenpide / 0 / Nimi-fi";"Huomiot / Iv-ilmastointi / Toimenpide / 0 / Nimi-sv";"Huomiot / Iv-ilmastointi / Toimenpide / 0 / Lampo";"Huomiot / Iv-ilmastointi / Toimenpide / 0 / Sahko";"Huomiot / Iv-ilmastointi / Toimenpide / 0 / Jaahdytys";"Huomiot / Iv-ilmastointi / Toimenpide / 0 / Eluvun-muutos";"Huomiot / Iv-ilmastointi / Toimenpide / 1 / Nimi-fi";"Huomiot / Iv-ilmastointi / Toimenpide / 1 / Nimi-sv";"Huomiot / Iv-ilmastointi / Toimenpide / 1 / Lampo";"Huomiot / Iv-ilmastointi / Toimenpide / 1 / Sahko";"Huomiot / Iv-ilmastointi / Toimenpide / 1 / Jaahdytys";"Huomiot / Iv-ilmastointi / Toimenpide / 1 / Eluvun-muutos";"Huomiot / Iv-ilmastointi / Toimenpide / 2 / Nimi-fi";"Huomiot / Iv-ilmastointi / Toimenpide / 2 / Nimi-sv";"Huomiot / Iv-ilmastointi / Toimenpide / 2 / Lampo";"Huomiot / Iv-ilmastointi / Toimenpide / 2 / Sahko";"Huomiot / Iv-ilmastointi / Toimenpide / 2 / Jaahdytys";"Huomiot / Iv-ilmastointi / Toimenpide / 2 / Eluvun-muutos";"Huomiot / Valaistus-muut / Teksti-fi";"Huomiot / Valaistus-muut / Teksti-sv";"Huomiot / Valaistus-muut / Toimenpide / 0 / Nimi-fi";"Huomiot / Valaistus-muut / Toimenpide / 0 / Nimi-sv";"Huomiot / Valaistus-muut / Toimenpide / 0 / Lampo";"Huomiot / Valaistus-muut / Toimenpide / 0 / Sahko";"Huomiot / Valaistus-muut / Toimenpide / 0 / Jaahdytys";"Huomiot / Valaistus-muut / Toimenpide / 0 / Eluvun-muutos";"Huomiot / Valaistus-muut / Toimenpide / 1 / Nimi-fi";"Huomiot / Valaistus-muut / Toimenpide / 1 / Nimi-sv";"Huomiot / Valaistus-muut / Toimenpide / 1 / Lampo";"Huomiot / Valaistus-muut / Toimenpide / 1 / Sahko";"Huomiot / Valaistus-muut / Toimenpide / 1 / Jaahdytys";"Huomiot / Valaistus-muut / Toimenpide / 1 / Eluvun-muutos";"Huomiot / Valaistus-muut / Toimenpide / 2 / Nimi-fi";"Huomiot / Valaistus-muut / Toimenpide / 2 / Nimi-sv";"Huomiot / Valaistus-muut / Toimenpide / 2 / Lampo";"Huomiot / Valaistus-muut / Toimenpide / 2 / Sahko";"Huomiot / Valaistus-muut / Toimenpide / 2 / Jaahdytys";"Huomiot / Valaistus-muut / Toimenpide / 2 / Eluvun-muutos";"Huomiot / Suositukset-fi";"Huomiot / Suositukset-sv";"Lisamerkintoja-fi";"Lisamerkintoja-sv" +2018;2;2024-03-13T13:41:34.527654;2034-03-11T13:41:34.527661;0;0;2024-03-13;;2020;"00100";"HELSINKI";"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";true;;;199;"1. Pienet asuinrakennukset";"^:";",%<93dp8, Vesi-ilmalämpöpumppu";"V-#>93dp8";"2f}{&Pb";"}";"F(uo";5;"Sähköinen kattolämmitys";"#8GEi:GE";"3?BjX,<";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,6;2;0,6;3;0,1;6;1;1;0,5;0,5;0,5;1;1;1,2;1,2;1,2;1;1;0,5;0,5;0,5;1;1;1;1;1;1;1;0,28;0,28;0,28;;;;;;;;;;;;;;;;;;;5;3,48;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;;;;;1;1;1;1;1;1;1;1;1;1;1;6;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;1;10;10;10;1;1300;1300;1300;1;1700;1700;1700;1;4,7;4,7;4,7;;1;"y&/TL@";;;;"O&=*";1;;1;1;1;"^;:@L*T>$";1;;;;;1;1;1;1;1;1;1;1;4;4;"Ih12Dz!e";"ipS77Hg:";;;;1;1;1;"L:]WOb]Wc':";;1;;;;".y[`LE&";;;;1;;"WxM<|";"|V!GvjN";;;;;;;;;;;;;;;;;;;"! *+;ue&j]";"rkK9Gi_>!";;;1;1;1;;"G%3LMf8>";;1;1;;;"_tJ1";;;1;1;;"""s";";k";;;1;;;1;"qa";;1;;1;;"$0";"'";;;1;;"ckjk(Q";"qLLX~!b8 q";"p0$>c";;1;;1;1;;;;;;;"FO3can2";"P,osTfADYb";;1;;1;"xTgYE.";"]`U3.";"MwVXFbtO*}";"t4";"jJa";;;;;1;"m5s5iXTqw";;1;1;;1;"0X1O`";"^,";1;;;;"RO";"}bn+H_If";;;;1;;;"cxfUwn#5z0";;;;;;"L^g;/b|B";;1;;;;"8t`";"9qDe";;;1;1;1;1;"qPK9bBp&";"Ufub";;1;1;1;"oMW";"y0Vfi:.KeB";1;1;;1;"+]";"NYOM";;;;;;;;;;;;;;;;;;;"oh9r";"KMM<";;;1;1;;1;;;;;1;1;"*";"}UWh*P";1;;1;1;"&8;";"R&N";"3";"'Q'yMIF" +2018;2;2024-03-13T13:41:34.464840;2034-03-11T13:41:34.464846;1;1;2024-03-13;;2022;"00100";"HELSINKI";"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";true;;;199;"1. Pienet asuinrakennukset";"xXa";"6A(dQi.S";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,167;6;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;"Painovoimainen ilmanvaihtojärjestelmä";"ZL#PK^g.";"OH/Wv]P";1;1;"1,000 / 1,000";1;1;1;1;1;"1,000 / 1,000";1;1;1;"1,000 / 1,000";1;1;1;8;5;"Poistoilmalämpöpumppu, Kaasu";"lh/L,#";"F";"LC>1748";"){a";"2pZ);5";"lWk^-";1;1;;;;;;;1;;;;1;;;1;"I~";"vk:";"J";;;1;;1;;;1;;;1;"N";;;;;;"y";"L6B*'";;"o""@";1;1;;1;;;1;;1;1;;;1;1;;1;"iLdPHKGd3@c";"|OB";"l8c<4aO";"i6)Plea6+" +2018;2;2024-03-13T13:41:34.418452;2034-03-11T13:41:34.418460;0;0;2024-03-13;;2019;"00100";"HELSINKI";"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";true;;;199;"1. Pienet asuinrakennukset";"jE";"1[223{#j";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,167;6;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;"Koneellinen tulo- ja poistoilmanvaihtojärjestelmä";"ZL(";"JF5R}lu+Nt";1;1;"1,000 / 1,000";1;1;1;1;1;"1,000 / 1,000";1;1;1;"1,000 / 1,000";1;1;1;0;6;"Kaukolämpö, Maalämpöpumppu";"Fk";"H"";";"5/{gFrSF";"Ot g(DX";11;"Ilmalämmitys/sähköpatterilämmitys";"N Pp^s,";"-";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,6;2;0,6;3;0,1;6;1;1;0,5;0,5;0,5;1;1;1,2;1,2;1,2;1;1;0,5;0,5;0,5;1;1;1;1;1;1;1;0,28;0,28;0,28;;;;;;;;;;;;;;;;;;;5;3,48;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;;;;;1;1;1;1;1;1;1;1;1;1;1;6;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;1;10;10;10;1;1300;1300;1300;1;1700;1700;1700;1;4,7;4,7;4,7;"TH#yFV2h";;;;;;;;;;;;;;;;;;1;1;1;1;1;1;1;1;4;4;"nfYt";"*obTBe($";"Yk";"-S3Fm)/";1;;;;"S";"V;";;1;;1;;;;;;;"w3dQ|6_w,";"xI";;;1;1;1;;;"i""A";;;;1;;"kMx0QN)";1;1;1;1;"pp<.";"*u}F[gnp@";;;1;1;;1;"`61RC";;1;1;1;1;"um4Q`w";;1;;;;"%_9";"Ag";"$";"H~";1;;;1;"{vx@";"B";;1;1;1;"RTBkc";"1nV!rBb~F{";;1;;;"7K1$M(6";"b(|RN )1+";;"BB4?zl_";;1;1;1;;"u30X9+";;1;1;;"Gw.Fe*^@h5O";"p$L{!^~e@s";;;1;;"=}e^75[-i";"z$Hn";"KeQod%";"LQ?" +2018;2;2024-03-13T13:41:34.360344;2034-03-11T13:41:34.360351;0;0;2024-03-13;;2025;"33100";"TAMPERE";"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";false;;;199;"1. Pienet asuinrakennukset";" v Gga8!|";"$~MAe";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,167;6;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;"Koneellinen poistoilmanvaihtojärjestelmä";"y7IF6 M";";";1;1;"1,000 / 1,000";1;1;1;1;1;"1,000 / 1,000";1;1;1;"1,000 / 1,000";1;1;1;1;1;"Sähkö, Sähkö";"j*XZlR";"m57jw`";"/K2v#EOMm";"o";1;"Vesikiertoinen lattialämmitys";"d4H)J";"~IVX";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,6;2;0,6;3;0,1;6;1;1;0,5;0,5;0,5;1;1;1,2;1,2;1,2;1;1;0,5;0,5;0,5;1;1;1;1;1;1;1;0,28;0,28;0,28;;;;;;;;;;;;;;;;;;;5;3,48;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;;;;;1;1;1;1;1;1;1;1;1;1;1;6;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;1;10;10;10;1;1300;1300;1300;1;1700;1700;1700;1;4,7;4,7;4,7;;1;;;;;;;;1;;;;1;;;;;1;1;1;1;1;1;1;1;4;4;"NMWjCFxm ";"Wm^5c%H";"p_<(BoOO";"gQo#1?";1;;1;1;;;;;;;;;;;;;" d(4 jWZ";"J(BZ";"k";"uo.r";1;1;1;;;;;1;;1;"#SH)0TX6";"uP_$G=}";1;1;1;1;"':]zK^P'RJ";"e:p?j)xtC";"FT'nV";1;1;1;;1;;1;1;1;1;1;1;1;1;1;1;1;4;4;"=3l";"h<0gm/+?=";"m'wetN";;;1;;1;"qVi_";;1;1;1;;"P}";;;;;;"g0";"I A5E";"?";"AIZjhDV _";;;;;"wz]/Es|(-";"Jsr";1;1;1;1;"g&{SR*0ob6";"z";1;1;1;1;"G`5";"yr7awGE";;":w5(ffsT";1;;1;;"7C>+Z+1@2-";"9";1;;;;;;;;;1;"iQ,UL";"OjN/:";;;;1;1;1;"E:";;;;1;1;;;;1;1;1;"xJ";"U[E 8";"V";"9[:|M?g";1;1;;1;;;;;;;;;;;;;"V";"O8#";"<";"Vkac0D^55""" +2018;2;2024-03-13T13:41:34.272528;2034-03-11T13:41:34.272537;0;0;2024-03-13;;2021;"00100";"HELSINKI";"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";false;;;199;"1. Pienet asuinrakennukset";"*Rp[-Va}Eg";".-NNBwpU";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,167;6;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;6;"t_-RK";"t_-RK";" {";1;1;"1,000 / 1,000";1;1;1;1;1;"1,000 / 1,000";1;1;1;"1,000 / 1,000";1;1;1;9;7;"i+&.fnHQ, Vesi-ilmalämpöpumppu";"i+&.fnHQ";"RDO8";"2D63";"Hd_|?66Q";6;"Ilmalämmitys";"Hmi";"""98";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,6;2;0,6;3;0,1;6;1;1;0,5;0,5;0,5;1;1;1,2;1,2;1,2;1;1;0,5;0,5;0,5;1;1;1;1;1;1;1;0,28;0,28;0,28;;;;;;;;;;;;;;;;;;;5;3,48;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;;;;;1;1;1;1;1;1;1;1;1;1;1;6;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;1;10;10;10;1;1300;1300;1300;1;1700;1700;1700;1;4,7;4,7;4,7;"{+y=ZJ@Nr";1;;;;;"CnmuFn~unW";;"tN";;;;;;;1;;;1;1;1;1;1;1;1;1;4;4;"q`O,s";"x""(";"lE9fl:(1";;1;;;1;;;1;;;1;"i";"jH";1;;;;"*";"?nku/x !P=";"7w";"f-=";1;;1;;"mT";"]""RrZsu";1;1;1;;;" _2ZYK]^..";;;;;"TBur"",<";"p""0";;;;;1;;"E/I;8=cev";"n%t*GZZC";;;;;"bHGKKCTEJ";"JZ-[$";;1;;1;1;",aL{j:`(G";;;1;1;;"2N,";"Nv";;1;1;;"Ke";"+b&D%!Ui^x";;"""W09a+";1;1;1;1;"Q/y#=";"A/=86V=w;m";;;1;;"6`[`4";"0";;1;1;;"wPmo73a3Z";"f";"P8YAb?}" +2018;2;2024-03-13T13:41:34.215121;2034-03-11T13:41:34.215129;1;1;2024-03-13;;2020;"33100";"TAMPERE";"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";false;;;199;"1. Pienet asuinrakennukset";">3T)Dd";"sA`@&";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,167;6;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;6;"{aJk*@ N";"{aJk*@ N";" N|(a#x66";1;1;"1,000 / 1,000";1;1;1;1;1;"1,000 / 1,000";1;1;1;"1,000 / 1,000";1;1;1;3;5;"Pelletti, Kaasu";"w`/]k00w8 ";"1*E t&4";"OmEYutZ$l";"(;d`<0l6";12;"AC{9_g~+~";"AC{9_g~+~";"=L";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,6;2;0,6;3;0,1;6;1;1;0,5;0,5;0,5;1;1;1,2;1,2;1,2;1;1;0,5;0,5;0,5;1;1;1;1;1;1;1;0,28;0,28;0,28;;;;;;;;;;;;;;;;;;;5;3,48;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;;;;;1;1;1;1;1;1;1;1;1;1;1;6;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;1;10;10;10;1;1300;1300;1300;1;1700;1700;1700;1;4,7;4,7;4,7;;1;",9lM%'@j6w'";;;;"jc(R@%,";;;1;;;;;;;;;1;1;1;1;1;1;1;1;4;4;".k+KdVhL";"W*+";;"2jV:9R;W";;;;;"BT`z";"qLHh~QqIQ6";;1;1;1;"-zS4q";;1;1;;;"j";"FZ";;"""+Z~";1;1;;;;"t""&oF*a";;;1;;"J}6KS";;;1;1;1;"""VI vU";"el*|7bqZu";;"M";;;;1;;"L%_IG&B306e";;1;1;;"gy c]";;;;;1;"DF";"gbh .`)>9S";;;1;1;1;1;;;1;;;;"]";"/";1;;1;;"zH.P~f";"0)mT-TcLr";;"z[xy^";1;1;;1;"'>1"".];l";;1;;1;1;"z(_o+6*[|+";;1;1;;1;",2";"@_T";"<*gp";"C" +2018;2;2024-03-13T13:41:34.071465;2034-03-11T13:41:34.071477;1;1;2024-03-13;;2021;"00100";"HELSINKI";"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";true;;;199;"1. Pienet asuinrakennukset";"v*Axb";"v,@";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,167;6;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;5;"Painovoimainen/koneellinen tulo- ja poisto";"HVu%R214`UG";"'P";1;1;"1,000 / 1,000";1;1;1;1;1;"1,000 / 1,000";1;1;1;"1,000 / 1,000";1;1;1;2;2;"Puu, Puu";"FXu?'";"7)u";"^b@P";"(K";0;"Vesikiertoinen patterilämmitys";"fz";":?,tM";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,6;2;0,6;3;0,1;6;1;1;0,5;0,5;0,5;1;1;1,2;1,2;1,2;1;1;0,5;0,5;0,5;1;1;1;1;1;1;1;0,28;0,28;0,28;;;;;;;;;;;;;;;;;;;5;3,48;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;;;;;1;1;1;1;1;1;1;1;1;1;1;6;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;1;10;10;10;1;1300;1300;1300;1;1700;1700;1700;1;4,7;4,7;4,7;;;"P2W";1;;;"^LqDHVf";;"<`~";;;;;1;;;;;1;1;1;1;1;1;1;1;4;4;"&<";"hqa~";"c:wpbd";"zeMa8ia";;1;;;"J{b):Fg";;;1;1;1;"3o^Hu~!l[";"GQQTa";;1;;;"7q`";"ceq4Y*";;;;;1;;;"mV";;;1;;;;;;;;"Y";"mHvr";"'*]a";;1;1;1;;;;1;1;1;;;"G: ; ";1;;1;;"2 >A*w]Q^";"}2U6wlHWU[";;"#)u `^0~";1;1;1;1;"95$+";;1;1;;1;;;;;1;1;"`;";"M*D()*3`x";;;1;1;;1;"ZOMCjE(fJ3";;1;;;;;"c>R/f>b]";;1;;;"'sPuCXK.u";"GA_zOc";"Q||Y";"F#(sK?" +2018;2;2024-03-13T13:41:33.997663;2034-03-11T13:41:33.997671;1;1;2024-03-13;;2019;"00100";"HELSINKI";"1. Pienet asuinrakennukset";"YAT";"Yhden asunnon talot";false;;;199;"1. Pienet asuinrakennukset";"n";"rQSR4Eg u";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,167;6;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;5;"Painovoimainen/koneellinen tulo- ja poisto";"E@G ";"=+^!6N[r)|";1;1;"1,000 / 1,000";1;1;1;1;1;"1,000 / 1,000";1;1;1;"1,000 / 1,000";1;1;1;9;6;"7>?onJxQV, Maalämpöpumppu";"7>?onJxQV";"~";"k>X94";"$";12;"f,";"f,";"Tzg-a";1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,6;2;0,6;3;0,1;6;1;1;0,5;0,5;0,5;1;1;1,2;1,2;1,2;1;1;0,5;0,5;0,5;1;1;1;1;1;1;1;0,28;0,28;0,28;;;;;;;;;;;;;;;;;;;5;3,48;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;;;;;1;1;1;1;1;1;1;1;1;1;1;6;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;1;10;10;10;1;1300;1300;1300;1;1700;1700;1700;1;4,7;4,7;4,7;;;;;;;;;"'pS~b";1;;;"bB,`b.h$";1;;1;1;1;1;1;1;1;1;1;1;1;4;4;")";"Z?.Cn[tEA";;"""z:-?{-7^j";;1;;;;"inR2ia:H";;;;;"C[3 sJEn";"8";;;;;"$";"sNIsp1GI";;"A";1;;1;;;"bPPK)se56-";1;;;1;"s7LWs_Qpu";"@YI-Q";1;1;1;1;"@=j";"pIp";;;1;;1;1;"zL>_=-";"j|G0wyym";1;1;;1;;;;;;;"e;F.T]";"zm`n`N26!";;;;1;1;1;"pK@Tp";;1;;1;1;"1~;u)";;;1;1;1;"Z!";"S]1'nZO";"M6G";"6io;";1;;1;;;;;1;1;1;;"Oi^KvU7";;1;;;"V9d%p[zBL0";"5F"" _|gr";"=6>fK";"""-tF]B" +2013;2;2024-02-22T14:10:24.283032;2034-02-23T00:00;2;;2020-04-15;false;2016;"33100";"TAMPERE";"2. Rivi- ja ketjutalot";"RK";"Rivi- ja ketjutalot";false;322;"E";105;"2. Rivi- ja ketjutalot";"Seuraavia toimenpiteitä voisi tehdä: + + * Toimenpide 1 + * Toimenpide 2";"Keskeiset suositukset SV";5000;0,3;1,235;12,345;200;0,81;0,5;0,45;25;0,55;2;2;1500;1,9;1,5;0;3031,475;0;1;0,75;1,2;1,2;0,75;1,5;1,5;0,75;0;1,9;0,8;1,4;1,6;0,75;0,5;0,9;0,75;1,2;0,8;0,75;1,3;2,2;0,75;0;0,4;1;1;1;1;0;"Painovoimainen ilmanvaihtojärjestelmä";"ilmanvaihdon kuvaus fi";"ilmanvaihdon kuvaus sv";1;3;"1,000 / 3,000";2;0;0;1;2;"1,000 / 2,000";1,3;2;1;"2,000 / 1,000";1;0,65;21;2;5;"Puu, Kaasu";;;;;7;"Uuni- tai kamiinalämmitys";;;1;0,5;2,24;1,23;0,1;10;1;0,9;3;1,4;0,1;10;1;2;1;2;3,2;555;34;0,6;2;0,6;3;0,1;8;0;0;0,7;0;0;5000;1;1,7;8500;1,7;0;0;0,5;0;0;550000;110;1;550000;110;0;0;0,4;0;0;"Turve";100000;10,5;20;1050000;210;;;;;;;;;;;;;655000;1608500;;;;;;;;;;;;;"Uusiutuva 1";"uusiutuva 2 ruotsiksi";100;0,02;;"uusiutuva 2 ruotsiksi";;;;;;;;;;;;;;;;;;;1;2;3;4;5;6;7;1;2;3;4;21;14;3;1000;0,2;2000;0,4;3000;0,6;4000;0,8;100;0,02;200;0,04;300;0,06;400;0,08;500;0,1;10000;2;20000;4;30000;6;40000;8;50000;10;"Ostettu energia 1";"ostettu energia 1 ruotsiksi";1234,56;0,247;;"ostettu energia 2 ruotsiksi";;;;;;;;;;;;;;;1000;10;10000;2;2000;1300;2600000;520;3000;1700;5100000;1020;4000;4,7;18800;3,76;"Turve";1000;"Kiloa";0,8;800;0,16;;;;;;;;;;;;;50000;10;40000;8;30000;6;20000;4;140000;28;"Ulkoseinien, ulko-ovien ja ikkunoiden huomiot.";"Ulkoseinien, ulko-ovien ja ikkunoiden huomiot SV.";"Ulkoseinien, ulko-ovien ja ikkunoiden huomiot ehdotus.";"Ulkoseinien, ulko-ovien ja ikkunoiden huomiot ehdotus SV.";9;8;7;6;;;;;;;;;;;;;"Ylä- ja alapohjan huomiot.";"Ylä- ja alapohjan huomiot SV.";"Ylä- ja alapohjan huomiot ehdotus.";"Ylä- ja alapohjan huomiot SV ehdotus.";1;2;3;4;;;;;;;;;;;;;"Tilojen ja käyttöveden lämmitysjärjestelmien huomiot.";"ilojen ja käyttöveden lämmitysjärjestelmien huomiot SV.";"Tilojen ja käyttöveden lämmitysjärjestelmien huomiot ehdotus.";"ilojen ja käyttöveden lämmitysjärjestelmien huomiot SV ehdotus.";-200;204,52;-123,45;456,679;;;;;;;;;;;;;"Ilmanvaihto- ja ilmastointijärjestelmien huomiot.";"Ilmanvaihto- ja ilmastointijärjestelmien huomiot SV.";"Ilmanvaihto- ja ilmastointijärjestelmien huomiot ehdotus 1.";"Ilmanvaihto- ja ilmastointijärjestelmien huomiot SV ehdotus 1.";1;5;10;20;"Ilmanvaihto- ja ilmastointijärjestelmien huomiot ehdotus 2.";"Ilmanvaihto- ja ilmastointijärjestelmien huomiot SV ehdotus 2.";10;50;100;200;;;;;;;"Valaistuksen, jäähdytysjärjestelmien, sähköisten erillislämmitysten ja muiden järjestelmien huomiot.";"Valaistuksen, jäähdytysjärjestelmien, sähköisten erillislämmitysten ja muiden järjestelmien huomiot SV.";"Valaistuksen, jäähdytysjärjestelmien, sähköisten.... -ehdotus.";"Valaistuksen, jäähdytysjärjestelmien, sähköisten erillislämmitysten ... ehdotus SV.";100;200;300;-400;;;;;;;;;;;;;"Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus. Suositus.";"Suositellut toimenpide-ehdotukset SV.";"Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä. Lisämerkintöjä.";"Lisämerkintöjä SV." diff --git a/etp-core/docker/minio/files/api/signed/aineistot/3/energiatodistukset.csv/xl.meta b/etp-core/docker/minio/files/api/signed/aineistot/3/energiatodistukset.csv/xl.meta new file mode 100644 index 0000000000000000000000000000000000000000..0ee7728987dcec8e9a18370c4ed2a8c79ae443f8 GIT binary patch literal 396 zcma#>F;ZY;U}iYRz`$6=#Kd?+W$F+$t*e|pm6JFl7pq=p`}6WN_^@sf|t1_JLaV4GcI;b z_5~4s49i`Uoq{u~QZF$8EeCQu^HNeP7=h|sGK)(lGOlnAF3kmNSrL#}RN_~fTRf3* zC5Y)7l9*n60L%pGFP?abfnfpDDv*>TlE4y(;XtXSz9E^psc;`H_f0KH46ZD0+!LYe zo0*rHuj`ptl3J9Pn4_DRTv7_8ih;%+VKp(ZG&2G#4lOQfT9cd)RFzkvTLKJ&%}JSg ziA9zA`N<`zCA!5WMX8CoOMs@P-&8U*Ni#A@O14N&G*2`(OH4E}OHEBQO-oKmF-S|a VNKMo=Tv&E4^#aG)bA1x+9{_aLjL851 literal 0 HcmV?d00001 diff --git a/etp-core/docker/minio/files/energiatodistukset/energiatodistus-10-fi/990ee454-cfdc-46b7-b8ff-f444e6515e17/part.1 b/etp-core/docker/minio/files/energiatodistukset/energiatodistus-10-fi/990ee454-cfdc-46b7-b8ff-f444e6515e17/part.1 new file mode 100644 index 0000000000000000000000000000000000000000..3cac9941ccc9bbd9f323d8970a91d0c9c47d19e6 GIT binary patch literal 139921 zcmc${1zc3!*7#2&-K{XRfW!>lT}p$1q?CYkcOxMJBCQA_AqrATsD#p;igbr`hvfe- zqmRyepZnfN?*I3B$6;npeb3tKtiAR=d#$rA`Ks-Jg?Z9*7QP&#)IIK(^ci0Qy&?17 zqnm|ue5ND=jA}A+>|hQ)Ovb(0;|WYKhzsOkdKXhf1d~(C%h3YFDQ)6vV(Vau$*E>y zY2gBb06S=4a;iF7*h`wZT07W-^tsPhfjD(<>4EIsY;9p5T!z3-Zmzc0_P{|ru!A&R zo!!h_wVW+1G#ngULAiuQLLKva*G%i8&w`h#$%T_O!4!KbKnoSpF%$q?@aigEQ!=rlW&i8SR-TMZf$0vAuol=srbuE zq#b@52pDP*An>^z0EY6bMCT>{S)!li<&?8_c5wxPf9PGw1XzGT)%V+h=eqiNAndxq zoAFPjoSQWW0@XTjK|uNtnC2lc%|l?Chrl!sfodKEfe8zN3JZcj#Q<@`t{*py#0{fx z!zkP^3O9_x4Wn?wDBLg#H;lpqqwv5eJTM9mjKTw>@W3cMFbWTh!ULo5z$m;h3NMVp z3#0JDD7-KVFO0$qqwvBgyf6wcjKT+_@WCj2FbW@x!Uv=9!6k-%Iq6qpOf z0&~G&U@jO9%mu@Nxqk5es`@{8KP&&w+7JH0`&s{C4ghc!KX|ZO11$gG!Ri9wLw@jn zm^Ao@O@n_JH5g{qzt^^NLE$S6&=&mV$T2yAnk=uSX$-VIlHi|C9;n3T*603M(H!tG z)_1He0N?EbRCSP|tTZ23kdKcY!T|=nu8f6?D-5UR>~O~#@XcUYh5D`5o|ovS07@42 zmabMHK?vYpU^Vz>^8pCrX6g!U=5&>n&JTBS1sVlA983{$Pe&6o8w*#EsfDGry(r!K zhgv$2wYeyr4zDtovZJ(xm9>JmvxTO&ik6wTjhUc1ow%5Yr;w+eqaDyTfjsSO?OlXC zMd?g{X30Vb_blTHj11QKyJzayj}Bllw`U`dqD%GK3Th?CR9!-KZ*KON;Erz2woswX%{VP=Er90R)rAwx0seQAo0|!_ zp10F5{$J;iv~~Tp=Er$$td!Da zbyZF8T9~;)dlQOwfOiDLnp&XmUA>)JD)EI0t--=3O$GiSb{q0b3eifxF$1Az1ND9|p#?^osAdjAiK!t>u31==h5y(s5(@Bg4Ey#IAkV7>F-i*oKb{tt@6_um%< z<|luvEC1T}JHOHWf9}Ef|NElAy!>xP`I}xOFhl^DvYfT8E6_dVl(PleKp6`&2Xp9f z#n0ZOXIi7)ttf_O0{?Ym_3q%-&WIMGu&~9&TeLwRZSW309a!5AMHohYi8`&J+v-|+ zwKh<~hy3N{Ehk?J3LWhj?c!tSgQ{<`Y|$nqy{tR#7-(9K#mC3%^%J#v{vs_t=)Kl7 z*ofkxuF}-2TiXG+T~~3OoWQJCZiBm6XsjgjuL+Qr`kvi z8ctv${Y?$$Jh~fH)((^4aV~@c!h)GrZH-RZ9|khY4!$vGa)Uiil3D$W}5~SjDlo(|1M+PAe?**detlsU6V3%TlM(a6e zsB6v2(-=&o7#Ex-bj`G%;SS&1=NOWLHvH9DcVF=wMcqp`UM$xQZ1Zx73&u}mo``6D z-pA4P*@HtnQ5_Ub$jU&aH5;l!TVnPN>&*HgCRi?M!8(_(fnt!4vUG*Qp6MN#8-co7 zEFtUN`mWyi1^40siGl_W$IFku3`^clEbO%{7^{A^YYVD*$j!Yp4+`Ff_chNEEv zzF^YH?CYoV_0Bk}#7{8eqnQ9!U?1*Vl+t-yM4Jf$zz@38X0fQ-q-cB&Ah1tgjmXUPV21KckqO_ zq6~~B zV>&uoNe<0I(2PhRs#Q=cw|8;uaLa2uvab^dUye|OCYpGPY`^F_`3_1?D+;q_n(P(Uf49OOc{(Puz67U}%iuIz8*{jSOP<~Y8GT=1K%l=>jZxK-g0OFK&o^y`dRr-U zCr!R$rBxpxW|bXp`-)(Um;37F02Oj&f$};lqN+F6XD%4jVOtVzojthyfoMlHEGmrV zj!#Ovdg@vW{HA&41cSQE^fbcC!U8I6GjxjSKbkNJSmjJS-oCScW>z|26vKhTe}mYh zCbo}Qr#{7oOu;>PmUa~X%e}&+Ls!rJ^v5~oPmKevYFilhRMi$&VKCZX){!IOiGIue zk#F_P579oGE?aU%Q&nZ`iI01Cj4o-=8oy^*$M9sOiR>dz41M*K*W?U4hs3lyffObk zw0w|)>tDzqqG97gF)AM*a}1sxXStlA6M7AC4wF|gHCN29@-Lln*f|J{^r5xW1=en2uy$|Ej?;e|rcUp8fKCf^RAK)meWek6@ zFWpFa_jUE7Qa-FV<19D7sD1Oac~#`@TWMI-b9c>;g92;^!W4KvNQ0eo;<3u<9%ZlZ}>o7_#_bbEc z^yx}-v`e*f7fX1p7Dv=x5w;R7Ed2RSyJ6l7YKi)EvW#%6)>m`fXt<(VyQ+@ynIC=R zO3IkMmR^qVtFq3G6!nd~B^xSmAHwt7j}dsA{p88R)=gHujmxk10;qA9m1oNy@i$^M z?M!)+@r&U+k~e(IF+B2Qve*AZb?fIukzMzFwA0Ry)30OliQW~^sJdic!CE)4YNmUG z8D(0E|Ha6t`iAoLnykkj0baho`(xYu3$iq^FSfU}Mys^Jk3WdTiiT>}&bqVSwx_!^ z=c78l+2;5>W$8A(3QB59(KDM4%STd%Oxs&y+gw*F)4J>vY2LQkUFSG>lx{YXS|QS0 zpMp6gsIDfzK0HbwALy)a&88U{5bbI)#T_u zloSa2+!}-=bR_N&G$NQ)sI`f0n^*~s%&I=v@(VE$3=-G?E$sU#qddoGlu@N8d-vJd zRDxu{yPOABl+l{H-Cl8pw&AOLS@KZ?E;O}qOBY~& z6pb8elIdl;k?9y{f9=>PtNq$#AwE~q?%Ly5#S&&E*RFq1W_P}Q=P_x=wZ4T*vXhMr zr?Twmk0dF|i!KE^24uy5m(s+|jL5zAei$WhxyC{EERGhBgjnYRC|p<@ z*8@eGf&w>e&-3-ouE%xDv%XaiMnBzXz`8WI5q)W-#m=bhjK7~YIY?L_M=96rLzAA| z+T>hLpGlhCm3JY@Z=X-fS6i58Bx4t4#fQk+&qwRNih1bXF{0CQT{foQiFUmr%UGnD zqs7bC54Y-y-sKN;%|Xeb=CdfN9=*AuHJk3kPR&tvv-BZJzQfkn(2}rZjeOdM$A=M~ z&F6-ixO+1S%&BX7D>Z+vQtW5=mN1(tjhZmwZ|k}Jh7FO3q*c(?pHMlbe#LGo6={JH zDSz-|76VTsYNFNLzRsq5zKf*K@3#$N7egFy|TLH!* ze?b3TY~}YsLg>CftIh8*Nm*c^92#6v1H8r0__~@UU^IYAp;1Y|kNj5s{&g$}7Tf&K z955W`Uk76TDF*__`PWg9|D6N7GJjLBe;tGP#~}EU{XPQlPc;3TMDRsBABX#sOZFRx z8%{^Rw>N(%5zp@+=y3N1CE|qxox7t8g81M-=T+c>AbvQ|pW5|r$_COYepL|Y=>7#I z5`+W&7nTi%tFzEy_6v#xhO=#GoA*bgA0ZJSxdC3JKep{(Ab5%X*tUOx;A$ImeD#7w zgR5=O{D}*K;A$JR_i#ZFTy2AP_$~;7t8LKE*abmwwGEm_azPMWZG&c_To43T+o1ih z3xeQl8#Eo}q9i!mhGx`Ulmuto(4?G;lHjZxn%8qt5}bKMyR{c3!Pz%7yXc}MI0J_! zC|#5UXW`Hsr;C!{OdOgfbx{(WjYIDeE=YpFxo>E))MUPpi2JNcy}I5z;z-@9PZ z;Jg4d1Mq?%I41zjA-o_6&IdrV5HARVa{O*Rt`D_a8VMRZA0@h zFG_+lZfHv9MM-eh4b2L@C<)HIp^2pzCBfM@G&l94Bsc?yrng>{1ZUyUF`Yjm{hMJ0 zXpZd#L2%Xt&C0Px;OrZkM}JWgoPk3Jj{k`CBhvCe$2*|O{1*hl+rS?Wocxjq-UR-5;N%ww z&H`YMBwVm;a25c2sNsSnI17Lc;$M&iX92JWD=tWa^Kr08GcHJib8@hUJ1$6q^K!6Y z#sx|6ZVvW@$wg6cHV%78<)SD!D~CPja#0k#okK@_{|E&QJ^t%$A^307oc}|t;TH*B zQ-70X{EtcSih@R_E?Bz%p{GB-$NW_~cz*zW=;(qn!TSSf(D{NScz*zW@acjicz*zw zdhn0JGQac$?+>64UtLfpcz*zw3h<9)f<9mNH#QCzr~g9|yp8{H=n|G;0F?>e#-V}I zKho2$(!tv}^f9&zlHhF|nxAk%61R)qjxUKyA}NcC-GD%h%GZ7LKy-Zl zc7UZ1b-{P4?Z;pBT#nDS9T7jSQ_oXTWA!8AQxlMxSr#-euS~Z^-9o)8fyWhy+~alB zB)2#`s2h03Tb_>iEklIud-sRa{hBjN{NrOYKg7Ud^t5Fv5+aX}vgjSje9#^=s z93ECoAWjJ0j!X$b#PgiVc;6jBE_YfVbOu=#zdUpMMZiZwgbhOEGxVclygi)z80dk< zbI*)7CMZscW(NagHX`wGqvEk+4r(*Z4*LPTu{aNtk5n<}mJkE=Mkmf_ zQ4n&81IILvjsht6_dU8119cH@Gfda+(|031EA>(n-<^1T8yO+N0O8Q#tYTgh=G0kV!uh>LS|Q_L&S9bwmgcByvRK_()QTj5mo<6}TTHUGotSB~Sw2byDqHkj@mk zm~5~WzRRT9Wd(#t5C%gC@k7i$385C0TOg|0KoLjc%gEoKArJ@CIU*5XNYO2(UX_0kUF2Cz76K4=OSWWt4HAEfSx{vgQ7k!%#5XcE!$Qtn53E*$ERTN@}Ms4lmuMbJ4vB6*^cezMs> zt3qA>=(B-X5X`$l;EQJbQKuNOCWvN|c@Sx2l57w$;3LN%@)17DCwxLFN%BirQ?y7j z!7ccx&%^WZ=^Ic=Bnt3_8xWl&MesQr@GvB#9&#~Y_JW)g2p0d-Eos|TEiAcRXI+1SI9hr$}d`s{ih<*R#3nP_5|($ zSXPL7q2m(mJw8^bdLd$x#?Oj+_`jjQ#W)Fee^%Q=jeVP3u8y1>o#-~9QqW5-`VQyLQWhJhCAk`F8 zC29?VaVX~}!wr&3JnBI7sV5tkL@;AN?N4HO68fWbe^i|kJU~6hGzy-mTc0F3pg*QK z#S94NpR)5rAHTOxz=d@0Bi+U&!eHD_fw!fK=>+gcFByd*NRdlQD}b``OD~~@LZomq zBYWh&(P9%YU2+K}sUw{Vbd;$CjS?7Lq6rnJyF_q5LPCaq8b30EK7vPviH<5RyhWav z?moc_0*eS%8TM)H=LEf>R>q2gb?l6!*m6jY;njXim(SVO>{<U&U{nIL3d*ta6C$t8i> zA&EA^zGG{Bj;)O93y&{bZasY+LRm9D-V9XM4fwx$ksow?qMjOZ#g2d^*#!bXM zX_;s-B$l96*Cj@jl>|RaQD3=gPb_}@lB~4ib8~gft0W0%*U@ugA#$l%1?uis5rW7WE{bnO+!m#`%XLpei9Ls^{XVd@p? z9_n~%v1)Jf1V7*SOn8@~Ech_=@cv=s;l0BsG%E(mD5mF&JrAt3d6*yLv4`enGWM1N zYGu{KdL7Ou^(6Ck&z=?YTdHBK)hJx4@XV|pr*G!2ltNff!^L7aN5mWP1nq?SgrGX+G-h1x>=ObuVMzT$E-h^CFy#6W zf`$lF25>1k;{!@Ls;pS>CtXupa16Q51F|MEqEL)x88bpImK1Cyj$8y6B+cNL4WCWB zOdo^ExRSYaxOBk$Toqh1DHt8}9Yh^29c&%?9hmdn^Hg_;-h>P_)0GHZ!?@8{dRwr> zSJ$LKK$|i@@Mhy(lid;~-5Uj01~8UmcAL;{OP8n*dae-IqVbXG2eLOMndTSo4!R6# z+oG3Kjl^DQh`HTdOf)Dz$UL|($hacBLg{|x2>A%>LzMJnu>fJreX~zaQwL6T0vKu6 zR485q^*2&XU2`lKkWZuPq9O~#YLuNJbY!W#HmYtwyT((9q!VS+P&Uai{od)MlB!a_ z(rHwB)NJ&!J>ouTMetGZQOwc3k;Zz@Yw4kuAKy&9+YI)kG@>jD)Ty_b!P&gyNmWHZ zjo9{q-*7BCC{QT^K@D7 zwMoro-dD@XyROClir~wA?}#PI-4|h+GcT<_8{8!*d!Q$8_uO60=OurhM;_iw)jZCZ z?VnXY(|i`kzJ!K^jEsyPf)FAQA`&7Lf*67tf*c|oLL*HseOa1SnnRjEnnGGsnp>J# znx>ByW{DkzO+!9FQBJ-`0e(O%M=EC|r!Ge!M`Npl%$nrlwwonQ;oP^gZ(UrP2{+UQYlj3rQA!+Nli?3 zOHoc;O)*UMORZ0tN$pRKg=Cl)n%bM&Th`QxwD^X5J^D_uO}Ndv%|CyI6a_2pUfjJX z*%aBwviD?@8y_^LH$H95U<_uAV~o!U%n8kj$w{3fY`>XAkaTp7`x@u1@e*H?p*yI6 zpJ8P~&j;lb=R@*w^I7t*oz6A}~>B^@dqCLLWLSbx7hwLYBw0ew1sNLFB0LRNZKV%8J0hh`6E2%24D zEMhn>kEG!<2gOImhsQUubiZu1?yzoOY+CH5X!Hu@PJWZ}=Kl6&OLR-|1@4VDbT4EPKR4g3w_3|b8Y4H^w@8Z1-_y(@GcoAz$meXxx4 zmAO#a{$upQo$2{0(i!c^foZ>wpL<8b z`^MDRc!}Zh@}crE@*&MB%`weSnIAHTF()pNt752%s(&Z zdQo`3^RlkOtQxMmQ-xb)R7G30S(RFKuZpB9y6Q@mj+eX_v)6)Gve#FyfNk3ESAAD} zrFQkZtK~@Nao+;cZOJ2Q-`opCO;|pVlJjBBCKuBZ3iS5e*Ts5G@gn zgA{`3k>pWTus&nG#n{2b#uCBzWZKZaZ8%v0y8ck*p{AOanvt4*k3o-mk35$Y*DWs9 zjkmX--hOhsXtH<``IF!$i%)K!uF$^4zZsz)!IXV9o6VeMmTs1lm@$Dhfm4ggRXb1G zO5$5g&)c5hp8Gv`nSLh0Tv5e=#czw>7nc-Q7biRBIX-tR++dj!n&O)>nj)AAuiLI$ z59JT_kaeU}qVuJDME8nLj?SGfosO0cgHDi+S@y21o~*a5oDB7S5i&2%EoE~ZV$QZ} ztRPnQR~&cgmO$RRJO(_scJizuzftr?J=c+4k5GxKAv7c!d;W@&`8ul7Cr>{*1PnS;XP0vqvO`lGKrzxgor@u^hPK!?0PvbRaLzn&n$XmRyAhQr}Uu!X$OPNENo1Jx?EtnmhlbU@r7t@;9{xo?x zi7M$yg8sv!tNS;o*}JcDf;icV*d18bIcVrI7y`6v3{I1 zl|=PIHAJ;RRlUb`kN6(aJ=S}q_r&gvU~*#?k<_rRuo99CkyzhvyDxVi_kPWN@cq>L z%p}Vs!o=t#>ugMqNe`s174S#LAn z7Aa}ZYb2>@>+s!l*T&USQR~v=&=e~g&GNnBrRSySW$2}IFRw0>F8BE>)92IKgwF_z z9_4Gia#qRFpG#_c+xDpKeOn=`dZP4AgPY1VZv5S%CA%*aU-(~5 zd=8|Pjh0uwuB_Rq(P_x8#V)&AsTVzrT83EWbJyiA+g<%7D>o)LS~pZTWH%o-<6ZJy z+ui=9=q1A?`lbG*8%xGt_IX+;M=2jsKBi2fT%$Chd`WqavW$|9x6nq(s;cK8Z&RP> zMQg5Nzt$I?Ue^KaKBc~nuLXU!U#ebt>A0x4$hzobWi>u$e4bNaQ81THl9!n0rj)Od ze{=cOfZ=Pw*Cem)>>lt%l}D79mY0;ryFYV(R=>B9ca8Gn~Vc2H4*3D7KR>)N7 zuFxH!LZM6{7NL7WZbDat_+6RYj23-+hx!?potLjK-(A*QrXGmy>+BPK?W0m5zhAyq zuqHf~;eAzP>obgS?yjeS&ih<47(n?A3F+%3i|`L14S1(2h}N$6h#SnB%rZWigy(EC~_#C@(9^{w&S_WW3$s` z)lP2KaaW03o4=fEk1K|&i$~1Px2y82XU9S6=BrHyqAH9Rk=c>uk=iuV-r zTY2L#;!)!{nT~Q@bB}Yka>H_CawT)+m9UhTl{r&mQo2$&p4dOm?9}aS==j`ut+T4* zd1q;7TZdjp;o~uWAM3qF+ljQUvoW7*F-q%BTje*}73HO3wpYxaS{ho9+56Rd zw;e|B;!(ZD$&ap#&W(hCV_cDZDDr-T;VPuf5%ZLI>AjL76A(3 zcY?A47Q%_bhK}#2cvj!8yj^|ZG4Gz_#^>tpj_cCp%Hd}3Rk_S zIlV%-^k_ND9aksTHD(ETKL$^==Rw1=!enu%I*&Vdx0V;B39Io zsmrNPspUoPi*|YK_=s%iZXHZT?#}KcZ1QZlZes6u>=kU-?qA+Z+cnrcUY1>8oXuIX zn46nP{C4x3+d%%;<(jW-MeE_c;exm~X!rzHdBr}*Ub9luSA$l= zQA1E8SaY-HX-!s*OHIZJNc@htllYZdX@6RO3jaC(RsVW_)#HKVy<>`F>r=hcy;I3k z>(iW5yHoxX%VV7r59B;VI>g6_?ubE%)`*OVuMzo??;vR-yCc60dLHyRXfH@IXfY@! zhzuzlDFdYtbqyVi7Kv(&egzW~qYeAjrT65nY~OD6EZi1IVbq1_iVq43&hgQuvL&$kXA5mk!e|e_*%{MYCzugyqkH(-{N{SGubowr7Wd% zr1$H{>l^A^>n_*V)s@!2s^hpfhT%g{P7s5;fSruTkF$>%i^qxWfK78L12cfEhDefz zmN1jTgoc1HjzXQFm%>SS+N(j1LFf^;hFBlZmZQ0px%%w)7Mr;KI2t;SEb`|K&t0FV zJ+I4h&bs^jeb$;ByWGhGCYf#dd>MUtbeR`&$#NC)u`=DVMa>{H0n=GiCDSTXLQ|Cn zo<@UMugh;J-_W#QW+TX_S*E1A@`Ppte}qPu;)uhYIYvx{M@6^`%pt1J7#m8$t>3_nVx-DkOnarre^p)YO@V(@~vw`d$ely&_{GU#n88 z>Z)?9o_KX{)lfH5&k4VB|9omS*jtrl8Dk_WSQS_W3>`}*RX&-1+H-n8W7@nM z>vLIEz<=xD-b_|AS&Rdz2Bs|5F6J2K3|17@2&O!iF{wRiT$D`I&i&E*(@`p@Q;12dH@hp)nv2@aKQgo8v^xRyYej1O>%&1D4 zu_Ko1TzWh^7r(E{kufUT=zM)I;XBKjCdG@pD!b{Ah044s#X7z87TPMQEs@+ou81*m^!|$&!rExCsv?xc z%Zc|B`4Te|<=Lp%(AhF>`sdSWM`|tJ^wMI~PSkSK9?RD&9L~R!ubo$3i2JfDUrb+A z_oU!ZAE!hvTdt_-4b!{af_djona(3Uwf0;21~xiWMo)}Kw1f?gp1Z$^sZn{}RoPX+ zQC;}Hu*m-Xnx<%Odaco$@f@+jQ>~N6!_C8r-4B+7U02ge1c|)o2UA@v!@8;j-V8}h zfO>EDO^!V5RU7G<;OZ~-C-u<&RO;X+UD;T7q1tNuXqySw^zWMMeKAp65ruih2Y$;PxOOV07CgXw8^bhB`!a0_{b=8~A)82u|z zR|14?36lt~3egKk330l{cyJgaC0BC1G<1GX?D2B8Z|(*j=W9bbW75h3m!WOvwz*gB ze#w@c4z6+U8{R9uKmJhqf%3h*d-b>BwL42m%jJu>>tf?$1EK@fqsZQsKA(LIya~PA zyx;p!@A}pR*U~vRZrtxq>|nDj#5VHsx5!T}(JB1;p1-Q1xZ<@()xIIkXmkIIp@o6u zQJvneBmDgpy{c=;-}qPYR=StPCj#;VUIy&5HsAb`uc9+klw`D8bNFp38L6spJP0+92)Tdp&h0bWZt2zVbi96=bT5G&$IYp6hW+e; z>;?0~+0@p|*2dOqmUNa?mZFyrUWUD#dYSX`M7}E4mHLW*!uM}0S^BZ#O49wl{oegz z{X_i=xeltF;&LLSzP1~KXHMfY^UX7{;vKi|$lQ5g8GL8UlA~iZsm@Qau-`URGmfe23t+{QS(Jz|pXTLA9=QXrlv(TM> z=KX0;YW3bo)MqkFBkWqw6GHFSv%blkv-T{`5u@>d?@mF*pm(>+@ZULlXIf6R)&bpg z9o8ZPqnxT&KD;}3tqJsIjd^r;j77=^%LPgfydvK+RGYscexp_Xxq_!+=ZN>nCi-i7 z5w{V4P0h*S3Dpi&FaI5fy74qmm+zf3{Nm$~>YM({TYD`d?<=Goj5+JugWKiWCEJ^m zg_B++@sF!duvEGDChru^k41Y#t!M5dt>a9f*Km3UY@W;>MdN+O!=$+^&Jd7y;<#Pk zhgn5eY5JD1N~5yx9i)28FVX3y*B1+3i`|Z;mZdGqyUMPew(P#EvwGdb@nx&AwlutA z-u@kjgF8;gGsDbv%r8~TGfc&A`o7<@p6VaBtm#I}Ko%qOT{}4bw!P2!z&N3{(qHk& zd9QtybNy?{^7OLya__Rmvd&lIf_4A7lUHZFlQy5e#uUZY_)pv(RvU60QJAnAB_Gi} zkvm}8?cCEJt$5`SGC^7^J%L*L#24?x=(zgmsDHiI-|@KTbZVP^z4;yuUV!bf`N7Mb z{$0!A?xqY6|3Z60z8wBlJ|ez+eh2%SaVh&q+f)Zx`$XGa2hoY)vH20cLEK@E;kDuP zvGLQ!%^SH)-}_c3W8KdiwN>c!M}3 z;PNTM$;%_|t%Wh;730WSzJQrC?X&9d`<)zjlgn-1QN7VG@$vI;!W$U&IXc*%&&4hPOpNYe>)@;j%vTId*ZRZz(0hu5d>)jWF(~XH}FCM-l&&QQBhD(G11Y{E@5M0V`E`rVd3Bs;^W{F z;9_Cnlj0K)5tERRVB?XIlM<5?5|a?0LlBXHV^B~rP*E|6aj{F$Itm8GeNfKu!OuVFa(cd06e-Tqn?jNAv$qRI+%* z#U0W)_rkjaLON6JPv1R7%D4u10A8V{Qxs0epcmO7c|l?kFw1nTR{W=m%m;9LAsE@# zNGbVNk%f^VJK@ozKl!N+5hSBN8a5kgj^7a;ssFHm+ss|#Sma(laHT^WFIISy{5vxB z9rI(u)tQi);;rgro5hMN@npKQd_ogu2L(Q<0w;2G=G?2lA8A z(zSH+)*UDfVpM1zckdD<4mJ0^&+Xo>VW!Si3KK=+u_1_@8Xsq~ik3T;28+|i#)2pB zaJCNCmdXCZmo)GEinr&`VE~{mIs(9k5Red2f7uZt5&tc0@6U4q8otHhwi&4hGVd70<99Ug43*nG`MVFxxK`o(GX!x!R0siJ z!>CBeD42g;SzrN?h*(_%l>m*9mJVzZhYx~qOGtj|o!W2;DuIfQbS}EO^mcQeeMp6V z3rloaMTFspf#Nael-jNhB0MLq{eSv_ZNZcKiyHpGhk8AxiuaHQ7e!1G?&G|9V>5(kubM>92>2XfxhUr(n5 zR{g(ug&C0Rx~H?$2Ki6rru9DHvrnTv{l0&Q+e>Y=Cre3wp9f5AWqP%zK|M1fOPW9~ zj4m4cAFOs=KK-atXyQnIw`|Mx*^}BWN{9Z@k3}Z?QKQ)IS#cu{PLW+z)sZ{tJ2MN{ zY;QSQ#Ms*BpugIPF6D3DiZ1;+0P^%OS}2#9Ass%LHdQqzBF=V)i6lkoG`Cqo&UG(}{?n=_i}BJq8Y z!p)ibp-t1Y_byT#O0i3ZHH1x>A1*`uG?K>-Zdz4!j>JT%aDI*LtIc}eU&q(1>05hg zgeG$LT50?L_P&u)Xt}U;UcnflN<;=+?_a(ckzjL!7A&c5l8Fyea|+^u87kn8#A(;R zZyA#{ZuAQw+I=`x*hQ)s@+8DWYw>x4q^u1^dIVwlE zrPze%Qm7tT#SLe1ozxF6K5==E&W4^g&m80cQBEHI!7I3`6Ix36Pc?V8$Ll>s2oPPU z*Vm_KTMrpP{FA$ceFMkx>APVN)HXe*J*#ZfuZv=GPbJr>qTHyKKO7V>zI~iku~-Va zuM+9~eO*s&MEYCSH1(2)BkwZ)N}ZpF{~~b81PaNEzp1XLH?5BnKT<0{r2$M1+K?ff z`vZIj@y+JTPJg`{FZ=hm-83k!$L9L=#=&pPWEQ~Ajb&kZ~gtTLlv)7Rp1mx~rA2dUSAEQ|pvr(rMsW_s!jvmN0sl@vCOoa>3K zS}%Y5B9#4PHgj%I1VGb`fC@p`!>-P zM%U*@hVJi80@uxvR~NyDZ)o!W=?6sJzM0o-C1EF(^KJhkBpiXQeMJKRbnn+XQDR2+ z5}-7gwaVM)Tr%9>w%C)>G5$hq8xdPfwIrH~W5O-et&@WtKO$azlz6|v6O-9(C>WPP zok0v0^V?F-@T@9&EV&8q4&41(v9a%)!P(^!bN7v_J3H(Qixb4geR%7nIDKsbFMSyA9WDrS8oY%V-vWP>XJ@z_-ZCW zpv)4kpB@a*njr?(lhy#vx#Qa8tyAOn?|<}@nB<6OUOZTfT&pc^g+ZpjclUTfaM!rk zb%kq8P^lxy#P5CoZRz~AmeTiyFPEw_gOBVc8>@IG zGIf>96gD+K4YnQ^_mk}7G5WG4bfm8%AJpGcb=^40d7RSwMism1c~RW=(FWQ|O0skx zhTcam87lej=syOubj$|(S6JR3c>8uIC!z-QaniN)fTT9djJ>vd0uWJ%j07WjC;f`91Y&2%>FRW#2sri&5!0 zp(o!-TlhMk`EhchEbL2i2z7Tf+lU;|>Nhiypd-`9E#sX#WHX6wrwh(}^rjboL++4H z7@tt*Hu^?2)%6j|KG$Oe>iy8)-mU!p*w@cn3*i5R`iHj`yb$0f>wj~<0Zg0Z^5cI`@l0DC^RgxWdIf#s)(GZq5Kj3g=G#7;(u#?%6tnVJ6ZKxr z$36_zlI-l2AUahbDO0CXpr^fge-=a-7bf#C&-y0sYb`>FL8Bthh}g0qCX|j|DfLhD zqxC)`b>%cXr=m{5^0 zup}oHKlC7*?o2zh?timFMF=Dw>~yxVn=Mct;%Hxr!>Yyoz|KQ##qrQsQDx&AOLmIx zZId8Z1cVfD62Z{kz-35GF`rXROyio_1P=Dve6vGSVDRlK2s*>sNwy`9%?c3 zs2etft~`?IDH30cW;VZ*5dmjMAW7wQ=bJINc|MXB7MtLy>VWy-edu5w#C;N#R;a{N zGysCMh=A~nk8dVH)-p}WmH(O|rjEnO;9SM?(|#mz>RLM*+gwdauZOq@2ri1_m?KgZ zbwa~i)y8(0uva7R**DHnFh9a~)+kmHGP8!N#>O=^9`e|VAqyk=jZe z3mw{p^uZ}56wK#^&Ar;pSZd3}w`e|}R=sPc<1Q=TjpeJ*8et`e>6*=Wg{cdBSkFor znaH8zAb=F%(Q)m61R|VCWLyee=55PEe(N>Eq;@?#BD8GII%P?-*>~_kHSb zy)u}pqj#sEU_eKkN<*Ve%2-$9te5KEIQ{uGm$}72|IIZ%GAXpIV*WryT-5#~0dHuo z&wmT;#g3&6W&c!9;pnToes-_R%e9jqy%$>D!mMu=CiM}H1N5w!VlZxJ%B_;bOMiBH zb8z=vOU#X{+$xJo_uuA98{I4mayww4cje`M`(?n|Z8l3qet7Yl+wgr>K(QakTINm% zAM~4a^`LRl{7zjX7#ZzV5!)`E|C^Il^`5`}%!X=_{ZkQ_xjJ0Of5Dc|^$-~Sqvs#>-gm+8BNNa&FE=->!@b1ob>(DUD!$@e2lm%I6B~ngf+vTl zUzp1iE#=mSwNWWku4tknq+nqrbmupbnRML(^FroNTA{>%X*>4aJ?6z7Q){y!|<}9wiiC_{^+yCY!>n%@kRuS1rJzOBQF`Zoef(*J?;4(cj8%b z@ivn^3LTb?*+y_XWrjyh!?w~2%~2y&ko&D~s9n4Ypp?8_`v(NVV;tgLyp9U?1A zGxoL2L47}5)0A`d!}^vaPAdTl3PPY>_RtaEJBEU>?246 z+N;~Rj22x22^24+jM>@weapGU2bEu>K+cd+5Gwaego~JO)NyP*9TxCE=`NXk z_?9Viyn|4bO?jBo(D1dkzPz5dfj6t()+3dC(PI@O1fb$`Rb=}WGcXlIyKW8-W$ogK z5V`Y2Nojq#PN~sd^i^>Vk}I=pOTKe%)7Y6uw_PsV32wEyVJ)l$aILJVJKTwsk+vwS zx&0CxpeSmMl{BDwuSQSTc68z)&B~NLEno=q{~vj80anMBt&1*PgS!*l-JKx8HNo9A zXbA2Q+&u&c8r(fda0?zFxI4jJZjtPycX#i8r~7^P+;`u17R9PswW?~(nli>e{xRmL zej695a-Fh!M=i1i^s&ln&7!dy-s7t%B8`R{E}4bJm!}I>GUwK5v8T$TZB#sKugVQx z;DLlq>gJzK_44p0T|s+sdhLF9h@e#RQk@^YUg>$ z7~_#0t3aMfiQOVf~;7SLmtWUGE)H=EI_vav=++nx@NVmwKA6!H{XkgA}qQSV6j z3R5k2;0cq!3!=T{&Q&LaR3T1=?McP5<0q!q!HA%8pI&^GAv{*ua-xkOzN9xTm-b6L zx`O=0gCt!u3F9p5yrVfpXYw5{%0|4ux2Nu>$t+%q_kFL8K1Y(SZB@L!w-SE~4e}wc zz|9E>TV}7N{4)R0Hl4dD*{pZJ*k$)|0Y2Z7_qlUoVd0rLMfc|ww=t}Q35DTgt@>*i z-S4F$XC&FJUP){aLHec zi(J1Bn&o~)Rgx_BE&ll{dza|U&d8Ub%WLKHJZTCh_Rr!USR-V4dZJ z5~}x_=3}Z)BCyf9vYhJD+i9#N#A17>l9NHz#Qhk>#O2zG(z?bxO=_c7E*^UDqN+5m zq~vwE^S#>{csFSvrrtPZwTos(q8qz!{m43XIBCVdDA zM2}Z-qhWjQFsdpkS+N;**1qeF@gduu0!p1_-<3=ExyK`XuwZf3%o6AA&9f(VH{WxB zU`VB<eL(iK!H(`fU)FxSRPyUj=Nr#uY?60Vdj z{tTgIn}^MH;px7%Qd^#{hvE7ah+}rdSC&=)1}dY>r>5^|Ku6(EGKpw*f3_PLc-=h3ExB)Q!3zz@*QT~$uS5p4q z(*H>L|6u%oS^fa9hlGKGh6M+M0IXa*fMEg*+&_H@(528Y;1IuflAnaXcmj6Z=~0=d zpgV$gzxxrtc1-%e2(rC~o!+uXqIX%LxGZYyRW| zfPAbtzy(0Uu84_>hNX|r!tn=V2{-}h;uhP)J~R`I6rkWT!_cZtxoW2qdZ9*Mfy|#7 z@}zI6#W8FVEZ2z4bqS`yuWchTJl#DyLh%(ta6kWAQoy6JoauHDjfGh|rx)uk1*5o&wJ zcS{Pv1K2O5#o8pO6pe?TREiCj)jMKU_tz{v;Rd-hJ_#?}!n*Ps#JGtplbGQ~)YLDg z%9~OWd}QRQfr3E*C4>6i=YWDif>5E*SlLi8NLduofpW!+{wUcG9{zQ17G%(@%~p&& z<%T;Z`X;ne_I~38qP;s|YdoA!Ozi>VM2-JzE-k0~i7p4Exo+<=2x7E&ivG#gu?eI2 zp$3@5^pBS0EgCsCWho3xV6exWv%+noyy=VaIPH;%_%`j|lG^l-{EplrZKh^{0`c1n6uKDkKUTI;j$?vc5yiCjh@OPUa0bbU7^+* zJ9F00_WVIt*G>r|hHQs6+pE$9$~0WW2!llI-1cj_cEyxrnFJMrsst7zf|7!0mIkJX z)^1)Kstf9Hep{kUvwzx#HCV>25RXRg1k&h;!3p^6yD0Q3!6P?r9|Cu6G_bZFuE3&J zQG3&O*^{P+7r`ktdP|ZExj|nd;rgUasgFl8*M}^yJ?KkG?GyP-jxwBPF{6=K%x-T?^ z&#`>>armIk6TSOvuI-gB1=2iXg`U`l8lDDxVTfg!W*`?tXd?dh-nUeX*hYXRJ8$}Q zmC(mBtKC-S{!v=|C=@s##(qnSAB7SDN~Ngei$Y@GJ}UfMRG@6IH?rIN8d)kDq>|nZ z%9szBPMF7(E#FZ)VD8P#T%T=l@ZsQ}9~?zME0%n|{lX-SVf;bSn{wtv1+PZt(ttl< z&|Lj%49+67{T9kj&+G2*lakNJI$qym!fIA663ZKn;Nqwz-f|WTWB^5@L;>mx9B`2T z)}B9#reyE?*!5!$NfZHs_z%$lRM=_CH3W1RC4F+|-nUHLnYR%NBOJvT@4*NHE^+ro zN6^TgdfZWZ;f#8syp?)##!dMKaw|YC7~gXT4vta|{gZ5^tG~Iq3=-y|rd*OVHnjXk zJTeB`;c3dHzLgraveW3#J$0`4Gfb(bY!!QTq-DRRo>R7Be@IdduV@5C#-8en4Bb z{BcHyRIo6MnQ*Rd5AR!R>f*scJ+Or+RMA>08j6;FOcfYE@UviKsf=)F$7BfJo<(}J z>Fg~;K^vHzptmy;I%xN{AKG%)>1T*h6k&SC%(ftm=|89^SHMS`Ahz+r*t?I)b2B6Q zbleL4HB`!H6*K9}(eC(D!>xfq+N{7+7d9aG+b`1Kk$ZCColUtva~n97W z>9ycsx_tW=iYbT#L6J`Gg&ahme|cKG=hQqe&*Vuc;wlJ43{>I|=MmrrhXE@3kFy}q zvB04qp<%#KP%%i@_0dRK*?tKJDDX|5_vf$C%hLn)s0{evrsY5XANtUNq>}KytiDMQ zuJ8b<$dDnq4mpYM;L0Q;h=^zxg5Z|z@Rqa5acE+*@F2{N!&9kb&ck)lW#IN0f4}@x zvr5Gqy>M5cG-uLPUvXO|IrV*9muMYY;QES*b7mk7t3o{K^X9lO=d`?Z>-Q)V$m+a<3v z)(5sTz9*>Bu4@-1IF!EVZ}{)p?Aj)_@11mlF48mzqU+fN+L7@QMMHxiprL;?BNzzq zqM~6aS3seXLZh&-DjA?ZRgB3xBq93=aUPW;m>=qMrDTc@RZsBfqwM65aX1vpn56&V zLN>~~B%AJ>7q@@Y$GbQFQNTF0XZmAoo>XW`^s&I9EBLD3+;)}vZ46P%?%NI zfg}~9tadZ6*U2@3eFyyu+%@#l(dw8nwJ+YpPP^5}+D-u@0<9B{7uTz8C+SM7he9$I4HKhRq5?{HuvCrs=9bTn*xf#K z^6NRh&sZ+2%sX}=R?_n(iy5doR7H#Ebgs_YIcriRNk53K4ZDc@rf|nkIje)Wb)Kc| zJ{wg~*6K#J^(@mav;`sPeNgOK4cXQQ0jOtDFN$Py3=orLl;MHil zz1t|MS~2o2pp4-rPC?j|^B2HSUxb;-Qs%v&zftH}u$-PFeZ`zH#;Ux_ovidO>ysK} zKGI8MB`zt6wG*9`kGDl{4Drz&f^|6EhqTaMRt2#t4AOmPdz*aPpV02AG+KAfI=D)I zSk1VnW)r+oF0fHjU)IHK%SxzUXvV~k5@$o6`>8kii{fjIW)$KI@1(F}hWt9?+3y@4 zq-^kSh`20*!FX#SiSu3^5F^8d&DyCg+>)(E_py9kihcTDzsQ^LmU>C4jnWu3JbDv5 z;6CfL2LA$cKjWa1$A;L)<^FPUh~z!#BC7HJ&uq#cw(GL5QoY`Pe%`JbUr+PNF#o?; z=7Ie{AESOWS0Mp|73vqndW>oM5z%C?6qALb=v&cFvV8PI^gk+Plx@eX>o6RoB4Pew zMV)Es8Q$wVLIKpCfW6Kp<~A8C&*FfmrJ>m%z8^4Vz@98ei7xfOX(Ro) zz$YRK?b%QKgvdRYKvQ*s$bSa+f&jbr56uJuLp7)%WkFE{s`c>E;{L5pQOxKi&RH-5 zLX0al=o4iqV*CD|HmZD5)XwFhC=LQ+`;Yd9pNECs+!7j-IHc6wlu?+`v#e#G?QUjq zPDz@wvd7=(W^aqWzq%ok=tk2Ru=ltjD3pExwUfs)!3b%p<+}aHOEzrkl_9ME(PP(n z4DA8{13+5+x<@cnrFI|~&cI$oA7B-jvtlZif2mra>&W>@OWApJ&&S#J0i&|gW`=Vw z?X_GJ<^Lr+o*HGj&*Mqb#FPe%qV2gFo0l50zmNR@_rBc3hAj9pNt{(MZt_x64s~iG zLP43gjBa}Sou6iFibt>CEL|Ptjd0S^bhv_{2y;D5{kr1$%V@WQ}PQUN1AjKvhV7Fcf(EuFf=$!c&c{6ke|_ z+EX)WI~Mn2J$rp5Z%Esz|BhZ|3KD6)Z!xi7!-#$;ACkt_MsNesX-N_fBe=Ok^bf*AL$Eu9& zf{--d8}C_^dAAfO*rU6Xnen%R6%?yAtEP}TV*@%5Q^nic^sa9!p}QZXKI{4a3&!K|5i$S3c(AhZ{JV??3n%;k zT*d>G^N)*pF#1f5mtJlU^X8f3v+m8ILO?j|%D*Pm-vkaH*OZhT3S! znlTX~a@19?%Bz_LZ-YA?%AO==mztr-7xgyv1i>LmAnhb)>Fr7gpPE$<`3PqM zGSvpJ$u=oHqW5NS;7f#P{KrRUze&#T>mC#C;&hZI2!i6BNt~%vRTh0w z*tyOGdmrsITOGAw{Ch+ogC^*d&0z+rr@Ehz+~)`5Kn_?GfHnkdpkE>l5@2(oz@afP zQGod?>}crZKg2emG@-!BkJaA`=k{VWfG3eCufc2k%0$yRKr#N@mEcuf{zPq8`UDHj zh*417Q-^IR`!hZcY}^=O2*;J$?u^}w>i`5Mw3gDOxCanR#a%EZ59gcf-7|(jhq9^c z{y<&`JK!w(4MT;RcNR;z8P_3urgs7_lWJ0h1IX?BuVdo&g9>5L+1!+xRQp#6cc7DJ zsUU<&EILYT13jf?8%<5OFJFm4^s6RZ<9x>SiYoe-Wep|dA(#5dc9!*;V&sOvXlnVWK^5Y&h}=4o z6-n6Rtj?{@4Q5-W6s81so@wgJ?e#U4Gx0>xp~Xh4XX1FgSfNFt)pWoD9t68W z1W^Z+mH5$Q{kyqVfOifRf`x<>@H71^<`3sr6@AAk7ySV1p!Pw9M*^RZe<=~~ozU8l zt#9udoQ|yP+?g8FnDM1D^wOYtkxQ2ypZL+lt9mG_$;VLeg13dd1dn+9(WM0ef`WVO z@IRIMW6c2eF>4kI+EZqBCFPhnbP{qF5d((`LwnI@M!$3)U}h$D4tYF)3>Ior8Utfvk0Q-uDC}dJ=5E*6vHWY03Xx*^fO>IDRH>Zd=0#l;(2M$N@xbP--*!GJNJPcEDkdqXs7w zN*s)@8M(bris+f$YO8~bxxWAL&jzEmXz)r7L>2S>vz7iF z_NtI-ca2W=@CqL*EJ;un`}>)V*P<216w@6<8$!HU;If1t_Z22FGr8lzj;2%*4iQwl z&MqB5Qo*$4J!|qBob@i5J(VhWVCDHRJ9L)cYD+TrNME;GOtB68kO{!3d=v`5N(#s? zR8j*H78DWtte>U)F+aoFk-qJ7jeQzrU!|e#(4a>C4ua({lXb3cWso14LQko@RzX50 zdG&3SwUVoQN+aP}8x!Og3jCDY5h!^6r!!JgQqN%#u!(_RB!6^a{eZ#0s^`&#Wx(Pa z!wd*Z6kvwKPmdpPln@HTAPBsTkTnn{lC4vBsg?<~>mcQIl zd9Up@iwh?9Lz|_GSjIvsyg;{P$3{RHO0ojn8}v!=8$ab1#hSVrDrH$opGgDwxXslF z^P|Weu={~_2~g}bj)4Q3J3&JP#EX}A{iSR^Z@uEagPtTN4o8pZ& zi2EHylG|V*+B^+~<3qzWD=fQ;u!{e-3fod{qzFZm3xiChK6r+ShZkkeQk3W?2z2AW zoTI?@=VvkhiiKk42GHHV6${164j{(=sj*O?i@(Ex_`rw)xPadf2^eSq%7cQ0eT@J4 z3m6E%DZs(|4>0h1J3ldB5vJUUm8$!V*#gPLkKwvKUu9+ru*WhRyBt#zUvp;<%;FWw ziFtnOly$5rUutPL<+7hiZ{HWBYE*d+<^ws{;BbNu`k%wbHyWd18w+)vlj<6LH7 z{uzM%etr$O?*Q)|2n-s9O&Apoodg3Di}bf!8VcMyqmVp?R58W5Km&ECuJ7KHi4v;j zUWHhcpuKln>&%{&3@VE?MlWyv*~i)2Yuo^I-g_=WQ+px3x$9z-t$uWR&qg#SHueXQ zV64DEk}joaToh3`(ryTj)Fe8R;!E$0mvmdXWyuZhqLR@bNlJOzq=tq$0wSx+A-en) z_nz+0%Pa^*NDvtVx?n6*3@XMCy)%jsz(cS)!*H0EfmQ*y{l}n$-!}uyK7Ryt%q(am zA}FL!MU{R_Z!lr>08I(&;KXIPmdqvlN=CJh-?buQdht$;s!Q~dQOzY*0?6V)I8FHC zbdL}Wn5qZV5)ilYTi!mRBS=& z)e=KyDr6kyk9f{?roy+IRxNRdnjkew->jH&h1Rv!hm4=e7@({LW9Uql3~KH4ZgN~@ zLOc!J9=-^9so zD5S~`kmzJAtinnpA_j&)4AN6_W)9&8hFCOL29K6k^(F8LxFD=p5{<92#D-XvOHx@wdXQD{P!SuzRVs0XtP-i)}q zG$$&o`H@mB&=H?f3Mb+-XR2ZD<@g%_ISzJD3dyPRW;4xsG}4--qUYAf;v*CngvcIO zR|j&JhM;oA<0!~&fKBeIg$(RFvefws#ihM%t=IuWh^dS(UUo>p(#? zJ`ss(%Bz&=Tq4u}0_&B7ADEeAy>ai`05p;cIemfEb2;Bn+9Z{08AxGgcIcu?*0Re( z7%Vt*B>FNi? zj=Nsd0T+;f-R-REi~{j$4+lxWd_l1|EhA6?P9NOLL#wEdr=k&2o9U`c?*HyfG1Y)JIS zwjV5KTN%dB{eDj%n!_It0G3Zb(GdYaq5=cpPXh4~9ifmilZgBtS17LyOQDQpIO> zkB%!4<4&ROq0iL$$a}!e_l+1`Dq0b;e5-zsZs+W<{SzqrC4zdg5&Igdz0n-pg>)~X zRDrGSS~-T{)jAHTp$b>HYu}72Aa; zxNZx2tQ?e4W0O&W>-@FY zjHh+idJVT4yr3%y+kaE?L~qNDs;I`~(4~$pkg>pV{BOSsEo;Fm7};>)^mXrR;MVk< zAbowa3WxCGP=L91QjpENXDNRR#}UlHj|_7~qVxV{yjx;foBzU`X{@Q+HR!oS=I;xF zRqr5u?J0jn0s=i!8-S}3xT(kNEq@a>5NJR|Dh3KPI-4*S2`V--i{cMq^H?3=uX7Ln z{md;&X?4jj*|M?2=RD_+?Y(1byE#qerUnImT3tS5a^; zI(YygbiHOt*3LuV`(C>)M~7Qyj?)L2*+^Fi*O&uDz7DBu6vHY;`%K>LhF!aU14QfP z-{ZnB6y}#JiOZSX1(C+$1qsMp|fP#Ar@BZT_fM0}! zK!w5}Rjxo&0zBy|52=%Z9YqapHZ(CES8FW!HRsM!eIEUoaZFz-|IRV+mZ-7K6YH z#VU~VPT^I5mS%|rjB5UvyEfHzsIOoSOcJ{`as5F?*tiLmO0bv;<4xM)*~-#5g(beh z+}4LnTLA&9_t|$)(t)&3wsU5YsYJ6JkB=)^&i`Nkmrt`4jM+%A={|svf#zU;gnEz= zK!zo_zf~3l3u_iCni3=mI_Xmb5)pecVMXN_C=6y52VcL6(Leez0QS7uI9T&k`%_eC zO=LeN{1=<0!7(!ixEW1q&)WAlSG`N`DaSEHUnS-m1bDP^ig(U@cw2HZ;dXPT(H*HS z290|i7^Y3Y_l9`4zP{Iy4n~MhC+bjNTM(k+c5sswDG-`mCs~N@J^8r@1QvJox$X$8 zzXqnRN_L&l)a#M269)CjAMDsX(C}?~OhPc{?4H>nQf0I?lD^|$)lr(i)*^oZ>1^6g zKMN11rc`czLRvnN3^itt9ZMNXwH++ml9dJ`RTp| zaRxt4yZP?=J-nEv=bSg5eQERh5BzrGQ6 zUPR6xcE0HJXvid#nSLVO96`w0JerCHk$krx-W|w{+;Wh%M(%PC`2cz{wFnO1LB5C5 z3Kh-YY2X&GkjYV}K4XyvS1N1neKfgG1EjK zSaKXkW^bX-r$(6v(i=t27d>JG9zLXS_z+rm2@%q$wm#L)clYg=I&9=%%{~Gvw)kbO z!P#HG&x5sr)=uFvGoWVJv75%X{KN^tS}5rX$_kxcsctQN9Q~w{?UpZbCLghrjz7uE z^}k^^0=dtz#%-o%+3fd2?_V0~XLQ1NW(k-u4$C>(gKgUlz^y{#(J$Ck!;zWF*> zW{MEc>?TNM@ggRNPd~JxYA{I`78ZW&*VB7cNRQwbz`lP|NI*X_0MPH~p$I_oW>uiH zlQ91&W_?&kubw%+m$pnlu;vQSeS1SUDRYGa_a%w3m|{@_r`hcmayp zN_lc>yA;kqCLJh;2=7SkZ<;u^xkg7>1$7YUwk6A z9oJ@tG&z?FqN80Xt-|bL>>Qd7Cu?7|?EaOfA7j^e&`^_YsByz$TGl_r)X!r>Uj zP((01p5UQk5RL?jh_SzoGVYYzuyfxSscR}yN%v9}`cfBdmD@<0KyHu(7f8^YX-^0+&R4hK1|#qk6bFIcsZcpKCCERz7X&ShYiwnz7?1h>#GE3M?lg zZp07ks;#S=nwpZ*@LnYbuCTeWfrNwvT)__fRa2UDE)p^_7Z(?e4vH}Uw(ZjxZazLT z6My+{eEj_U#U&**H8mlEW&zpd9*4qn5k0FnH#bE^Me)l|*XpNq`t4A!>%Tm%-qm+K zu7d23hZ6maS>akD!^7VS!UPlrQSr;lsW)C3eqMn)#57%46; z4p(8dr$>@D!OhJrv}ZLqIM_~FOH)$}d5%Ux4@zEFD~3XBHQk z+%9W7Qd_zXhzJQIqN3s|gL=Q|ES;RNVZevH_x)79VH?pDTM4Ae{E)vbHCRu_!p~3d zhQ|3h)%hGK%mD3Rle?oM*^fOn1};(>0|pJVQ8yJ2wvxssLnN+d8AoLSt}jEZWfV?5tL>0%?coiW{i!Eefjcbe}BKQkoK$y_(=o=gfCIj%)Wnxe&71tldVjgF3ne-fV4(bJQBwM1M%k`D5N*FKH(y!eaZYg1H$0q@ZtTvATzUmwcZ4RNh|_Y zg3s$|gdj6J?3WdG81YL*#ob3`P!O&7^Ws}%XhBOe=#13V1tlef1O#)lvp3h*%4#i5 zP5!(=*Ih13myu6asV(8RI%Td_M2^s!X=3{^?Xeq|wAV=JhxYE~Am{5l{IhOweb(1a zhOUi_jBeBWlUk|K6MK_#b`Hb0>Ji$|#92fyt$ev$Z~axnrF}mw7Di`e=;`Rp&(4OS zsrY^7pP!#Ef367Jcamc*r~>7JTQn8YBali6v`@p8>%vIL!4t6$ieL_Ou(sh|t z+&w(ro!lu5@xIAY+jPki)5%z8q{LmKrU@8uiQ-5b^EC-;niB_4Fk#DBlzWifj!#I~ zKK7K-^Ch=} z8F~dTwRw!)FGN_y22Jxiojqu2PS}YkG0(+X5r+6sP`c8n>idmsMZO8GT3~tItxhRK zOI_?z+iJ1V+D0PJC9GD_r{TJkm6qzG4w`c>ZumZ!I^I0Ar#4Z|i{BpM5XrlcwzPcu z1PqnMxw%fm3P4&$OU72nzg1|7OCUP@ZloT1-Ki7MqTb~V*#)dC=eZ!i=mZc|y^m8l zyoov$>cbxG=#5=!3>(3&cf)YFz}~V7Z1#)H0CUEUAwSsKLJ>d_#dkiEkX29Hn6{s*ne#=!}wxW7`1f2Xn5wY0+M>rlNG^+tz- zY-Doz=n?qXnnqaotFU!Fg^BOZ$FyQr>|UL>hT!$Uej%P#-n2x0 z11M}P{IgVTZ71zGaiReiJ^t;$`(<^TJ9u73!9b3k@;AnL^B>L%ZK(YPiWi!?BwMco zz9mlvaufO)swo9dTMnlF90E0o1OPBuW&e^D_@fvHpkO^_W8 z7uy8+Eo%Yg5aOM*60Y@AT@(n`im)^DH{~*7{o);kFD#3bk!hZ}i8CX`PUc`26yhAQ z_C9NJ>Zg1D0*~%mQ3w9GlCyZ){d3q_zU`Vmq8l|gwOF>Ea?Jv%CknAY6cysr!d)B1 zEr*&^Jn|02)NfRXqMVC{I5^9bFkZ~Lb|MI<3vjRhuX7*%HkvSr7NXz}<) z7nEO`@)#ZWEY8OrK{)f-nO?#1cm`G-xyK@KV~ciLyfV1jjAKLX6ScbPInK|275SWS znt$X7Mc%`_F%5Y$3zxZ zVO6~y0qB~kr265RB@7o977jRKp7|vVUqE9EaMqktIWO`_h8P&AHY8FfSfZR#&8-GJ z6GWEzyJJ^Ue zu2pWQa9Hh_%9?_A&R53}1@x#-g*-3z5wvwPmb<3aPClINR(Xv^;$2!0aN;lGzk!`o z_3-3ml19f=3~sdkxCO@U)1*I;sPPusYlvTtc@9Cx99Jsz!>tTOK zLC>?(dpLoa#LUlJ$%*Dt$)5hsd}JT$CD0LWJ_rc-5Cst>@>=ghwbk8@WI0#c??`97 zI_=eFyj{2&!7ta-Sd;9vXf{g${&At6YJ*uZPKWu)5QG`q-8-?U%S8RA4- zB1I2J6{DXsF@>O1y2Iw{lkXg|5DxY;gh+-Eq2@;JkmnHwCydvhcyea#KZ2RZbksp3 zCp@t57f4ghHNid+HqR7H)voatj)eV0`epRAPVK^QArE@R0bQnZGv#tYIAtdjEn}mguykXm|8?$?J6;Gq*HJ^NpCbDe<^~y(9&Y|5ZcO@=EX}mN9j#xUM#-SQs+8fwF zE23gF0a3~gDvsnis5CE`veIi;vLND*pFySRCL4*8JNS;Z=`>HiEFxwRG!KvzBqw?f zYBx=01z)wf!q>6Z-_P<4zxgP>!zlYg#M5ZKF-?2i^Aw!UsU&8jy&SnKCW=z=43+Df z`m&4S3(x)@XfnPJw41@;i*>10UJz?Y64ue~_=Mk3+K>bsT%b>o>Wz|lqq!MvAqemw z07J7b^kVqg7QJabU1&Ywe11}tHl}J-1(m$*ZGpUZb6zJ_Kpo!J2Q(-UwwC6ovf$9@ zusRp*O}io|HPOy}33|3;O@E2fOpH|>`V@RwMhlZsk&Imus@cZ@Ys%yKQx2Hac1-)u zCn(_ZlC4Spx+&NZ*WAyEp%G%*#pg(kB4^c2ipT1Y$H_*SUHaHb2=F<$dL^_~-}g=8 zo{t~P1&5HPgjDe$=;0mkTuKT;iB?FyCUW^wHSIZfv`rQ%ux7guMaYM;T_QbG0h^`L zL)5=6TaXtS!I=?uAh0Y>YFU%bfayYEHK^}7M2@Cj)Y4D<;4bNBKZjo67H#KUbVINOo!tZ8sEvfS}8n4q=mRz0E z1ZcwgdqIQOpN6_ja2R5lXpmyD)0y%?BtN z77p4=%+;K7wK)OJJ1H|tB5IS!pIQ$R1=z4#X2Qp-G!4=3)0Yp7BdBA?al)hW(4LY?x3*_5u@ z3b@mb*{N0`@-!HEcezt?eRmt~f8f?)hkU5hhY92Ap-MD z_};;9oaU5F7kDnT6THDHr?Lgr(sukw9;>Hzlnqzo%eKa~l(NcpW^eSEGbrXSPGa;K z0$Hn6vMA^3YOk(@3;Kdlrx;pc)(%7{*z8X#BZ}UCm4Qqkq{tw#;&kz)-5!i;kf?dq zFqG9f+(+1|1IO*dxHTzRr8TfDHqS&9J}NMabOC>smr1aOZy%6>d}HG^lzu$D&|E76 zuBC9g{4&|*75W;5Z?k-__R@aM+>=8n=+@A*;9?Qd18m%4oljhus2a{#6ih6fq3`CI zarV{N1XhO5UJ$rBj|AZLDjVQDZGmdkqmCElEs<#@NRX5%@tXC)Pjq|72sty=QhI|U zqcWaqL)+uqAcO?ZZ01_%-3eLxNsj>eH5ErwgUdTQPp>-yZ;q9HC}_(3WN+ma(K>z8;Yh( zdLcg5Vq*17y2jlvEZ9Di6cpOJfYKT|{u(JcVBTEjWB#OUTVWl#K7}vn-_3 zy+6ur0TWbmg1^c&dl#OkC4`5idw_(AR$D<=>)E^dGGC3i+A%q^D-I+7UPK8FEbfkkA>$3${z9hr{FJ^{J`FMXa-Hw+7&Wlo12a z>k5&1i_iHMvATx0b2nkB9S=2%?0v%^op)C0UYf47HDS@ix)QJ&qP>v7W>{=(ftRZp ziNAPwzi})!%-CRx>&9^v5_X%Iq@-Nc9=70sF8ieRlRW%`s+_rHs{YB4jynxw48Do0@pzvqiM#NqFw|1pP=xh{mPZqSy!b^WHcVY`Z*F9=5VcpK_yYv1bY z&*T>|5+s~AHkCF-yq=uBp~D$wc>Sea4x5qw*=wXzh>4GmcKH5jRp?+s9Xu^O`K5Mo z!&J$EuEOHPrH%R2MY5EUo!d(S418d*&`aFB9O85 zIXPX)4tJ;GPLI9sQ|F8eBs8$yWVsA?O_H~5Yu(RgB`cA|T5>H`>+%-A4DTIR&a)DJ zBG+okH<@=a7uz|)rOQ9E8v!-Hm0ccZYMdugiN1<3%%wZeeGSzCXgQU9Y-$6EnEwcvxRj-l-O=4e8`zEu}Qo@rURcTvlp9( zR_(RN{WIix_

o1)YfiLmKY_YD&XEZ&`JpGopJaTCTw-IYOsz>4NDrgnU+C5~$}s z1C!1m*lUKN5~bci!f9U`%+G1Ts-&|LS87f`iY6p9nN2Zf>`F6S(Yf#mAi9y0FBd3P zWM*p9GR1PLU+LDpT*Ak9t6;&NJFX7s7@_rt;xrE6PJHH9>7Y3`{N`4PkXA2JACXupwvy+C`+1B*#X3Y)PyK)F=;HC*X}RSE`|+0j7Uksmh{XSc^{ zej)P&ayqBLhgW6P!lFQffbI#bf7uv=4H62da(~vk8$Q1Iu3e>K?bR*19ZI`elKVH^ zLF2Eqr5G=)i1*sU$D1Pyw{yC$cAdjo^)1s4sNdL&M;J=u`a>`|V_h8+| zG_uor5SFdwhOMTJK%9NCIaugH*B+Lg7&6BF@%{+}c3Ib7+KpWQY&WvAbN@SbW0$s8 z*;?%rz;0w228+zTf#Sx|-_Q<)h8?lN-s<@9$_5@%&UcN%yEUh@nnCmZP+mKj2Y=;r zC311kc;hf}U9Y>t6LIa%r>gbS=Gg1|6gUl#R7|b6yB&+I4YwB%f-bDQ%l@NiUI9+o zpDL5|?(f=DyEI*oIO#>V!r*LC73D&^_@2lz3VDq0P&d6HMBe45Nh+8yAVkOHXA5?A zVh&?FD34TjV>wbc#qBh7<}S^CdTX}h(M&*dSmvF&ePQNNtW?tqp8uWk_?WD=$hiIz zgcWymjE?b^!q3#I&zsTv<}ik=rawOvEBs!C&S&u}5t?X9C|$quaZ~KZd&@c;Ilfec zH=?=g;Iy)spTPPx^#e5(Yfd=ZwRGaEN0mRvS)yWL6HGuVpgh--d8ZtPwegnI7*AA7 zdZT)pXF0QOL=%NBikgDI#NKUmOmwKecTKKl&7+C&Qrt@XTM2~G zF)pQA9ut#(F4H&1&#g0q^VStZ)7cv_|FC9_7DYNF6 zoNrav7|Uxh(=}LapH*b z`}e4|f|`dJD9@>6+AB^F46N|yVe%usiuhrc z=htJQwqIc1VIbOs2%DvAvP#-wq2UxRDM!P7&k*#X!UsER)>M6)r0~$}af8Gl%1JV} zK8~D`Azt6_5p!PnKA}ah{p_{p*s!#2##+^D^>?orbXC^1pV4{*IjtZib&{&}Pn~*5 zny@FPs*)aYY-ql6juVr-Ezv#6_V&0w=$NHa43zbbW)R*afK=Y9L`RUNZFqHzmI;7G zIVxO}7>u%pPVL>Um97|gE^0+0rtOB(C*I`yDX>R;syeaf$}&$`(0nMzy=6*E`Hzas zmO}%t->cp~)jg!rJ(Y2L=Vi96>wC_D*?mvVc6J=Wex!*vCOpkfHKzCV-PjT`3Fj>K zh^EzfE=O4{+NYQeU5Umq)D41%7tWJweG!YHto$z|=>qyyDSZAHWA7NFOW1Uc&Ysz0 z+qP}{9^1BU+xE;JduESq+qP}n-+tcYBq!&4lJoxQ^wr&|N~N!)tE$&p^+^u3_d7Kr zA0=YStKF>vZlDn+f9DRT{=tkp$e-O(WWnwZ*fzeC$j$Si);Z+dzpfsUFQQ+I(2eA= z`l^OXcfsc3!XD;tEnpPg?*PM_JY|8v`DtFbcckhFCs^oLcJeJg5t~t)4m(o077+mv zJwfkq)$OTNuJ7QuxsDN#yGQeRm)bvt-vVL*6;$i03q_$VA-cy^{heInF2i3KuVcK_ zDb>JM!Ojd2F3#`1}BT;g!^9|m)8ap*;Rw>^F+VjPA*FwR%@WY*G7%ua@JxcB2 z%_e6#F;_k_+q*o6D}`kRBo3Ne!$pLQQ;CB2{n0Ae3x;SLFt`ie9TB#erUUuKfkZ`FM&PFJj7!kOmQGrw1En17 zW79k-@@kQ$k}GMYL7%n#)sFZD7@f*&7}|niB2A|AQySj+k2Bj|GrkQVB!?cTglBC? zvo%Eo;gI28$@(5?W~rf>2g{<|o)qsKGqinj?42lKrMCDiAcBVq^o^#&xgo^rAqk`} znE0lk(1%OK&6f$2AGwoXFoVQ`>fS7|qo;EG08pR#Z z?Tiv1}`OdK5B4OSv`ol^R{yPvSuj z;iL^1^qHUV)EID}xy}`~)wm;0nW|*e#)&^_m>YZl_H(mvl(pctD z>7L!BEgA@qScWM6>yQg#`uO?aoAISzfwtJwB+X~NQ2*XPB`SB zs;)FPt1r-2Dw`ss`lszH`#vSWYtC64$k$4XqYHHR6QU#9tM+-9d{DCsrDjw}6@sen z%o-3S>qU(Qk)AK+f~@Dv>mc~oRhT^}lGAUC3;$k`UV`y-tQuQO9;%OtjTv;1?M!l$ z=F33_wI{VjtxOP01@ggDrlPmp*6H%~se6(naKx8kYYLg;+4gI^jhD3eqS=^<9cuav zh7+gcGVf)%= zCut^{zDLIun*MEcqtxsN^VFp|df((fKcT`@Km4-|wyij9LP3AkV2s8ZE075{gz;ox zo`k07%Fx|UM}?O}_hw5H*se|rgu*(GJ!A|znfN7Poo^%dFg|82{uri08EFga>5*d2 zZVT3?7k6GPP?ZhwLp?OyH?!8B_tbQKtw-@p8T*a4X}6;FtWWX|g{=G1_%w6JJwAt- zNAkieu^!!`#tPC^=veWg=?u}KNH1)#gh?c@d5JwCd7X(cXD$xY5xz&Uad?&g!g_`U z-T`PzFM!aJM$=@t$1ea{lP)biHXDbOSW7m` zqc0X}H%vLVOISi~q+$iDpTqlanxTs}Z6 zzOHJ!$}%_ejRU@$7u69D1fE-eIAS3-&GY7&kQ|s$1#+AwcA0mt0e`8rs$Z5y)*!n` zui^lToLNtzUBxOSKmkXwxG>cuN;?+O`Xud38xy8y;LO{H$IHcBtFcRQFFbR28AgKVVRX19on`#xC9#;;kaK z$lNOJ)ToUqnx~lEc*}Z0Otx>Nubk(kX?}9OC+4PM9|CFPHFUD|Q?&G!SdU}F4L6LE zamyroOWv4k2Ij;~dln|S%UP1(WKvb)R*EagM5!Q=ND#3+G9)Xak)Yz-PNXe-Qno_T z4i9cpZysVCWlLIz$W*GIl7%CyMpk&q(Vc-ACVLQ+)UXC1FXy3qEuy;^wW>~ChHA!C zA@L(RK2w;B4l)Kh)n8P{0T~h_UmjxQaP{gW+}0^85oEEelj%H=tLIxHvi;UR!pKYM zEkI4%#`j2uOR|E-_*UT3ZXTxNmsI;W$v^*|UFh_Sn_v3o{kL`tt@e2^bD;A3E8Y)t zU1x&60UloafEVYv=LM6;!eoCNvtQ45SHvI(sEKI%eWWrB5A~~BYiGlCEG~Lb{1^R= zJdo`1?3U#k_UEE{aomyJ&;94;)eF6!Z&&!m)Au{m+oYTVWn|oqz`!FOIC$hxOy!n) z#znvS6K=?_`fdNymK(ir7AC0$QxfBq1s}gIi`HxO59hYmkHGU)Bx;#7SBC`7Hyz!>++?0h&N;g6MUn_u)#Kpc> zTIk6|XkZ3ex+7Z;$YAFepsMhe*6S7mU1fe)Lauob)&7@Owuh)vMND1%yuD0m#&kgf zWrPg1t@X@x^pbWOx+!y1E~Mc$qx|8Le2|3dUn+NqyqGT7aSA;Tz}KJ=3FzuPsSE7-rn(5O zy1gu}{m|(pah?8Gm?xlh)FT)I{fXT0zwfCQKO_}Fkqy^(*%?5dO~V3U(18`+czzmJ zuL`d#Avi3g+r=0CQK6j1VA<6O!hOa`jZB7@0#2az z)yz7*K(<6)vKLM^!==k@zKZQ5!`X$Jr7Xlaxs@Sd!w$b6}HmK3~Ei30A>Y7Y`9)t0*JCTKuF59USoVIH` zA`xH`c9Cl7k**q5_t3UU)w9zmG?+w`%3@uKRrLo$XED&g%3z%)bm3Z;ztR0A6DRCr zV&rUVyUp3t+i&#}IOSfLslNR& zE`-rwV>0E7FuF#!5GsO-m_>c}Rrf1&YFXkuq{|n_<7M(%;`GgEBz~`&hHuaH^6w@T zRj~D3?FgzUbu7MInTI8j-su~~Ul=7VuE|iD)2|LLnG`CLv+*Z?P010iNP(gdozwm{ z9hnH92@ob+F+C)js1w)NmscSfXid3@Q~|dItp}gqC?Obky+p&sUV`5N#LYU{tLAw} zkc3$1(c!_XZz`>Nbp)O<@`%B#y2J0yo*1DbH1ie!v?vZOA^nIISEGXM{x~o0m?R!) z2hxe7&mX1AG4X^rF2Za~i}Sa-Hx3K9pNnaBrSFx>IqtU&3%rd+HNq8T8RW&g5@~!F z0;+Bg;t_n>z)s^;7y`~PUctcfxoQ(M6&{HNm}AX0XW=Pwa$V*#@OsP5-UAsppnMk7 zegkxbAWyhRAbDOa)I3`2+ukFmv04q@jr=8FNSEIRt575o?qJ=%^gF=N-{-*btkVRr zKfze(;P@A-Q9YJ!lskSvCUE{-{nvgD$N$~WVdh}`-}G~)wErI*0OLO#K!v0m2AHeu z{|g2X0rEdE0Le5}JE^U%XRyhAK4!}$(OgND;>2Ogz=axm{@g_g8K{9VG4A}9Qhj|W zIN5*goTD4P?C+2M8(fi6Zw9PWsd)JHLf)_Y8}w2#<@ZBa*}Plh&Wx-Ea`~j^fb=Zi z*T0Vr%W`<&KD&c{le2Q+35$$LP2ax}$kC@DmkyigV4Uzv$&vGSPSUqkKPWBTq{)r0 z4!0otWVQ#!=Hjc~;yH{Kjlt&~(P0u=!>0HUI{h2g#1qQqM!UIf&OTQ7uV7Eie5-h3 zzSZ_0Ve=mkqGFUF?C(kFIsD$whAitTde`rB7j|^JFA@{S5z2D2{aL;!{oo&2w2W0V zDFZDaq$Yk+SmGA;je*u3j#G6MPx_0Tr8G5%ix4(NFz&G&jf42R%$del8?BSX(2L9- zL(Qe4SQqO#)nQB(hglnoO>$FNo$1*AbJ9#8Dy7M}LX@I4Tr}Jt%s6M6u|DspUdd`8 zv=B*4`%!c#FElA+L$mXO*vu6_Hv(p0WC8j?TUh3%>K6diia$Pd_YUmTAB<9_c9npZ zU1X%;F|y$FN7l%(=n}Q%@JDiagx+yykyPSukY{Hn>Ay%rhw9AZ_%kAr0P=P}v#=sJ z4^vt;c{TyRliOD?+%iF(g-B<=O!sAUmLJG6Atlgw4yCF)3Q~LaTb|R{^aVO+36(ZJ zU;F#+C^KyY9Sb1CiM3_fmyunW*^mQY$-cIGBNVDV<4iDr_nsMd02<(N0fH zHnSDecz1fstg#7rQ;UFq8Wv%61N3hdFuu4H$(^H^$#)c9UATn;hM#}Cz1<(6snZeJ zaON?0lK;l)`7}sYDC0fMhEIZaErz}$%EOZ3THe!kJh8d}>LiW?Hbk0vgx?SXMqtSx zCO$dZNcnaqbAL2lOu!YxUrD@`c<_h9n+$lHJt6;cqjgL)Fm<4?B*_p^A6sd$Ect}2 z7Uc^X^i7}iqxqIu7TAAP%`nn|wUGBPk5B0@VmNohm1nI_co`%yrO@gN8!^TD_O#OO ziEzu-u3Yf45g_F13N{L8%p_3kmgOc~>El!icS`U;!>#XZIdrYBjiIy)gV$zZAP#uI zxCi`kpiwAVv@B~fA}TXp8eA4$tyl60is2;vtXbP?W*b-v0K5~x;pDw?Ri!T}2_Kwt zO-F@=nbvFboiXzyL6XDI(Wp4udeUTON#3=(xt~^WC_29{yJbM2NTJ5IBIOP3-RZfg z6>zN(?W^aW6ASA##wK%7u%lGrHMD@T-ma0wdu`40{}r!r0h^n54A()YcPgrRomAo+ zj1hvN->0Le=zqU4X)ylRNL5t!p0VA0kw(tan3(utKX_JJB{Oz77E zbY(JBvM$ZQB-kmIl@SS2#HSdav-e6u<{x8OsNKKu=KXQHRWN&+%-$I|wZIBh{s6*L zr~*2@MDd=XP?J^Ic}iJfC)z%aX7+pLHh&uG41?}3IvtWPxAb@T_owgj85FLUyU0Rt zMw3Zp3$ixhGuKER0(;E!Z6mY$hGU42p9#fgNtk!O!C?~Qh0V0Ek%%oPSC}mnjey+1 zh;0xU4OzU5xj65N5{hT|_L<7;J7}%%I3AsW5VhshY0V*wwq?I4 zfz3$daGG;;Rb|=uH``m}P2Ty1Sm54QSYuSpe|f-2aC4B4N_w0PH5>3+ z#~aRfpiQufKj`mmM-EP?h&9jc;@cxp{!!vgk(sKK_vCR!$8#Hsa*liX+5AqpO3^X~ zm%QD~J_#Z=@;8Kdzq-nwFamd_aEjFKJE_0XDo@+WEO*DuwNi|u;EJlMZTXSXz}JgM zhjYX-6lDF|o#C+)cPj8hzgYq0hM7lo3>)!9C2W?y&#&Z$mTlC7kGAjw7zU@rVsrjk z8hUn|`RYC=nX+^{`MHxiHD>-0*uigi(;VMNrchhjKqS<%nkznJgCt~{Xq6c`z z3_DsPe#-COHmpj*Qi7@qunnF}I@&Fvj%eL?rbV~WwdsWZlHtN4T-Ce8$VJ`#tx}wJH>8;gJ)-rutslRDzHQ5kp zF77zPY2j$LvGV+zCylwiHEh}NB<)5w01(r$CY*5EF#{VCFZBJic1(_chDz}MY}ghw z`xa5x#F+NFmA-}+6GlT_6lm7PZv+yJS38!)_*NL+fmL<+FDE4gyi!gdr9uT;KKJKU zJz_>CeEeBjF&PPq>y|lSkzi_?S$&tf#G{o+rL1Wj0p~^MJEyI8qa|^@I^! zEK->d`LI59+HP0gQGSYPVA0!1J83@$k7uT!dXC+26+<=-} zpDm`}A#X9F#LW3E8-uL*f>;lkZ>!%N3ay%55%*RrA#%8?U1+NbI7^|fxi|D2Eh)jF zZ99IA0QP)8926J6$2Tsham-h?&48XTL!1axAdO9PDm`S#U?xLOBQAjJTNa&CTcHor zPZv*|&cTzoaJ*jdk5B2kmv-t_94Zl9|DEhz{%tScH@6?W^)Y6jw1>sUZDgpA;Rw;c zm~3Vl0G$dpg8v12h{wV{%1yqtUDS80v<2|96pl#Zdy$coL1Dq4-0$OOZY5NNHxNV) zE7n3H$_^o|19wTyNq+*$x3~_XznW)_6;A@W%X~3BPNClZ10TvlmxghBqX6TO4^!3> zzd;J-83|+*fv;uQ4JYcWJrowbJ4F87oNxYkUuZnQub$PyvXyUMMd3VLHy8&?T4{Rp z0$V&eo{*oc@m7>SNXEhuk>2A(F(=Pd`tNp$o`cW4ynae+teiJ#lSU5Av{Bw;AU$a` zyw}lS%8cd_Nl8(s;O7nl>7cfk-2&fa({$Dk&9ayK7JWJ7yWlSrX3Bxh} z5fNKvN44tMl$?eaGAQ7JX^`m z^&t0RbgSz0bR_LDpLyzjn4$q{P$(33$=cM|5)aBx$p;}@Vu10h)F}KL*5lXygjxMz z{9{nZ>yg$~TCf*pEevaniIUso&Ca~PMhNycT}s^Ju}m2Kr&+u<5|!pwkzT?(6_ujh z{3k04MxuMZ4j`v*tRRWwS1*hGlNww#&iZoOkV9B#&d&(qNdKh#K6sbEZx0XH2~LHJ z_OmIz-pHvjZXvUUAnrz9fQE&o!F<<#sVvu#)AObM`he>ou-wV^NW~@0szCe6FOMJ# zBNEU_Z-M3Z0&&0JuB^bWM-MjR=aK7>Gu7d)8C5HquSASmb*37EhG!OCn}<%W7=*Oi zYFqM}f-miGUQy@=hJxcr6}I}%PSsoqu7b^#B0(WqZN*1A=rxI7o35>dK?3^$N?id1nztteEUFQ_puzkKfhKI+|QWYHmhBiH{6eKCXy-To0tqBe=SppQ0RxG zu$u3WT1xfMnrl-6bdr^*F`CrJ)GFTYFZgr6-?#2}$bUMHWtokNcVEL`^@4vjeZJR_ z52@LEGiq0^{}ts@FGhtvp+101pwa90+K>7Pi)uru0BJBEQKP*gf&t#BRo`gDu=ks- zt~RKpD%lX_r;QtZf51Oa?Rj-kWNiBkW#HdEoRN#HlBFFc8W^Yj@laH()=rJ^qxbW8 zFNZ&sU^d8SS{ELMgtK%(!xJPrLHi9V!@PsRRuAR4L{U6$`G*5|alPu#IE7sFFVb67 z^sp2<`AoCm<-UHrUd=_$6BM>7oB^`Hy8(I6gB@{w$%0=JI(zqn7_%GY@&43r<4ppy zJWkRT`rav%h^stKz^Vt5$*=)3%w{G<9OJ>%{nq~+JYrLTqcX_xG=udb)1$1@;XOh9 zA&Z3_t8ot4&4A?L5>Hi39k+Yr$$@M?;feb;(=#BvHyEE&1K35&{}&|J16w}C zm3#sQtXt)P)oN5o7fm7>xG)Cdp%>21m$YG4?Q&(rCHOWHdFT0IT1cS@qrifpBdSm+ zP_&3u6q-7buRg+$s45Rc2?#8;K+|hN`YrKA-0u8~(6}6Q%xvjV`Q&)aSvpcrgwlKL z;4-PiQ|_pcrA$`1x1E*OT^Q`byAm6~*@*`96Iv(UYH0RU2;x}Icvn#*_J$^Ya=Sl# z*U8It>|h!Aq2nvHhQb4_D4h+-ftp3FXpdFe=e|GSwxQMTnLd;Zv;=LEZ}r^B+z2H3 z)Rggk0#OqF?d`-vgP}!|T)f`BP*I;MT7mBxjYYpexgb^EWCRJ*W^~IW;!$B*Qp5;h zM82f5uQJz-1Zh)<84MFtB3N(xPvc3mSP2GX;Ks_xf#1rjq>-Pr!{=bh@zT4$D+ac^%@ZoCry(NIH4vIzH8TYJI|;eFnG_#6W?0{>LLwU`!vxQlrG zSz%U6%&vK4G`(c+xX#FU0xzPr55mMYoa}H0;kO;SS&>mX&2ux%d#Xc)BU~Vvzco$) z952Zj#WgF5$A|yk7!XZKv=ThTnP@(xD(JiJ5Z*0ThJ6S!9+NA}bDK@280{bAEF7F* zPK7Kk2#{p->|hqSI+soiQ$5O6k%WB>fS?!>G^7{_!65}ctF~Db7-ErKl#_(+2$^u& z*auLZC=-;!zsVE#UVA?CV6W$^L9_)>>` zhRYKfr8Y%HuD_0bH7AIH+bPFbY2jN&6Eo-T<@M)oN6db*Qt_ie$VB6tqEiqrRLT`5 z4%JJ7sHC*R*GswN;9dbWg|r=%i%kM^JHWJv+b2li6%6c7VJt83>wFB+vm^(z#yr>< zV3oEY!l2TTX;^!kIVky3IqAx9#*H%LLKO&qgigz~gV4OF40!7E5ueBtV*)GHClJ=G zF3y;mh`ra;#a{nx$Kqi{4Q8eB_cEE``>>2W6QY#V*YXRw0{w&f?tU%O=qn7c5FCqq zQ`un2Q-#tkO@dGz*TijF^g8jWQ*@vIOxV&-sQBv{x(3U$yh|dCyClV1hS)m%Or4Yc zGDPh{LzEQkyj%xf%H3L^dGc|H?w)8tf$Q(Jzqtsx2Ra&h@71f0uw^&z_IPt4Whc7y z{4nvqFE|8pa;STO;mrL58?;sVZUx~8IC=8j0Xk9i0{0`kCarY9*;q0NomE0*|*Vr)@je~r0HFfySeLC^3q9Ftb*@n@lzo^k2 zt%Y}JH`hF!;stN!@yP)hRKL9vHhNGn7jBrgPDAeoW<2mrMmO&}-IkbwNz5JFZhju` z@4w<+_`7K@UA=rdj#&C1muW-GjMQ`j-H1xr>a0;&XAogp~rj1)pM+*EXe(x8HGGB_Vbd{ z;gmXn&{tFxyUg-~#RT&kscnYzn(~=xiei|uTMJhC{zi2DxRaX>pG-;b_v`jRthZO& z{UWk_s0R&SzGrjfw*V^Gx^7HC8qTXj)NF}#htV7;7pvtCgOq55`lMnbhipzRsfsXI zyr8sWVuw45d(lc&M>Fpiv2A1^bPs0~EQ+PR+PI`cRyxUYJ;!peapS0$<*>`%1V)SZ zegqrz+RPB>tJ0!`WRXHqFdL9E#yHZ)=!%|>t6B4B& zMwhT~kqwk+we?v~zSQ^#D?iLt3>J%7P>)uw_FDeT_QY6A>7pw@FlDLJDP_C`?9yFG z=BW~xeSkar=>L$%xptN6LnYY#`f0Y`NahBT9H@a(;<5ZJd6eLWv^NBCHQ)4i_CzH> zPmNJkBwGFPTXL?G2p4x%*BQswQtdVi{)i^Bf^AK&r|CTht>xAZAqyj_!@)SQ)P0^s zPm?jzgPzOD>${_~4C#CDZ_SZtn6sRx0=Gd%n^`0)yWcKJxago05nZ^9{+?-u?q`&~ z8orTo%?sbH=QXhKx|$SU>?VT1z;}5P>l3AMX{jb#( zTdvUU+MpYFZYb2cz@IJAJhO{ELS^q(w0=7WB7@*~fiR$g{ob8^aHWB9v+l>fgZA;i z4n+L7gYI^bNP{q&B$CMVcO6tn_6o6Nj4&DCzwF`vy*A7vtmQ~1>gxo-xaAYB_-3j7 z!84ld0xD!`#ox#ZiW2M^Q}r;-r?VnxWo!-R;`>>nOHmve;qzV&k?NC_H;pR$5aD&G zsla22TeEq5h-3SI%Dxbcf<${r3EK-odX*7QwAlXmp9$7^6Sn2HWxeVcNB|yvTyON~ z|5broNd^%!W-q6Gb10r#59UXif0<{Mus~SS=8eyqm(l4-5YJzTMb4UM!C?Nu#{vtN zyXu0&0Q27-if8ue%J(A^KY=AIaf;XhC7a3Qb1WE^3BI@Xtce__(zD-*9Dq?+QC`nV zQbq7zLUKee*QZiOnl6{QK!Z5|lh(85!Qsvgo3spgZU;2C@u_J5@tE7l>b+~kP-D9X ztxq`{r5IjKt`{U1?c8=`F%E)ujCeB1Pv>5d(WmP~0n$H`4Hy!(x$gmSBG@A!{tBAk z(y39_CrVwqw%ED*nO(!Ha|-fc&-5TK#Ox242QQHdORcCtOxk0+BQ-q|tnz+R*B!Aq z$_u2=-MSgfl67;4FE&p@srUQh=s@)a5F6vf(d5dz&URbKIfK><}_J zb+B1OCkmi{jyvao)aiDfS1fD}*Vqor^QK8CzU&GA$WuJGz$Anc3K|GZZ0T61Pis)9 z#XLE)q2qR48}hDvK$F%zWq$mY&3epa#Zeq2HP&|Y8t-Ac#PF8Z>nPFu6q#_uR*bM& zra`*q>|>ltlHjssu3)S8Spq0eYb#a}DwJEeaW(Mj&r(FihJ33P#ug8&UcEJX~h)O2}zU|Av^8ysg4zc z5c)uOKJZJkTNp~*m7D$OEN!oNrrTFTP0|J5)G@E|U>&*$Zi&cqPsmtP@s2GiDX*Y@7 zBC7Jgd=d?sbGI84^g(!y^ElvXS^K-8<`SZE12sRsZzJpjKe|PmO7~nMRuJ@z{OP^6 zuTT8+vC0JuuP7<5rnM0$-0bp-beJqmpN~_}u=nsO!t$~meV`SIf+jb~F9r;%oLW>h z7c*jo6jhfq?qwL)=W#yD!?*3#D5-q3q9OgJa= z2t=N{4Bj4s1M#g%hdl%E^gAngj0)8hGTxk!>K-qI2s#Xzob`Yl$ZQtU)kmQ@h1uVp zu~cvWF0IRFCuf5^c;S*Q;8ChUs}t)*_FAZt4Z4QWfl3c`P7qlL7pjpBb2=wB=GzZo zc)(?oxKMb@77vzDN@_8L+;(Phn=A z&{$V^fq|Uz;9Gq~Vu2mGmz_2%F&`=aXlI|16Jl{Cmb4;Is0m+f!>WWI|nXMi_Z%41Og44r!RrhmoMtOvk zutr7@rg6tDD3rTSr7zyI@eHTD+q|J@qXoIRBMmsh8}r!X^0`Q0E#kD40Z15=wW z5I=O*d&B@ss3Ejc2ZlKXY@b<-GTHUL8Osp~@v9M}Vf-ucw%Fr5OcO{_F)sid7h{~s zC)k*vodVT*XZGYAqghVp{G9HZR8%(bSW%x2MJ*|a7e*?%Is)6SbxVT{fqxSdoQpOc z;>PuDgsMNOw2uD~jU>aIBDjeXw@;y&H8ycsyXp$tvYy613%mYeaC}{~=k{b?>JfYL z7<2M@cDaHYI&$~cQY)oTr44N9flT4(nnmC7$S{RvYqx@W>7FVESgKvW?VjZt(R?k( zX(q?n5YvMWE+S_mX00#)BGjAL)`+DCv%n|E!v4Pc81XAPVQbmx4?9~K2|3G*MRz5r z^`On|#TWb>HYAZs01A~r^J=0J?g=#qf^u;JNJXy=s5x<*xHf7Y=e9A!?~P=%Pz5Ig zro@4Z-kPoxYlcHtgQP8i0}!;58}M-nJfb7ZUCAg5LYs@isWE+2?FHTJ)}%Hr2XZS` zhZAKR#L*h!?UljM*l6jbGZ~4AQER}S797!Ac;l+RAXv2$=*_9QE5MKRj1h^5SqMBZ z9DpYxR$0Px;U~*vSfE5mCv6%OyJ-KV>IXB&pbm;7!#-EGXZzrN>xU}DKUcPION=%A z&g|t$HpdWsQ{4K7QE*pu3_a(r_+Ubdz*d4AtKu$3Z(D$gs_ycIo~m$B-E0UwR<^6Y zV@y32#n?HIYv<6F~;Y4enJybiSM7Jrx^tU&4s6AlFaI4p_4zexVpp?7_BI0$Xj?( zt<<=AyY6lgGScC%a))kyc0j&Y(EzVlkGN-+>uI890voBrwF2H`-=+B=*kZG}g_i4k zTpnBS;~?~jq92^4u;BQ+oTg>#j#V|Da5zA9vtL6u3Sr5Yu z+0 z?fZ&}v;OV8ZQcz`?IA5{G=1|_uScQZvii}kRPRXneI~-hD~i!beVUxMU%8L9!H>S0 zAyZ9I)U~CB?TJHPl z&90^j|@^@vjJL8-yTm>I5=;)8mCZeIovvHAJK=JtuRV3JDHY zn@-tV>thRDij`%3~7Fh>O8 zlQ{|IgTjG{$59sD@8}gC9v8>Il3|;#B&=--_#DD?3&Q}U+^GlZk z5dsnMd_e*R4V;+<_fK2?Oo{VciNnx^{0(n1&QkJI>?n;xI_pkCW>MT%>AEiE;ns$= zDGeR9@hNo>D&^tni;>tXn1$U=rSeNlbH2yyB9Le6Lq4~x+$*u=K@POqT^b_h?rFdS z3D7wcJgbIOpj%iUXNxl|$LFW?v;c@P)s=$%W~x*75-q{Az-U)}$L$p$=U$ zw2vfnAkeai)S30`mbm1`lO*=6a6X|*vEVgXvCFmy?nu=!MSE>8%aVut!NgSwgRJj| z{xy4umL1f^VK3{F?VInUu~QPUc`g%MEmNC@f`#QW-H-0h(L7l%%AnRNTU|9`i_`{cVdkrti5f3 zsk(3Ea9pHu(?l#c5vFR>{E5z0S3;%bNHstVcOx+U-Zds#4W%YF79V-SHpX-?MX)Ny zbg}QR6i0>T{tL7jY}W>!G;Va~V8h>SKWCnf9W30%&fksWjJsXGVj4etnqJHNRk~sWLKJ66~ydFzArVWC;qI8 zDb@NgBQ5a)1Zf~2wTF~zG{M;+V^ZJWs%P`GYgM)z8DmTXd;W1MRdU5tD&>4*v>{mE zo8B0Q1R=lq)AfIIFuPX;w^+U&=w9&@3(aNYf6O~&aAnzMW`PzM ztqm3?&vIjBkczKdxkeUD%3od}@i8$&s|2Y+&%-uOeay!ThQr{-0{=Y)Y^0#xw!cxf zsE#O9$Rf3zzYZaeSDvR)4<{2;{D>(~Evr3~L zYN-)YQpXNKv>t8=r5?)CJhjp^c3Bq4Cd}w~GxHb=medF_A_{B3Km`Qv7ewvVDBU zh=Ge?MaBeE`^BN(7`lGA|0v13A!)AeUst)@Jl8FrrIWr<+)qgSUpai6x@pe=>-PW~ zjug8)Mj*eau9W$@i;(Uiaa)lRK`QfI_$AC?)pQnc-k3uu91;q&!Tef(dn`zj2w&eX zS0`VY>S(_z@zIP$T94nBaqf6WleP);JXY~yxM$3@5Ofa5_rFJHTIq8P^}=HoD?&P8 zB>sIWrd9#!JQUAzcmQ<&>M+Q+j0j6}tW>bdoUBA~`lPj_s$~lU-tFpc=cV=z2V4dZ z+)IkEMi`8hgl|!8G+Bkj0SI$Zd#Fs)Ar;LwDO~*&-~}=5>sb-e92}WIabV^tUU37V zcMHB_DvS|GQ?%Lh52#Q_8A;T<=leBlh^p$%C| zH_Uz490KIZ1Aqv#mWECEJ(qJRa;X-G*#SIJPzybUfdQZ&58P)V5#U2a_|8bh~C4G3+Q_eE{p1rLk??O%Qe_cBY%jZFo9$rEn!b_qW} z(Vv}pyTR=S4%A^$aAl+;q5%amb|p7NU)KSqYwTdh8q6yUxv@Tl56W)2W;=2R&>y~@ z{+(2SVB$%S){*WAXsI3`tvsK+2zaR#P`$ZskN&kK@9rS`=U(N86G(Ebzt9azIwV=V zt5kd580ruw1HIB5H@zy`vzn(LPVSFl@XhBj;sJ&1c%W!@n?afRJK+?@eXQIwQcY>e zNW6@55umN*_oeMKPdzBN?fa#X+BO=>lu&!IBwX`H(tj#!S(`ZIoHI@@2X)T3u8%B% zILNw@KXjOk@Zq5)V4g}coL!oA&Dqul^QWmRGt8rFowRfe*$(j3#%;=D+Jx56_siN! zBS8}_1XMg1s#cc16p08&JpVA)<(a2tc7X&6yTp&dNz+#1>d`ME1#v5XIvQKW=s}~> zR?4%w;D?`ka)qdmv+8AYxa3qDrre`|2cGUC@MpN!w%B2pyidk8Nw$QIf`*V2AGqfO z76uu`KGpShe0nyzKCWM~w7PfzMvEak`!^EoNd(dk6oqK2afos;LC)C$(QCKdn%e@mvef! zRnaQu42eSeZ{HuKWxXbz1U*=u^O*%17iZQWPxo2pMjDaDxGls)D6My7VZ8eg&?BUu zR?=WBo-XwoIxZb!wg4u8JKS6GMr`qpri8&z=bLX9K*0pJEc1+!p*1Xx2T3)=nCdI^QKDr05qrJrq3)NT{Hd9u0 zXkSR1<>1~Jl2^Daf=*se_N}tfz`15P`MX0k5h-?!1|~@pB8x7Qi8(H>=)QF^kpnTv z{O}g0#J{H!jewZs_O6i(1yc0Lt`@04_RG&xZM`K+ou5EXCb0;&>#a`+=(F$__tb5p zTQeR{e3hH(g~)P1HShm;m?dV1JMD)j+UD}LNXDj#VQ9IJs_A?0;ByaER3eN#PIU?9 zK?HUuJwZ?X^|n5+L5#ao)aL(wl&Y4SxlIh#fJ`zxzV_C(cKN#ZC8h)x@;)&=!ri9b z`FY*@(r0miS6V+K&0?DtiflMS4_e6VX$gbkYJ<@D$e-2Q)yAi!KlCA~*T*j`Xp~zV zR%-7)6tCmxVhP5a@8*_#T#e;8B&?5&{_a%yKq<0(34XT-HhE$rJdaY{(^>g#t(L8R&&esY3u@hFAUKA zDVunF^^2BzNcykI*ngRH%E-*d`M*iVG^DH!#Spq@YGyt9uBy-3VSwXIaq4U1r{E3| z94Bn`C4lctetgg85j($oVi`xzRaexORP5}ysLg>60 zIE7wrJsuW1u4iER zxcUM)b&*L>Q(cz;%Nc%3i|BIQzg_Bx#~k(@iqDBvGqB*#)Q4P0WMIe|Od>XOl-xd> zI=V`M3i1IsJ)fOJ9osfK*9K7mLGvH9zoEZit*>N{b#{OGzkI>k`dr#=E_ZyV9ehmf z0a61#6$s31;%9^Rm9cGxUJKSS(ox(6or^F9StdBfnDaDN>oDDTqPjiMO3kPOcv2;X z71g0*k>o7;m$&#$)f3~A$pomj3izA}p!4$g*C===^=t#H+ zmj7}KJH<>bG^!^_RM4Wx-9y6Oc;eiJE|4=p1_2F%sS{!ji@KuQ2`gYu+?Y;ha}1?Y zZ?xloX>J+9S4^AWfDfDW3@QXKce&z{XN+RPj=j1hT^=&yrZ~79~EnwyX zzVWMCzYIFMz8JiFZmf51o(I;phlxf=6DG4Ru_t0tILY#=NSwHH;akk|t~FGPi@ZAtbwv;JF6v8#EWby7K=vgAV@aOJ1YGS%d>sbWMB2>A>k5OY zPuP)qIQFRvHXD*Kn0*5Kup{(v?obu3*Cb#vw%-o^XW1kVcWpL~%Lg;nf_d7av0$Tq zp_Erf)|$CaA#es1|F^A=KnFOx#wM6$U5y*6dtI-C&!cl5$^vJ$YsTkztEnqSJ$LP^ zNLNs}P>O8c8p7bP&a5t%zoqoCP)2y~(y`I%OV91f0^y0-Lr(p46%4^2`@4l48b^F2 z6byzie6ti9`WzeG`P8&m=^oT7-tmO%<6B$ zFNp{6fND>@11f3k)mBUt3vP4k_)B4Nq_7|Y|@ z4${a#`~W2uz2_#aSI=T*XIARN?Ks=E3&JcJRv8YL2-zFC`GFNkThZ8;l;hIuR!WI! zPdB2zrQOaKajTlpa-FLoTM0^@$+PCe1d0(;7wcMYqt8bB=+W+}V(XZbYdn#Aei~u9 zSn)Ib7N$Owgf<*%Nfy77Vt1n`y%k{adsxXWP>h-o;ek$U<1!o?P0V`beZgu_IJ7h0 zS7F5XVtK?9{-P&wENQq9(YR{iZkr5c8BNa?DR z5iX@tUc-iWB&CC~erRbIH0gxAJj#ce|HIi=K-HBjiw1&QaCZpqF2UV3xVyW%TX1)W z;O_43Zb5^4LV%$EkeS@ceK+&&ynoi(Yxmx}rMj!Sq)&GhvvSIj#Y~(Yb+kkY2ZzS( zP0D*_$$2*_u9!kW8TNUdCJm5Y_VWd|Y3P+hU6wK2#iQEWf?RfHgFt@K<>cc89!LQq zQgJ6^-FEq@2baw=isK_+XFD>@9+P#}JtmW8mBmb?R#zvZ{XmL{@ia-5-Bf0ix9~QH zmi-wW06^ItF&YMMp=+#0~^JqK4CLws6A zJ4eHp4^XuHy7q=IAMt7V`CfjMlBRlwcDfFx)>aC-R`%5V))odYa?;M;LBK@U?gb^1 zx__ow7@%l>cviQ^R|lW~pM`}5pOt~(kBgNRp8;^aJhK3h0B{-pl7{-3=j9tSGt1vy zP%mX(u9rM7d0(*ha({UT@B#ee0@MZdYaNWgFd{Fb^z!`c z=)RzU2F#d4A@5X#+62P=GrBRoBnDOuNZ!Dto85w;#XH&{}{u9e_&Y9&`ej!@xM;O zU*;eSV8qzi0oY+@`5nYB=S2Sp#DDO+Us=bmhe`i2#6o{SETC&=Vd`N0zw!+FzX+0< zjs>5Io$WWEvi!l)ejQwve+6Fn7c>5K7wMs?cpV#5I_w75Yd3U@Jl@}Vp-@fk^F<={;5a?FsHvn zGCj*5{Qp-v_y^hz0EVC1&3{!Le$jA#wDnKnWcfo3{i)*oP-y;*W&My`Kk@O`tolp1 z{UPk6bu9sE#Q&-?Sm+wt=YQ;P1NUZw` zHP>zW9iuc6clzNh`%n&`ZK742cUKx{YBLIVSsQRU=ULcaD5+kp;ixX&7^EB8eSuDX zl3qMKU+=ndUfP)2$e|H<7GFHn?jHP+_HG27-6-$AaxNO3>g3l9ddj80qTRAM&_2w( zs?^Ytc*e1#ex#f;&wB=wd~P2Q@s9Y|+3T&F$1_ngjmK4e)!6dpQG#u0$@^2>Q{X_~ zlR3>JwOQj;W2(e6aC^d%_m%7ctqszh`jzSd?NEY?w`?9@sfqUTDf^kyf~7%?w`%D=v|5$|Iwhse9Hwoe{?phjwzA*M+ySHzujU z;W?|Y!$Z+;+0yTIv)@mHzf;M6GXt0be1iH1@dFqXK07P>|9Juc%KRPu|A+p;{Hy-) zC;bCdoqt0A@#7U~bnwDA??6Xa`%zph@MCgCeTn5!ALZ=tUxB0}7Xt|n5n5|^d|y*K zBAnJu#)ur;%;z|j@nj|4D9mBMXYX+GhmtCnkb z$20r(TwcZJ+|wmD3ax8rdyDt-Uud^>nD11sR%8n>)Sl6g2V@+*zfO}#HD2zytO<8m zKesBEsn|8M@En_pF-w@G8r5j3#M{4a_>6cmguzCH*VSy7bLnT%O=&3BZN698&G`ja zgM#x^yL!R*W{lnM&4`ja?ywCbImV;Zg-Cf$=PdRe=eyA`AOPByH&Rg~l>)XbnK zCHn(wdOQJdbsv9kIJl>gD_W+kCs)wIP8}=6hb^jZyvbNP?}%9d(O#hGraxgA5$Zmv zBu()wvOPkVNdSl&{*Ke|&RC@q#M|(Wb4=ThXMyr+a(Z@#M__G6JKFk?HWle%de-hq zdPnyu*}uR$s9E)n^Hj|HWBrx0N^604=(5@!9+UKQ-ZkX;BpmiSUIe&zRbFRyR9>f0 z2Q&bn%BhWM@5=fsw3DQ~&e?~Hr=3ss-FWU>3oXvVSwhdi<_=f1%)w7@ucxPZX1T96 z3hoGkX;HJ7CenFCgx21DG-W5b(wX@RL@Ka&-)X$a7G5;7Va@nNsQ%m8^Ls7w_p|43 z)!pArA9{cdjZe))&kQitS()(Z=~!^{V0tT2if5;93;7FTZY~SR1dFT2gwD0COVPR@{Yq zJAv8<{=oA-%rtML6_|j|dgynk|Dn476uJLRfB3!K@Eg1{(*YC*23CNO2gHQ~C=T@h zcfR>j=E9I!jQaWR*WY0!}jOb zbY(dCE_~)1x97Da(u4)COp{&dK6KPACh{-PVrvFt1o39tMnZE2;12SZaQMHWIWIY} zsu45QZFQVrt7qzKQM!BI#{Ly5SOm}g9fhZH6t+n~?|lIh0PCLH0rA~Mg+NjMYhMj! zYcpigj^^B|1+--R9zfR@0&Hkn?kcu(2iaAFEldRgeo%QmTbZGTpT9cg;;jW6iYdi1 z?cK@N+#d>C>Oa;2HPT7MF}N33ap6LEcarwk$r*YA1$0RsV0L8}`8fA(CQvn;^n#Wcbl%cVV4kRUi#j;!c~5x}2h z8w|wZkJ86~pV1ATJx`?x*DdQCgmf^db(?1uYVL5Zi1KY4^$8S2dXV* z$EAy)9nIR82r5bWo`BEI`PtAkJ(X>zchbuQ8kllRB22S8w6Fp{Kf7{Hzd5r~jZGkq zaAkVinq@V|vLJ(H16|8RUYi89y5oCs<1R0W^?m`(55qF>x0rr0G=5HszcJNbOsKzE zp#A?f)n3f9A12<5Y4_(M?+^11VA`=V{bjEGu*UzX8T9Ac?w@ARpGMIyeE-Lr|I$}L z`#<~o0^`q>U6vQPe!%u8+yImF=kpKK6R=4Avp+xI|F|>$)t4W})Wt1kN|GouGAFaV_B??{~Xk1X^65z7d$umBbPW#iAgo4O#sU%23^ze*HuDP45H zJUC)nhEW~rfg?{0z&8N~5vzSGg^CDsNba1y!b0}oB zDf>0W5gSL(m=ELY{4W{qt(+ipu37u;9X#5OR`Z$@TsLd>6I}ai>Io)`VW@;LRy|1d zrmA#Qp6*Mc5UwBKt60jzDWYg$6?LA-2-fZvE@BOx&oymg;d3J3A2Z+Ll&W*$(zi>6 zFoi_>nW#%teLpyVmggNhpbpUR@Du9(&T?yQ2l(m>@VB(x`lo!BXo&M#6#?qc+5 zX%rH}9(dJS1+|UvAuoFe5(BHhW(GrJp(fAxSi8C{Av)f0OP2VKfESNI0dxiT%nUMa zT|`9Rm25_E5aeN6qNgk}kzEVk(anE4p0J=Wg}P?m$eB&^@C;@$yIY`5ywKZ3$w}I3 zUFdr+6x4^X;H3D(geY`&v#aFlodFry;pgY1+r(ScW?>BpYy;-jEN4jlkc=|I{Bw6T z4(G+a>&LIpZ&ARUz*!Aq6h5~C!P3Uv4Al|~uj4|%vPX*)fGgRBrxRO0AS(6k2VzjU z2eb)jk;*&*V~gPWX?;OxlAFBIi(Ggg-CG5J=!$-<6g_T(s^lMa@(S7(0*AlLW4K1J_I3~ zE@|L;f{vY8Yho2V%9Pv{T(lLZ)FgHrQJ+n}yxZx*tchW|cIE)$=|a_rv!dgbFQg^G z`ZoU{e`Xqa+zt!f82dKa?}DD+dXH3#E+e=;dI5~E8J7GO*eDja?@QBlctac&VQbTy zA?z>CUwk&Fwo0~nNKwz2=*`c2weOzzuIX3OM8zwc&lRy#tjepx*aD)8;l8z3l=F4q z5_^lBdB3u9JbG~Ty<>N*H6AZ3Z@!Afn5E5B;;JvP8~H4TG#>`JGZ=xx=r%Wmu-p6L z0~B=7?w)}$>^I}PwnL|7J!uIkdJI^%46+OCXkBp_OiF!^L_%fI$Al*x$8Nd;hIUKw z?kaKb_xh5M6!abt%TGsUO1p0c;)UNPMnrA;91SFgMVF)Tme`8c;~`RwurWl!Z7J)4 zf4oibq_Z~S+GCZu1dm_RR((QDM5|FHK!N7QyVg;ZGfNmznICD0NQe+6I+3QAx|Xq` zM}Z+~l_F1;>eirI#9N1LM)EOiS{tEnW!Doe=-rkC1aPcgN%@wb@QzzMTW6_GCDj|s zoG=b!B-zSNa#EJ!G~S^`Y?;gAc_8gZb!dCQqj-4(TSFFa$A8J0NW0l~rzJTZZ}h87 z=&q(K6^`*bBGz7(JjUopm5-B0c*b|l1Oy~Tst+Rr3LqbMo{w+#7eSDiTc}3K`D^K| z>|l)M?+?>Ng=SOPL)b^mlX^v%2cNX9d?w z9AH655|wN>TewQL+8P3v?p7~-$)VJRlS;uzYp8)1 zv^*#30>4XjJyRYxkEaMFRSZpJohm4K=JICE(9q=}Vt`kV*GI6YHPby%raS|9-rqJ~ zE!VuqI2B<+mMQ40p}%abp~gWV8#*|8Xd;}OADkmkmh*=UeSbzn(}UYBjI45xOfset z!-HLWPx?(FDfay`cWb7jn8Sx<(m_#ug>;G zM;|AzWwO{Sy%hbTU0w^38obx?8PGlt&Eo?N$Ebl3=i1+T4Pnv^RRG2KB(`&bJ8O(V zry9LgmPm1yZ!6B_B8rGP9I{KEK&^miQ|EyzA5${>`G}YWhnf%&&kR?)3#}6>$ablW z7;FF+Y-H}p04bH+f-c)jy29vveA1!fVS=0Y2cAu91wAuMt_&>0H#>HI7~%Vns`DAj zm|au`NSC_yHM}Vpr6V^m238gnls9Olv?iH}7D_Cb53|PB`9qJ80U+dAs6>i^^Kv!8 z%fKz!k0$OY&@`qE*{o+u?^}{r2V{w#OvkYvYmW!%P3lM&T`KbRRfiptwOEUF&{G@4 zS|6*t_N-7ACNq_vVOlf{JvASZux;Y7NI{+6^f%lYBl9aNjZUkni9thA%SzT(>F8W! z8Y}X*sFrq7s5G16!7CYyE&!RX4E7&WUHaB6^HOY8357HkiJ1T$!(6slDGgS93aF7} z4lUthE*=#G={nbgCFF;1@g{{wwTttCO%z$wIw*Lz z;q;i~{cMS3uKG#~kJw`NUGn%ogO-)BsW`|s^c+mv6>D&`E$zj5vMiJ0A*)STq;=yV zFJ@{HC1%+|Zq#&zTJUOc^d<1;9`)x=hhT_Kr?_w-i;5Ms@Gw_PEHM zr5~sA(?rggVUi<$#V_#6Mb82PzBCo8zc@R;rza3vOo&^oaww_Xz`;$rAjRuv1dQU9$B&x#7DCPsC2lfTDaUDncCjds+y+5)fs>u2fWpjG)u!#gW4Pe!*_7$=|Z%sQ^FF!KZT>()k1Y@-9s$VFr4O?F)g z#zo~7B7o2B#FZjzSwPq#Lvq*Pv*oLUG^=_+`)On~;&XT7lZlNF{OR9{C0O9#kdBLx zQzBqHWvoLOy7~kn^hm;h;7xJwU1xzF`*YbuIF&jnwL(_3wxrpA^P;SHyzN?e!|1O6 zzzJSAV52eM=(+J>GR!%e@3S5=Ez!6Y(v>NT94!n+84?yShh`X6D<-g0D^-4U5N}wy z3j~<}K6&>{u6_Kq0(%=od?>ylHv9pP!-Z845ri&6yqf~UZXjCd%CDUq z-_pp-@g)%C1bzV<$}#sJX+k#ipp2{}HIlBpE&z^UdriZlH5CfhoxM+8qqU6*Tnr`` z>mb?1It-tXqZ+i#AeopW8AOGV&S1mvAP}U_&_>&P%>-DhSI!g+QPb#*smh z;WmeX%>drOg!65$@-Upt2(Q!71?9qP5fv(da+o*+GF`51qV(u3=!Gq2jLc}=k1*;6 zO*D`^5<%n);W`(nVBWEESA)b4j|>(GK*m+EOl6`do(l}VEU@Hpghb8R z`*G$bIChn;m~~Z-+3fqxYpL&3g`dQ}iMmX&JNPPrHC9Gd@}ZSn@|7si2|Y4q%gp8V z3y-4~1->$;=D^q35k@xy>4qSUuo;86kEj}i;EbpmhR`Kq!pfO|(2t|DG)A8SB08b# zK_y!2O8rPjWs4lFdW^fkV;1mzc!FHGt78LWD;hzIv4>@0wD(9P)4(%RzkcbIf+!%I zF5}ynu?xZ>QJE=s=^(eK@Ma|XmL<^@9mj`=?Ce1yrMK+sRTrd$s#gltkA4fBA;k<<`Bsad}m~5awvGKbU8X$ zzt1ysZF0N`Rn)yDt$_>`GaPuvzUf~3r z=u9RtPYXRXA->puJU29?&uX?HM|V$%(JZ)r6|Ub&_M{7YaB?PaEL+fU-(Qkk?J4AX z@7#Uk6>RDj$!YKTn@;##tDCKUB4uku!c`D28c)EUH zVO22#M4OEV=Gkx^X#c5xWq5i^1n$HP2gte2)8)BTXe)7lP*W{2;XU0`&B0X?+=&N) z@sl68h!X7NNEWJw$i5TG#Hrrra>>HtUin!;0;wuhg+P}wJ@Y!ga#%$yhgEzF|3{W3 zU4K0+vIbwi*J+<#Iemb#&C_q-l#mdfitgrbx~ZG2dmUZ-cy^B)gndfR2?PAP^Wo%m zr{_s=@a;2U6;**ENkk?(A77T!;enTyVLi1U0~uZ~O7 za=jmq;aj7wta!Rhr94aNphd51yABqZWIa`BWLRUq#OiUdG1|ECLpu~Fz>O_kIn52= zU~`F{MubHF=HW)%)#@#LPL-}5Gg?L@yOkZz@x+u3Oii8g%I{{5+;VE>29M{_`1JUs zWrf|o)^2aCEF-PAz07j9!3OWj&+VgAu+x1h9<|x+#e5Qv*4!237h`I!dqLL}(GD{- z80;j%P`{C52QYm22*yB${9L9T9kDfMMyp$c>UST6qs?`5uGv7kLE<*Hw7t%2D<|eU z{N?%t)3q@sCZ!(oqcw8(b`RT%F&c6LmeL0lGb);fOs@>@Ym_&iVj5MzDtXB-dX-?( zoxJm}87a;tvDLJKx@8H(4M5@orO(lUn*b4D;W&>%%fp3)6b%CyPOo^L3Ln2_9=BR? zJ6@G4q$!nc6moUyY|Y-Ij@@{!w3HFmSwLEN?Oc#nR=N+6H|fU=dfgml4(-r%e;kG?P1rmi5;;rYbo!(07?49z?A1CsWR@AsR z!%fag1~nPl-NqGL3f*Lll|rm@&LS1LKqSHPrsHG%a#EuyeAjhQZ6^=NdSD^HU7}px z;>{QKVJ_|M*nMPOzFjh7G!cY3#S!H-GK)!GHxGoMVi7Ol*JwKT~Ai6&uH>$C2@xMC0nfOCs<( zri9zBk&1JW6$HBgQfkY%ZOtv>8a9X<(Hc>hr{!qcQ{y$vdVS7~YloYaN%CoDyK?Y` zcd0W;fi>(GcVD_7HgZo>Q5;*$^g|j&gZ#;(cx?2dbJ1YxLmNUIy+ioP;MpygyJvp9 zp~L{3##WEz-6tj{{U)RU&YMQ9*H->c@`xf_L3NP&ZqE|;c8g$EBg>vxs|}Lv6c6j_ zYc%5O%=H;Vt$?6kN=J^|t)xT=(J-yjL#;zeN86eLMqpZ(ym{b@S%b%0l753bH5Y{` zK&@V6_IVR4AMl+JkhMXMgk&8Mp!r&o%_H0wZaE$dcj7V_W7R$(G@;r_By>wM^f58VtUN%k%KX+5efE+RW0b!{8}(QCTX`_J+Ip`*oSb zoUPfii^%j?{f7oFr$K6rIFiIjN=(ynbas7|Bd!W&7x+a?F6SmmobKaqg77fH(^PCe zV{orRMXKphV=CzR^AOsE*(SEf9?Lpb*>orq9V$aDRUVpv^*JzCzxkxm2;|(HHcnpj zBr{qQUnx4{ec?!3E2ObAMA~L{30AoZA_!Vbm&~Ln?N8`d2>g~ifIAv^W4{%oQ8XG@ z-E6~#mN^<|Ijko~W3#S--)zH#2Di&kh1Rgo?@Yr~)9|!ZtIKO4eyT4NSnA+|`L^-6 zv*@@Ye_$}}8w2fWy1i@XUXtbUt#Y%~=TD_)?!5O-`(;is6@G)Pa2lW++NhpNku;piZZ#}CVp$BJ4{O{ zF8q4((tP?mpT~1YS_+%wqaCdn1UKWywFH&O7V09PELPPhX=40Tn}hUqLvvrsb*lbT*#s1*=>u`acQ~Wh}C4SJy(b3{w&MLb$Tf|@L@3~q!I*4GmTE{ z5p1!L7la5*`euw(0O3rWf9iE^pa0QV85m!iamQ4zk_okXzEMNOv3AMQoK65{LsD;q z2G-fB7DEqB!{mukT3eVwR-Q$1uuAal#G7ht-HS_4Qv|G6)!`i7*$AUfEIp|}JA?Np z#yHzV%5)m23yjNxvOfOLf<`v?5i`F%%u!ebU8GHCW4_9wLrzFkiofRk)&!T0U_k#>^kO-^0;=je zK5W-4L!QS{Q)(D?IoucA37qrHrq?y~Eu)#!dxcLE(V81H$fnyhlUN=89gJyjPIXv@ zeQZC;&w(S2Dcv8KyJbup%-DK_)xGz#f<%?jL{uj2CWag#9!l(@@Wt;IgX~D$)P&UO z1mP^;LR_S_jA=3=r?4$iq_l;w(2bUWzlwHH+`bmA6kCIXwBjAp$OBQx=Ll6Gu9CRu zaFE=F6Ri?jA+Ti?ogxc-OEaxSWeZ_T2!tHx6IuO!g&eX3M4*5nln62WbB}x@a@@59 zDRDI)Frg~(`|USkRUh;Mqe1Esk;PCD8-mjafG+m5q&QQ z_2I67cM=pWgET3N5f}D#AeA~e1jU8V^##=U<+> zm=R|dMMkD%GzqNgjF7%-3oanxeTUy=RAK(2p_-CDZl8Dk&9ljP4q`nnfi@`#$w>f9 zAHm6XwJ(Bdy+tjUUYI0< z;`bqV^TB)5R*`(y+PtN0N4o|1p$zBkZtun&!Dmi`ee`h^?f`QfQPsx=2~=s5@JeF)dDcg4s*K*##Z z^^i|>)xeKDa(I)Fs+Tb}(2ncgqd0YB+fTv5@Cb+^?A^3q1V?RzKQ#F494zdPqG*nC z@<3~vYGvGGZW_VM6O>kOK`sHd^=VChcW$q`akU&Rz5FVFDzA$>GA;5&Ocp0D)0Dv# zlpDNJS*t@QdGKVY1hNSm)m}@Amw_|H%V?7!=e-K~MGAjtSE!%BCdf7<+LUTMRk*e8 zWZGCW7c`^I@`+%TL7xk{tCd#8Obr5&Cz(@g*KA6428Qy@zy_G_>Y8F}uKy0|b-T?$ zl(i?1cHdi_8PkvBr5rpwh*|}jcgJa-NVMyAqX(lK`Nr04%DeBMQ5quEC%m4rZD<8^*N7yGX|S!@mc&Yz`9};O$8JwLWGj}zNu(}+-bzUIf%6w3L1PL1 zirn!0@B!DpYN~^(qWy$wEcV?Af*ZG2-f<3ahV=cwtC}J-%!xJ|QOI zg@FQRbACPAXJ&OY)b0xRlAMq@mHkfbg0XJYOnGqZ2ktVZ%NFzp)NV-%B&hAZ-CxP; zfz}ak!bp=DBlf3LaGYV6Zb%}>C?=wqCRP)wl(TCz-*7HVYuq!grsttvepsgQKy3^; z9oL56n4!^L5H?-SZ-=5smzE?}NO0{ofQOL}>u$2_;B&F*@WqS;I_4a$n7t>>Mjho2 zNr?0^I_Wp>W<3n^WLCh-^kpOC=Al`&3;zg1C;q4c-ev2zjt>RaZ7_ETG3n1Y&4w5H=%1X-B;D($4KcqbWhowXZxp=}sM7s)1qgp37G_%Z_yr zS!lGBC6pS{oeke)JL`rAZPWR2vtcXC4YUjBOgAVX?3^Ul$H#1(MT!oghk6?{6P8aebNe9em}xFgAa#KI{sdE?o77FyHT{>b6h-HrKC6A@t<}m%i`Nyq3s>B3*X?ZH zlvCQ%wKsgkxzY_QGn!7E)rXFUETQlprAT3L^+t!P1cCQptc3-@&UY9YTv|V&z%JSD z#qb7ph(Jljgr0a~ABcGyBO5 zyn^sVrl^eaR^(i64N8O6&s-EfYz`-1VYGSUQa{;!kGo;das}tS5n^7RmuO~WM0t5l zw!)s-q=D$%tJ)qCoTP$NkFe&nyWrhpIFotN|mwQCUs5DTZj0_yve`3TKmia#S zAYfdJ(fISY5%~FqATS)4bvVcn`+#=W^~`4iJJaWB@EsOU0(u6o&#El(9jxIZ$d_m+ z>??1KvplWQ(d}3&HF^zs79LJ?ea_vUi#^dzRb0N$1i6+ry{U&?8DGU4Z#n(IBb7CK zKb<9Q{#<{0XL+ntzT|;&ACP)%oHN| zREyIX?Nr({^%G4XL0+D z4oqP;cJigvvojZ05$PddVQ`yCZ4BF*>8nSOIzN~iRV*(X^dN%tZcFpy8iBNAj+2%M zCNPJ(Ef{0l$s^$-4doM*^X3g#nAFL0-ACf50hTArC~*0eS4QTvIPLDkN!rt=xG&$h$)Q=1KXPpuPFCQ@vc}R~S2k zTs31ORj@+`S2V+6R1Da$T86c^y>8cX!)zD~26Q9%!wl!l?wId1D9$fk+7DxVlE~Y0 zt>=Qj(LZ{%i)u?aA2%MnIqdg(UH7mip?EipQE`#a_*m>lys_KAD8%lWqLo=E%;C8Z zlC!UM3hBDCjHGQws!7-PRY}6-QR)L)SqDRt&Dk#4DHf?sF!%jUgZ8IR=!N#nY0k>l zH%zpua}S2Ie$7%5->yGCUl^SP1%pF2XhL?nkhPr}Fa@0rrJlWEa9! zf^{8c4_&pHP)h^7eQWh)a`CENPQVUz4-jhq@@xTANCi9hGwo+f#b%+0`4a zXIOVqZhjoX3vyG_;&;}yh2pTjifhK(u}C4*V_E^V=XznW`-Q^@efCbNUcLmYj_D4! zt=K~~G#zDL9oMkRwkuED_uofXl%4Ffz3iPHKJqYV*57yz8CG+pelwLOb_f;@qcG56 z)0BmBx_Hj^j3LeB$cP0v*u|SU^fNTe@^7LlHmzWCZqb=p)o8%RvZgCYvy*C@Hn30r z&h)z4%C2|UD)}s^+UlZdD;z7bb&Hwx-FDEaRo6lh)?RDQ0IZ>vsBLd7H!HS%FA(dy z{UA-NrK6zIHF&#TWY*8E-J?FzEn8Js>qc}uIGe9}J3<}PCyzd?;Wz1ib}qAw!fL42 zt)7$(g1c|a!afHJs_2GIKMI0k*@R@pHq1M<>BSVLSfI3WiERSU6r(=(ro5CePDRTU zf_)b(t}=>v%}mTP^!gKy=LcV!$l0$?@qI}#EVNvqu|jXqKN^{xnSc zv)H7?dbg)=iYGDo)TORFpY<`z6Wzb_+_>!mlqb%5mf}(t6epO6I>$xa1Yt|+S8&|? zfsJ>W_mC6ot*Wo)!c6&SgL2!g?R#Um*H&w-A06;E*R=+(uTiGr)>hT22+vMWbsC}W zzFuD&T{1a0p1pRWQ79_ZwxOBzsa1-QXa05$?R`nS>%Zu(+(wvbL`qJTNi5hIde~ax zwd(*>tvcq%N1GBZELPPl=Z-KcwLHJ=KSSfff2T<)GiTw>>=o!BP}l_zMmdnC_}P0_Qp z^?=EV9PLBj$$`jy3u!Da;d$5kd+jeDKfZAlXw`1T`LaQQt@wnl@eq*Lr};$p`Kyrn zS-V&7GCGCL;>R?%W?Hv$#}$$3N>^yz=gy(#^OcT=oM6nc9ccvX2k(6^)^cjj?=tG1 zBJ~pA(qt(Qnkkct`n>KSR|*X5o}Zn%L7$JA5$4abT`-pMJ1}Hgrt>4Q#=jKwB=rf6 zmYp&%pk^uSVj&P3P!y&lFX*L)m|_>=O4ctK;}kL{R|+rTKI+s&VtsN(J~nF(4#k>1 zc6evesKcN`(aQlnxd}g*1S6tJD5t@t(g}HgOJAVt`nso4FZY&B9BaF%>vMrke1o7S z7x(dns^C5G%4tjR{k~e*qMBv4`w@g^K5KMa3e>UB|hS+Nth+f za9b@3332rtjJLZ_{Dn6t8$5EKeGbT)a59d8fHVe8w1SQ&22Cu;#*?s;Xt}37v@J6o zSxf3OEV1%h+7Q+-{-r3P_4Yc-B=Hw=gZM2SLfRNmVfq-Ew-OQEg4_}D7;hv^wP$cG zJ8KG5P2q(7#TCffT1q{|)D?#+0;Rc4z*32zAIfR>7*1)-EP zA_zOuaY$w;uPwF_zTZw{D`VhX!bm|rGRZ_YH9NGhI+TZshgPE{qd>l^Nvwbp-1Z|~J<}crm%XO%yGK~^cZ>g$jS4dG{Yn3gA6;|iS z6R)aOEj~V1nO#{~pX;GWQ)|iP1A!A-jovJvY*`^1Kb3N*6V-iw2S#V$RA*@T!A^`0 z(=s%GgA|mA4OO0{y3|wEB)O)fyuDaT6(yW(oI2+EZN^fQOTC>J9;muMThheDl(=AX zjUoEXrls*JRr!(14Ccs}5CP7eeTR zec^=!=Y*zEb_ndD7X7?d%s2r=sA?-L%#TB}#LaMC5sW+Ou8z@8y) zUIaaC9@&5blikQXhtXd_@OEh}++J8XFja{vkB}cuB(4uMt%ZLH^$bE7VYEh6SDgtH zS3$APY`&yNho3@fqb&hb*WZV|-vIbTBhQY%rX0)0{Q00TJMV_KMVbuBJFmv03Zso zjSIPIcRnVc=n5@+BShqbg6l(D(3sI&xq-e`&ygv6&kBhydu+0Dx-rtS%V?FLYc&*k z&Q3$MNAzWF%D2MQg_MJ4bVr%*Q9ERz9o+#M9G7VPOKb^slT{#{>dRa`1E+oT$YZ4S zZ+rHZCqA=8Lj~GW4c+1;eP^(UU|1q4JMY>!>MKzXdI*hbVXLlC0<4}b@HhwD7%~iJ z?g(k9t0AeCRISkM34~u0-#{e`l08y~Q=~%IyzfMJcc`-6cBrGzfM5u1AST8(oFi$T zOHW2Apc^xT5`8-h*0P|En4bQDMQ>nIFWlZdTUdBWO?CLz3C@``uOVeV@Qz&~hXawQ z-*~OtVtV&c-qcVHbzh6ISLp)!!P2lTltdVoJ}mVTEy-RZkAKM-G)~O}rQeb54ru}u z!&@NKOV=Vtzu#1KKuHK|wv`UUpTH17Uc@_4@*b=rp|DS!Tyjd|%KKB)42lspb`wR* zohiU@nh-7fKJirFpx0F*C9cP!mWeSY9)NVGkg%C<2L#rlL{pdCo6`Tz8`aj*V$d#r z8cDZ}%D`U5@06LXC*0)$dqdgu#5^=h18JWZ6bM~vuPdO>9C2#CclOSTz%Ytz zAl!UA_5Ol$vq|A`<~kU!X1ES6Jr6_Mo_zW~Ycx%zfIBHgq5h4B+4byBy8&Lnb$3TQ z3GFhpL1m5dr`0CbHs$;%YWFv%T-C~J;9;q15!o`#-2JC6M^g&edP=jI;$o!?Jku8- zjcIuM1qQ8RpoN%{?+&{;@h`2ISvf05T1!oo`zuacLB7(+Iv22)4(V?Vw&3kVaXW3( zpTz`^w!c|4a?b*KWAKhXQa=8YDH#v=tN+Ejrmmn?7FxDBbMryh^VP(icC=Zp?&PLohhAH6D`gwt;VlY-P^cwGMTx!xVEWTjor;z{J$H?T1(R_ zr?9%P+OU2yxn@~|AgU;BiBu2Ouk1qZNA8YC1Cv3&rAvqD#p~4$Zf>9h>8Ywb4{(!0 zU&c5pyLM7aaACyvjBI7{jO>Wd$`fb?skYV^2yFz)`mp!j9Zhl9Wq-1@hqKbGX;Dcp zgDBS_5YbCI1e{U3d+~z63zn8;49wB#tct?%I$E-Ad8U*m%W=L;s`fU8*}ttmd5zhX zStGl!J!lnNsXm)xl(T%~w7lYr>&NZ<=l6k=THC*cfB>RB!j#v9kwaxzD+y zvo6ptb>*Nh4w;pcvBu2D{FXHgD(Hj9xb}$lxNAFrk0aB*!~0?af0BmR#j{w}WaZ@X zzT@`XC_AM0Jbgefi!vN9bavcpOSbY1A4_5F^kVIz_QhhgCW!-+iAor&h+>9=lZ;~4 z7cNM#8dCu~cZwDB6=g!yjLB-kM=W^5kB2ZONLUAH@}38xG*U2knk>{g^s|U4cf0=U z%?v?w{2p1IFv?5tE9nCp3v`|67&1`34CN_K%4xN*5KT7zd~cT^_9xM2o>GD&|KFY= z`OS$`dM0{0fESDZ^(+Fwkq5v<$iJUOXmj;Y?4O}qb4*-jxX(=QN~aT338FH9fahfZ z4)yg3;1UQhz$XahM`Y}+KvW_K$tKhSAyAeBk_!?FAw)!RZrb$n^oTEVsa%AuKx4&^ zYn0APiN?R<>fCpKb|qyuZfPwkEiEl6ExAu8R^+MlGZA~O8*06<#;b{U?Lo^wB*x$M z&fH7X0Gda%-;R=CEOps2!5)v>Zd8cBiGn{qm|~wQwcWZW5Sza)G~hE;SqVh^8**31 zi0C#cQGH$%7AB!Y%Ie4~QM>uIDgM&iOZ+lz-c+Lfxe2HfYED}u0@iOLw-e32fsRqt z^)L(1k&e|Qbd9+)O~gRQors9a^2%5+mL$}t0g~y&-N#3iM`sw0RT#$v{7VQ+V7Ek` zbt;OYjzPOFf${|leWoub5)2wtES-WGx%os-7CyZt`DR1OyWT2|jfh^6@UhNfows|h)y-VDhj1$4$<7bHV z#_bW6o(Iu0W0GjhJt8LzRq2IoY-e8PWuIF^1Jd|tj3o+hqi863ci3s+nwWRes5=xV zw-=);&jJq0aD@BjF%w4eQdS~Tm=zAz&oNi~PkatBH^a6Ifo(hjnFX4O{dW}5OX?}T zFtgXMl+K6}TtGMVKihM;?_`O7eZCQ?hI#Z$a96L%xxOKkh`EuG6`0IplD@a1NZF&! zd}q2Ha4EE7h09rJb5-P*_T{T^B)V4~t@9GBKrqY%29pi1Q|DOtRb5BBTVWw_t2=RX zx>DS9_F}*397TcOz6zMAHa(1?t1gQW(=Pa$>lrVfnl}BUDlblISV%IlktFmi|ay0(R`zF%ynZ@1fG_~m1H%Fm0c*12N+h9JZl%Fq#%f z`#4ld&(2q8Tx4ov#;CrUjDFhnRS)a6cy-TG;~Ej+94wV-V|_DZbKbw7&h|CTM*C){ ztx6T~H^=;a*G$t`|3WrVD6NIEJ6&ZHCjeIO|kmEQv0}|y{&}F}!CNX2+>%OF| z%it6S$QeZcB@&6~AoTn^_Y^Egb++mz`mus=3g`WtzD3X;SjOoVs|4g7mY{Du&|+u8 zwPIt#7YZ5(&6w}CsDr*MA|qZOtpS}1AI+HLqdZQ2S-b&;i#B8Uz-~oMG(Bv;pCIJD zugo6f6XHj6F%(2s%yxnm3aX7?Qr-5Lg0Vy-8w6E~E0%yUVY3)mezt|PlCU&VnyDh$ zD%cuWPSlfcp;V{LMif;+NncrQkw4}qILg&=%f4-C{b@rR8O}}2dmE3OU{xeLpT#p4^#*Tql}XBN84CK&Dh>ZXy3V0V6DC~K z)n!|6*|u%lwr$(CU0t?q+qP{ReZIvk&P2?t@&_a$~NhTI4 z0X-VmwGLl9sz&STDl{{)$Ox%UDwry#in_9wN>?N_s3?*`4%I|Z%sF>RTrliDC^haX zFtvZ;qXI|7Qo9_CibS??NhK1V6b*?o>+KUH|Mm)K&D%Zq6e6Xw=+4J}`SMvZs>7v4 zw2P;*caozcl&qi2-=d;R8)r%qqRL_AtzzhI-T&BWF#Gi(tjgr5edi!Kcd#Z$Au#mE zP+;Hg<;TxJP^xo&hCxAnrSb)^bS%C{}sWh+=G-Uxg zW+)I+q#z!VzzK6;A4cjqZImZ$;hJOpUQr}X_~7o8KbHRkLK}zt5U}F*r=2mrseo{n zgW*DcHLQVdZo|TTt?&tsS_r`APakAWsE6nA)V%*qGhp``3k;LSXTdN>qrx7N%G00& zOyd4ljxzN%uSejj2KOO?zcHvJdt)*c&WEwyMjae*yg5|xs$0#aZlNi4A*ADZq8H_%xnP^pFT5N#06H8QG|YCawQb-WgX}1-i`}|4CFF%MAAedL7p{JgSrD zLk0ks;d$i%R@_4LUk9S&eKOWx)nB_vr#Ag`=^waSez@tzcVxCnlDDt2iC%AOR5qW( zT+&$Ak=v{Nc5;q>cCLvSDZS(0s8h+3svv@U)#ip9ym}^3)sNW$l1_>F>)MTfDPh>m z1clL;O$9a4QB4KOY;*j)pM{-xhcl^XCNdSdj6ZKUGGRRn7k#+rkjuv3BxY{;2{0NR zop@0v^G=Itx@JsTyqmx`QE%}ocz3+cGg)EnfJ*WjG;ivE8glc0zwUG2_v!Be&qQeTnFFbh5|{3JdXK1^~MyYAqo zy32c;6y_T3Qx^!@fb*5f!y5fi6>=9H&0PkZA9IPji0PKjVt}?w5X8FtuSteB#-9)L|X>hl;;+wMGA$QgaS1rmR!_Nmq(-H-J@l|fc_CX#;SF^ zt~DR&uV?_-A2#TD0)bp0Q(#o61j_!Kwab(&YARN(%feZ|Oo9vBegTN&6#``ky zSF1u#^?>g^0!JAr@;w}D)e2V9-+`Li4Y_Nd#67!Z0L!o&8Il$)squfpQX%VKA;`C`LnMYZe?WffbB$G^PY+n6D4*zP38MowS52l_o9i3W(b zJy`DR22lt+^SlmQzkeWGTdPed@h=Bor!iI8z5h(K!5_OTf4E<@ww|U;UP?nS1ujOm>0DMNRw@Y2Kvr2u(#O)AE!a< zczjdMPjQbqAw2n}(USOzx7k%H&JCqeT|yw)z|JnJt_HYrYl-{|m&UE4zNJ>}uA{%u z+vhQ~zJ#RpDXw7PdpKT2P=XqKqpXA2D##XJX#pArOidMAeeYNi$8IPs5OapH^>tQjZTjUjJK7~@X z+Ep5t&oZH&GGDZ|o>eHTeWztki^<)|;A@eea*QnoL4x0o4tEKzbCh&f_kdO}MS8%I zn#JzGMu74ou(>i{8P;TFp(v~Y$GtrNH;jw5odL4)K!{u+8H=sb5C?3eThDh)T#u?F zsnUUSNg?T`rGew6B^)02aHPkZzQrk+zK?9HZ7}wA2mAK1h1(k?saOtqhN`9f^;uFz zFcUkM%&5sx)Gu4nT0#j$y8{B6H{t3}JcJG&gU7x$Le5LSA_C7zpevrnVW1WQY{5JS z!gkbt8>I(682yVtB*dtvzo)7d_Arn z;%c2#2VaPGkae&FDi5z|Z_|-g9~Q`y@y%X{dcRu(1DV-nG8RmGJn0B3)XhBP6yKHUO{adyGWRw3KoU6)xWGC<)8QjB( zzkGqi70XgGIEM`94qCZlP_S5JbI7wXRTOL1ZaQ6lT;X7LLR%H5M`M}f{PtTT`*Xau zXYZ!ALmBB?t-2pdSW_#0fr5GwsmC8lu4>jf1Ak9Bx@707<_Sjt%YRK*_)-HIF+Kp^ z!MLSU;5iP^JKgN3F6GUQ#RJL?H)h$}8@qve*=wh1!mLYU{6BZ@wbOdbvJn_b~frNMf8$wYA!5yO>B=pUabZXFhkQ)O1DsG4feHlO$pmFDfQSH?KYWy_Q`5 z@+8o93ugJ32nWB!tL?sj=>IboelvTPJWy|T^-FF(xBa|ci3Wo=&u9H}a`M*aYjO0- zQ0;XxlpdE!SEC2eX|>h-xuHg1yUh3dSh?Tn>T)gxak1NCXk+|aV;M1Kexd@4Qg*@_ zr%ItBKyXYhM^t9jp=U29v+~2#vmr^w$30>#)o2?$IX=bk3YF0riv4+#S4YR)Ch