From 6bc3151b2bbd2254a0e51bc1d081c1a2ea6f0221 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 14:15:48 +0000 Subject: [PATCH 01/82] added project moved files inside +sdmx --- MATLAB/Contents.m | 2 +- MATLAB/SDMX.prj | 2 + MATLAB/buildfile.m | 26 ++++++ MATLAB/demo.m | 49 ----------- .../Ch430yJIsZDBUwjDly5EsAEAETUd.xml | 2 + .../Ch430yJIsZDBUwjDly5EsAEAETUp.xml | 2 + .../O-NHIa353mNE2axXKkr0QQbqSvId.xml | 2 + .../O-NHIa353mNE2axXKkr0QQbqSvIp.xml | 2 + .../zLRkliQKdihgIKg2Ye1PsVPqYHUd.xml | 2 + .../zLRkliQKdihgIKg2Ye1PsVPqYHUp.xml | 2 + .../5Lk_HLOyBtA13ybsC7_0l8N5sPcd.xml | 2 + .../5Lk_HLOyBtA13ybsC7_0l8N5sPcp.xml | 2 + .../xa5ZQ1ctC9gD-szmjQfSt2CpR7kd.xml | 6 ++ .../xa5ZQ1ctC9gD-szmjQfSt2CpR7kp.xml | 2 + .../1PgZFhG8-SuxYahVl5kGQqE7g3od.xml | 6 ++ .../1PgZFhG8-SuxYahVl5kGQqE7g3op.xml | 2 + .../S31mWBbtG-Vvk665YCYlMuN5f3Id.xml | 6 ++ .../S31mWBbtG-Vvk665YCYlMuN5f3Ip.xml | 2 + .../agxR7FUzCbenMOuGmnOZCKnzhHEd.xml | 2 + .../agxR7FUzCbenMOuGmnOZCKnzhHEp.xml | 2 + .../jGmTGeXPTUCqY6Yz0JL4Xzvq-vwd.xml | 2 + .../jGmTGeXPTUCqY6Yz0JL4Xzvq-vwp.xml | 2 + .../2kj09UetkV_lru3gvSPXnY6-nM4d.xml | 2 + .../2kj09UetkV_lru3gvSPXnY6-nM4p.xml | 2 + .../KKyDJtbdIBOlaeHmIZd5VX6vqx8d.xml | 2 + .../KKyDJtbdIBOlaeHmIZd5VX6vqx8p.xml | 2 + .../QWNDYJD5mGW1bWYvPx9DtKnxzw4d.xml | 2 + .../QWNDYJD5mGW1bWYvPx9DtKnxzw4p.xml | 2 + .../R1RggVhA72agIvELiuhWPRS8F0Id.xml | 2 + .../R1RggVhA72agIvELiuhWPRS8F0Ip.xml | 2 + .../aEHSZBIY-yve10yGis12Zr5DLZod.xml | 2 + .../aEHSZBIY-yve10yGis12Zr5DLZop.xml | 2 + .../j4xwF_j8iFTVayUMfxLgMnTbencd.xml | 2 + .../j4xwF_j8iFTVayUMfxLgMnTbencp.xml | 2 + .../r8LR4nLmg9ai3oHrW1r_-KocQzkd.xml | 2 + .../r8LR4nLmg9ai3oHrW1r_-KocQzkp.xml | 2 + MATLAB/resources/project/Project.xml | 2 + .../NjSPEMsIuLUyIpr2u1Js5bVPsOsd.xml | 2 + .../NjSPEMsIuLUyIpr2u1Js5bVPsOsp.xml | 2 + .../32hg-R6R6ittHOWhIh4DZPVb5rsd.xml | 6 ++ .../32hg-R6R6ittHOWhIh4DZPVb5rsp.xml | 2 + .../GsE4tZWk1JGZvQCh8ZydZ2iK5uAd.xml | 6 ++ .../GsE4tZWk1JGZvQCh8ZydZ2iK5uAp.xml | 2 + .../L5Q89yyOFpdrzPLZEcrDmmAiqmId.xml | 6 ++ .../L5Q89yyOFpdrzPLZEcrDmmAiqmIp.xml | 2 + .../MeTbvye31CJ5QGg4y_XiR-zLMb0d.xml | 6 ++ .../MeTbvye31CJ5QGg4y_XiR-zLMb0p.xml | 2 + .../TJtZnaKalHkjMylg0vZpwuGIvHQd.xml | 6 ++ .../TJtZnaKalHkjMylg0vZpwuGIvHQp.xml | 2 + .../_ZyFVSAbcQCJOYvtOlzFb6ld6Csd.xml | 6 ++ .../_ZyFVSAbcQCJOYvtOlzFb6ld6Csp.xml | 2 + .../_t6ocAidXHvoMiLlgehX8Rvgp24d.xml | 6 ++ .../_t6ocAidXHvoMiLlgehX8Rvgp24p.xml | 2 + .../jK7EMEUDRNuKi-0AEZAlz3jnK84d.xml | 6 ++ .../jK7EMEUDRNuKi-0AEZAlz3jnK84p.xml | 2 + .../ke8oo_T4rXsodR2TnfWsdO7g61Md.xml | 6 ++ .../ke8oo_T4rXsodR2TnfWsdO7g61Mp.xml | 2 + .../q_bjYALhpJyTkCbTXJayEB7uvjkd.xml | 6 ++ .../q_bjYALhpJyTkCbTXJayEB7uvjkp.xml | 2 + .../sn8WJCpgjh7HujuxMa8snw_nddEd.xml | 6 ++ .../sn8WJCpgjh7HujuxMa8snw_nddEp.xml | 2 + .../uNg6cwBepDJuMJXYaG-n8vwcAmod.xml | 6 ++ .../uNg6cwBepDJuMJXYaG-n8vwcAmop.xml | 2 + .../vqxmpMUs_JRyVoyp0EUiNFGJHFgd.xml | 2 + .../vqxmpMUs_JRyVoyp0EUiNFGJHFgp.xml | 2 + .../FI0gxbH-PhwjE_riDQGHPyYMHksd.xml | 2 + .../FI0gxbH-PhwjE_riDQGHPyYMHksp.xml | 2 + .../J6OKE3cEAc4lULJuyONxFqjMVdgd.xml | 6 ++ .../J6OKE3cEAc4lULJuyONxFqjMVdgp.xml | 2 + .../L-idrZRjZXZ8jYd7-E8teU8ewW4d.xml | 2 + .../L-idrZRjZXZ8jYd7-E8teU8ewW4p.xml | 2 + .../VnIFH2A3TslAk9TVhONjbGBJYosd.xml | 6 ++ .../VnIFH2A3TslAk9TVhONjbGBJYosp.xml | 2 + .../dbaDl4AUhYvN4Xb6qgAQ2WDPaAgd.xml | 6 ++ .../dbaDl4AUhYvN4Xb6qgAQ2WDPaAgp.xml | 2 + .../root/EEtUlUb-dLAdf0KpMVivaUlztwAp.xml | 2 + .../root/GiiBklLgTxteCEmomM8RCvWT0nQd.xml | 2 + .../root/GiiBklLgTxteCEmomM8RCvWT0nQp.xml | 2 + .../root/fjRQtWiSIy7hIlj-Kmk87M7s21kp.xml | 2 + .../root/qaw0eS1zuuY1ar9TdPn1GMfrjbQp.xml | 2 + MATLAB/resources/project/rootp.xml | 2 + ...d-3fc8ea3b-824c-4dcb-9c98-20001c12bf4c.xml | 2 + MATLAB/{ => tbx/+sdmx}/addProvider.m | 2 +- MATLAB/{ => tbx/+sdmx}/convert.m | 0 MATLAB/{ => tbx/+sdmx}/convertTable.m | 0 MATLAB/{ => tbx/+sdmx}/getCodes.m | 2 +- MATLAB/{ => tbx/+sdmx}/getDSDIdentifier.m | 2 +- MATLAB/{ => tbx/+sdmx}/getDimensions.m | 2 +- MATLAB/{ => tbx/+sdmx}/getFlows.m | 2 +- MATLAB/{ => tbx/+sdmx}/getProviders.m | 2 +- MATLAB/{ => tbx/+sdmx}/getTimeSeries.m | 4 +- .../{ => tbx/+sdmx}/getTimeSeriesRevisions.m | 4 +- MATLAB/{ => tbx/+sdmx}/getTimeSeriesTable.m | 4 +- MATLAB/{ => tbx/+sdmx}/initClasspath.m | 0 MATLAB/{ => tbx}/sdmxHelp.m | 2 +- MATLAB/{ => tbx}/sdmxtable.m | 0 MATLAB/test/testSDMX.m | 86 +++++++++++-------- 97 files changed, 319 insertions(+), 100 deletions(-) create mode 100644 MATLAB/SDMX.prj create mode 100644 MATLAB/buildfile.m delete mode 100644 MATLAB/demo.m create mode 100644 MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/Ch430yJIsZDBUwjDly5EsAEAETUd.xml create mode 100644 MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/Ch430yJIsZDBUwjDly5EsAEAETUp.xml create mode 100644 MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/O-NHIa353mNE2axXKkr0QQbqSvId.xml create mode 100644 MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/O-NHIa353mNE2axXKkr0QQbqSvIp.xml create mode 100644 MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/zLRkliQKdihgIKg2Ye1PsVPqYHUd.xml create mode 100644 MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/zLRkliQKdihgIKg2Ye1PsVPqYHUp.xml create mode 100644 MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/5Lk_HLOyBtA13ybsC7_0l8N5sPcd.xml create mode 100644 MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/5Lk_HLOyBtA13ybsC7_0l8N5sPcp.xml create mode 100644 MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/xa5ZQ1ctC9gD-szmjQfSt2CpR7kd.xml create mode 100644 MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/xa5ZQ1ctC9gD-szmjQfSt2CpR7kp.xml create mode 100644 MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/1PgZFhG8-SuxYahVl5kGQqE7g3od.xml create mode 100644 MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/1PgZFhG8-SuxYahVl5kGQqE7g3op.xml create mode 100644 MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/S31mWBbtG-Vvk665YCYlMuN5f3Id.xml create mode 100644 MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/S31mWBbtG-Vvk665YCYlMuN5f3Ip.xml create mode 100644 MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/agxR7FUzCbenMOuGmnOZCKnzhHEd.xml create mode 100644 MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/agxR7FUzCbenMOuGmnOZCKnzhHEp.xml create mode 100644 MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/jGmTGeXPTUCqY6Yz0JL4Xzvq-vwd.xml create mode 100644 MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/jGmTGeXPTUCqY6Yz0JL4Xzvq-vwp.xml create mode 100644 MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/2kj09UetkV_lru3gvSPXnY6-nM4d.xml create mode 100644 MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/2kj09UetkV_lru3gvSPXnY6-nM4p.xml create mode 100644 MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/KKyDJtbdIBOlaeHmIZd5VX6vqx8d.xml create mode 100644 MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/KKyDJtbdIBOlaeHmIZd5VX6vqx8p.xml create mode 100644 MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/QWNDYJD5mGW1bWYvPx9DtKnxzw4d.xml create mode 100644 MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/QWNDYJD5mGW1bWYvPx9DtKnxzw4p.xml create mode 100644 MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/R1RggVhA72agIvELiuhWPRS8F0Id.xml create mode 100644 MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/R1RggVhA72agIvELiuhWPRS8F0Ip.xml create mode 100644 MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/aEHSZBIY-yve10yGis12Zr5DLZod.xml create mode 100644 MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/aEHSZBIY-yve10yGis12Zr5DLZop.xml create mode 100644 MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/j4xwF_j8iFTVayUMfxLgMnTbencd.xml create mode 100644 MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/j4xwF_j8iFTVayUMfxLgMnTbencp.xml create mode 100644 MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/r8LR4nLmg9ai3oHrW1r_-KocQzkd.xml create mode 100644 MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/r8LR4nLmg9ai3oHrW1r_-KocQzkp.xml create mode 100644 MATLAB/resources/project/Project.xml create mode 100644 MATLAB/resources/project/fjRQtWiSIy7hIlj-Kmk87M7s21k/NjSPEMsIuLUyIpr2u1Js5bVPsOsd.xml create mode 100644 MATLAB/resources/project/fjRQtWiSIy7hIlj-Kmk87M7s21k/NjSPEMsIuLUyIpr2u1Js5bVPsOsp.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/32hg-R6R6ittHOWhIh4DZPVb5rsd.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/32hg-R6R6ittHOWhIh4DZPVb5rsp.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/GsE4tZWk1JGZvQCh8ZydZ2iK5uAd.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/GsE4tZWk1JGZvQCh8ZydZ2iK5uAp.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/L5Q89yyOFpdrzPLZEcrDmmAiqmId.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/L5Q89yyOFpdrzPLZEcrDmmAiqmIp.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/MeTbvye31CJ5QGg4y_XiR-zLMb0d.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/MeTbvye31CJ5QGg4y_XiR-zLMb0p.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/TJtZnaKalHkjMylg0vZpwuGIvHQd.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/TJtZnaKalHkjMylg0vZpwuGIvHQp.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_ZyFVSAbcQCJOYvtOlzFb6ld6Csd.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_ZyFVSAbcQCJOYvtOlzFb6ld6Csp.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_t6ocAidXHvoMiLlgehX8Rvgp24d.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_t6ocAidXHvoMiLlgehX8Rvgp24p.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/jK7EMEUDRNuKi-0AEZAlz3jnK84d.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/jK7EMEUDRNuKi-0AEZAlz3jnK84p.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/ke8oo_T4rXsodR2TnfWsdO7g61Md.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/ke8oo_T4rXsodR2TnfWsdO7g61Mp.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/q_bjYALhpJyTkCbTXJayEB7uvjkd.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/q_bjYALhpJyTkCbTXJayEB7uvjkp.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/sn8WJCpgjh7HujuxMa8snw_nddEd.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/sn8WJCpgjh7HujuxMa8snw_nddEp.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/uNg6cwBepDJuMJXYaG-n8vwcAmod.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/uNg6cwBepDJuMJXYaG-n8vwcAmop.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/vqxmpMUs_JRyVoyp0EUiNFGJHFgd.xml create mode 100644 MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/vqxmpMUs_JRyVoyp0EUiNFGJHFgp.xml create mode 100644 MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/FI0gxbH-PhwjE_riDQGHPyYMHksd.xml create mode 100644 MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/FI0gxbH-PhwjE_riDQGHPyYMHksp.xml create mode 100644 MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/J6OKE3cEAc4lULJuyONxFqjMVdgd.xml create mode 100644 MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/J6OKE3cEAc4lULJuyONxFqjMVdgp.xml create mode 100644 MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/L-idrZRjZXZ8jYd7-E8teU8ewW4d.xml create mode 100644 MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/L-idrZRjZXZ8jYd7-E8teU8ewW4p.xml create mode 100644 MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/VnIFH2A3TslAk9TVhONjbGBJYosd.xml create mode 100644 MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/VnIFH2A3TslAk9TVhONjbGBJYosp.xml create mode 100644 MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/dbaDl4AUhYvN4Xb6qgAQ2WDPaAgd.xml create mode 100644 MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/dbaDl4AUhYvN4Xb6qgAQ2WDPaAgp.xml create mode 100644 MATLAB/resources/project/root/EEtUlUb-dLAdf0KpMVivaUlztwAp.xml create mode 100644 MATLAB/resources/project/root/GiiBklLgTxteCEmomM8RCvWT0nQd.xml create mode 100644 MATLAB/resources/project/root/GiiBklLgTxteCEmomM8RCvWT0nQp.xml create mode 100644 MATLAB/resources/project/root/fjRQtWiSIy7hIlj-Kmk87M7s21kp.xml create mode 100644 MATLAB/resources/project/root/qaw0eS1zuuY1ar9TdPn1GMfrjbQp.xml create mode 100644 MATLAB/resources/project/rootp.xml create mode 100644 MATLAB/resources/project/uuid-3fc8ea3b-824c-4dcb-9c98-20001c12bf4c.xml rename MATLAB/{ => tbx/+sdmx}/addProvider.m (99%) rename MATLAB/{ => tbx/+sdmx}/convert.m (100%) rename MATLAB/{ => tbx/+sdmx}/convertTable.m (100%) rename MATLAB/{ => tbx/+sdmx}/getCodes.m (98%) rename MATLAB/{ => tbx/+sdmx}/getDSDIdentifier.m (98%) rename MATLAB/{ => tbx/+sdmx}/getDimensions.m (98%) rename MATLAB/{ => tbx/+sdmx}/getFlows.m (98%) rename MATLAB/{ => tbx/+sdmx}/getProviders.m (97%) rename MATLAB/{ => tbx/+sdmx}/getTimeSeries.m (97%) rename MATLAB/{ => tbx/+sdmx}/getTimeSeriesRevisions.m (98%) rename MATLAB/{ => tbx/+sdmx}/getTimeSeriesTable.m (97%) rename MATLAB/{ => tbx/+sdmx}/initClasspath.m (100%) rename MATLAB/{ => tbx}/sdmxHelp.m (97%) rename MATLAB/{ => tbx}/sdmxtable.m (100%) diff --git a/MATLAB/Contents.m b/MATLAB/Contents.m index 2286821c..356396ba 100644 --- a/MATLAB/Contents.m +++ b/MATLAB/Contents.m @@ -5,7 +5,7 @@ % Files % % getProviders - get the list of available data providers -% addProvider - add a new provider (SDMX 2.1) to the internal registry +% sdmx.addProvider - add a new provider (SDMX 2.1) to the internal registry % getFlows - get the list of available data flows for the input provider % getDimensions - get the list of dimensions for the input dataflow % getDSDIdentifier - get the name of the DSD for the input dataflow diff --git a/MATLAB/SDMX.prj b/MATLAB/SDMX.prj new file mode 100644 index 00000000..92c66969 --- /dev/null +++ b/MATLAB/SDMX.prj @@ -0,0 +1,2 @@ + + diff --git a/MATLAB/buildfile.m b/MATLAB/buildfile.m new file mode 100644 index 00000000..5d15ae90 --- /dev/null +++ b/MATLAB/buildfile.m @@ -0,0 +1,26 @@ +function plan = buildfile +import matlab.buildtool.tasks.CodeIssuesTask +import matlab.buildtool.tasks.TestTask + +% Create a plan from task functions +plan = buildplan(localfunctions); + +% Add the "check" task to identify code issues +plan("check") = CodeIssuesTask; + +% Add the "test" task to run tests +plan("test") = TestTask; + +% Make the "archive" task the default task in the plan +plan.DefaultTasks = "archive"; + +% Make the "archive" task dependent on the "check" and "test" tasks +plan("archive").Dependencies = ["check" "test"]; +end + +function archiveTask(~) +% Create ZIP file +filename = "source_" + ... + string(datetime("now",Format="yyyyMMdd'T'HHmmss")); +zip(filename,"*") +end \ No newline at end of file diff --git a/MATLAB/demo.m b/MATLAB/demo.m deleted file mode 100644 index dc8e26dd..00000000 --- a/MATLAB/demo.m +++ /dev/null @@ -1,49 +0,0 @@ - -% Simple script for DEMO/TEST purposes -% -% ############################################################################################# -% Copyright 2010,2014 Bank Of Italy -% -% Licensed under the EUPL, Version 1.1 or as soon as they -% will be approved by the European Commission - subsequent -% versions of the EUPL (the "Licence"); -% You may not use this work except in compliance with the -% Licence. -% You may obtain a copy of the Licence at: -% -% -% http://ec.europa.eu/idabc/eupl -% -% Unless required by applicable law or agreed to in -% writing, software distributed under the Licence is -% distributed on an "AS IS" basis, -% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -% express or implied. -% See the Licence for the specific language governing -% permissions and limitations under the Licence. -% -getProviders - -flows = getFlows('ECB') -flows.keys -flows.values -flows('EXR') - -getDimensions('ECB', 'EXR') - -tts = getTimeSeries('ECB', 'EXR.M.USD|GBP.EUR.SP00.A') -tts{1}.UserData -tts{1}.UserData('TITLE_COMPL') -plot(tts{1}) - -flows = getFlows('EUROSTAT') -flows.keys -flows.values - -getDimensions('EUROSTAT', 'prc_hicp_midx') - -tts = getTimeSeries('EUROSTAT', 'prc_hicp_midx/..CP00.EU+DE+FR') -plot(tts{1}) - -sdmxHelp - diff --git a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/Ch430yJIsZDBUwjDly5EsAEAETUd.xml b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/Ch430yJIsZDBUwjDly5EsAEAETUd.xml new file mode 100644 index 00000000..aee0cde3 --- /dev/null +++ b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/Ch430yJIsZDBUwjDly5EsAEAETUd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/Ch430yJIsZDBUwjDly5EsAEAETUp.xml b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/Ch430yJIsZDBUwjDly5EsAEAETUp.xml new file mode 100644 index 00000000..3e258f00 --- /dev/null +++ b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/Ch430yJIsZDBUwjDly5EsAEAETUp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/O-NHIa353mNE2axXKkr0QQbqSvId.xml b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/O-NHIa353mNE2axXKkr0QQbqSvId.xml new file mode 100644 index 00000000..5be48de9 --- /dev/null +++ b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/O-NHIa353mNE2axXKkr0QQbqSvId.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/O-NHIa353mNE2axXKkr0QQbqSvIp.xml b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/O-NHIa353mNE2axXKkr0QQbqSvIp.xml new file mode 100644 index 00000000..c301cf33 --- /dev/null +++ b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/O-NHIa353mNE2axXKkr0QQbqSvIp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/zLRkliQKdihgIKg2Ye1PsVPqYHUd.xml b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/zLRkliQKdihgIKg2Ye1PsVPqYHUd.xml new file mode 100644 index 00000000..47f56b5d --- /dev/null +++ b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/zLRkliQKdihgIKg2Ye1PsVPqYHUd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/zLRkliQKdihgIKg2Ye1PsVPqYHUp.xml b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/zLRkliQKdihgIKg2Ye1PsVPqYHUp.xml new file mode 100644 index 00000000..b265b715 --- /dev/null +++ b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/zLRkliQKdihgIKg2Ye1PsVPqYHUp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/5Lk_HLOyBtA13ybsC7_0l8N5sPcd.xml b/MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/5Lk_HLOyBtA13ybsC7_0l8N5sPcd.xml new file mode 100644 index 00000000..a75f7a81 --- /dev/null +++ b/MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/5Lk_HLOyBtA13ybsC7_0l8N5sPcd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/5Lk_HLOyBtA13ybsC7_0l8N5sPcp.xml b/MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/5Lk_HLOyBtA13ybsC7_0l8N5sPcp.xml new file mode 100644 index 00000000..842de6ab --- /dev/null +++ b/MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/5Lk_HLOyBtA13ybsC7_0l8N5sPcp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/xa5ZQ1ctC9gD-szmjQfSt2CpR7kd.xml b/MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/xa5ZQ1ctC9gD-szmjQfSt2CpR7kd.xml new file mode 100644 index 00000000..30f473b5 --- /dev/null +++ b/MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/xa5ZQ1ctC9gD-szmjQfSt2CpR7kd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/xa5ZQ1ctC9gD-szmjQfSt2CpR7kp.xml b/MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/xa5ZQ1ctC9gD-szmjQfSt2CpR7kp.xml new file mode 100644 index 00000000..7c111a27 --- /dev/null +++ b/MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/xa5ZQ1ctC9gD-szmjQfSt2CpR7kp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/1PgZFhG8-SuxYahVl5kGQqE7g3od.xml b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/1PgZFhG8-SuxYahVl5kGQqE7g3od.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/1PgZFhG8-SuxYahVl5kGQqE7g3od.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/1PgZFhG8-SuxYahVl5kGQqE7g3op.xml b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/1PgZFhG8-SuxYahVl5kGQqE7g3op.xml new file mode 100644 index 00000000..e6a72c77 --- /dev/null +++ b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/1PgZFhG8-SuxYahVl5kGQqE7g3op.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/S31mWBbtG-Vvk665YCYlMuN5f3Id.xml b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/S31mWBbtG-Vvk665YCYlMuN5f3Id.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/S31mWBbtG-Vvk665YCYlMuN5f3Id.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/S31mWBbtG-Vvk665YCYlMuN5f3Ip.xml b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/S31mWBbtG-Vvk665YCYlMuN5f3Ip.xml new file mode 100644 index 00000000..3656b7a0 --- /dev/null +++ b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/S31mWBbtG-Vvk665YCYlMuN5f3Ip.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/agxR7FUzCbenMOuGmnOZCKnzhHEd.xml b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/agxR7FUzCbenMOuGmnOZCKnzhHEd.xml new file mode 100644 index 00000000..a75f7a81 --- /dev/null +++ b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/agxR7FUzCbenMOuGmnOZCKnzhHEd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/agxR7FUzCbenMOuGmnOZCKnzhHEp.xml b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/agxR7FUzCbenMOuGmnOZCKnzhHEp.xml new file mode 100644 index 00000000..842de6ab --- /dev/null +++ b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/agxR7FUzCbenMOuGmnOZCKnzhHEp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/jGmTGeXPTUCqY6Yz0JL4Xzvq-vwd.xml b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/jGmTGeXPTUCqY6Yz0JL4Xzvq-vwd.xml new file mode 100644 index 00000000..a75f7a81 --- /dev/null +++ b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/jGmTGeXPTUCqY6Yz0JL4Xzvq-vwd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/jGmTGeXPTUCqY6Yz0JL4Xzvq-vwp.xml b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/jGmTGeXPTUCqY6Yz0JL4Xzvq-vwp.xml new file mode 100644 index 00000000..4f7668fb --- /dev/null +++ b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/jGmTGeXPTUCqY6Yz0JL4Xzvq-vwp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/2kj09UetkV_lru3gvSPXnY6-nM4d.xml b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/2kj09UetkV_lru3gvSPXnY6-nM4d.xml new file mode 100644 index 00000000..7c095251 --- /dev/null +++ b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/2kj09UetkV_lru3gvSPXnY6-nM4d.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/2kj09UetkV_lru3gvSPXnY6-nM4p.xml b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/2kj09UetkV_lru3gvSPXnY6-nM4p.xml new file mode 100644 index 00000000..14fcc348 --- /dev/null +++ b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/2kj09UetkV_lru3gvSPXnY6-nM4p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/KKyDJtbdIBOlaeHmIZd5VX6vqx8d.xml b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/KKyDJtbdIBOlaeHmIZd5VX6vqx8d.xml new file mode 100644 index 00000000..fbb2a47f --- /dev/null +++ b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/KKyDJtbdIBOlaeHmIZd5VX6vqx8d.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/KKyDJtbdIBOlaeHmIZd5VX6vqx8p.xml b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/KKyDJtbdIBOlaeHmIZd5VX6vqx8p.xml new file mode 100644 index 00000000..9916b1e9 --- /dev/null +++ b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/KKyDJtbdIBOlaeHmIZd5VX6vqx8p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/QWNDYJD5mGW1bWYvPx9DtKnxzw4d.xml b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/QWNDYJD5mGW1bWYvPx9DtKnxzw4d.xml new file mode 100644 index 00000000..61bc2663 --- /dev/null +++ b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/QWNDYJD5mGW1bWYvPx9DtKnxzw4d.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/QWNDYJD5mGW1bWYvPx9DtKnxzw4p.xml b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/QWNDYJD5mGW1bWYvPx9DtKnxzw4p.xml new file mode 100644 index 00000000..23b0eab3 --- /dev/null +++ b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/QWNDYJD5mGW1bWYvPx9DtKnxzw4p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/R1RggVhA72agIvELiuhWPRS8F0Id.xml b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/R1RggVhA72agIvELiuhWPRS8F0Id.xml new file mode 100644 index 00000000..96226df7 --- /dev/null +++ b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/R1RggVhA72agIvELiuhWPRS8F0Id.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/R1RggVhA72agIvELiuhWPRS8F0Ip.xml b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/R1RggVhA72agIvELiuhWPRS8F0Ip.xml new file mode 100644 index 00000000..70b5b070 --- /dev/null +++ b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/R1RggVhA72agIvELiuhWPRS8F0Ip.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/aEHSZBIY-yve10yGis12Zr5DLZod.xml b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/aEHSZBIY-yve10yGis12Zr5DLZod.xml new file mode 100644 index 00000000..5b30f4e8 --- /dev/null +++ b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/aEHSZBIY-yve10yGis12Zr5DLZod.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/aEHSZBIY-yve10yGis12Zr5DLZop.xml b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/aEHSZBIY-yve10yGis12Zr5DLZop.xml new file mode 100644 index 00000000..817277da --- /dev/null +++ b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/aEHSZBIY-yve10yGis12Zr5DLZop.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/j4xwF_j8iFTVayUMfxLgMnTbencd.xml b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/j4xwF_j8iFTVayUMfxLgMnTbencd.xml new file mode 100644 index 00000000..e47ab1f1 --- /dev/null +++ b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/j4xwF_j8iFTVayUMfxLgMnTbencd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/j4xwF_j8iFTVayUMfxLgMnTbencp.xml b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/j4xwF_j8iFTVayUMfxLgMnTbencp.xml new file mode 100644 index 00000000..15f4e1e7 --- /dev/null +++ b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/j4xwF_j8iFTVayUMfxLgMnTbencp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/r8LR4nLmg9ai3oHrW1r_-KocQzkd.xml b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/r8LR4nLmg9ai3oHrW1r_-KocQzkd.xml new file mode 100644 index 00000000..f9f98e8f --- /dev/null +++ b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/r8LR4nLmg9ai3oHrW1r_-KocQzkd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/r8LR4nLmg9ai3oHrW1r_-KocQzkp.xml b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/r8LR4nLmg9ai3oHrW1r_-KocQzkp.xml new file mode 100644 index 00000000..1aed36c3 --- /dev/null +++ b/MATLAB/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/r8LR4nLmg9ai3oHrW1r_-KocQzkp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/Project.xml b/MATLAB/resources/project/Project.xml new file mode 100644 index 00000000..0232696f --- /dev/null +++ b/MATLAB/resources/project/Project.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/fjRQtWiSIy7hIlj-Kmk87M7s21k/NjSPEMsIuLUyIpr2u1Js5bVPsOsd.xml b/MATLAB/resources/project/fjRQtWiSIy7hIlj-Kmk87M7s21k/NjSPEMsIuLUyIpr2u1Js5bVPsOsd.xml new file mode 100644 index 00000000..310a18c3 --- /dev/null +++ b/MATLAB/resources/project/fjRQtWiSIy7hIlj-Kmk87M7s21k/NjSPEMsIuLUyIpr2u1Js5bVPsOsd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/fjRQtWiSIy7hIlj-Kmk87M7s21k/NjSPEMsIuLUyIpr2u1Js5bVPsOsp.xml b/MATLAB/resources/project/fjRQtWiSIy7hIlj-Kmk87M7s21k/NjSPEMsIuLUyIpr2u1Js5bVPsOsp.xml new file mode 100644 index 00000000..d6808df7 --- /dev/null +++ b/MATLAB/resources/project/fjRQtWiSIy7hIlj-Kmk87M7s21k/NjSPEMsIuLUyIpr2u1Js5bVPsOsp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/32hg-R6R6ittHOWhIh4DZPVb5rsd.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/32hg-R6R6ittHOWhIh4DZPVb5rsd.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/32hg-R6R6ittHOWhIh4DZPVb5rsd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/32hg-R6R6ittHOWhIh4DZPVb5rsp.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/32hg-R6R6ittHOWhIh4DZPVb5rsp.xml new file mode 100644 index 00000000..b5012ff5 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/32hg-R6R6ittHOWhIh4DZPVb5rsp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/GsE4tZWk1JGZvQCh8ZydZ2iK5uAd.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/GsE4tZWk1JGZvQCh8ZydZ2iK5uAd.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/GsE4tZWk1JGZvQCh8ZydZ2iK5uAd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/GsE4tZWk1JGZvQCh8ZydZ2iK5uAp.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/GsE4tZWk1JGZvQCh8ZydZ2iK5uAp.xml new file mode 100644 index 00000000..5a2660f9 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/GsE4tZWk1JGZvQCh8ZydZ2iK5uAp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/L5Q89yyOFpdrzPLZEcrDmmAiqmId.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/L5Q89yyOFpdrzPLZEcrDmmAiqmId.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/L5Q89yyOFpdrzPLZEcrDmmAiqmId.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/L5Q89yyOFpdrzPLZEcrDmmAiqmIp.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/L5Q89yyOFpdrzPLZEcrDmmAiqmIp.xml new file mode 100644 index 00000000..180e0209 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/L5Q89yyOFpdrzPLZEcrDmmAiqmIp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/MeTbvye31CJ5QGg4y_XiR-zLMb0d.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/MeTbvye31CJ5QGg4y_XiR-zLMb0d.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/MeTbvye31CJ5QGg4y_XiR-zLMb0d.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/MeTbvye31CJ5QGg4y_XiR-zLMb0p.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/MeTbvye31CJ5QGg4y_XiR-zLMb0p.xml new file mode 100644 index 00000000..6125c725 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/MeTbvye31CJ5QGg4y_XiR-zLMb0p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/TJtZnaKalHkjMylg0vZpwuGIvHQd.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/TJtZnaKalHkjMylg0vZpwuGIvHQd.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/TJtZnaKalHkjMylg0vZpwuGIvHQd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/TJtZnaKalHkjMylg0vZpwuGIvHQp.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/TJtZnaKalHkjMylg0vZpwuGIvHQp.xml new file mode 100644 index 00000000..db0f8cb2 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/TJtZnaKalHkjMylg0vZpwuGIvHQp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_ZyFVSAbcQCJOYvtOlzFb6ld6Csd.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_ZyFVSAbcQCJOYvtOlzFb6ld6Csd.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_ZyFVSAbcQCJOYvtOlzFb6ld6Csd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_ZyFVSAbcQCJOYvtOlzFb6ld6Csp.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_ZyFVSAbcQCJOYvtOlzFb6ld6Csp.xml new file mode 100644 index 00000000..15190d18 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_ZyFVSAbcQCJOYvtOlzFb6ld6Csp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_t6ocAidXHvoMiLlgehX8Rvgp24d.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_t6ocAidXHvoMiLlgehX8Rvgp24d.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_t6ocAidXHvoMiLlgehX8Rvgp24d.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_t6ocAidXHvoMiLlgehX8Rvgp24p.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_t6ocAidXHvoMiLlgehX8Rvgp24p.xml new file mode 100644 index 00000000..0f8cba01 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_t6ocAidXHvoMiLlgehX8Rvgp24p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/jK7EMEUDRNuKi-0AEZAlz3jnK84d.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/jK7EMEUDRNuKi-0AEZAlz3jnK84d.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/jK7EMEUDRNuKi-0AEZAlz3jnK84d.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/jK7EMEUDRNuKi-0AEZAlz3jnK84p.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/jK7EMEUDRNuKi-0AEZAlz3jnK84p.xml new file mode 100644 index 00000000..81d4be24 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/jK7EMEUDRNuKi-0AEZAlz3jnK84p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/ke8oo_T4rXsodR2TnfWsdO7g61Md.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/ke8oo_T4rXsodR2TnfWsdO7g61Md.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/ke8oo_T4rXsodR2TnfWsdO7g61Md.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/ke8oo_T4rXsodR2TnfWsdO7g61Mp.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/ke8oo_T4rXsodR2TnfWsdO7g61Mp.xml new file mode 100644 index 00000000..d9ce7958 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/ke8oo_T4rXsodR2TnfWsdO7g61Mp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/q_bjYALhpJyTkCbTXJayEB7uvjkd.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/q_bjYALhpJyTkCbTXJayEB7uvjkd.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/q_bjYALhpJyTkCbTXJayEB7uvjkd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/q_bjYALhpJyTkCbTXJayEB7uvjkp.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/q_bjYALhpJyTkCbTXJayEB7uvjkp.xml new file mode 100644 index 00000000..c7b91a91 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/q_bjYALhpJyTkCbTXJayEB7uvjkp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/sn8WJCpgjh7HujuxMa8snw_nddEd.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/sn8WJCpgjh7HujuxMa8snw_nddEd.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/sn8WJCpgjh7HujuxMa8snw_nddEd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/sn8WJCpgjh7HujuxMa8snw_nddEp.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/sn8WJCpgjh7HujuxMa8snw_nddEp.xml new file mode 100644 index 00000000..eeaa59c7 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/sn8WJCpgjh7HujuxMa8snw_nddEp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/uNg6cwBepDJuMJXYaG-n8vwcAmod.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/uNg6cwBepDJuMJXYaG-n8vwcAmod.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/uNg6cwBepDJuMJXYaG-n8vwcAmod.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/uNg6cwBepDJuMJXYaG-n8vwcAmop.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/uNg6cwBepDJuMJXYaG-n8vwcAmop.xml new file mode 100644 index 00000000..d33ce1c9 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/uNg6cwBepDJuMJXYaG-n8vwcAmop.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/vqxmpMUs_JRyVoyp0EUiNFGJHFgd.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/vqxmpMUs_JRyVoyp0EUiNFGJHFgd.xml new file mode 100644 index 00000000..a75f7a81 --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/vqxmpMUs_JRyVoyp0EUiNFGJHFgd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/vqxmpMUs_JRyVoyp0EUiNFGJHFgp.xml b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/vqxmpMUs_JRyVoyp0EUiNFGJHFgp.xml new file mode 100644 index 00000000..842de6ab --- /dev/null +++ b/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/vqxmpMUs_JRyVoyp0EUiNFGJHFgp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/FI0gxbH-PhwjE_riDQGHPyYMHksd.xml b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/FI0gxbH-PhwjE_riDQGHPyYMHksd.xml new file mode 100644 index 00000000..a75f7a81 --- /dev/null +++ b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/FI0gxbH-PhwjE_riDQGHPyYMHksd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/FI0gxbH-PhwjE_riDQGHPyYMHksp.xml b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/FI0gxbH-PhwjE_riDQGHPyYMHksp.xml new file mode 100644 index 00000000..3c4de0f6 --- /dev/null +++ b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/FI0gxbH-PhwjE_riDQGHPyYMHksp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/J6OKE3cEAc4lULJuyONxFqjMVdgd.xml b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/J6OKE3cEAc4lULJuyONxFqjMVdgd.xml new file mode 100644 index 00000000..0675ae34 --- /dev/null +++ b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/J6OKE3cEAc4lULJuyONxFqjMVdgd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/J6OKE3cEAc4lULJuyONxFqjMVdgp.xml b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/J6OKE3cEAc4lULJuyONxFqjMVdgp.xml new file mode 100644 index 00000000..e0d35076 --- /dev/null +++ b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/J6OKE3cEAc4lULJuyONxFqjMVdgp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/L-idrZRjZXZ8jYd7-E8teU8ewW4d.xml b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/L-idrZRjZXZ8jYd7-E8teU8ewW4d.xml new file mode 100644 index 00000000..a75f7a81 --- /dev/null +++ b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/L-idrZRjZXZ8jYd7-E8teU8ewW4d.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/L-idrZRjZXZ8jYd7-E8teU8ewW4p.xml b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/L-idrZRjZXZ8jYd7-E8teU8ewW4p.xml new file mode 100644 index 00000000..c74525ef --- /dev/null +++ b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/L-idrZRjZXZ8jYd7-E8teU8ewW4p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/VnIFH2A3TslAk9TVhONjbGBJYosd.xml b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/VnIFH2A3TslAk9TVhONjbGBJYosd.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/VnIFH2A3TslAk9TVhONjbGBJYosd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/VnIFH2A3TslAk9TVhONjbGBJYosp.xml b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/VnIFH2A3TslAk9TVhONjbGBJYosp.xml new file mode 100644 index 00000000..cd43341f --- /dev/null +++ b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/VnIFH2A3TslAk9TVhONjbGBJYosp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/dbaDl4AUhYvN4Xb6qgAQ2WDPaAgd.xml b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/dbaDl4AUhYvN4Xb6qgAQ2WDPaAgd.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/dbaDl4AUhYvN4Xb6qgAQ2WDPaAgd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/dbaDl4AUhYvN4Xb6qgAQ2WDPaAgp.xml b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/dbaDl4AUhYvN4Xb6qgAQ2WDPaAgp.xml new file mode 100644 index 00000000..8d960b8e --- /dev/null +++ b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/dbaDl4AUhYvN4Xb6qgAQ2WDPaAgp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/root/EEtUlUb-dLAdf0KpMVivaUlztwAp.xml b/MATLAB/resources/project/root/EEtUlUb-dLAdf0KpMVivaUlztwAp.xml new file mode 100644 index 00000000..c9d8bed8 --- /dev/null +++ b/MATLAB/resources/project/root/EEtUlUb-dLAdf0KpMVivaUlztwAp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/root/GiiBklLgTxteCEmomM8RCvWT0nQd.xml b/MATLAB/resources/project/root/GiiBklLgTxteCEmomM8RCvWT0nQd.xml new file mode 100644 index 00000000..5c3993f4 --- /dev/null +++ b/MATLAB/resources/project/root/GiiBklLgTxteCEmomM8RCvWT0nQd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/root/GiiBklLgTxteCEmomM8RCvWT0nQp.xml b/MATLAB/resources/project/root/GiiBklLgTxteCEmomM8RCvWT0nQp.xml new file mode 100644 index 00000000..2516b91f --- /dev/null +++ b/MATLAB/resources/project/root/GiiBklLgTxteCEmomM8RCvWT0nQp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/root/fjRQtWiSIy7hIlj-Kmk87M7s21kp.xml b/MATLAB/resources/project/root/fjRQtWiSIy7hIlj-Kmk87M7s21kp.xml new file mode 100644 index 00000000..f12944ef --- /dev/null +++ b/MATLAB/resources/project/root/fjRQtWiSIy7hIlj-Kmk87M7s21kp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/root/qaw0eS1zuuY1ar9TdPn1GMfrjbQp.xml b/MATLAB/resources/project/root/qaw0eS1zuuY1ar9TdPn1GMfrjbQp.xml new file mode 100644 index 00000000..67c6ed67 --- /dev/null +++ b/MATLAB/resources/project/root/qaw0eS1zuuY1ar9TdPn1GMfrjbQp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/rootp.xml b/MATLAB/resources/project/rootp.xml new file mode 100644 index 00000000..a75f7a81 --- /dev/null +++ b/MATLAB/resources/project/rootp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/uuid-3fc8ea3b-824c-4dcb-9c98-20001c12bf4c.xml b/MATLAB/resources/project/uuid-3fc8ea3b-824c-4dcb-9c98-20001c12bf4c.xml new file mode 100644 index 00000000..a75f7a81 --- /dev/null +++ b/MATLAB/resources/project/uuid-3fc8ea3b-824c-4dcb-9c98-20001c12bf4c.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/addProvider.m b/MATLAB/tbx/+sdmx/addProvider.m similarity index 99% rename from MATLAB/addProvider.m rename to MATLAB/tbx/+sdmx/addProvider.m index 549e0113..dfda08ef 100644 --- a/MATLAB/addProvider.m +++ b/MATLAB/tbx/+sdmx/addProvider.m @@ -37,7 +37,7 @@ function addProvider(name, endpoint, needsCredentials, needsURLEncoding, support %deal with arguments - initClasspath; + sdmx.initClasspath; if nargin <2 error(sprintf(['\nUsage: addProvider(name, endpoint, needsCredentials, needsURLEncoding, supportsCompression, description)\n\n' ... diff --git a/MATLAB/convert.m b/MATLAB/tbx/+sdmx/convert.m similarity index 100% rename from MATLAB/convert.m rename to MATLAB/tbx/+sdmx/convert.m diff --git a/MATLAB/convertTable.m b/MATLAB/tbx/+sdmx/convertTable.m similarity index 100% rename from MATLAB/convertTable.m rename to MATLAB/tbx/+sdmx/convertTable.m diff --git a/MATLAB/getCodes.m b/MATLAB/tbx/+sdmx/getCodes.m similarity index 98% rename from MATLAB/getCodes.m rename to MATLAB/tbx/+sdmx/getCodes.m index 3e2810fe..b826aa49 100644 --- a/MATLAB/getCodes.m +++ b/MATLAB/tbx/+sdmx/getCodes.m @@ -31,7 +31,7 @@ % permissions and limitations under the Licence. % -initClasspath; +sdmx.initClasspath; if nargin < 3 error(sprintf(['\nUsage: getCodes(provider, flow, dimension)\n\n' ... diff --git a/MATLAB/getDSDIdentifier.m b/MATLAB/tbx/+sdmx/getDSDIdentifier.m similarity index 98% rename from MATLAB/getDSDIdentifier.m rename to MATLAB/tbx/+sdmx/getDSDIdentifier.m index d61374a9..da4293df 100644 --- a/MATLAB/getDSDIdentifier.m +++ b/MATLAB/tbx/+sdmx/getDSDIdentifier.m @@ -30,7 +30,7 @@ % permissions and limitations under the Licence. % - initClasspath; + sdmx.initClasspath; if nargin <2 error(sprintf([ '\nUsage: getDSDIdentifier(provider, dataflow)\n\n' ... diff --git a/MATLAB/getDimensions.m b/MATLAB/tbx/+sdmx/getDimensions.m similarity index 98% rename from MATLAB/getDimensions.m rename to MATLAB/tbx/+sdmx/getDimensions.m index 17371fcf..a9c64f30 100644 --- a/MATLAB/getDimensions.m +++ b/MATLAB/tbx/+sdmx/getDimensions.m @@ -30,7 +30,7 @@ % permissions and limitations under the Licence. % - initClasspath; + sdmx.initClasspath; if nargin <2 error(sprintf([ '\nUsage: getDimensions(provider, dataflow)\n\n' ... diff --git a/MATLAB/getFlows.m b/MATLAB/tbx/+sdmx/getFlows.m similarity index 98% rename from MATLAB/getFlows.m rename to MATLAB/tbx/+sdmx/getFlows.m index 662bd045..115dfb56 100644 --- a/MATLAB/getFlows.m +++ b/MATLAB/tbx/+sdmx/getFlows.m @@ -31,7 +31,7 @@ % permissions and limitations under the Licence. % - initClasspath; + sdmx.initClasspath; if nargin == 0 error(sprintf(['\nUsage: getFlows(provider, pattern)\n\n' ... diff --git a/MATLAB/getProviders.m b/MATLAB/tbx/+sdmx/getProviders.m similarity index 97% rename from MATLAB/getProviders.m rename to MATLAB/tbx/+sdmx/getProviders.m index 38519078..4e520f33 100644 --- a/MATLAB/getProviders.m +++ b/MATLAB/tbx/+sdmx/getProviders.m @@ -25,7 +25,7 @@ % permissions and limitations under the Licence. % - initClasspath; + sdmx.initClasspath; try providers = it.bancaditalia.oss.sdmx.client.SdmxClientHandler.getProviders(); diff --git a/MATLAB/getTimeSeries.m b/MATLAB/tbx/+sdmx/getTimeSeries.m similarity index 97% rename from MATLAB/getTimeSeries.m rename to MATLAB/tbx/+sdmx/getTimeSeries.m index 730d5322..e0452cb8 100644 --- a/MATLAB/getTimeSeries.m +++ b/MATLAB/tbx/+sdmx/getTimeSeries.m @@ -37,7 +37,7 @@ %deal with arguments - initClasspath; + sdmx.initClasspath; if nargin <2 error(sprintf(['\nUsage: getTimeSeriesTable(provider, id, startTime, endTime)\n\n' ... @@ -70,7 +70,7 @@ end %convert - list = convert(result); + list = sdmx.convert(result); end diff --git a/MATLAB/getTimeSeriesRevisions.m b/MATLAB/tbx/+sdmx/getTimeSeriesRevisions.m similarity index 98% rename from MATLAB/getTimeSeriesRevisions.m rename to MATLAB/tbx/+sdmx/getTimeSeriesRevisions.m index 2cdc3e39..18bfbf1d 100644 --- a/MATLAB/getTimeSeriesRevisions.m +++ b/MATLAB/tbx/+sdmx/getTimeSeriesRevisions.m @@ -42,7 +42,7 @@ %deal with arguments - initClasspath; + sdmx.initClasspath; if nargin <2 error(sprintf(['\nUsage: getTimeSeriesTable(provider, id, startTime, endTime)\n\n' ... @@ -83,7 +83,7 @@ end %convert - tt = convertTable(result); + tt = sdmx.convertTable(result); end diff --git a/MATLAB/getTimeSeriesTable.m b/MATLAB/tbx/+sdmx/getTimeSeriesTable.m similarity index 97% rename from MATLAB/getTimeSeriesTable.m rename to MATLAB/tbx/+sdmx/getTimeSeriesTable.m index f2d83427..5941f2f5 100644 --- a/MATLAB/getTimeSeriesTable.m +++ b/MATLAB/tbx/+sdmx/getTimeSeriesTable.m @@ -38,7 +38,7 @@ %deal with arguments - initClasspath; + sdmx.initClasspath; if nargin <2 error(sprintf(['\nUsage: getTimeSeriesTable(provider, id, startTime, endTime)\n\n' ... @@ -71,7 +71,7 @@ end %convert - tt = convertTable(result); + tt = sdmx.convertTable(result); end diff --git a/MATLAB/initClasspath.m b/MATLAB/tbx/+sdmx/initClasspath.m similarity index 100% rename from MATLAB/initClasspath.m rename to MATLAB/tbx/+sdmx/initClasspath.m diff --git a/MATLAB/sdmxHelp.m b/MATLAB/tbx/sdmxHelp.m similarity index 97% rename from MATLAB/sdmxHelp.m rename to MATLAB/tbx/sdmxHelp.m index 3852cd5d..0f0244c1 100644 --- a/MATLAB/sdmxHelp.m +++ b/MATLAB/tbx/sdmxHelp.m @@ -25,7 +25,7 @@ function sdmxHelp() % permissions and limitations under the Licence. % - initClasspath; + sdmx.initClasspath; %try java code try diff --git a/MATLAB/sdmxtable.m b/MATLAB/tbx/sdmxtable.m similarity index 100% rename from MATLAB/sdmxtable.m rename to MATLAB/tbx/sdmxtable.m diff --git a/MATLAB/test/testSDMX.m b/MATLAB/test/testSDMX.m index f927d482..6f5cb31a 100644 --- a/MATLAB/test/testSDMX.m +++ b/MATLAB/test/testSDMX.m @@ -1,44 +1,56 @@ +classdef testSDMX < matlab.unittest.TestCase + % Simple script for UNIT TEST purposes + % + % ############################################################################################# + % Copyright 2010,2014 Bank Of Italy + % + % Licensed under the EUPL, Version 1.1 or as soon as they + % will be approved by the European Commission - subsequent + % versions of the EUPL (the "Licence"); + % You may not use this work except in compliance with the + % Licence. + % You may obtain a copy of the Licence at: + % + % + % http://ec.europa.eu/idabc/eupl + % + % Unless required by applicable law or agreed to in + % writing, software distributed under the Licence is + % distributed on an "AS IS" basis, + % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + % express or implied. + % See the Licence for the specific language governing + % permissions and limitations under the Licence. + % -% Simple script for UNIT TEST purposes -% -% ############################################################################################# -% Copyright 2010,2014 Bank Of Italy -% -% Licensed under the EUPL, Version 1.1 or as soon as they -% will be approved by the European Commission - subsequent -% versions of the EUPL (the "Licence"); -% You may not use this work except in compliance with the -% Licence. -% You may obtain a copy of the Licence at: -% -% -% http://ec.europa.eu/idabc/eupl -% -% Unless required by applicable law or agreed to in -% writing, software distributed under the Licence is -% distributed on an "AS IS" basis, -% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -% express or implied. -% See the Licence for the specific language governing -% permissions and limitations under the Licence. -% + methods (Test) -%% Test 1: getProviders -providers = getProviders; -assert(length(providers) > 1, 'Error getProviders'); + function tGetProviders(tc) + % Test 1: getProviders + providers = getProviders; + tc.verifyNotEmpty(providers) + end -%% Test 2: getFlows -flows = getFlows('ECB'); -assert(length(flows) > 1, 'Error flow number'); -assert(strcmp(flows('ECB,EXR,1.0'), 'Exchange Rates'), 'Error flow names'); + function tGetFlows(tc) + % Test 2: getFlows + flows = getFlows('ECB'); + tc.verifyNotEmpty(flows) + tc.verifyEqual(flows('ECB,EXR,1.0'), 'Exchange Rates') + end -%% Test 3: getDimensions -dims = getDimensions('ECB', 'EXR'); -assert(length(dims) == 5), 'Error dimension number'; -assert(strcmp(dims{1}, 'FREQ'), 'Error dimension names'); + function tGetDimensions(tc) + % Test 3: getDimensions + dims = getDimensions('ECB', 'EXR'); + tc.verifyLength(dims, 5); + tc.verifyEqual(dims{1}, 'FREQ'); + end -%% Test 4: getTimeSeries -tts = getTimeSeries('ECB', 'EXR.M.USD|GBP.EUR.SP00.A'); -assert(length(tts) == 2, 'Error getTimeseries'); + function tGetTimeSeries(tc) + % Test 4: getTimeSeries + tts = getTimeSeries('ECB', 'EXR.M.USD|GBP.EUR.SP00.A'); + tc.verifyLength(tts, 2) + end + end +end \ No newline at end of file From 7687996f372699dd046a77bdbb0f4bfb312dcdeb Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 14:40:21 +0000 Subject: [PATCH 02/82] buildtool packages --- BUILD | 2 +- .../oss/sdmx/helper/HelperHandler.java | 2 +- MATLAB/buildfile.m | 15 ++++++++++++--- .../QH4virXgciolw2Faipu_BoL3dk0d.xml} | 0 .../QH4virXgciolw2Faipu_BoL3dk0p.xml} | 0 .../QZShZjci1QuiMc-CQm0gdbuwyIMd.xml} | 0 .../QZShZjci1QuiMc-CQm0gdbuwyIMp.xml} | 0 .../z1WpNcC741vkTKd8uJQQCkdFUWsd.xml | 2 ++ .../z1WpNcC741vkTKd8uJQQCkdFUWsp.xml | 2 ++ .../GyxYKHEDf7WsdBgs2uwYLalp6hcd.xml | 2 ++ .../GyxYKHEDf7WsdBgs2uwYLalp6hcp.xml | 2 ++ .../u4W93b5BV505tESL4rEisOMyHjQd.xml | 6 ++++++ .../u4W93b5BV505tESL4rEisOMyHjQp.xml | 2 ++ MATLAB/{ => tbx}/Contents.m | 16 ++++++++-------- MATLAB/{ => tbx}/Licence.pdf | Bin MATLAB/tbx/doc/GettingStarted.mlx | Bin 0 -> 76431 bytes MATLAB/test/testSDMX.m | 8 ++++---- RJSDMX/inst/java/SDMX.jar | Bin 249980 -> 250133 bytes STATA/jar/SDMX.jar | Bin 255089 -> 0 bytes 19 files changed, 42 insertions(+), 17 deletions(-) rename MATLAB/resources/project/{qaw0eS1zuuY1ar9TdPn1GMfrjbQ/VnIFH2A3TslAk9TVhONjbGBJYosd.xml => L-idrZRjZXZ8jYd7-E8teU8ewW4/QH4virXgciolw2Faipu_BoL3dk0d.xml} (100%) rename MATLAB/resources/project/{qaw0eS1zuuY1ar9TdPn1GMfrjbQ/VnIFH2A3TslAk9TVhONjbGBJYosp.xml => L-idrZRjZXZ8jYd7-E8teU8ewW4/QH4virXgciolw2Faipu_BoL3dk0p.xml} (100%) rename MATLAB/resources/project/{qaw0eS1zuuY1ar9TdPn1GMfrjbQ/J6OKE3cEAc4lULJuyONxFqjMVdgd.xml => L-idrZRjZXZ8jYd7-E8teU8ewW4/QZShZjci1QuiMc-CQm0gdbuwyIMd.xml} (100%) rename MATLAB/resources/project/{qaw0eS1zuuY1ar9TdPn1GMfrjbQ/J6OKE3cEAc4lULJuyONxFqjMVdgp.xml => L-idrZRjZXZ8jYd7-E8teU8ewW4/QZShZjci1QuiMc-CQm0gdbuwyIMp.xml} (100%) create mode 100644 MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/z1WpNcC741vkTKd8uJQQCkdFUWsd.xml create mode 100644 MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/z1WpNcC741vkTKd8uJQQCkdFUWsp.xml create mode 100644 MATLAB/resources/project/z1WpNcC741vkTKd8uJQQCkdFUWs/GyxYKHEDf7WsdBgs2uwYLalp6hcd.xml create mode 100644 MATLAB/resources/project/z1WpNcC741vkTKd8uJQQCkdFUWs/GyxYKHEDf7WsdBgs2uwYLalp6hcp.xml create mode 100644 MATLAB/resources/project/z1WpNcC741vkTKd8uJQQCkdFUWs/u4W93b5BV505tESL4rEisOMyHjQd.xml create mode 100644 MATLAB/resources/project/z1WpNcC741vkTKd8uJQQCkdFUWs/u4W93b5BV505tESL4rEisOMyHjQp.xml rename MATLAB/{ => tbx}/Contents.m (69%) rename MATLAB/{ => tbx}/Licence.pdf (100%) create mode 100644 MATLAB/tbx/doc/GettingStarted.mlx delete mode 100644 STATA/jar/SDMX.jar diff --git a/BUILD b/BUILD index 9e797aa0..06227ca2 100644 --- a/BUILD +++ b/BUILD @@ -1 +1 @@ -20230210-1402 \ No newline at end of file +20231205-1427 \ No newline at end of file diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/HelperHandler.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/HelperHandler.java index bbea381e..0b304a59 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/HelperHandler.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/HelperHandler.java @@ -43,7 +43,7 @@ public class HelperHandler extends Handler { - public static final String LOG_FORMAT = "⏰ %1$s [%2$s:%3$s] %4$s%5$s%n"; + public static final String LOG_FORMAT = "%1$s [%2$s:%3$s] %4$s%5$s%n"; private static final Formatter FORMATTER = new Formatter() { diff --git a/MATLAB/buildfile.m b/MATLAB/buildfile.m index 5d15ae90..c4e782b0 100644 --- a/MATLAB/buildfile.m +++ b/MATLAB/buildfile.m @@ -19,8 +19,17 @@ end function archiveTask(~) +description = sprintf('The SDMX Connectors project has been developed with the aim of covering the ''last mile'' in SDMX implementations.\n\nIn particular, the focus of the project is to provide the end user a set of plugins that can be easily installed in the most popular data analysis tools (e.g. R, MATLAB, SAS, STATA, Excel, etc.) allowing a direct access to SDMX data from the tool.\nProject site: \n\nhttps://github.com/amattioc/SDMX'); % Create ZIP file -filename = "source_" + ... - string(datetime("now",Format="yyyyMMdd'T'HHmmss")); -zip(filename,"*") +opts = matlab.addons.toolbox.ToolboxOptions('tbx', "50de8506-6d87-47ee-aa8a-2c7f2e56d761", ... + ToolboxName = 'MatSDMX', ... + ToolboxVersion = '4.0.0', ... + AuthorName = 'Attilio Mattiocco', ... + Summary = 'Provides functions to retrieve data and metadata from providers that disseminate data by means of SDMX web services.', ... + Description = description, ... + ToolboxJavaPath = "lib/SDMX.jar", ... + ToolboxFiles = ["lib/SDMX.jar", "tbx"], ... + ToolboxGettingStartedGuide = 'tbx/doc/GettingStarted.mlx', ... + OutputFile = 'releases/SDMX.mltbx'); +matlab.addons.toolbox.packageToolbox(opts) end \ No newline at end of file diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/VnIFH2A3TslAk9TVhONjbGBJYosd.xml b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/QH4virXgciolw2Faipu_BoL3dk0d.xml similarity index 100% rename from MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/VnIFH2A3TslAk9TVhONjbGBJYosd.xml rename to MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/QH4virXgciolw2Faipu_BoL3dk0d.xml diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/VnIFH2A3TslAk9TVhONjbGBJYosp.xml b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/QH4virXgciolw2Faipu_BoL3dk0p.xml similarity index 100% rename from MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/VnIFH2A3TslAk9TVhONjbGBJYosp.xml rename to MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/QH4virXgciolw2Faipu_BoL3dk0p.xml diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/J6OKE3cEAc4lULJuyONxFqjMVdgd.xml b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/QZShZjci1QuiMc-CQm0gdbuwyIMd.xml similarity index 100% rename from MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/J6OKE3cEAc4lULJuyONxFqjMVdgd.xml rename to MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/QZShZjci1QuiMc-CQm0gdbuwyIMd.xml diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/J6OKE3cEAc4lULJuyONxFqjMVdgp.xml b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/QZShZjci1QuiMc-CQm0gdbuwyIMp.xml similarity index 100% rename from MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/J6OKE3cEAc4lULJuyONxFqjMVdgp.xml rename to MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/QZShZjci1QuiMc-CQm0gdbuwyIMp.xml diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/z1WpNcC741vkTKd8uJQQCkdFUWsd.xml b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/z1WpNcC741vkTKd8uJQQCkdFUWsd.xml new file mode 100644 index 00000000..a75f7a81 --- /dev/null +++ b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/z1WpNcC741vkTKd8uJQQCkdFUWsd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/z1WpNcC741vkTKd8uJQQCkdFUWsp.xml b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/z1WpNcC741vkTKd8uJQQCkdFUWsp.xml new file mode 100644 index 00000000..0c8db8a4 --- /dev/null +++ b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/z1WpNcC741vkTKd8uJQQCkdFUWsp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/z1WpNcC741vkTKd8uJQQCkdFUWs/GyxYKHEDf7WsdBgs2uwYLalp6hcd.xml b/MATLAB/resources/project/z1WpNcC741vkTKd8uJQQCkdFUWs/GyxYKHEDf7WsdBgs2uwYLalp6hcd.xml new file mode 100644 index 00000000..a75f7a81 --- /dev/null +++ b/MATLAB/resources/project/z1WpNcC741vkTKd8uJQQCkdFUWs/GyxYKHEDf7WsdBgs2uwYLalp6hcd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/z1WpNcC741vkTKd8uJQQCkdFUWs/GyxYKHEDf7WsdBgs2uwYLalp6hcp.xml b/MATLAB/resources/project/z1WpNcC741vkTKd8uJQQCkdFUWs/GyxYKHEDf7WsdBgs2uwYLalp6hcp.xml new file mode 100644 index 00000000..842de6ab --- /dev/null +++ b/MATLAB/resources/project/z1WpNcC741vkTKd8uJQQCkdFUWs/GyxYKHEDf7WsdBgs2uwYLalp6hcp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/z1WpNcC741vkTKd8uJQQCkdFUWs/u4W93b5BV505tESL4rEisOMyHjQd.xml b/MATLAB/resources/project/z1WpNcC741vkTKd8uJQQCkdFUWs/u4W93b5BV505tESL4rEisOMyHjQd.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/z1WpNcC741vkTKd8uJQQCkdFUWs/u4W93b5BV505tESL4rEisOMyHjQd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/z1WpNcC741vkTKd8uJQQCkdFUWs/u4W93b5BV505tESL4rEisOMyHjQp.xml b/MATLAB/resources/project/z1WpNcC741vkTKd8uJQQCkdFUWs/u4W93b5BV505tESL4rEisOMyHjQp.xml new file mode 100644 index 00000000..04b82677 --- /dev/null +++ b/MATLAB/resources/project/z1WpNcC741vkTKd8uJQQCkdFUWs/u4W93b5BV505tESL4rEisOMyHjQp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/Contents.m b/MATLAB/tbx/Contents.m similarity index 69% rename from MATLAB/Contents.m rename to MATLAB/tbx/Contents.m index 356396ba..4cb53b28 100644 --- a/MATLAB/Contents.m +++ b/MATLAB/tbx/Contents.m @@ -4,16 +4,16 @@ % % Files % -% getProviders - get the list of available data providers +% sdmx.getProviders - get the list of available data providers % sdmx.addProvider - add a new provider (SDMX 2.1) to the internal registry -% getFlows - get the list of available data flows for the input provider -% getDimensions - get the list of dimensions for the input dataflow -% getDSDIdentifier - get the name of the DSD for the input dataflow -% getTimeSeries - get the list of time series that match the input query +% sdmx.getFlows - get the list of available data flows for the input provider +% sdmx.getDimensions - get the list of dimensions for the input dataflow +% sdmx.getDSDIdentifier - get the name of the DSD for the input dataflow +% sdmx.getTimeSeries - get the list of time series that match the input query % and return a cell of timeseries -% getTimeSeriesTable - get the list of time series that match the input query +% sdmx.getTimeSeriesTable - get the list of time series that match the input query % and return a table -% getTimeSeriesRevisions - get the list of time series that match the input query +% sdmx.getTimeSeriesRevisions - get the list of time series that match the input query % and return a table. Revisions in observation values are returned too. % sdmxtable - converts the results of the getTimeSeries call from a cell % array of timeseries to a table @@ -39,4 +39,4 @@ % express or implied. % See the Licence for the specific language governing % permissions and limitations under the Licence. -% +% \ No newline at end of file diff --git a/MATLAB/Licence.pdf b/MATLAB/tbx/Licence.pdf similarity index 100% rename from MATLAB/Licence.pdf rename to MATLAB/tbx/Licence.pdf diff --git a/MATLAB/tbx/doc/GettingStarted.mlx b/MATLAB/tbx/doc/GettingStarted.mlx new file mode 100644 index 0000000000000000000000000000000000000000..9f695af7fa983c1b8d51dc8e48100fca692d6ee7 GIT binary patch literal 76431 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%0AbchGNW*l);_SL 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 Q6M_YBe&|Q&ADsjK3le8_7ytkO literal 0 HcmV?d00001 diff --git a/MATLAB/test/testSDMX.m b/MATLAB/test/testSDMX.m index 6f5cb31a..2fab61f4 100644 --- a/MATLAB/test/testSDMX.m +++ b/MATLAB/test/testSDMX.m @@ -27,27 +27,27 @@ function tGetProviders(tc) % Test 1: getProviders - providers = getProviders; + providers = sdmx.getProviders; tc.verifyNotEmpty(providers) end function tGetFlows(tc) % Test 2: getFlows - flows = getFlows('ECB'); + flows = sdmx.getFlows('ECB'); tc.verifyNotEmpty(flows) tc.verifyEqual(flows('ECB,EXR,1.0'), 'Exchange Rates') end function tGetDimensions(tc) % Test 3: getDimensions - dims = getDimensions('ECB', 'EXR'); + dims = sdmx.getDimensions('ECB', 'EXR'); tc.verifyLength(dims, 5); tc.verifyEqual(dims{1}, 'FREQ'); end function tGetTimeSeries(tc) % Test 4: getTimeSeries - tts = getTimeSeries('ECB', 'EXR.M.USD|GBP.EUR.SP00.A'); + tts = sdmx.getTimeSeries('ECB', 'EXR.M.USD|GBP.EUR.SP00.A'); tc.verifyLength(tts, 2) end diff --git a/RJSDMX/inst/java/SDMX.jar b/RJSDMX/inst/java/SDMX.jar index ca3f905ed4debe438f5c2a5483ab9bf6eea132e6..4377eef0d67d3306ad83578c43891d6ebff931a5 100644 GIT binary patch delta 22626 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

Iut*or*n_P<6bD~4pQ>}yc1NB4~dAo{T2H}yE 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 KSi~U=j^lsOwT9yW diff --git a/STATA/jar/SDMX.jar b/STATA/jar/SDMX.jar deleted file mode 100644 index 3619ba600efa70dfbe8e85d643491beb5b3c5871..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255089 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
n+U!<`Inc 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

bqA27k_=;wqi42o@Bke3ty#g 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 Date: Tue, 5 Dec 2023 15:36:17 +0000 Subject: [PATCH 03/82] github workflwos --- .github/workflows/ci.yml | 56 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..f3438587 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,56 @@ +# This is a basic workflow to help you get started with MATLAB Actions + +name: SDMX Build and test + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the main branch + push: + branches: [ main ] + pull_request: + branches: [ main ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + build-java: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 8 for x64 + uses: actions/setup-java@v3 + with: + java-version: '8' + distribution: 'temurin' + architecture: x64 + + - name: Run the Ant jar target + run: cd JAVA && ant clean && ant compile && ant dist + + - name: Archive MATLAB JAR for next job + uses: actions/upload-artifact@v3 + with: + name: MATLAB-JAR + path: | + MATLAB/lib/SDMX.jar + + build-test-matlab: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + - name: Download a single artifact + uses: actions/download-artifact@v3 + with: + name: MATLAB/lib/SDMX.jar + + # Sets up MATLAB on the GitHub Actions runner + - name: Show jar + run: ls && ls MATALB && ls/MATLAB/lib + From accfa7e2dffebeac3bdb356d57a5c8eebd35eb2e Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 15:37:36 +0000 Subject: [PATCH 04/82] changed github branch target --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f3438587..1f90d5d0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,9 +6,9 @@ name: SDMX Build and test on: # Triggers the workflow on push or pull request events but only for the main branch push: - branches: [ main ] + branches: [ master ] pull_request: - branches: [ main ] + branches: [ master ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: From 622eef6c721583d49f72e907a88da84c182714e3 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 15:38:47 +0000 Subject: [PATCH 05/82] job dependencies --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1f90d5d0..dae56059 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,6 +37,7 @@ jobs: MATLAB/lib/SDMX.jar build-test-matlab: + needs: build-java # The type of runner that the job will run on runs-on: ubuntu-latest From faf3eeeb04317ef1041b4b081f88995ea55a48d2 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 15:47:32 +0000 Subject: [PATCH 06/82] artifact sharing 1 --- .github/workflows/ci.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dae56059..56b38ac7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,7 +49,11 @@ jobs: - name: Download a single artifact uses: actions/download-artifact@v3 with: - name: MATLAB/lib/SDMX.jar + name: SDMX.jar + + - name: Move JAR to MATLAB folder + run: mv SDMX.jar MATLAB/lib + # Sets up MATLAB on the GitHub Actions runner - name: Show jar From c70e5082f1558fdebe859ef9589fb114cd60acdb Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 15:59:25 +0000 Subject: [PATCH 07/82] artifact sharing 2 --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 56b38ac7..8bf41b66 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,7 +49,8 @@ jobs: - name: Download a single artifact uses: actions/download-artifact@v3 with: - name: SDMX.jar + name: SDMX + path: MATLAB/lib - name: Move JAR to MATLAB folder run: mv SDMX.jar MATLAB/lib From 69e6d6319bc4e1d9cbf7645fe42d532fb1f07655 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 16:01:58 +0000 Subject: [PATCH 08/82] fixed artifact names --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8bf41b66..fae80cd5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,9 +32,9 @@ jobs: - name: Archive MATLAB JAR for next job uses: actions/upload-artifact@v3 with: - name: MATLAB-JAR - path: | - MATLAB/lib/SDMX.jar + name: SDMX + path: MATLAB/lib/SDMX.jar + if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` build-test-matlab: needs: build-java From e215d2ebb2ef55909691933b04881853f7620f1f Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 16:04:38 +0000 Subject: [PATCH 09/82] file in the correct dir --- .github/workflows/ci.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fae80cd5..d528e66d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -51,12 +51,10 @@ jobs: with: name: SDMX path: MATLAB/lib - - - name: Move JAR to MATLAB folder - run: mv SDMX.jar MATLAB/lib - - + # Sets up MATLAB on the GitHub Actions runner - name: Show jar run: ls && ls MATALB && ls/MATLAB/lib + + From 2e1f6419c092773bad1fae27a6c21157ca534dd2 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 16:06:10 +0000 Subject: [PATCH 10/82] show files in correct dirs --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d528e66d..d9db1b74 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -54,7 +54,7 @@ jobs: # Sets up MATLAB on the GitHub Actions runner - name: Show jar - run: ls && ls MATALB && ls/MATLAB/lib + run: MATLAB && ls MATLAB/lib From 73190394a45986e7086b9b68166d85a2e86c2133 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 16:07:02 +0000 Subject: [PATCH 11/82] show files in correct dirs --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d9db1b74..9f70f875 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -54,7 +54,7 @@ jobs: # Sets up MATLAB on the GitHub Actions runner - name: Show jar - run: MATLAB && ls MATLAB/lib + run: ls MATLAB && ls MATLAB/lib From ebaa393caa145fc2b1e84731ecc7f3c51c792649 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 16:20:57 +0000 Subject: [PATCH 12/82] buildtool --- .github/workflows/ci.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9f70f875..0d1824cf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,8 +53,13 @@ jobs: path: MATLAB/lib # Sets up MATLAB on the GitHub Actions runner - - name: Show jar - run: ls MATLAB && ls MATLAB/lib + - name: Setup MATLAB + uses: matlab-actions/setup-matlab@v1 + + - name: Run buildtool + uses: matlab-actions/run-command@v1 + with: + command: cd('MATLAB'), buildtool From d1ee1dddb95b1f27da0268c6e6df2e19eadc6eba Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 16:32:53 +0000 Subject: [PATCH 13/82] jar to tbx folder --- .github/workflows/ci.yml | 13 ++++++++++++- MATLAB/buildfile.m | 3 +-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0d1824cf..a4d6b2a5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,16 +50,27 @@ jobs: uses: actions/download-artifact@v3 with: name: SDMX - path: MATLAB/lib + path: MATLAB/tbx/lib # Sets up MATLAB on the GitHub Actions runner - name: Setup MATLAB uses: matlab-actions/setup-matlab@v1 + with: + release: R2023a + # Run buildtool to test and package MATLAB. - name: Run buildtool uses: matlab-actions/run-command@v1 with: command: cd('MATLAB'), buildtool + - name: Archive MATLAB Toolbox + uses: actions/upload-artifact@v3 + with: + name: MatSDMX + path: MATLAB/releases/SDMX.mltbx + if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` + + diff --git a/MATLAB/buildfile.m b/MATLAB/buildfile.m index c4e782b0..cfb9d6ed 100644 --- a/MATLAB/buildfile.m +++ b/MATLAB/buildfile.m @@ -27,8 +27,7 @@ function archiveTask(~) AuthorName = 'Attilio Mattiocco', ... Summary = 'Provides functions to retrieve data and metadata from providers that disseminate data by means of SDMX web services.', ... Description = description, ... - ToolboxJavaPath = "lib/SDMX.jar", ... - ToolboxFiles = ["lib/SDMX.jar", "tbx"], ... + ToolboxJavaPath = "tbx/lib/SDMX.jar", ... ToolboxGettingStartedGuide = 'tbx/doc/GettingStarted.mlx', ... OutputFile = 'releases/SDMX.mltbx'); matlab.addons.toolbox.packageToolbox(opts) From aeec7615eaf9b867d30171bec48eddfab9e5112e Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 16:45:55 +0000 Subject: [PATCH 14/82] fixed codeissues found --- .github/workflows/ci.yml | 2 +- MATLAB/buildfile.m | 21 +++++++---- MATLAB/tbx/+sdmx/addProvider.m | 2 +- MATLAB/tbx/+sdmx/convert.m | 45 ++++++++++++----------- MATLAB/tbx/+sdmx/getTimeSeries.m | 2 +- MATLAB/tbx/+sdmx/getTimeSeriesRevisions.m | 2 +- MATLAB/tbx/+sdmx/getTimeSeriesTable.m | 2 +- MATLAB/tbx/sdmxtable.m | 4 +- 8 files changed, 43 insertions(+), 37 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a4d6b2a5..75396e47 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,7 +69,7 @@ jobs: with: name: MatSDMX path: MATLAB/releases/SDMX.mltbx - if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` + if-no-files-found: error diff --git a/MATLAB/buildfile.m b/MATLAB/buildfile.m index cfb9d6ed..b72adccf 100644 --- a/MATLAB/buildfile.m +++ b/MATLAB/buildfile.m @@ -1,16 +1,8 @@ function plan = buildfile -import matlab.buildtool.tasks.CodeIssuesTask -import matlab.buildtool.tasks.TestTask % Create a plan from task functions plan = buildplan(localfunctions); -% Add the "check" task to identify code issues -plan("check") = CodeIssuesTask; - -% Add the "test" task to run tests -plan("test") = TestTask; - % Make the "archive" task the default task in the plan plan.DefaultTasks = "archive"; @@ -18,6 +10,19 @@ plan("archive").Dependencies = ["check" "test"]; end +function checkTask(~) +% Identify code issues +issues = codeIssues; +assert(isempty(issues.Issues),formattedDisplayText( ... + issues.Issues(:,["Location" "Severity" "Description"]))) +end + +function testTask(~) +% Run unit tests +results = runtests(IncludeSubfolders=true,OutputDetail="terse"); +assertSuccess(results); +end + function archiveTask(~) description = sprintf('The SDMX Connectors project has been developed with the aim of covering the ''last mile'' in SDMX implementations.\n\nIn particular, the focus of the project is to provide the end user a set of plugins that can be easily installed in the most popular data analysis tools (e.g. R, MATLAB, SAS, STATA, Excel, etc.) allowing a direct access to SDMX data from the tool.\nProject site: \n\nhttps://github.com/amattioc/SDMX'); % Create ZIP file diff --git a/MATLAB/tbx/+sdmx/addProvider.m b/MATLAB/tbx/+sdmx/addProvider.m index dfda08ef..41fc6395 100644 --- a/MATLAB/tbx/+sdmx/addProvider.m +++ b/MATLAB/tbx/+sdmx/addProvider.m @@ -67,7 +67,7 @@ function addProvider(name, endpoint, needsCredentials, needsURLEncoding, support try it.bancaditalia.oss.sdmx.client.SdmxClientHandler.addProvider(name, endpoint, needsCredentials, needsURLEncoding, supportsCompression, description); catch mexp - error(sprintf('SDMX addProvider() error:\n %s', mexp.message)); + error('SDMX addProvider() error:\n %s', mexp.message); end end diff --git a/MATLAB/tbx/+sdmx/convert.m b/MATLAB/tbx/+sdmx/convert.m index eecb0fa4..db623f32 100644 --- a/MATLAB/tbx/+sdmx/convert.m +++ b/MATLAB/tbx/+sdmx/convert.m @@ -115,28 +115,29 @@ function dates = convertDates(freq, dates, iso8601Date) - if(nargin == 3 && iso8601Date == true) - dates = datestr(datetime(dates,'InputFormat','uuuu-MM-dd''T''HH:mm:ss','TimeZone','UTC')); - elseif(strcmp(freq, 'Q')) - dates=regexprep(dates, 'Q1', '03-31'); - dates=regexprep(dates, 'Q2', '06-30'); - dates=regexprep(dates, 'Q3', '09-30'); - dates=regexprep(dates, 'Q4', '12-31'); - dates=(cell2mat(dates)); - elseif(strcmp(freq, 'A')) - dates=strcat(cell2mat(dates), '-12-31'); - elseif(strcmp(freq, 'H')) - dates=regexprep(dates, 'S1', '06-30'); - dates=regexprep(dates, 'S2', '12-31'); - dates=(cell2mat(dates)); - elseif(strcmp(freq, 'W')) - for i = 1 : length(dates) - dates{i} = char(it.bancaditalia.oss.sdmx.util.WeekConverter.convert(dates{i})); - end - dates=(cell2mat(dates)); - else - dates=(cell2mat(dates)); - end +if(nargin == 3 && iso8601Date == true) + dates = string(datetime(dates,'InputFormat','uuuu-MM-dd''T''HH:mm:ss','TimeZone','UTC')); +elseif(strcmp(freq, 'Q')) + dates=regexprep(dates, 'Q1', '03-31'); + dates=regexprep(dates, 'Q2', '06-30'); + dates=regexprep(dates, 'Q3', '09-30'); + dates=regexprep(dates, 'Q4', '12-31'); + dates=(cell2mat(dates)); +elseif(strcmp(freq, 'A')) + dates=strcat(cell2mat(dates), '-12-31'); +elseif(strcmp(freq, 'H')) + dates=regexprep(dates, 'S1', '06-30'); + dates=regexprep(dates, 'S2', '12-31'); + dates=(cell2mat(dates)); +elseif(strcmp(freq, 'W')) + for i = 1 : length(dates) + dates{i} = char(it.bancaditalia.oss.sdmx.util.WeekConverter.convert(dates{i})); + end + dates=(cell2mat(dates)); +else + dates=(cell2mat(dates)); +end + end function metadata = getMetaData(ts) diff --git a/MATLAB/tbx/+sdmx/getTimeSeries.m b/MATLAB/tbx/+sdmx/getTimeSeries.m index e0452cb8..e2ec4960 100644 --- a/MATLAB/tbx/+sdmx/getTimeSeries.m +++ b/MATLAB/tbx/+sdmx/getTimeSeries.m @@ -61,7 +61,7 @@ try result = it.bancaditalia.oss.sdmx.client.SdmxClientHandler.getTimeSeries(provider, '', id, '', startTime, endTime, false, '', false); catch mexp - error(sprintf('SDMX getTimeSeries() error:\n %s', mexp.message)); + error('SDMX getTimeSeries() error:\n %s', mexp.message); end %verify returned class type diff --git a/MATLAB/tbx/+sdmx/getTimeSeriesRevisions.m b/MATLAB/tbx/+sdmx/getTimeSeriesRevisions.m index 18bfbf1d..b3037e62 100644 --- a/MATLAB/tbx/+sdmx/getTimeSeriesRevisions.m +++ b/MATLAB/tbx/+sdmx/getTimeSeriesRevisions.m @@ -74,7 +74,7 @@ try result = it.bancaditalia.oss.sdmx.client.SdmxClientHandler.getTimeSeriesTable(provider, '', id, '', startTime, endTime, false, updatedAfter, includeHistory); catch mexp - error(sprintf('SDMX getTimeSeries() error:\n %s', mexp.message)); + error('SDMX getTimeSeries() error:\n %s', mexp.message); end %verify returned class type diff --git a/MATLAB/tbx/+sdmx/getTimeSeriesTable.m b/MATLAB/tbx/+sdmx/getTimeSeriesTable.m index 5941f2f5..0ceaebd8 100644 --- a/MATLAB/tbx/+sdmx/getTimeSeriesTable.m +++ b/MATLAB/tbx/+sdmx/getTimeSeriesTable.m @@ -62,7 +62,7 @@ try result = it.bancaditalia.oss.sdmx.client.SdmxClientHandler.getTimeSeriesTable(provider, '', id, '', startTime, endTime, false, '', false); catch mexp - error(sprintf('SDMX getTimeSeries() error:\n %s', mexp.message)); + error('SDMX getTimeSeries() error:\n %s', mexp.message); end %verify returned class type diff --git a/MATLAB/tbx/sdmxtable.m b/MATLAB/tbx/sdmxtable.m index ec17c3b9..845c2957 100644 --- a/MATLAB/tbx/sdmxtable.m +++ b/MATLAB/tbx/sdmxtable.m @@ -89,7 +89,7 @@ key = keys{j}; try value = tslist{i}.UserData(key); - catch exception + catch % attribute not present, set empty value = ''; end @@ -120,7 +120,7 @@ tstable = cell2table(cell(0, length(varNames))); tstable.Properties.VariableNames = varNames; for i = 1:length(tableList) - tstable = [tstable; tableList{i}]; + tstable = [tstable; tableList{i}]; %#ok end end From 9dd4699dc69df41f206badd56455418d283e67ed Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 17:05:22 +0000 Subject: [PATCH 15/82] added releases folder to project --- .../e15jxRadjxYuJsCAUkUtS1x_l08d.xml | 2 ++ .../e15jxRadjxYuJsCAUkUtS1x_l08p.xml | 2 ++ .../gLNRpyfniAp0pH9O-Iamc-C4xCId.xml | 2 ++ .../gLNRpyfniAp0pH9O-Iamc-C4xCIp.xml | 2 ++ 4 files changed, 8 insertions(+) create mode 100644 MATLAB/resources/project/gLNRpyfniAp0pH9O-Iamc-C4xCI/e15jxRadjxYuJsCAUkUtS1x_l08d.xml create mode 100644 MATLAB/resources/project/gLNRpyfniAp0pH9O-Iamc-C4xCI/e15jxRadjxYuJsCAUkUtS1x_l08p.xml create mode 100644 MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/gLNRpyfniAp0pH9O-Iamc-C4xCId.xml create mode 100644 MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/gLNRpyfniAp0pH9O-Iamc-C4xCIp.xml diff --git a/MATLAB/resources/project/gLNRpyfniAp0pH9O-Iamc-C4xCI/e15jxRadjxYuJsCAUkUtS1x_l08d.xml b/MATLAB/resources/project/gLNRpyfniAp0pH9O-Iamc-C4xCI/e15jxRadjxYuJsCAUkUtS1x_l08d.xml new file mode 100644 index 00000000..a75f7a81 --- /dev/null +++ b/MATLAB/resources/project/gLNRpyfniAp0pH9O-Iamc-C4xCI/e15jxRadjxYuJsCAUkUtS1x_l08d.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/gLNRpyfniAp0pH9O-Iamc-C4xCI/e15jxRadjxYuJsCAUkUtS1x_l08p.xml b/MATLAB/resources/project/gLNRpyfniAp0pH9O-Iamc-C4xCI/e15jxRadjxYuJsCAUkUtS1x_l08p.xml new file mode 100644 index 00000000..842de6ab --- /dev/null +++ b/MATLAB/resources/project/gLNRpyfniAp0pH9O-Iamc-C4xCI/e15jxRadjxYuJsCAUkUtS1x_l08p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/gLNRpyfniAp0pH9O-Iamc-C4xCId.xml b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/gLNRpyfniAp0pH9O-Iamc-C4xCId.xml new file mode 100644 index 00000000..a75f7a81 --- /dev/null +++ b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/gLNRpyfniAp0pH9O-Iamc-C4xCId.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/gLNRpyfniAp0pH9O-Iamc-C4xCIp.xml b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/gLNRpyfniAp0pH9O-Iamc-C4xCIp.xml new file mode 100644 index 00000000..6f283988 --- /dev/null +++ b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/gLNRpyfniAp0pH9O-Iamc-C4xCIp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From 0ffebec5a011a6a63770874a6d1f1a72115d16d4 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 17:14:28 +0000 Subject: [PATCH 16/82] added coverage and test reports --- .github/workflows/ci.yml | 3 ++- MATLAB/buildfile.m | 27 ++++++++++++++++++- .../O-NHIa353mNE2axXKkr0QQbqSvIp.xml | 2 -- ...d.xml => _6_yMkSjSMN4rq8VEZzkAx2DBh4d.xml} | 2 +- .../_6_yMkSjSMN4rq8VEZzkAx2DBh4p.xml | 2 ++ .../--ojuT5M97pkSl92JbfMXmStcwQd.xml} | 0 .../--ojuT5M97pkSl92JbfMXmStcwQp.xml} | 0 .../8Qdz0iiiuHlFJjxB6c5reQ4NAkQd.xml} | 0 .../8Qdz0iiiuHlFJjxB6c5reQ4NAkQp.xml} | 0 ...d.xml => hLMKfvmMZYFbdoE4Xco7ryXas6sd.xml} | 0 ...p.xml => hLMKfvmMZYFbdoE4Xco7ryXas6sp.xml} | 2 +- MATLAB/{test => tests}/testSDMX.m | 0 12 files changed, 32 insertions(+), 6 deletions(-) delete mode 100644 MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/O-NHIa353mNE2axXKkr0QQbqSvIp.xml rename MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/{O-NHIa353mNE2axXKkr0QQbqSvId.xml => _6_yMkSjSMN4rq8VEZzkAx2DBh4d.xml} (52%) create mode 100644 MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/_6_yMkSjSMN4rq8VEZzkAx2DBh4p.xml rename MATLAB/resources/project/{FI0gxbH-PhwjE_riDQGHPyYMHks/xa5ZQ1ctC9gD-szmjQfSt2CpR7kd.xml => hLMKfvmMZYFbdoE4Xco7ryXas6s/--ojuT5M97pkSl92JbfMXmStcwQd.xml} (100%) rename MATLAB/resources/project/{FI0gxbH-PhwjE_riDQGHPyYMHks/xa5ZQ1ctC9gD-szmjQfSt2CpR7kp.xml => hLMKfvmMZYFbdoE4Xco7ryXas6s/--ojuT5M97pkSl92JbfMXmStcwQp.xml} (100%) rename MATLAB/resources/project/{FI0gxbH-PhwjE_riDQGHPyYMHks/5Lk_HLOyBtA13ybsC7_0l8N5sPcd.xml => hLMKfvmMZYFbdoE4Xco7ryXas6s/8Qdz0iiiuHlFJjxB6c5reQ4NAkQd.xml} (100%) rename MATLAB/resources/project/{FI0gxbH-PhwjE_riDQGHPyYMHks/5Lk_HLOyBtA13ybsC7_0l8N5sPcp.xml => hLMKfvmMZYFbdoE4Xco7ryXas6s/8Qdz0iiiuHlFJjxB6c5reQ4NAkQp.xml} (100%) rename MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/{FI0gxbH-PhwjE_riDQGHPyYMHksd.xml => hLMKfvmMZYFbdoE4Xco7ryXas6sd.xml} (100%) rename MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/{FI0gxbH-PhwjE_riDQGHPyYMHksp.xml => hLMKfvmMZYFbdoE4Xco7ryXas6sp.xml} (52%) rename MATLAB/{test => tests}/testSDMX.m (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 75396e47..edb6e7a9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,7 +34,8 @@ jobs: with: name: SDMX path: MATLAB/lib/SDMX.jar - if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` + if-no-files-found: error + retention-days: 1 build-test-matlab: needs: build-java diff --git a/MATLAB/buildfile.m b/MATLAB/buildfile.m index b72adccf..f3316802 100644 --- a/MATLAB/buildfile.m +++ b/MATLAB/buildfile.m @@ -18,9 +18,34 @@ function checkTask(~) end function testTask(~) + % Run unit tests -results = runtests(IncludeSubfolders=true,OutputDetail="terse"); +import matlab.unittest.TestRunner; +import matlab.unittest.TestSuite; +import matlab.unittest.plugins.TestReportPlugin; +import matlab.unittest.plugins.CodeCoveragePlugin +import matlab.unittest.plugins.codecoverage.CoverageReport +import matlab.unittest.plugins.codecoverage.CoverageResult + +suite = TestSuite.fromProject(currentProject); + +runner = TestRunner.withTextOutput; +htmlFolder = 'tests/results'; +plugin = TestReportPlugin.producingHTML(htmlFolder); +runner.addPlugin(plugin); + +sourceCodeFolder = "tbx"; +reportFolder = "tests/coverageReport"; +reportFormat = CoverageReport(reportFolder); +format = CoverageResult; +plugin = CodeCoveragePlugin.forFolder(sourceCodeFolder,"Producing",[reportFormat,format], ... + IncludingSubfolders = true); +runner.addPlugin(plugin) + +results = runner.run(suite); + assertSuccess(results); + end function archiveTask(~) diff --git a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/O-NHIa353mNE2axXKkr0QQbqSvIp.xml b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/O-NHIa353mNE2axXKkr0QQbqSvIp.xml deleted file mode 100644 index c301cf33..00000000 --- a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/O-NHIa353mNE2axXKkr0QQbqSvIp.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/O-NHIa353mNE2axXKkr0QQbqSvId.xml b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/_6_yMkSjSMN4rq8VEZzkAx2DBh4d.xml similarity index 52% rename from MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/O-NHIa353mNE2axXKkr0QQbqSvId.xml rename to MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/_6_yMkSjSMN4rq8VEZzkAx2DBh4d.xml index 5be48de9..fff32262 100644 --- a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/O-NHIa353mNE2axXKkr0QQbqSvId.xml +++ b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/_6_yMkSjSMN4rq8VEZzkAx2DBh4d.xml @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/_6_yMkSjSMN4rq8VEZzkAx2DBh4p.xml b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/_6_yMkSjSMN4rq8VEZzkAx2DBh4p.xml new file mode 100644 index 00000000..f55941ad --- /dev/null +++ b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/_6_yMkSjSMN4rq8VEZzkAx2DBh4p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/xa5ZQ1ctC9gD-szmjQfSt2CpR7kd.xml b/MATLAB/resources/project/hLMKfvmMZYFbdoE4Xco7ryXas6s/--ojuT5M97pkSl92JbfMXmStcwQd.xml similarity index 100% rename from MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/xa5ZQ1ctC9gD-szmjQfSt2CpR7kd.xml rename to MATLAB/resources/project/hLMKfvmMZYFbdoE4Xco7ryXas6s/--ojuT5M97pkSl92JbfMXmStcwQd.xml diff --git a/MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/xa5ZQ1ctC9gD-szmjQfSt2CpR7kp.xml b/MATLAB/resources/project/hLMKfvmMZYFbdoE4Xco7ryXas6s/--ojuT5M97pkSl92JbfMXmStcwQp.xml similarity index 100% rename from MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/xa5ZQ1ctC9gD-szmjQfSt2CpR7kp.xml rename to MATLAB/resources/project/hLMKfvmMZYFbdoE4Xco7ryXas6s/--ojuT5M97pkSl92JbfMXmStcwQp.xml diff --git a/MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/5Lk_HLOyBtA13ybsC7_0l8N5sPcd.xml b/MATLAB/resources/project/hLMKfvmMZYFbdoE4Xco7ryXas6s/8Qdz0iiiuHlFJjxB6c5reQ4NAkQd.xml similarity index 100% rename from MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/5Lk_HLOyBtA13ybsC7_0l8N5sPcd.xml rename to MATLAB/resources/project/hLMKfvmMZYFbdoE4Xco7ryXas6s/8Qdz0iiiuHlFJjxB6c5reQ4NAkQd.xml diff --git a/MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/5Lk_HLOyBtA13ybsC7_0l8N5sPcp.xml b/MATLAB/resources/project/hLMKfvmMZYFbdoE4Xco7ryXas6s/8Qdz0iiiuHlFJjxB6c5reQ4NAkQp.xml similarity index 100% rename from MATLAB/resources/project/FI0gxbH-PhwjE_riDQGHPyYMHks/5Lk_HLOyBtA13ybsC7_0l8N5sPcp.xml rename to MATLAB/resources/project/hLMKfvmMZYFbdoE4Xco7ryXas6s/8Qdz0iiiuHlFJjxB6c5reQ4NAkQp.xml diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/FI0gxbH-PhwjE_riDQGHPyYMHksd.xml b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/hLMKfvmMZYFbdoE4Xco7ryXas6sd.xml similarity index 100% rename from MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/FI0gxbH-PhwjE_riDQGHPyYMHksd.xml rename to MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/hLMKfvmMZYFbdoE4Xco7ryXas6sd.xml diff --git a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/FI0gxbH-PhwjE_riDQGHPyYMHksp.xml b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/hLMKfvmMZYFbdoE4Xco7ryXas6sp.xml similarity index 52% rename from MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/FI0gxbH-PhwjE_riDQGHPyYMHksp.xml rename to MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/hLMKfvmMZYFbdoE4Xco7ryXas6sp.xml index 3c4de0f6..d4df5b9c 100644 --- a/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/FI0gxbH-PhwjE_riDQGHPyYMHksp.xml +++ b/MATLAB/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/hLMKfvmMZYFbdoE4Xco7ryXas6sp.xml @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/MATLAB/test/testSDMX.m b/MATLAB/tests/testSDMX.m similarity index 100% rename from MATLAB/test/testSDMX.m rename to MATLAB/tests/testSDMX.m From ccf2afa381e81878522213b6a42e19d15c346056 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 17:18:27 +0000 Subject: [PATCH 17/82] added test on getCodes --- MATLAB/tests/testSDMX.m | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/MATLAB/tests/testSDMX.m b/MATLAB/tests/testSDMX.m index 2fab61f4..90128d82 100644 --- a/MATLAB/tests/testSDMX.m +++ b/MATLAB/tests/testSDMX.m @@ -51,6 +51,11 @@ function tGetTimeSeries(tc) tc.verifyLength(tts, 2) end + function tGetCodes(tc) + map = getCodes('ECB','ECB,EXR,1.0', 'FREQ'); + tc.verifyEqual(map('A'), 'Annual') + end + end end \ No newline at end of file From 8e8ff3d0ff661b2f6b26419e45bdf64f30fa32cb Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 17:22:40 +0000 Subject: [PATCH 18/82] added tests results and coverage report --- .github/workflows/ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index edb6e7a9..39a053ca 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,7 +69,10 @@ jobs: uses: actions/upload-artifact@v3 with: name: MatSDMX - path: MATLAB/releases/SDMX.mltbx + path: | + MATLAB/releases/SDMX.mltbx + MATLAB/tests/results + MATLAB/tests/coverageReport if-no-files-found: error From 2dbfaef00a391d33629f39ae0eed7f7a865e9d55 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 17:24:46 +0000 Subject: [PATCH 19/82] dictionary adoption in getCodes --- MATLAB/tbx/+sdmx/getCodes.m | 6 +++--- MATLAB/tests/testSDMX.m | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/MATLAB/tbx/+sdmx/getCodes.m b/MATLAB/tbx/+sdmx/getCodes.m index b826aa49..a3489c01 100644 --- a/MATLAB/tbx/+sdmx/getCodes.m +++ b/MATLAB/tbx/+sdmx/getCodes.m @@ -55,8 +55,8 @@ end %create Map -ids = cell(result.keySet.toArray); -description = cell(result.values.toArray); -codes = containers.Map(ids, description); +ids = string(result.keySet.toArray); +description = string(result.values.toArray); +codes = dictionary(ids, description); end diff --git a/MATLAB/tests/testSDMX.m b/MATLAB/tests/testSDMX.m index 90128d82..242fe5c1 100644 --- a/MATLAB/tests/testSDMX.m +++ b/MATLAB/tests/testSDMX.m @@ -52,7 +52,7 @@ function tGetTimeSeries(tc) end function tGetCodes(tc) - map = getCodes('ECB','ECB,EXR,1.0', 'FREQ'); + map = sdmx.getCodes('ECB','ECB,EXR,1.0', 'FREQ'); tc.verifyEqual(map('A'), 'Annual') end From c596df103d5db7fda6a014426c2efa88d7009892 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 17:25:29 +0000 Subject: [PATCH 20/82] moved getflows to dictionary --- MATLAB/tbx/+sdmx/getFlows.m | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MATLAB/tbx/+sdmx/getFlows.m b/MATLAB/tbx/+sdmx/getFlows.m index 115dfb56..0ebbd153 100644 --- a/MATLAB/tbx/+sdmx/getFlows.m +++ b/MATLAB/tbx/+sdmx/getFlows.m @@ -58,8 +58,8 @@ end %create Map - ids = cell(result.keySet.toArray); - description = cell(result.values.toArray); - flows = containers.Map(ids, description); + ids = string(result.keySet.toArray); + description = string(result.values.toArray); + flows = dictionary(ids, description); end \ No newline at end of file From 008d2606d4b9c7e220ba5f2d81479421b63ad4c4 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 17:27:03 +0000 Subject: [PATCH 21/82] added minimum release to 23a --- MATLAB/buildfile.m | 3 ++- MATLAB/tests/testSDMX.m | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/MATLAB/buildfile.m b/MATLAB/buildfile.m index f3316802..a3718fbd 100644 --- a/MATLAB/buildfile.m +++ b/MATLAB/buildfile.m @@ -59,6 +59,7 @@ function archiveTask(~) Description = description, ... ToolboxJavaPath = "tbx/lib/SDMX.jar", ... ToolboxGettingStartedGuide = 'tbx/doc/GettingStarted.mlx', ... - OutputFile = 'releases/SDMX.mltbx'); + OutputFile = 'releases/SDMX.mltbx', ... + MinimumMatlabRelease = 'R2023a'); matlab.addons.toolbox.packageToolbox(opts) end \ No newline at end of file diff --git a/MATLAB/tests/testSDMX.m b/MATLAB/tests/testSDMX.m index 242fe5c1..7e38a383 100644 --- a/MATLAB/tests/testSDMX.m +++ b/MATLAB/tests/testSDMX.m @@ -35,7 +35,7 @@ function tGetFlows(tc) % Test 2: getFlows flows = sdmx.getFlows('ECB'); tc.verifyNotEmpty(flows) - tc.verifyEqual(flows('ECB,EXR,1.0'), 'Exchange Rates') + tc.verifyEqual(flows('ECB,EXR,1.0'), "Exchange Rates") end function tGetDimensions(tc) @@ -53,7 +53,7 @@ function tGetTimeSeries(tc) function tGetCodes(tc) map = sdmx.getCodes('ECB','ECB,EXR,1.0', 'FREQ'); - tc.verifyEqual(map('A'), 'Annual') + tc.verifyEqual(map('A'), "Annual") end end From 6ed2c4ecbdd2b7a6883157e0b09085f9e0961d36 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 17:32:41 +0000 Subject: [PATCH 22/82] openProject in git workflow --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 39a053ca..d8cc6761 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -63,7 +63,7 @@ jobs: - name: Run buildtool uses: matlab-actions/run-command@v1 with: - command: cd('MATLAB'), buildtool + command: openProject('MATLAB/SDMX.prj'), buildtool - name: Archive MATLAB Toolbox uses: actions/upload-artifact@v3 From 26274e005123a61bb301a320715742f3477703ad Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 17:42:54 +0000 Subject: [PATCH 23/82] added pages workflow --- .github/workflows/ci.yml | 14 ++++++++++++-- MATLAB/buildfile.m | 4 ++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d8cc6761..1b6ac340 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,9 +71,19 @@ jobs: name: MatSDMX path: | MATLAB/releases/SDMX.mltbx - MATLAB/tests/results - MATLAB/tests/coverageReport if-no-files-found: error + + - name: Setup Pages + uses: actions/configure-pages@v3 + + - name: Upload Artifact + uses: actions/upload-pages-artifact@v2 + with: + # upload entire directory + path: MATLAB/tests/reports + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 diff --git a/MATLAB/buildfile.m b/MATLAB/buildfile.m index a3718fbd..e2136c63 100644 --- a/MATLAB/buildfile.m +++ b/MATLAB/buildfile.m @@ -30,12 +30,12 @@ function testTask(~) suite = TestSuite.fromProject(currentProject); runner = TestRunner.withTextOutput; -htmlFolder = 'tests/results'; +htmlFolder = 'tests/reports/results'; plugin = TestReportPlugin.producingHTML(htmlFolder); runner.addPlugin(plugin); sourceCodeFolder = "tbx"; -reportFolder = "tests/coverageReport"; +reportFolder = "tests/reports/coverageReport"; reportFormat = CoverageReport(reportFolder); format = CoverageResult; plugin = CodeCoveragePlugin.forFolder(sourceCodeFolder,"Producing",[reportFormat,format], ... From 98cc3789b4d3abdff105605b276dc936e4c8d05f Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 17:46:37 +0000 Subject: [PATCH 24/82] added reports folder --- .../Z2gQ5he-eOzZR2jQ1JLLC4LXSlcd.xml | 2 ++ .../Z2gQ5he-eOzZR2jQ1JLLC4LXSlcp.xml | 2 ++ .../DgUGwJOjC5wX0zfM0vb348VTsKsd.xml | 2 ++ .../DgUGwJOjC5wX0zfM0vb348VTsKsp.xml | 2 ++ MATLAB/tbx/sdmxtable.m | 6 +++--- 5 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 MATLAB/resources/project/DgUGwJOjC5wX0zfM0vb348VTsKs/Z2gQ5he-eOzZR2jQ1JLLC4LXSlcd.xml create mode 100644 MATLAB/resources/project/DgUGwJOjC5wX0zfM0vb348VTsKs/Z2gQ5he-eOzZR2jQ1JLLC4LXSlcp.xml create mode 100644 MATLAB/resources/project/hLMKfvmMZYFbdoE4Xco7ryXas6s/DgUGwJOjC5wX0zfM0vb348VTsKsd.xml create mode 100644 MATLAB/resources/project/hLMKfvmMZYFbdoE4Xco7ryXas6s/DgUGwJOjC5wX0zfM0vb348VTsKsp.xml diff --git a/MATLAB/resources/project/DgUGwJOjC5wX0zfM0vb348VTsKs/Z2gQ5he-eOzZR2jQ1JLLC4LXSlcd.xml b/MATLAB/resources/project/DgUGwJOjC5wX0zfM0vb348VTsKs/Z2gQ5he-eOzZR2jQ1JLLC4LXSlcd.xml new file mode 100644 index 00000000..a75f7a81 --- /dev/null +++ b/MATLAB/resources/project/DgUGwJOjC5wX0zfM0vb348VTsKs/Z2gQ5he-eOzZR2jQ1JLLC4LXSlcd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/DgUGwJOjC5wX0zfM0vb348VTsKs/Z2gQ5he-eOzZR2jQ1JLLC4LXSlcp.xml b/MATLAB/resources/project/DgUGwJOjC5wX0zfM0vb348VTsKs/Z2gQ5he-eOzZR2jQ1JLLC4LXSlcp.xml new file mode 100644 index 00000000..842de6ab --- /dev/null +++ b/MATLAB/resources/project/DgUGwJOjC5wX0zfM0vb348VTsKs/Z2gQ5he-eOzZR2jQ1JLLC4LXSlcp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/hLMKfvmMZYFbdoE4Xco7ryXas6s/DgUGwJOjC5wX0zfM0vb348VTsKsd.xml b/MATLAB/resources/project/hLMKfvmMZYFbdoE4Xco7ryXas6s/DgUGwJOjC5wX0zfM0vb348VTsKsd.xml new file mode 100644 index 00000000..a75f7a81 --- /dev/null +++ b/MATLAB/resources/project/hLMKfvmMZYFbdoE4Xco7ryXas6s/DgUGwJOjC5wX0zfM0vb348VTsKsd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/hLMKfvmMZYFbdoE4Xco7ryXas6s/DgUGwJOjC5wX0zfM0vb348VTsKsp.xml b/MATLAB/resources/project/hLMKfvmMZYFbdoE4Xco7ryXas6s/DgUGwJOjC5wX0zfM0vb348VTsKsp.xml new file mode 100644 index 00000000..ffbec60e --- /dev/null +++ b/MATLAB/resources/project/hLMKfvmMZYFbdoE4Xco7ryXas6s/DgUGwJOjC5wX0zfM0vb348VTsKsp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/tbx/sdmxtable.m b/MATLAB/tbx/sdmxtable.m index 845c2957..d910dc5c 100644 --- a/MATLAB/tbx/sdmxtable.m +++ b/MATLAB/tbx/sdmxtable.m @@ -58,7 +58,7 @@ tableList = cell(1, tsNumber); % retieve all attribute names in all time series - allVariables = containers.Map; + allVariables = dictionary; if meta == true % add metadata entries too for i = 1:tsNumber @@ -78,7 +78,7 @@ end nobs = length(tslist{i}.Data); varNames = cell({'ID', 'TIME_PERIOD', 'OBS_VALUE'}); - varValues = cell({cellstr(repmat(tslist{i}.Name, [nobs 1])), ... + varValues = cell({string(repmat(tslist{i}.Name, [nobs 1])), ... tslist{i}.getabstime, ... tslist{i}.Data}); @@ -86,7 +86,7 @@ if meta == true keys = allVariables.keys; for j = 1:length(keys) - key = keys{j}; + key = keys(j); try value = tslist{i}.UserData(key); catch From 79c16313fa088d321da827bbf15c373822c9040b Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 18:01:32 +0000 Subject: [PATCH 25/82] added right permissions --- .github/workflows/ci.yml | 5 +++++ MATLAB/tbx/+sdmx/getDSDIdentifier.m | 2 +- MATLAB/tests/testSDMX.m | 10 ++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1b6ac340..1f523926 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,6 +38,11 @@ jobs: retention-days: 1 build-test-matlab: + permissions: + contents: read + pages: write + id-token: write + needs: build-java # The type of runner that the job will run on runs-on: ubuntu-latest diff --git a/MATLAB/tbx/+sdmx/getDSDIdentifier.m b/MATLAB/tbx/+sdmx/getDSDIdentifier.m index da4293df..42378fe1 100644 --- a/MATLAB/tbx/+sdmx/getDSDIdentifier.m +++ b/MATLAB/tbx/+sdmx/getDSDIdentifier.m @@ -41,7 +41,7 @@ end %try java code try - dsd = char(it.bancaditalia.oss.sdmx.client.SdmxClientHandler.getDSDIdentifier(provider, dataflow)); + dsd = string(it.bancaditalia.oss.sdmx.client.SdmxClientHandler.getDSDIdentifier(provider, dataflow)); catch mexp error(['SDMX getDSDIdentifier() error:\n' mexp.message]); end diff --git a/MATLAB/tests/testSDMX.m b/MATLAB/tests/testSDMX.m index 7e38a383..41b52452 100644 --- a/MATLAB/tests/testSDMX.m +++ b/MATLAB/tests/testSDMX.m @@ -56,6 +56,16 @@ function tGetCodes(tc) tc.verifyEqual(map('A'), "Annual") end + function tGetDSDIdentifier(tc) + id = sdmx.getDSDIdentifier('ECB','ECB,EXR,1.0'); + tc.verifyEqual(id, "ECB/ECB_EXR1/1.0") + end + + function tGetSDMXTable(tc) + tts = sdmx.getTimeSeries('ECB', 'EXR.M.USD|GBP.EUR.SP00.A'); + tb = sdmxtable(tts); + tc.verifyClass(tb, 'table') + end end end \ No newline at end of file From 2ac1fe81584534121f5b364a883019962f1b2a0f Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 5 Dec 2023 18:04:41 +0000 Subject: [PATCH 26/82] added test on getTimeseriesTable --- MATLAB/tests/testSDMX.m | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/MATLAB/tests/testSDMX.m b/MATLAB/tests/testSDMX.m index 41b52452..0458e754 100644 --- a/MATLAB/tests/testSDMX.m +++ b/MATLAB/tests/testSDMX.m @@ -51,6 +51,12 @@ function tGetTimeSeries(tc) tc.verifyLength(tts, 2) end + function tGetTimeSeriesTable(tc) + % Test 4: getTimeSeries + tts = sdmx.getTimeSeriesTable('ECB', 'EXR.M.USD|GBP.EUR.SP00.A'); + tc.verifyClass(tts, 'table') + end + function tGetCodes(tc) map = sdmx.getCodes('ECB','ECB,EXR,1.0', 'FREQ'); tc.verifyEqual(map('A'), "Annual") From 4d6de43946c7e257e7e02d8917abc2abc5746f16 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 10:28:02 +0000 Subject: [PATCH 27/82] added tests --- MATLAB/tbx/+sdmx/convert.m | 20 ++++----- MATLAB/tbx/+sdmx/getTimeSeriesRevisions.m | 2 +- MATLAB/tests/testSDMX.m | 52 +++++++++++++++++++++-- 3 files changed, 59 insertions(+), 15 deletions(-) diff --git a/MATLAB/tbx/+sdmx/convert.m b/MATLAB/tbx/+sdmx/convert.m index db623f32..f71aee67 100644 --- a/MATLAB/tbx/+sdmx/convert.m +++ b/MATLAB/tbx/+sdmx/convert.m @@ -141,35 +141,35 @@ end function metadata = getMetaData(ts) - metadata = containers.Map; + metadata = dictionary; %handle errors if ts.isErrorFlag - metadata('ERROR_FLAG') = true; - metadata('ERROR_MESSAGE') = ts.getErrorMessage; + metadata('ERROR_FLAG') = {true}; + metadata('ERROR_MESSAGE') = {ts.getErrorMessage}; warning('The time series %s is not valid due to errors in the request: %s.', ts.getName, ts.getErrorMessage); end % get all dimensions - tsdims = cell(ts.getDimensionsMap().keySet().toArray()); + tsdims = string(ts.getDimensionsMap().keySet().toArray()); for i=1:length(tsdims) - metadata(tsdims{i}) = char(ts.getDimension(tsdims{i})); + metadata(tsdims(i)) = {string(ts.getDimension(tsdims{i}))}; end % get all ts level attributes - tsattrs = cell(ts.getAttributesMap().keySet().toArray()); + tsattrs = string(ts.getAttributesMap().keySet().toArray()); for i=1:length(tsattrs) - metadata(tsattrs{i}) = char(ts.getAttribute(tsattrs{i})); + metadata(tsattrs(i)) = {string(ts.getAttribute(tsattrs{i}))}; end % get all ts level attributes - obsattrs = cell(ts.getObsLevelAttributesNamesArray); + obsattrs = string(ts.getObsLevelAttributesNamesArray); for i=1:length(obsattrs) - attrval = ts.getObsLevelAttributesArray(obsattrs{i}); + attrval = ts.getObsLevelAttributesArray(obsattrs(i)); if size(attrval) ~= ts.getObservationsArray().size() warning(['Attribute: ', obsattrs{i}, 'is malformed. Skipping.']); else - metadata(obsattrs{i}) = cell(attrval); + metadata(obsattrs(i)) = {string(attrval)}; end end end diff --git a/MATLAB/tbx/+sdmx/getTimeSeriesRevisions.m b/MATLAB/tbx/+sdmx/getTimeSeriesRevisions.m index b3037e62..b855d533 100644 --- a/MATLAB/tbx/+sdmx/getTimeSeriesRevisions.m +++ b/MATLAB/tbx/+sdmx/getTimeSeriesRevisions.m @@ -4,7 +4,7 @@ % points updated after a specific date and the history of revisions can % be returned % - % Usage: getTimeSeriesTable(provider, id, startTime, endTime) + % Usage: getTimeSeriesRevisions(provider, id, startTime, endTime, updatedAfter, includeHistory) % % Arguments % diff --git a/MATLAB/tests/testSDMX.m b/MATLAB/tests/testSDMX.m index 0458e754..80b3d5ea 100644 --- a/MATLAB/tests/testSDMX.m +++ b/MATLAB/tests/testSDMX.m @@ -49,12 +49,56 @@ function tGetTimeSeries(tc) % Test 4: getTimeSeries tts = sdmx.getTimeSeries('ECB', 'EXR.M.USD|GBP.EUR.SP00.A'); tc.verifyLength(tts, 2) + + tts = sdmx.getTimeSeries('EUROSTAT_COMP', 'AID_MARE/A.CY.'); + tc.verifyLength(tts, 3) + tb = sdmxtable(tts, true); + tc.verifyClass(tb, 'table') + + tts = sdmx.getTimeSeries('ISTAT','101_1039.A.001004.ALL.NUMAGRIAUTH'); + tc.verifyLength(tts, 1) + tb = sdmxtable(tts); + tc.verifyClass(tb, 'table') end function tGetTimeSeriesTable(tc) - % Test 4: getTimeSeries - tts = sdmx.getTimeSeriesTable('ECB', 'EXR.M.USD|GBP.EUR.SP00.A'); - tc.verifyClass(tts, 'table') + % Test 5: getTimeSeriesTable + tb = sdmx.getTimeSeriesTable('ECB', 'EXR.M.USD|GBP.EUR.SP00.A'); + tc.verifyClass(tb, 'table') + + tb = sdmx.getTimeSeriesTable('ECB', 'EXR.M.USD.EUR.SP00.A'); + tc.verifyClass(tb, 'table') + + startTime = string(datetime(1995,1,1)); + endTime = string(datetime(2005,1,1)); + + tb = sdmx.getTimeSeriesTable('ECB', 'EXR.M.USD.EUR.SP00.A', startTime, endTime); + tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); + + tc.verifyLessThan(tb.TIME_PERIOD, endTime); + tc.verifyGreaterThanOrEqual(tb.TIME_PERIOD, startTime) + end + + function tGetTimeSeriesRevisions(tc) + % Test 6: getTimeSeriesRevisions + + startTime = datetime(1995,1,1); + endTime = datetime(2005,1,1); + + tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime)); + tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); + + tc.verifyLessThan(tb.TIME_PERIOD, endTime); + tc.verifyGreaterThanOrEqual(tb.TIME_PERIOD, startTime) + + startTime = datetime(2002,1,1); + tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime), '', true); + tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); + tc.verifyClass(tb, 'table'); + + tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime), '2003', true); + tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); + tc.verifyClass(tb, 'table'); end function tGetCodes(tc) @@ -69,7 +113,7 @@ function tGetDSDIdentifier(tc) function tGetSDMXTable(tc) tts = sdmx.getTimeSeries('ECB', 'EXR.M.USD|GBP.EUR.SP00.A'); - tb = sdmxtable(tts); + tb = sdmxtable(tts, true); tc.verifyClass(tb, 'table') end end From 2ceae212487b655e4be48c0911732eb8f15025cb Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 11:45:21 +0000 Subject: [PATCH 28/82] added getProviders test --- MATLAB/tbx/sdmxtable.m | 7 ++++--- MATLAB/tests/testSDMX.m | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/MATLAB/tbx/sdmxtable.m b/MATLAB/tbx/sdmxtable.m index d910dc5c..929c556e 100644 --- a/MATLAB/tbx/sdmxtable.m +++ b/MATLAB/tbx/sdmxtable.m @@ -88,7 +88,7 @@ for j = 1:length(keys) key = keys(j); try - value = tslist{i}.UserData(key); + value = tslist{i}.UserData{key}; catch % attribute not present, set empty value = ''; @@ -96,7 +96,7 @@ % check if this is a ts level attribute. If so, repeat it % for every observation - if ~iscell(value) + if ~iscell(value) && numel(value) ~= nobs if isempty(value) % workaround... value = cellstr(repmat({''}, [nobs 1])); @@ -104,7 +104,8 @@ value = cellstr(repmat(value, [nobs 1])); end end - varNames{3 + j} = key; + + varNames{3 + j} = char(key); varValues{3 + j} = value; % now add the variable to the global list diff --git a/MATLAB/tests/testSDMX.m b/MATLAB/tests/testSDMX.m index 80b3d5ea..3a231766 100644 --- a/MATLAB/tests/testSDMX.m +++ b/MATLAB/tests/testSDMX.m @@ -59,6 +59,17 @@ function tGetTimeSeries(tc) tc.verifyLength(tts, 1) tb = sdmxtable(tts); tc.verifyClass(tb, 'table') + + tts = sdmx.getTimeSeries('ECB','IEAF.Q.SK.N.V.D92.Z.S2.A1.S.2.X.N.Z'); + tc.verifyLength(tts, 1) + tb = sdmxtable(tts, true); + tc.verifyClass(tb, 'table') + + tts = sdmx.getTimeSeries('ECB', 'BKN/H.AT.A020.....'); + tc.verifyLength(tts, 1) + tb = sdmxtable(tts, true); + tc.verifyClass(tb, 'table') + end function tGetTimeSeriesTable(tc) @@ -101,6 +112,12 @@ function tGetTimeSeriesRevisions(tc) tc.verifyClass(tb, 'table'); end + function tAddProvider(tc) + sdmx.addProvider('ECB_TEST', 'http://sdw-wsrest.ecb.europa.eu/service', false, false, false, 'Sample ECB provider'); + providers = sdmx.getProviders; + tc.verifyTrue(any(contains(providers, 'ECB_TEST'))) + end + function tGetCodes(tc) map = sdmx.getCodes('ECB','ECB,EXR,1.0', 'FREQ'); tc.verifyEqual(map('A'), "Annual") From 5d5275c51ba31bcd2f31fa97d63a0bcd8d9a6bd3 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 11:54:24 +0000 Subject: [PATCH 29/82] Refactored structure to make Contents.m relevant --- .../ikHv63hpmqk2RzSaO85_bPgFbT0d.xml | 2 ++ .../ikHv63hpmqk2RzSaO85_bPgFbT0p.xml | 2 ++ .../zLRkliQKdihgIKg2Ye1PsVPqYHUp.xml | 2 -- .../0B1KspbUt-241FI7We1N5-9R-rId.xml} | 0 .../0B1KspbUt-241FI7We1N5-9R-rIp.xml} | 0 .../6DdEMMcGeFK0a-8m7nwliEThbfQd.xml} | 0 .../6DdEMMcGeFK0a-8m7nwliEThbfQp.xml} | 0 .../KNmT8r4RH_qr5q378jmjVxPDRMUd.xml} | 0 .../KNmT8r4RH_qr5q378jmjVxPDRMUp.xml} | 0 .../Q8mhuPw_Tv7RuH9j3jiPsyPukWod.xml} | 0 .../Q8mhuPw_Tv7RuH9j3jiPsyPukWop.xml} | 0 .../RAmtYgVqCJmHDF8W1keZNcWXr4Ad.xml} | 0 .../RAmtYgVqCJmHDF8W1keZNcWXr4Ap.xml} | 0 .../5uLoVhgKSMxekrqkNICN1R0WL68d.xml} | 0 .../5uLoVhgKSMxekrqkNICN1R0WL68p.xml} | 0 .../HMzi1SjT051J99V7MztUw9bamCAd.xml} | 0 .../HMzi1SjT051J99V7MztUw9bamCAp.xml} | 0 .../KHU6PkkQT_DUjGU7mYvQpowEyqUd.xml} | 0 .../KHU6PkkQT_DUjGU7mYvQpowEyqUp.xml} | 0 .../L770E7DimF-RzKpWtgO7Z9SkrS8d.xml} | 0 .../L770E7DimF-RzKpWtgO7Z9SkrS8p.xml} | 0 .../PGcOmU52yoRRa8teSsBWs-uLgRwd.xml} | 0 .../PGcOmU52yoRRa8teSsBWs-uLgRwp.xml} | 0 .../PIzut2jQU7AMhC-x8vXTBBb8jGEd.xml} | 0 .../PIzut2jQU7AMhC-x8vXTBBb8jGEp.xml} | 0 .../VDAuUCs6Wvcrm89RH-eUwFizHNQd.xml} | 0 .../VDAuUCs6Wvcrm89RH-eUwFizHNQp.xml} | 0 .../Ye_GeJ0XCMq2HiU9BwytwhQvpYkd.xml} | 2 +- .../Ye_GeJ0XCMq2HiU9BwytwhQvpYkp.xml | 2 ++ .../YjEFtWznPEXVmHNBgiRCdQQI5XQd.xml} | 0 .../YjEFtWznPEXVmHNBgiRCdQQI5XQp.xml} | 0 .../hG9Ew1je-8cGZ6LSHlZuyAif-VQd.xml} | 0 .../hG9Ew1je-8cGZ6LSHlZuyAif-VQp.xml} | 0 .../hg2ns5sqM66imK0-O9IbJFpaMnQd.xml} | 0 .../hg2ns5sqM66imK0-O9IbJFpaMnQp.xml} | 0 .../oZAxUFQ91_ZuU61SrexlMXTgXHYd.xml} | 0 .../oZAxUFQ91_ZuU61SrexlMXTgXHYp.xml} | 0 .../slsk9MXhWORuaqzeARvh8naIRCId.xml} | 0 .../slsk9MXhWORuaqzeARvh8naIRCIp.xml} | 0 .../K-M49kMK9kyHCEDqQhcRRdI7xS0d.xml | 2 ++ .../K-M49kMK9kyHCEDqQhcRRdI7xS0p.xml | 2 ++ MATLAB/tbx/{ => sdmx}/+sdmx/addProvider.m | 0 MATLAB/tbx/{ => sdmx}/+sdmx/convert.m | 0 MATLAB/tbx/{ => sdmx}/+sdmx/convertTable.m | 0 MATLAB/tbx/{ => sdmx}/+sdmx/getCodes.m | 0 MATLAB/tbx/{ => sdmx}/+sdmx/getDSDIdentifier.m | 0 MATLAB/tbx/{ => sdmx}/+sdmx/getDimensions.m | 0 MATLAB/tbx/{ => sdmx}/+sdmx/getFlows.m | 0 MATLAB/tbx/{ => sdmx}/+sdmx/getProviders.m | 0 MATLAB/tbx/{ => sdmx}/+sdmx/getTimeSeries.m | 0 MATLAB/tbx/{ => sdmx}/+sdmx/getTimeSeriesRevisions.m | 0 MATLAB/tbx/{ => sdmx}/+sdmx/getTimeSeriesTable.m | 0 MATLAB/tbx/{ => sdmx}/+sdmx/initClasspath.m | 4 ++-- MATLAB/tbx/{ => sdmx}/Contents.m | 0 MATLAB/tbx/{ => sdmx}/sdmxHelp.m | 0 MATLAB/tbx/{ => sdmx}/sdmxtable.m | 0 56 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/ikHv63hpmqk2RzSaO85_bPgFbT0d.xml create mode 100644 MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/ikHv63hpmqk2RzSaO85_bPgFbT0p.xml delete mode 100644 MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/zLRkliQKdihgIKg2Ye1PsVPqYHUp.xml rename MATLAB/resources/project/{L-idrZRjZXZ8jYd7-E8teU8ewW4/1PgZFhG8-SuxYahVl5kGQqE7g3od.xml => K-M49kMK9kyHCEDqQhcRRdI7xS0/0B1KspbUt-241FI7We1N5-9R-rId.xml} (100%) rename MATLAB/resources/project/{L-idrZRjZXZ8jYd7-E8teU8ewW4/1PgZFhG8-SuxYahVl5kGQqE7g3op.xml => K-M49kMK9kyHCEDqQhcRRdI7xS0/0B1KspbUt-241FI7We1N5-9R-rIp.xml} (100%) rename MATLAB/resources/project/{L-idrZRjZXZ8jYd7-E8teU8ewW4/jGmTGeXPTUCqY6Yz0JL4Xzvq-vwd.xml => K-M49kMK9kyHCEDqQhcRRdI7xS0/6DdEMMcGeFK0a-8m7nwliEThbfQd.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/vqxmpMUs_JRyVoyp0EUiNFGJHFgp.xml => K-M49kMK9kyHCEDqQhcRRdI7xS0/6DdEMMcGeFK0a-8m7nwliEThbfQp.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/vqxmpMUs_JRyVoyp0EUiNFGJHFgd.xml => K-M49kMK9kyHCEDqQhcRRdI7xS0/KNmT8r4RH_qr5q378jmjVxPDRMUd.xml} (100%) rename MATLAB/resources/project/{L-idrZRjZXZ8jYd7-E8teU8ewW4/jGmTGeXPTUCqY6Yz0JL4Xzvq-vwp.xml => K-M49kMK9kyHCEDqQhcRRdI7xS0/KNmT8r4RH_qr5q378jmjVxPDRMUp.xml} (100%) rename MATLAB/resources/project/{L-idrZRjZXZ8jYd7-E8teU8ewW4/QH4virXgciolw2Faipu_BoL3dk0d.xml => K-M49kMK9kyHCEDqQhcRRdI7xS0/Q8mhuPw_Tv7RuH9j3jiPsyPukWod.xml} (100%) rename MATLAB/resources/project/{L-idrZRjZXZ8jYd7-E8teU8ewW4/S31mWBbtG-Vvk665YCYlMuN5f3Ip.xml => K-M49kMK9kyHCEDqQhcRRdI7xS0/Q8mhuPw_Tv7RuH9j3jiPsyPukWop.xml} (100%) rename MATLAB/resources/project/{L-idrZRjZXZ8jYd7-E8teU8ewW4/S31mWBbtG-Vvk665YCYlMuN5f3Id.xml => K-M49kMK9kyHCEDqQhcRRdI7xS0/RAmtYgVqCJmHDF8W1keZNcWXr4Ad.xml} (100%) rename MATLAB/resources/project/{L-idrZRjZXZ8jYd7-E8teU8ewW4/QH4virXgciolw2Faipu_BoL3dk0p.xml => K-M49kMK9kyHCEDqQhcRRdI7xS0/RAmtYgVqCJmHDF8W1keZNcWXr4Ap.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/32hg-R6R6ittHOWhIh4DZPVb5rsd.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/5uLoVhgKSMxekrqkNICN1R0WL68d.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/TJtZnaKalHkjMylg0vZpwuGIvHQp.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/5uLoVhgKSMxekrqkNICN1R0WL68p.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/GsE4tZWk1JGZvQCh8ZydZ2iK5uAd.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/HMzi1SjT051J99V7MztUw9bamCAd.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/L5Q89yyOFpdrzPLZEcrDmmAiqmIp.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/HMzi1SjT051J99V7MztUw9bamCAp.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/L5Q89yyOFpdrzPLZEcrDmmAiqmId.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/KHU6PkkQT_DUjGU7mYvQpowEyqUd.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/MeTbvye31CJ5QGg4y_XiR-zLMb0p.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/KHU6PkkQT_DUjGU7mYvQpowEyqUp.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/MeTbvye31CJ5QGg4y_XiR-zLMb0d.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/L770E7DimF-RzKpWtgO7Z9SkrS8d.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/ke8oo_T4rXsodR2TnfWsdO7g61Mp.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/L770E7DimF-RzKpWtgO7Z9SkrS8p.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/TJtZnaKalHkjMylg0vZpwuGIvHQd.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/PGcOmU52yoRRa8teSsBWs-uLgRwd.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/jK7EMEUDRNuKi-0AEZAlz3jnK84p.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/PGcOmU52yoRRa8teSsBWs-uLgRwp.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_ZyFVSAbcQCJOYvtOlzFb6ld6Csd.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/PIzut2jQU7AMhC-x8vXTBBb8jGEd.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/q_bjYALhpJyTkCbTXJayEB7uvjkp.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/PIzut2jQU7AMhC-x8vXTBBb8jGEp.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_t6ocAidXHvoMiLlgehX8Rvgp24d.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/VDAuUCs6Wvcrm89RH-eUwFizHNQd.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_ZyFVSAbcQCJOYvtOlzFb6ld6Csp.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/VDAuUCs6Wvcrm89RH-eUwFizHNQp.xml} (100%) rename MATLAB/resources/project/{EEtUlUb-dLAdf0KpMVivaUlztwA/zLRkliQKdihgIKg2Ye1PsVPqYHUd.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/Ye_GeJ0XCMq2HiU9BwytwhQvpYkd.xml} (54%) create mode 100644 MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/Ye_GeJ0XCMq2HiU9BwytwhQvpYkp.xml rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/jK7EMEUDRNuKi-0AEZAlz3jnK84d.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/YjEFtWznPEXVmHNBgiRCdQQI5XQd.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/sn8WJCpgjh7HujuxMa8snw_nddEp.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/YjEFtWznPEXVmHNBgiRCdQQI5XQp.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/ke8oo_T4rXsodR2TnfWsdO7g61Md.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/hG9Ew1je-8cGZ6LSHlZuyAif-VQd.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/32hg-R6R6ittHOWhIh4DZPVb5rsp.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/hG9Ew1je-8cGZ6LSHlZuyAif-VQp.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/q_bjYALhpJyTkCbTXJayEB7uvjkd.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/hg2ns5sqM66imK0-O9IbJFpaMnQd.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/uNg6cwBepDJuMJXYaG-n8vwcAmop.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/hg2ns5sqM66imK0-O9IbJFpaMnQp.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/sn8WJCpgjh7HujuxMa8snw_nddEd.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/oZAxUFQ91_ZuU61SrexlMXTgXHYd.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_t6ocAidXHvoMiLlgehX8Rvgp24p.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/oZAxUFQ91_ZuU61SrexlMXTgXHYp.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/uNg6cwBepDJuMJXYaG-n8vwcAmod.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/slsk9MXhWORuaqzeARvh8naIRCId.xml} (100%) rename MATLAB/resources/project/{jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/GsE4tZWk1JGZvQCh8ZydZ2iK5uAp.xml => KNmT8r4RH_qr5q378jmjVxPDRMU/slsk9MXhWORuaqzeARvh8naIRCIp.xml} (100%) create mode 100644 MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/K-M49kMK9kyHCEDqQhcRRdI7xS0d.xml create mode 100644 MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/K-M49kMK9kyHCEDqQhcRRdI7xS0p.xml rename MATLAB/tbx/{ => sdmx}/+sdmx/addProvider.m (100%) rename MATLAB/tbx/{ => sdmx}/+sdmx/convert.m (100%) rename MATLAB/tbx/{ => sdmx}/+sdmx/convertTable.m (100%) rename MATLAB/tbx/{ => sdmx}/+sdmx/getCodes.m (100%) rename MATLAB/tbx/{ => sdmx}/+sdmx/getDSDIdentifier.m (100%) rename MATLAB/tbx/{ => sdmx}/+sdmx/getDimensions.m (100%) rename MATLAB/tbx/{ => sdmx}/+sdmx/getFlows.m (100%) rename MATLAB/tbx/{ => sdmx}/+sdmx/getProviders.m (100%) rename MATLAB/tbx/{ => sdmx}/+sdmx/getTimeSeries.m (100%) rename MATLAB/tbx/{ => sdmx}/+sdmx/getTimeSeriesRevisions.m (100%) rename MATLAB/tbx/{ => sdmx}/+sdmx/getTimeSeriesTable.m (100%) rename MATLAB/tbx/{ => sdmx}/+sdmx/initClasspath.m (90%) rename MATLAB/tbx/{ => sdmx}/Contents.m (100%) rename MATLAB/tbx/{ => sdmx}/sdmxHelp.m (100%) rename MATLAB/tbx/{ => sdmx}/sdmxtable.m (100%) diff --git a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/ikHv63hpmqk2RzSaO85_bPgFbT0d.xml b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/ikHv63hpmqk2RzSaO85_bPgFbT0d.xml new file mode 100644 index 00000000..170d0b7d --- /dev/null +++ b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/ikHv63hpmqk2RzSaO85_bPgFbT0d.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/ikHv63hpmqk2RzSaO85_bPgFbT0p.xml b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/ikHv63hpmqk2RzSaO85_bPgFbT0p.xml new file mode 100644 index 00000000..c2e186e6 --- /dev/null +++ b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/ikHv63hpmqk2RzSaO85_bPgFbT0p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/zLRkliQKdihgIKg2Ye1PsVPqYHUp.xml b/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/zLRkliQKdihgIKg2Ye1PsVPqYHUp.xml deleted file mode 100644 index b265b715..00000000 --- a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/zLRkliQKdihgIKg2Ye1PsVPqYHUp.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/1PgZFhG8-SuxYahVl5kGQqE7g3od.xml b/MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/0B1KspbUt-241FI7We1N5-9R-rId.xml similarity index 100% rename from MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/1PgZFhG8-SuxYahVl5kGQqE7g3od.xml rename to MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/0B1KspbUt-241FI7We1N5-9R-rId.xml diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/1PgZFhG8-SuxYahVl5kGQqE7g3op.xml b/MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/0B1KspbUt-241FI7We1N5-9R-rIp.xml similarity index 100% rename from MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/1PgZFhG8-SuxYahVl5kGQqE7g3op.xml rename to MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/0B1KspbUt-241FI7We1N5-9R-rIp.xml diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/jGmTGeXPTUCqY6Yz0JL4Xzvq-vwd.xml b/MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/6DdEMMcGeFK0a-8m7nwliEThbfQd.xml similarity index 100% rename from MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/jGmTGeXPTUCqY6Yz0JL4Xzvq-vwd.xml rename to MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/6DdEMMcGeFK0a-8m7nwliEThbfQd.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/vqxmpMUs_JRyVoyp0EUiNFGJHFgp.xml b/MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/6DdEMMcGeFK0a-8m7nwliEThbfQp.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/vqxmpMUs_JRyVoyp0EUiNFGJHFgp.xml rename to MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/6DdEMMcGeFK0a-8m7nwliEThbfQp.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/vqxmpMUs_JRyVoyp0EUiNFGJHFgd.xml b/MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/KNmT8r4RH_qr5q378jmjVxPDRMUd.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/vqxmpMUs_JRyVoyp0EUiNFGJHFgd.xml rename to MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/KNmT8r4RH_qr5q378jmjVxPDRMUd.xml diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/jGmTGeXPTUCqY6Yz0JL4Xzvq-vwp.xml b/MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/KNmT8r4RH_qr5q378jmjVxPDRMUp.xml similarity index 100% rename from MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/jGmTGeXPTUCqY6Yz0JL4Xzvq-vwp.xml rename to MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/KNmT8r4RH_qr5q378jmjVxPDRMUp.xml diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/QH4virXgciolw2Faipu_BoL3dk0d.xml b/MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/Q8mhuPw_Tv7RuH9j3jiPsyPukWod.xml similarity index 100% rename from MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/QH4virXgciolw2Faipu_BoL3dk0d.xml rename to MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/Q8mhuPw_Tv7RuH9j3jiPsyPukWod.xml diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/S31mWBbtG-Vvk665YCYlMuN5f3Ip.xml b/MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/Q8mhuPw_Tv7RuH9j3jiPsyPukWop.xml similarity index 100% rename from MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/S31mWBbtG-Vvk665YCYlMuN5f3Ip.xml rename to MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/Q8mhuPw_Tv7RuH9j3jiPsyPukWop.xml diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/S31mWBbtG-Vvk665YCYlMuN5f3Id.xml b/MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/RAmtYgVqCJmHDF8W1keZNcWXr4Ad.xml similarity index 100% rename from MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/S31mWBbtG-Vvk665YCYlMuN5f3Id.xml rename to MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/RAmtYgVqCJmHDF8W1keZNcWXr4Ad.xml diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/QH4virXgciolw2Faipu_BoL3dk0p.xml b/MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/RAmtYgVqCJmHDF8W1keZNcWXr4Ap.xml similarity index 100% rename from MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/QH4virXgciolw2Faipu_BoL3dk0p.xml rename to MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/RAmtYgVqCJmHDF8W1keZNcWXr4Ap.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/32hg-R6R6ittHOWhIh4DZPVb5rsd.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/5uLoVhgKSMxekrqkNICN1R0WL68d.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/32hg-R6R6ittHOWhIh4DZPVb5rsd.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/5uLoVhgKSMxekrqkNICN1R0WL68d.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/TJtZnaKalHkjMylg0vZpwuGIvHQp.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/5uLoVhgKSMxekrqkNICN1R0WL68p.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/TJtZnaKalHkjMylg0vZpwuGIvHQp.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/5uLoVhgKSMxekrqkNICN1R0WL68p.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/GsE4tZWk1JGZvQCh8ZydZ2iK5uAd.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/HMzi1SjT051J99V7MztUw9bamCAd.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/GsE4tZWk1JGZvQCh8ZydZ2iK5uAd.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/HMzi1SjT051J99V7MztUw9bamCAd.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/L5Q89yyOFpdrzPLZEcrDmmAiqmIp.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/HMzi1SjT051J99V7MztUw9bamCAp.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/L5Q89yyOFpdrzPLZEcrDmmAiqmIp.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/HMzi1SjT051J99V7MztUw9bamCAp.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/L5Q89yyOFpdrzPLZEcrDmmAiqmId.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/KHU6PkkQT_DUjGU7mYvQpowEyqUd.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/L5Q89yyOFpdrzPLZEcrDmmAiqmId.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/KHU6PkkQT_DUjGU7mYvQpowEyqUd.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/MeTbvye31CJ5QGg4y_XiR-zLMb0p.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/KHU6PkkQT_DUjGU7mYvQpowEyqUp.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/MeTbvye31CJ5QGg4y_XiR-zLMb0p.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/KHU6PkkQT_DUjGU7mYvQpowEyqUp.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/MeTbvye31CJ5QGg4y_XiR-zLMb0d.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/L770E7DimF-RzKpWtgO7Z9SkrS8d.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/MeTbvye31CJ5QGg4y_XiR-zLMb0d.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/L770E7DimF-RzKpWtgO7Z9SkrS8d.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/ke8oo_T4rXsodR2TnfWsdO7g61Mp.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/L770E7DimF-RzKpWtgO7Z9SkrS8p.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/ke8oo_T4rXsodR2TnfWsdO7g61Mp.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/L770E7DimF-RzKpWtgO7Z9SkrS8p.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/TJtZnaKalHkjMylg0vZpwuGIvHQd.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/PGcOmU52yoRRa8teSsBWs-uLgRwd.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/TJtZnaKalHkjMylg0vZpwuGIvHQd.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/PGcOmU52yoRRa8teSsBWs-uLgRwd.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/jK7EMEUDRNuKi-0AEZAlz3jnK84p.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/PGcOmU52yoRRa8teSsBWs-uLgRwp.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/jK7EMEUDRNuKi-0AEZAlz3jnK84p.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/PGcOmU52yoRRa8teSsBWs-uLgRwp.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_ZyFVSAbcQCJOYvtOlzFb6ld6Csd.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/PIzut2jQU7AMhC-x8vXTBBb8jGEd.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_ZyFVSAbcQCJOYvtOlzFb6ld6Csd.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/PIzut2jQU7AMhC-x8vXTBBb8jGEd.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/q_bjYALhpJyTkCbTXJayEB7uvjkp.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/PIzut2jQU7AMhC-x8vXTBBb8jGEp.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/q_bjYALhpJyTkCbTXJayEB7uvjkp.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/PIzut2jQU7AMhC-x8vXTBBb8jGEp.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_t6ocAidXHvoMiLlgehX8Rvgp24d.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/VDAuUCs6Wvcrm89RH-eUwFizHNQd.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_t6ocAidXHvoMiLlgehX8Rvgp24d.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/VDAuUCs6Wvcrm89RH-eUwFizHNQd.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_ZyFVSAbcQCJOYvtOlzFb6ld6Csp.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/VDAuUCs6Wvcrm89RH-eUwFizHNQp.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_ZyFVSAbcQCJOYvtOlzFb6ld6Csp.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/VDAuUCs6Wvcrm89RH-eUwFizHNQp.xml diff --git a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/zLRkliQKdihgIKg2Ye1PsVPqYHUd.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/Ye_GeJ0XCMq2HiU9BwytwhQvpYkd.xml similarity index 54% rename from MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/zLRkliQKdihgIKg2Ye1PsVPqYHUd.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/Ye_GeJ0XCMq2HiU9BwytwhQvpYkd.xml index 47f56b5d..a75f7a81 100644 --- a/MATLAB/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/zLRkliQKdihgIKg2Ye1PsVPqYHUd.xml +++ b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/Ye_GeJ0XCMq2HiU9BwytwhQvpYkd.xml @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/Ye_GeJ0XCMq2HiU9BwytwhQvpYkp.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/Ye_GeJ0XCMq2HiU9BwytwhQvpYkp.xml new file mode 100644 index 00000000..842de6ab --- /dev/null +++ b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/Ye_GeJ0XCMq2HiU9BwytwhQvpYkp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/jK7EMEUDRNuKi-0AEZAlz3jnK84d.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/YjEFtWznPEXVmHNBgiRCdQQI5XQd.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/jK7EMEUDRNuKi-0AEZAlz3jnK84d.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/YjEFtWznPEXVmHNBgiRCdQQI5XQd.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/sn8WJCpgjh7HujuxMa8snw_nddEp.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/YjEFtWznPEXVmHNBgiRCdQQI5XQp.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/sn8WJCpgjh7HujuxMa8snw_nddEp.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/YjEFtWznPEXVmHNBgiRCdQQI5XQp.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/ke8oo_T4rXsodR2TnfWsdO7g61Md.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/hG9Ew1je-8cGZ6LSHlZuyAif-VQd.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/ke8oo_T4rXsodR2TnfWsdO7g61Md.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/hG9Ew1je-8cGZ6LSHlZuyAif-VQd.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/32hg-R6R6ittHOWhIh4DZPVb5rsp.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/hG9Ew1je-8cGZ6LSHlZuyAif-VQp.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/32hg-R6R6ittHOWhIh4DZPVb5rsp.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/hG9Ew1je-8cGZ6LSHlZuyAif-VQp.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/q_bjYALhpJyTkCbTXJayEB7uvjkd.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/hg2ns5sqM66imK0-O9IbJFpaMnQd.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/q_bjYALhpJyTkCbTXJayEB7uvjkd.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/hg2ns5sqM66imK0-O9IbJFpaMnQd.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/uNg6cwBepDJuMJXYaG-n8vwcAmop.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/hg2ns5sqM66imK0-O9IbJFpaMnQp.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/uNg6cwBepDJuMJXYaG-n8vwcAmop.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/hg2ns5sqM66imK0-O9IbJFpaMnQp.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/sn8WJCpgjh7HujuxMa8snw_nddEd.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/oZAxUFQ91_ZuU61SrexlMXTgXHYd.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/sn8WJCpgjh7HujuxMa8snw_nddEd.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/oZAxUFQ91_ZuU61SrexlMXTgXHYd.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_t6ocAidXHvoMiLlgehX8Rvgp24p.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/oZAxUFQ91_ZuU61SrexlMXTgXHYp.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/_t6ocAidXHvoMiLlgehX8Rvgp24p.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/oZAxUFQ91_ZuU61SrexlMXTgXHYp.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/uNg6cwBepDJuMJXYaG-n8vwcAmod.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/slsk9MXhWORuaqzeARvh8naIRCId.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/uNg6cwBepDJuMJXYaG-n8vwcAmod.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/slsk9MXhWORuaqzeARvh8naIRCId.xml diff --git a/MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/GsE4tZWk1JGZvQCh8ZydZ2iK5uAp.xml b/MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/slsk9MXhWORuaqzeARvh8naIRCIp.xml similarity index 100% rename from MATLAB/resources/project/jGmTGeXPTUCqY6Yz0JL4Xzvq-vw/GsE4tZWk1JGZvQCh8ZydZ2iK5uAp.xml rename to MATLAB/resources/project/KNmT8r4RH_qr5q378jmjVxPDRMU/slsk9MXhWORuaqzeARvh8naIRCIp.xml diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/K-M49kMK9kyHCEDqQhcRRdI7xS0d.xml b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/K-M49kMK9kyHCEDqQhcRRdI7xS0d.xml new file mode 100644 index 00000000..a75f7a81 --- /dev/null +++ b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/K-M49kMK9kyHCEDqQhcRRdI7xS0d.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/K-M49kMK9kyHCEDqQhcRRdI7xS0p.xml b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/K-M49kMK9kyHCEDqQhcRRdI7xS0p.xml new file mode 100644 index 00000000..ad7819f7 --- /dev/null +++ b/MATLAB/resources/project/L-idrZRjZXZ8jYd7-E8teU8ewW4/K-M49kMK9kyHCEDqQhcRRdI7xS0p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/tbx/+sdmx/addProvider.m b/MATLAB/tbx/sdmx/+sdmx/addProvider.m similarity index 100% rename from MATLAB/tbx/+sdmx/addProvider.m rename to MATLAB/tbx/sdmx/+sdmx/addProvider.m diff --git a/MATLAB/tbx/+sdmx/convert.m b/MATLAB/tbx/sdmx/+sdmx/convert.m similarity index 100% rename from MATLAB/tbx/+sdmx/convert.m rename to MATLAB/tbx/sdmx/+sdmx/convert.m diff --git a/MATLAB/tbx/+sdmx/convertTable.m b/MATLAB/tbx/sdmx/+sdmx/convertTable.m similarity index 100% rename from MATLAB/tbx/+sdmx/convertTable.m rename to MATLAB/tbx/sdmx/+sdmx/convertTable.m diff --git a/MATLAB/tbx/+sdmx/getCodes.m b/MATLAB/tbx/sdmx/+sdmx/getCodes.m similarity index 100% rename from MATLAB/tbx/+sdmx/getCodes.m rename to MATLAB/tbx/sdmx/+sdmx/getCodes.m diff --git a/MATLAB/tbx/+sdmx/getDSDIdentifier.m b/MATLAB/tbx/sdmx/+sdmx/getDSDIdentifier.m similarity index 100% rename from MATLAB/tbx/+sdmx/getDSDIdentifier.m rename to MATLAB/tbx/sdmx/+sdmx/getDSDIdentifier.m diff --git a/MATLAB/tbx/+sdmx/getDimensions.m b/MATLAB/tbx/sdmx/+sdmx/getDimensions.m similarity index 100% rename from MATLAB/tbx/+sdmx/getDimensions.m rename to MATLAB/tbx/sdmx/+sdmx/getDimensions.m diff --git a/MATLAB/tbx/+sdmx/getFlows.m b/MATLAB/tbx/sdmx/+sdmx/getFlows.m similarity index 100% rename from MATLAB/tbx/+sdmx/getFlows.m rename to MATLAB/tbx/sdmx/+sdmx/getFlows.m diff --git a/MATLAB/tbx/+sdmx/getProviders.m b/MATLAB/tbx/sdmx/+sdmx/getProviders.m similarity index 100% rename from MATLAB/tbx/+sdmx/getProviders.m rename to MATLAB/tbx/sdmx/+sdmx/getProviders.m diff --git a/MATLAB/tbx/+sdmx/getTimeSeries.m b/MATLAB/tbx/sdmx/+sdmx/getTimeSeries.m similarity index 100% rename from MATLAB/tbx/+sdmx/getTimeSeries.m rename to MATLAB/tbx/sdmx/+sdmx/getTimeSeries.m diff --git a/MATLAB/tbx/+sdmx/getTimeSeriesRevisions.m b/MATLAB/tbx/sdmx/+sdmx/getTimeSeriesRevisions.m similarity index 100% rename from MATLAB/tbx/+sdmx/getTimeSeriesRevisions.m rename to MATLAB/tbx/sdmx/+sdmx/getTimeSeriesRevisions.m diff --git a/MATLAB/tbx/+sdmx/getTimeSeriesTable.m b/MATLAB/tbx/sdmx/+sdmx/getTimeSeriesTable.m similarity index 100% rename from MATLAB/tbx/+sdmx/getTimeSeriesTable.m rename to MATLAB/tbx/sdmx/+sdmx/getTimeSeriesTable.m diff --git a/MATLAB/tbx/+sdmx/initClasspath.m b/MATLAB/tbx/sdmx/+sdmx/initClasspath.m similarity index 90% rename from MATLAB/tbx/+sdmx/initClasspath.m rename to MATLAB/tbx/sdmx/+sdmx/initClasspath.m index ac48ca1d..8d4d035a 100644 --- a/MATLAB/tbx/+sdmx/initClasspath.m +++ b/MATLAB/tbx/sdmx/+sdmx/initClasspath.m @@ -22,10 +22,10 @@ function initClasspath() jarLoaded = exist('it.bancaditalia.oss.sdmx.helper.SDMXHelper', 'class'); if jarLoaded ~= 8 - mFilesLoaded = exist('sdmxHelp.m', 'file'); + mFilesLoaded = isfile('sdmxHelp.m'); if mFilesLoaded == 2 pathToJar = fileparts(which('sdmxHelp')); - javaaddpath([pathToJar, '/lib/SDMX.jar']); + javaaddpath([pathToJar, '../lib/SDMX.jar']); else error('Error: the m-files of the MatSDMX toolbox cannot be found in the MATLAB path'); end diff --git a/MATLAB/tbx/Contents.m b/MATLAB/tbx/sdmx/Contents.m similarity index 100% rename from MATLAB/tbx/Contents.m rename to MATLAB/tbx/sdmx/Contents.m diff --git a/MATLAB/tbx/sdmxHelp.m b/MATLAB/tbx/sdmx/sdmxHelp.m similarity index 100% rename from MATLAB/tbx/sdmxHelp.m rename to MATLAB/tbx/sdmx/sdmxHelp.m diff --git a/MATLAB/tbx/sdmxtable.m b/MATLAB/tbx/sdmx/sdmxtable.m similarity index 100% rename from MATLAB/tbx/sdmxtable.m rename to MATLAB/tbx/sdmx/sdmxtable.m From fbd47d53aab29e9f2a1c9257d2cd6fc7a1557ad7 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 11:57:10 +0000 Subject: [PATCH 30/82] included .sdmx in sdmxHelper --- .../java/it/bancaditalia/oss/sdmx/helper/ToolCommandsFrame.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/ToolCommandsFrame.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/ToolCommandsFrame.java index abe21130..f94dd7d8 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/ToolCommandsFrame.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/ToolCommandsFrame.java @@ -121,7 +121,7 @@ public ToolCommandsFrame(String query, String provider) throws SdmxException gbc_matlabCommandLabel.gridy = 1; panel.add(matlabCommandLabel, gbc_matlabCommandLabel); - matlabCommandText = new JTextField("result = getTimeSeries('" + provider + "', '" + query + "');"); + matlabCommandText = new JTextField("result = sdmx.getTimeSeries('" + provider + "', '" + query + "');"); matlabCommandLabel.setLabelFor(matlabCommandText); GridBagConstraints gbc_matlabCommandText = new GridBagConstraints(); gbc_matlabCommandText.fill = GridBagConstraints.BOTH; From b68cc37808eb5ba54c70ebe1d673ee85a8118b23 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 12:05:23 +0000 Subject: [PATCH 31/82] undone exist bug --- MATLAB/tbx/sdmx/+sdmx/initClasspath.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MATLAB/tbx/sdmx/+sdmx/initClasspath.m b/MATLAB/tbx/sdmx/+sdmx/initClasspath.m index 8d4d035a..876b7c3d 100644 --- a/MATLAB/tbx/sdmx/+sdmx/initClasspath.m +++ b/MATLAB/tbx/sdmx/+sdmx/initClasspath.m @@ -22,7 +22,7 @@ function initClasspath() jarLoaded = exist('it.bancaditalia.oss.sdmx.helper.SDMXHelper', 'class'); if jarLoaded ~= 8 - mFilesLoaded = isfile('sdmxHelp.m'); + mFilesLoaded = exist('sdmxHelp.m', 'file'); if mFilesLoaded == 2 pathToJar = fileparts(which('sdmxHelp')); javaaddpath([pathToJar, '../lib/SDMX.jar']); From 6c51a4f9cc746cfa3f99824cd939b7d1de976814 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 12:17:18 +0000 Subject: [PATCH 32/82] Added Sdmx root\n Added annotations --- .github/workflows/ci.yml | 7 +++++++ .../tyfeE7DbJimZcSYGqqZamn_KGXQd.xml | 6 ++++++ .../tyfeE7DbJimZcSYGqqZamn_KGXQp.xml | 2 ++ MATLAB/tbx/sdmx/+sdmx/initClasspath.m | 5 ++--- MATLAB/tbx/sdmx/sdmxroot.m | 8 ++++++++ 5 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/tyfeE7DbJimZcSYGqqZamn_KGXQd.xml create mode 100644 MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/tyfeE7DbJimZcSYGqqZamn_KGXQp.xml create mode 100644 MATLAB/tbx/sdmx/sdmxroot.m diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1f523926..0a66ed82 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -86,10 +86,17 @@ jobs: with: # upload entire directory path: MATLAB/tests/reports + - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v2 + - name: Create Annotation with links + run: | + echo ::notice::[Coverage report](https://ebenetce.github.io/SDMX/results/) + echo ::notice::[Test results](https://ebenetce.github.io/SDMX/coverageReport/) + + diff --git a/MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/tyfeE7DbJimZcSYGqqZamn_KGXQd.xml b/MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/tyfeE7DbJimZcSYGqqZamn_KGXQd.xml new file mode 100644 index 00000000..7a6326b9 --- /dev/null +++ b/MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/tyfeE7DbJimZcSYGqqZamn_KGXQd.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/tyfeE7DbJimZcSYGqqZamn_KGXQp.xml b/MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/tyfeE7DbJimZcSYGqqZamn_KGXQp.xml new file mode 100644 index 00000000..2160c650 --- /dev/null +++ b/MATLAB/resources/project/K-M49kMK9kyHCEDqQhcRRdI7xS0/tyfeE7DbJimZcSYGqqZamn_KGXQp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/MATLAB/tbx/sdmx/+sdmx/initClasspath.m b/MATLAB/tbx/sdmx/+sdmx/initClasspath.m index 876b7c3d..9bc67ac7 100644 --- a/MATLAB/tbx/sdmx/+sdmx/initClasspath.m +++ b/MATLAB/tbx/sdmx/+sdmx/initClasspath.m @@ -22,10 +22,9 @@ function initClasspath() jarLoaded = exist('it.bancaditalia.oss.sdmx.helper.SDMXHelper', 'class'); if jarLoaded ~= 8 - mFilesLoaded = exist('sdmxHelp.m', 'file'); + mFilesLoaded = exist('sdmxroot.m', 'file'); if mFilesLoaded == 2 - pathToJar = fileparts(which('sdmxHelp')); - javaaddpath([pathToJar, '../lib/SDMX.jar']); + javaaddpath(fullfile(sdmxroot, '/lib/SDMX.jar')); else error('Error: the m-files of the MatSDMX toolbox cannot be found in the MATLAB path'); end diff --git a/MATLAB/tbx/sdmx/sdmxroot.m b/MATLAB/tbx/sdmx/sdmxroot.m new file mode 100644 index 00000000..66a76363 --- /dev/null +++ b/MATLAB/tbx/sdmx/sdmxroot.m @@ -0,0 +1,8 @@ +function root = sdmxroot() + +arguments (Output) + root (1,1) string +end + +root = fileparts(fileparts(mfilename('fullpath'))); + From e678a5e6de824cbfd1a97b2b84beb13fb2b255fa Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 12:26:56 +0000 Subject: [PATCH 33/82] split test for debugging --- MATLAB/tests/testSDMX.m | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/MATLAB/tests/testSDMX.m b/MATLAB/tests/testSDMX.m index 3a231766..113c0d40 100644 --- a/MATLAB/tests/testSDMX.m +++ b/MATLAB/tests/testSDMX.m @@ -79,6 +79,9 @@ function tGetTimeSeriesTable(tc) tb = sdmx.getTimeSeriesTable('ECB', 'EXR.M.USD.EUR.SP00.A'); tc.verifyClass(tb, 'table') + end + + function tGetTimeSeriesTableWithStartDates(tc) startTime = string(datetime(1995,1,1)); endTime = string(datetime(2005,1,1)); @@ -102,14 +105,14 @@ function tGetTimeSeriesRevisions(tc) tc.verifyLessThan(tb.TIME_PERIOD, endTime); tc.verifyGreaterThanOrEqual(tb.TIME_PERIOD, startTime) - startTime = datetime(2002,1,1); - tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime), '', true); - tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); - tc.verifyClass(tb, 'table'); - - tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime), '2003', true); - tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); - tc.verifyClass(tb, 'table'); + % startTime = datetime(2002,1,1); + % tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime), '', true); + % tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); + % tc.verifyClass(tb, 'table'); + % + % tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime), '2003', true); + % tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); + % tc.verifyClass(tb, 'table'); end function tAddProvider(tc) From 4c64ce6e2bdf249ea507da854323be93b0d3b93f Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 13:27:19 +0000 Subject: [PATCH 34/82] removed bad tests for git --- MATLAB/tests/testSDMX.m | 66 ++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/MATLAB/tests/testSDMX.m b/MATLAB/tests/testSDMX.m index 113c0d40..f5a2307d 100644 --- a/MATLAB/tests/testSDMX.m +++ b/MATLAB/tests/testSDMX.m @@ -81,39 +81,39 @@ function tGetTimeSeriesTable(tc) tc.verifyClass(tb, 'table') end - function tGetTimeSeriesTableWithStartDates(tc) - - startTime = string(datetime(1995,1,1)); - endTime = string(datetime(2005,1,1)); - - tb = sdmx.getTimeSeriesTable('ECB', 'EXR.M.USD.EUR.SP00.A', startTime, endTime); - tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); - - tc.verifyLessThan(tb.TIME_PERIOD, endTime); - tc.verifyGreaterThanOrEqual(tb.TIME_PERIOD, startTime) - end - - function tGetTimeSeriesRevisions(tc) - % Test 6: getTimeSeriesRevisions - - startTime = datetime(1995,1,1); - endTime = datetime(2005,1,1); - - tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime)); - tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); - - tc.verifyLessThan(tb.TIME_PERIOD, endTime); - tc.verifyGreaterThanOrEqual(tb.TIME_PERIOD, startTime) - - % startTime = datetime(2002,1,1); - % tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime), '', true); - % tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); - % tc.verifyClass(tb, 'table'); - % - % tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime), '2003', true); - % tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); - % tc.verifyClass(tb, 'table'); - end + % function tGetTimeSeriesTableWithStartDates(tc) + % + % startTime = string(datetime(1995,1,1)); + % endTime = string(datetime(2005,1,1)); + % + % tb = sdmx.getTimeSeriesTable('ECB', 'EXR.M.USD.EUR.SP00.A', startTime, endTime); + % tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); + % + % tc.verifyLessThan(tb.TIME_PERIOD, endTime); + % tc.verifyGreaterThanOrEqual(tb.TIME_PERIOD, startTime) + % end + + % function tGetTimeSeriesRevisions(tc) + % % Test 6: getTimeSeriesRevisions + % + % startTime = datetime(1995,1,1); + % endTime = datetime(2005,1,1); + % + % tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime)); + % tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); + % + % tc.verifyLessThan(tb.TIME_PERIOD, endTime); + % tc.verifyGreaterThanOrEqual(tb.TIME_PERIOD, startTime) + % + % % startTime = datetime(2002,1,1); + % % tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime), '', true); + % % tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); + % % tc.verifyClass(tb, 'table'); + % % + % % tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime), '2003', true); + % % tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); + % % tc.verifyClass(tb, 'table'); + % end function tAddProvider(tc) sdmx.addProvider('ECB_TEST', 'http://sdw-wsrest.ecb.europa.eu/service', false, false, false, 'Sample ECB provider'); From 4a2e75fa1034ca55e22fd8e6ad4a66cc2e52f824 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 14:09:32 +0000 Subject: [PATCH 35/82] escaped characters --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0a66ed82..1f12b77a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,8 +93,8 @@ jobs: - name: Create Annotation with links run: | - echo ::notice::[Coverage report](https://ebenetce.github.io/SDMX/results/) - echo ::notice::[Test results](https://ebenetce.github.io/SDMX/coverageReport/) + echo ::notice::[Coverage report]\(https://ebenetce.github.io/SDMX/results/\) + echo ::notice::[Test results]\(https://ebenetce.github.io/SDMX/coverageReport/\) From 2a7cee89c2483f8a03fa252cc14ccd6aeb24d2ef Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 14:32:00 +0000 Subject: [PATCH 36/82] missing quotes --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1f12b77a..61284cb4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,8 +93,8 @@ jobs: - name: Create Annotation with links run: | - echo ::notice::[Coverage report]\(https://ebenetce.github.io/SDMX/results/\) - echo ::notice::[Test results]\(https://ebenetce.github.io/SDMX/coverageReport/\) + echo "::notice links::Coverage report" + echo "::notice links::[Test results]\(https://ebenetce.github.io/SDMX/coverageReport/\)" From b20eea5e6db20dcd38a7b3909f2560c3be4796ed Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 14:41:13 +0000 Subject: [PATCH 37/82] added title --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 61284cb4..67d86deb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,8 +93,8 @@ jobs: - name: Create Annotation with links run: | - echo "::notice links::Coverage report" - echo "::notice links::[Test results]\(https://ebenetce.github.io/SDMX/coverageReport/\)" + echo '::notice title=Coverage::Code coverage report' + echo '::notice title=Tests::Test results report' From 58a36aa742eb6a64392e2826994b7bfaf06a2237 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 14:47:47 +0000 Subject: [PATCH 38/82] added github action summary env var --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 67d86deb..abdc4777 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,8 +93,8 @@ jobs: - name: Create Annotation with links run: | - echo '::notice title=Coverage::Code coverage report' - echo '::notice title=Tests::Test results report' + echo '::notice title=Coverage::Test results report\(https://ebenetce.github.io/SDMX/results/\)' >> $GITHUB_STEP_SUMMARY + echo '::notice title=Tests::Test results report' >> $GITHUB_STEP_SUMMARY From a4a9eeaec32d91540a19ca3fbb269903f1a66586 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 14:48:45 +0000 Subject: [PATCH 39/82] added github action summary env var --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index abdc4777..589b97ca 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,7 +93,7 @@ jobs: - name: Create Annotation with links run: | - echo '::notice title=Coverage::Test results report\(https://ebenetce.github.io/SDMX/results/\)' >> $GITHUB_STEP_SUMMARY + echo '::notice title=Coverage::[Test results report]\(https://ebenetce.github.io/SDMX/results/\)' >> $GITHUB_STEP_SUMMARY echo '::notice title=Tests::Test results report' >> $GITHUB_STEP_SUMMARY From 2ee369c0d56d374cf71ec7378cfdd192ac861262 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 14:55:59 +0000 Subject: [PATCH 40/82] moved to job summary --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 589b97ca..f65c69a8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,8 +93,8 @@ jobs: - name: Create Annotation with links run: | - echo '::notice title=Coverage::[Test results report]\(https://ebenetce.github.io/SDMX/results/\)' >> $GITHUB_STEP_SUMMARY - echo '::notice title=Tests::Test results report' >> $GITHUB_STEP_SUMMARY + echo ':notice:Test results report' >> $GITHUB_STEP_SUMMARY + echo ':notice:Code coverage report' >> $GITHUB_STEP_SUMMARY From a6ef02f3e7bbf84e44a146d76a3071e4e2d92935 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 15:02:10 +0000 Subject: [PATCH 41/82] remove notice icon --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f65c69a8..4ef28934 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,8 +93,8 @@ jobs: - name: Create Annotation with links run: | - echo ':notice:Test results report' >> $GITHUB_STEP_SUMMARY - echo ':notice:Code coverage report' >> $GITHUB_STEP_SUMMARY + echo 'Test results report' >> $GITHUB_STEP_SUMMARY + echo 'Code coverage report' >> $GITHUB_STEP_SUMMARY From 8cf7b93cc836a739ff3be9d79d6c76bf1ab363d8 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 15:33:47 +0000 Subject: [PATCH 42/82] fixed test for linux --- MATLAB/tests/testSDMX.m | 88 +++++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 39 deletions(-) diff --git a/MATLAB/tests/testSDMX.m b/MATLAB/tests/testSDMX.m index f5a2307d..b8c9d39c 100644 --- a/MATLAB/tests/testSDMX.m +++ b/MATLAB/tests/testSDMX.m @@ -59,7 +59,7 @@ function tGetTimeSeries(tc) tc.verifyLength(tts, 1) tb = sdmxtable(tts); tc.verifyClass(tb, 'table') - + tts = sdmx.getTimeSeries('ECB','IEAF.Q.SK.N.V.D92.Z.S2.A1.S.2.X.N.Z'); tc.verifyLength(tts, 1) tb = sdmxtable(tts, true); @@ -75,63 +75,73 @@ function tGetTimeSeries(tc) function tGetTimeSeriesTable(tc) % Test 5: getTimeSeriesTable tb = sdmx.getTimeSeriesTable('ECB', 'EXR.M.USD|GBP.EUR.SP00.A'); - tc.verifyClass(tb, 'table') - + tc.verifyClass(tb, 'table') + tb = sdmx.getTimeSeriesTable('ECB', 'EXR.M.USD.EUR.SP00.A'); tc.verifyClass(tb, 'table') + + startTime = datetime(1995,1,1, 'Format','yyyy-MM-dd'); + endTime = datetime(2005,1,1, 'Format','yyyy-MM-dd'); + + tb = sdmx.getTimeSeriesTable('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime)); + tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); + + tc.verifyLessThan(tb.TIME_PERIOD, endTime); + tc.verifyGreaterThanOrEqual(tb.TIME_PERIOD, startTime) + end + + function tGetTimeSeriesRevisions(tc) + % Test 6: getTimeSeriesRevisions + + startTime = datetime(1995,1,1, 'Format','yyyy-MM-dd'); + endTime = datetime(2005,1,1, 'Format','yyyy-MM-dd'); + + tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime)); + tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); + + tc.verifyLessThan(tb.TIME_PERIOD, endTime); + tc.verifyGreaterThanOrEqual(tb.TIME_PERIOD, startTime) + + startTime = datetime(2002,1,1, 'Format','yyyy-MM-dd'); + tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime), '', true); + tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); + tc.verifyClass(tb, 'table'); + tc.verifyLessThan(tb.TIME_PERIOD, endTime); + tc.verifyGreaterThanOrEqual(tb.TIME_PERIOD, startTime) + + tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime), '2003-01-01', true); + tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); + tc.verifyClass(tb, 'table'); + tc.verifyLessThan(tb.TIME_PERIOD, endTime); + tc.verifyGreaterThanOrEqual(tb.TIME_PERIOD, startTime) end - % function tGetTimeSeriesTableWithStartDates(tc) - % - % startTime = string(datetime(1995,1,1)); - % endTime = string(datetime(2005,1,1)); - % - % tb = sdmx.getTimeSeriesTable('ECB', 'EXR.M.USD.EUR.SP00.A', startTime, endTime); - % tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); - % - % tc.verifyLessThan(tb.TIME_PERIOD, endTime); - % tc.verifyGreaterThanOrEqual(tb.TIME_PERIOD, startTime) - % end - - % function tGetTimeSeriesRevisions(tc) - % % Test 6: getTimeSeriesRevisions - % - % startTime = datetime(1995,1,1); - % endTime = datetime(2005,1,1); - % - % tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime)); - % tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); - % - % tc.verifyLessThan(tb.TIME_PERIOD, endTime); - % tc.verifyGreaterThanOrEqual(tb.TIME_PERIOD, startTime) - % - % % startTime = datetime(2002,1,1); - % % tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime), '', true); - % % tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); - % % tc.verifyClass(tb, 'table'); - % % - % % tb = sdmx.getTimeSeriesRevisions('ECB', 'EXR.M.USD.EUR.SP00.A', string(startTime), string(endTime), '2003', true); - % % tb.TIME_PERIOD = datetime(tb.TIME_PERIOD, 'InputFormat','uuuu-MM', 'Format','uuuu-MM'); - % % tc.verifyClass(tb, 'table'); - % end function tAddProvider(tc) - sdmx.addProvider('ECB_TEST', 'http://sdw-wsrest.ecb.europa.eu/service', false, false, false, 'Sample ECB provider'); - providers = sdmx.getProviders; - tc.verifyTrue(any(contains(providers, 'ECB_TEST'))) + % Test 7: addProvider + + sdmx.addProvider('ECB_TEST', 'http://sdw-wsrest.ecb.europa.eu/service', false, false, false, 'Sample ECB provider'); + providers = sdmx.getProviders; + tc.verifyTrue(any(contains(providers, 'ECB_TEST'))) end function tGetCodes(tc) + % Test 8: getCodes + map = sdmx.getCodes('ECB','ECB,EXR,1.0', 'FREQ'); tc.verifyEqual(map('A'), "Annual") end function tGetDSDIdentifier(tc) + % Test 9: getDSDIdentifier + id = sdmx.getDSDIdentifier('ECB','ECB,EXR,1.0'); tc.verifyEqual(id, "ECB/ECB_EXR1/1.0") end function tGetSDMXTable(tc) + % getSDMXTable + tts = sdmx.getTimeSeries('ECB', 'EXR.M.USD|GBP.EUR.SP00.A'); tb = sdmxtable(tts, true); tc.verifyClass(tb, 'table') From c5995d9914ee1be90ef7aa645f0ace5acb482570 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 17:05:02 +0000 Subject: [PATCH 43/82] test results failed in pipeline --- .github/workflows/ci.yml | 1 - MATLAB/buildfile.m | 44 ++++++++++++++++++++++++++-------------- MATLAB/tests/testSDMX.m | 6 +++--- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4ef28934..24a0a522 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -76,7 +76,6 @@ jobs: name: MatSDMX path: | MATLAB/releases/SDMX.mltbx - if-no-files-found: error - name: Setup Pages uses: actions/configure-pages@v3 diff --git a/MATLAB/buildfile.m b/MATLAB/buildfile.m index e2136c63..e2f7765f 100644 --- a/MATLAB/buildfile.m +++ b/MATLAB/buildfile.m @@ -3,11 +3,16 @@ % Create a plan from task functions plan = buildplan(localfunctions); +% Default test output to false +% plan("test").Outpbuts = "test"; + % Make the "archive" task the default task in the plan plan.DefaultTasks = "archive"; % Make the "archive" task dependent on the "check" and "test" tasks plan("archive").Dependencies = ["check" "test"]; + +plan("archive").Inputs = 'tests/reports/testresults.csv'; end function checkTask(~) @@ -44,22 +49,31 @@ function testTask(~) results = runner.run(suite); -assertSuccess(results); +results = table(results); +writetable(results(:,1:3), 'tests/reports/testresults.csv') + +end + +function archiveTask(tc) + +testResults = readtable( tc.Task.Inputs.Path); +if ~all(testResults.Passed) + return +else + description = sprintf('The SDMX Connectors project has been developed with the aim of covering the ''last mile'' in SDMX implementations.\n\nIn particular, the focus of the project is to provide the end user a set of plugins that can be easily installed in the most popular data analysis tools (e.g. R, MATLAB, SAS, STATA, Excel, etc.) allowing a direct access to SDMX data from the tool.\nProject site: \n\nhttps://github.com/amattioc/SDMX'); + % Create ZIP file + opts = matlab.addons.toolbox.ToolboxOptions('tbx', "50de8506-6d87-47ee-aa8a-2c7f2e56d761", ... + ToolboxName = 'MatSDMX', ... + ToolboxVersion = '4.0.0', ... + AuthorName = 'Attilio Mattiocco', ... + Summary = 'Provides functions to retrieve data and metadata from providers that disseminate data by means of SDMX web services.', ... + Description = description, ... + ToolboxJavaPath = "tbx/lib/SDMX.jar", ... + ToolboxGettingStartedGuide = 'tbx/doc/GettingStarted.mlx', ... + OutputFile = 'releases/SDMX.mltbx', ... + MinimumMatlabRelease = 'R2023a'); + matlab.addons.toolbox.packageToolbox(opts) end -function archiveTask(~) -description = sprintf('The SDMX Connectors project has been developed with the aim of covering the ''last mile'' in SDMX implementations.\n\nIn particular, the focus of the project is to provide the end user a set of plugins that can be easily installed in the most popular data analysis tools (e.g. R, MATLAB, SAS, STATA, Excel, etc.) allowing a direct access to SDMX data from the tool.\nProject site: \n\nhttps://github.com/amattioc/SDMX'); -% Create ZIP file -opts = matlab.addons.toolbox.ToolboxOptions('tbx', "50de8506-6d87-47ee-aa8a-2c7f2e56d761", ... - ToolboxName = 'MatSDMX', ... - ToolboxVersion = '4.0.0', ... - AuthorName = 'Attilio Mattiocco', ... - Summary = 'Provides functions to retrieve data and metadata from providers that disseminate data by means of SDMX web services.', ... - Description = description, ... - ToolboxJavaPath = "tbx/lib/SDMX.jar", ... - ToolboxGettingStartedGuide = 'tbx/doc/GettingStarted.mlx', ... - OutputFile = 'releases/SDMX.mltbx', ... - MinimumMatlabRelease = 'R2023a'); -matlab.addons.toolbox.packageToolbox(opts) end \ No newline at end of file diff --git a/MATLAB/tests/testSDMX.m b/MATLAB/tests/testSDMX.m index b8c9d39c..05d1ebdf 100644 --- a/MATLAB/tests/testSDMX.m +++ b/MATLAB/tests/testSDMX.m @@ -35,7 +35,7 @@ function tGetFlows(tc) % Test 2: getFlows flows = sdmx.getFlows('ECB'); tc.verifyNotEmpty(flows) - tc.verifyEqual(flows('ECB,EXR,1.0'), "Exchange Rates") + tc.verifyEqual(flows('ECB,EXR,1.0'), "Exchange Rate") end function tGetDimensions(tc) @@ -140,8 +140,8 @@ function tGetDSDIdentifier(tc) end function tGetSDMXTable(tc) - % getSDMXTable - + % Test 10: getSDMXTable + tts = sdmx.getTimeSeries('ECB', 'EXR.M.USD|GBP.EUR.SP00.A'); tb = sdmxtable(tts, true); tc.verifyClass(tb, 'table') From f4574e1c733caca2b90974aa6980ce951bc21c5a Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 17:06:46 +0000 Subject: [PATCH 44/82] removing intermediate files --- MATLAB/buildfile.m | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/MATLAB/buildfile.m b/MATLAB/buildfile.m index e2f7765f..628915e7 100644 --- a/MATLAB/buildfile.m +++ b/MATLAB/buildfile.m @@ -57,23 +57,25 @@ function testTask(~) function archiveTask(tc) testResults = readtable( tc.Task.Inputs.Path); +delete(tc.Task.Inputs.Path) + if ~all(testResults.Passed) return -else - - description = sprintf('The SDMX Connectors project has been developed with the aim of covering the ''last mile'' in SDMX implementations.\n\nIn particular, the focus of the project is to provide the end user a set of plugins that can be easily installed in the most popular data analysis tools (e.g. R, MATLAB, SAS, STATA, Excel, etc.) allowing a direct access to SDMX data from the tool.\nProject site: \n\nhttps://github.com/amattioc/SDMX'); - % Create ZIP file - opts = matlab.addons.toolbox.ToolboxOptions('tbx', "50de8506-6d87-47ee-aa8a-2c7f2e56d761", ... - ToolboxName = 'MatSDMX', ... - ToolboxVersion = '4.0.0', ... - AuthorName = 'Attilio Mattiocco', ... - Summary = 'Provides functions to retrieve data and metadata from providers that disseminate data by means of SDMX web services.', ... - Description = description, ... - ToolboxJavaPath = "tbx/lib/SDMX.jar", ... - ToolboxGettingStartedGuide = 'tbx/doc/GettingStarted.mlx', ... - OutputFile = 'releases/SDMX.mltbx', ... - MinimumMatlabRelease = 'R2023a'); - matlab.addons.toolbox.packageToolbox(opts) +end + +description = sprintf('The SDMX Connectors project has been developed with the aim of covering the ''last mile'' in SDMX implementations.\n\nIn particular, the focus of the project is to provide the end user a set of plugins that can be easily installed in the most popular data analysis tools (e.g. R, MATLAB, SAS, STATA, Excel, etc.) allowing a direct access to SDMX data from the tool.\nProject site: \n\nhttps://github.com/amattioc/SDMX'); +% Create ZIP file +opts = matlab.addons.toolbox.ToolboxOptions('tbx', "50de8506-6d87-47ee-aa8a-2c7f2e56d761", ... + ToolboxName = 'MatSDMX', ... + ToolboxVersion = '4.0.0', ... + AuthorName = 'Attilio Mattiocco', ... + Summary = 'Provides functions to retrieve data and metadata from providers that disseminate data by means of SDMX web services.', ... + Description = description, ... + ToolboxJavaPath = "tbx/lib/SDMX.jar", ... + ToolboxGettingStartedGuide = 'tbx/doc/GettingStarted.mlx', ... + OutputFile = 'releases/SDMX.mltbx', ... + MinimumMatlabRelease = 'R2023a'); +matlab.addons.toolbox.packageToolbox(opts) end end \ No newline at end of file From 9b55c0d8250399fb2199dd6d4c977d4a1029ba74 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 17:07:32 +0000 Subject: [PATCH 45/82] cleaned up comments --- MATLAB/buildfile.m | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/MATLAB/buildfile.m b/MATLAB/buildfile.m index 628915e7..2156c0b2 100644 --- a/MATLAB/buildfile.m +++ b/MATLAB/buildfile.m @@ -3,16 +3,13 @@ % Create a plan from task functions plan = buildplan(localfunctions); -% Default test output to false -% plan("test").Outpbuts = "test"; - % Make the "archive" task the default task in the plan plan.DefaultTasks = "archive"; % Make the "archive" task dependent on the "check" and "test" tasks plan("archive").Dependencies = ["check" "test"]; - plan("archive").Inputs = 'tests/reports/testresults.csv'; + end function checkTask(~) From 50e9dabb3761996c75a91fda1b1b908f1a00078f Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 17:12:45 +0000 Subject: [PATCH 46/82] cleaned up CI.YML comments --- .github/workflows/ci.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 24a0a522..02bab86a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,6 +19,8 @@ jobs: steps: - uses: actions/checkout@v4 + + # Setup job - name: Set up JDK 8 for x64 uses: actions/setup-java@v3 with: @@ -26,9 +28,11 @@ jobs: distribution: 'temurin' architecture: x64 + # Build project according to SDMX instructions - name: Run the Ant jar target run: cd JAVA && ant clean && ant compile && ant dist + # Keep JAR file to use in MATLAB - name: Archive MATLAB JAR for next job uses: actions/upload-artifact@v3 with: @@ -50,7 +54,7 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Download a single artifact uses: actions/download-artifact@v3 @@ -70,6 +74,7 @@ jobs: with: command: openProject('MATLAB/SDMX.prj'), buildtool + # Upload MATLAB Toolbox, it won't be there if the test failed - name: Archive MATLAB Toolbox uses: actions/upload-artifact@v3 with: @@ -77,19 +82,23 @@ jobs: path: | MATLAB/releases/SDMX.mltbx + # Set up pages to show reports - name: Setup Pages uses: actions/configure-pages@v3 + # Upload test reports - name: Upload Artifact uses: actions/upload-pages-artifact@v2 with: # upload entire directory path: MATLAB/tests/reports + # Deploy reports to GitHub Pages - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v2 + # Publish the report address to GitHub Pages - name: Create Annotation with links run: | echo 'Test results report' >> $GITHUB_STEP_SUMMARY From 0a3abba217ec19d2adbc1941d46927314e478a2f Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 17:14:05 +0000 Subject: [PATCH 47/82] failing job in purpose for report testing --- MATLAB/buildfile.m | 2 -- 1 file changed, 2 deletions(-) diff --git a/MATLAB/buildfile.m b/MATLAB/buildfile.m index 2156c0b2..1d272a87 100644 --- a/MATLAB/buildfile.m +++ b/MATLAB/buildfile.m @@ -73,6 +73,4 @@ function archiveTask(tc) OutputFile = 'releases/SDMX.mltbx', ... MinimumMatlabRelease = 'R2023a'); matlab.addons.toolbox.packageToolbox(opts) -end - end \ No newline at end of file From a471b1f26835d65c052bb79be32a9edbcb9dc7a6 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 17:14:22 +0000 Subject: [PATCH 48/82] fixing job --- MATLAB/tests/testSDMX.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MATLAB/tests/testSDMX.m b/MATLAB/tests/testSDMX.m index 05d1ebdf..8b452055 100644 --- a/MATLAB/tests/testSDMX.m +++ b/MATLAB/tests/testSDMX.m @@ -35,7 +35,7 @@ function tGetFlows(tc) % Test 2: getFlows flows = sdmx.getFlows('ECB'); tc.verifyNotEmpty(flows) - tc.verifyEqual(flows('ECB,EXR,1.0'), "Exchange Rate") + tc.verifyEqual(flows('ECB,EXR,1.0'), "Exchange Rates") end function tGetDimensions(tc) From 492540efda969cd83b6f44b1d2e21de701022f3b Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 17:24:53 +0000 Subject: [PATCH 49/82] test failure --- .github/workflows/ci.yml | 5 +++++ MATLAB/buildfile.m | 15 ++------------- MATLAB/tests/testSDMX.m | 2 +- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 02bab86a..418dd78d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -81,13 +81,16 @@ jobs: name: MatSDMX path: | MATLAB/releases/SDMX.mltbx + if-no-files-found: ignore # Set up pages to show reports - name: Setup Pages + if: success() || failure() uses: actions/configure-pages@v3 # Upload test reports - name: Upload Artifact + if: success() || failure() uses: actions/upload-pages-artifact@v2 with: # upload entire directory @@ -95,11 +98,13 @@ jobs: # Deploy reports to GitHub Pages - name: Deploy to GitHub Pages + if: success() || failure() id: deployment uses: actions/deploy-pages@v2 # Publish the report address to GitHub Pages - name: Create Annotation with links + if: success() || failure() run: | echo 'Test results report' >> $GITHUB_STEP_SUMMARY echo 'Code coverage report' >> $GITHUB_STEP_SUMMARY diff --git a/MATLAB/buildfile.m b/MATLAB/buildfile.m index 1d272a87..86477fd9 100644 --- a/MATLAB/buildfile.m +++ b/MATLAB/buildfile.m @@ -8,8 +8,6 @@ % Make the "archive" task dependent on the "check" and "test" tasks plan("archive").Dependencies = ["check" "test"]; -plan("archive").Inputs = 'tests/reports/testresults.csv'; - end function checkTask(~) @@ -46,20 +44,11 @@ function testTask(~) results = runner.run(suite); -results = table(results); -writetable(results(:,1:3), 'tests/reports/testresults.csv') - -end - -function archiveTask(tc) - -testResults = readtable( tc.Task.Inputs.Path); -delete(tc.Task.Inputs.Path) +assertSuccess(results) -if ~all(testResults.Passed) - return end +function archiveTask(~) description = sprintf('The SDMX Connectors project has been developed with the aim of covering the ''last mile'' in SDMX implementations.\n\nIn particular, the focus of the project is to provide the end user a set of plugins that can be easily installed in the most popular data analysis tools (e.g. R, MATLAB, SAS, STATA, Excel, etc.) allowing a direct access to SDMX data from the tool.\nProject site: \n\nhttps://github.com/amattioc/SDMX'); % Create ZIP file opts = matlab.addons.toolbox.ToolboxOptions('tbx', "50de8506-6d87-47ee-aa8a-2c7f2e56d761", ... diff --git a/MATLAB/tests/testSDMX.m b/MATLAB/tests/testSDMX.m index 8b452055..05d1ebdf 100644 --- a/MATLAB/tests/testSDMX.m +++ b/MATLAB/tests/testSDMX.m @@ -35,7 +35,7 @@ function tGetFlows(tc) % Test 2: getFlows flows = sdmx.getFlows('ECB'); tc.verifyNotEmpty(flows) - tc.verifyEqual(flows('ECB,EXR,1.0'), "Exchange Rates") + tc.verifyEqual(flows('ECB,EXR,1.0'), "Exchange Rate") end function tGetDimensions(tc) From b0795b7f09d4901bdac3627debde6d795b2e57be Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 17:30:54 +0000 Subject: [PATCH 50/82] fixing test --- MATLAB/tests/testSDMX.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MATLAB/tests/testSDMX.m b/MATLAB/tests/testSDMX.m index 05d1ebdf..8b452055 100644 --- a/MATLAB/tests/testSDMX.m +++ b/MATLAB/tests/testSDMX.m @@ -35,7 +35,7 @@ function tGetFlows(tc) % Test 2: getFlows flows = sdmx.getFlows('ECB'); tc.verifyNotEmpty(flows) - tc.verifyEqual(flows('ECB,EXR,1.0'), "Exchange Rate") + tc.verifyEqual(flows('ECB,EXR,1.0'), "Exchange Rates") end function tGetDimensions(tc) From 28416eb0b730d48be68b7292ef78ac667fb4a45d Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 17:34:44 +0000 Subject: [PATCH 51/82] fixed if statements --- .github/workflows/ci.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 418dd78d..0282a629 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -83,14 +83,14 @@ jobs: MATLAB/releases/SDMX.mltbx if-no-files-found: ignore - # Set up pages to show reports + # Set up pages to show reports. This needs to run independent of the previous results. + # Previous here is buildtool, since upload is canceled on failure - name: Setup Pages if: success() || failure() uses: actions/configure-pages@v3 # Upload test reports - name: Upload Artifact - if: success() || failure() uses: actions/upload-pages-artifact@v2 with: # upload entire directory @@ -98,13 +98,11 @@ jobs: # Deploy reports to GitHub Pages - name: Deploy to GitHub Pages - if: success() || failure() id: deployment uses: actions/deploy-pages@v2 # Publish the report address to GitHub Pages - name: Create Annotation with links - if: success() || failure() run: | echo 'Test results report' >> $GITHUB_STEP_SUMMARY echo 'Code coverage report' >> $GITHUB_STEP_SUMMARY From 829fe7b3c676afb0ca247eaa1c0ebad0ead6dc63 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 17:39:34 +0000 Subject: [PATCH 52/82] missing semicolon for output suppression --- MATLAB/buildfile.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MATLAB/buildfile.m b/MATLAB/buildfile.m index 86477fd9..e2136c63 100644 --- a/MATLAB/buildfile.m +++ b/MATLAB/buildfile.m @@ -44,7 +44,7 @@ function testTask(~) results = runner.run(suite); -assertSuccess(results) +assertSuccess(results); end From 15ed9278fc9d556f766e90ea952b4cc6ca7dff95 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Wed, 6 Dec 2023 17:40:43 +0000 Subject: [PATCH 53/82] removing doc from coverage --- MATLAB/buildfile.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MATLAB/buildfile.m b/MATLAB/buildfile.m index e2136c63..b04705c8 100644 --- a/MATLAB/buildfile.m +++ b/MATLAB/buildfile.m @@ -34,7 +34,7 @@ function testTask(~) plugin = TestReportPlugin.producingHTML(htmlFolder); runner.addPlugin(plugin); -sourceCodeFolder = "tbx"; +sourceCodeFolder = "tbx/sdmx"; reportFolder = "tests/reports/coverageReport"; reportFormat = CoverageReport(reportFolder); format = CoverageResult; From 97cc73b9fac657a9330fa885c777c0f0be78661e Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Thu, 7 Dec 2023 17:59:45 +0000 Subject: [PATCH 54/82] refactored ci.yml --- .github/workflows/ci.yml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0282a629..2584962b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ on: # Allows you to run this workflow manually from the Actions tab workflow_dispatch: - + jobs: build-java: runs-on: ubuntu-latest @@ -96,6 +96,21 @@ jobs: # upload entire directory path: MATLAB/tests/reports + deploy-results: + runs-on: ubuntu-latest + needs: build-test-matlab + if: ${{ always() }} + + permissions: + pages: write + id-token: write + + environment: + # environment created automatically by GitHub + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + + steps: # Deploy reports to GitHub Pages - name: Deploy to GitHub Pages id: deployment From e7b4ab6521ab3ad075d2dda4444d768979ad591d Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Thu, 7 Dec 2023 18:04:51 +0000 Subject: [PATCH 55/82] prameterized pages ci.yml --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2584962b..06a05516 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -119,8 +119,8 @@ jobs: # Publish the report address to GitHub Pages - name: Create Annotation with links run: | - echo 'Test results report' >> $GITHUB_STEP_SUMMARY - echo 'Code coverage report' >> $GITHUB_STEP_SUMMARY + echo 'Test results report' >> $GITHUB_STEP_SUMMARY + echo 'Code coverage report' >> $GITHUB_STEP_SUMMARY From 7b274b56633d67c7a5060a022315ecff5dc8f95b Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Thu, 7 Dec 2023 18:11:48 +0000 Subject: [PATCH 56/82] fail test --- MATLAB/tests/testSDMX.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MATLAB/tests/testSDMX.m b/MATLAB/tests/testSDMX.m index 8b452055..05d1ebdf 100644 --- a/MATLAB/tests/testSDMX.m +++ b/MATLAB/tests/testSDMX.m @@ -35,7 +35,7 @@ function tGetFlows(tc) % Test 2: getFlows flows = sdmx.getFlows('ECB'); tc.verifyNotEmpty(flows) - tc.verifyEqual(flows('ECB,EXR,1.0'), "Exchange Rates") + tc.verifyEqual(flows('ECB,EXR,1.0'), "Exchange Rate") end function tGetDimensions(tc) From 35ddd4d51468866784d439e0c094964c7b78a858 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Thu, 7 Dec 2023 18:17:24 +0000 Subject: [PATCH 57/82] missing if statement --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 06a05516..a738b454 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -91,6 +91,7 @@ jobs: # Upload test reports - name: Upload Artifact + if: success() || failure() uses: actions/upload-pages-artifact@v2 with: # upload entire directory From f1d2b56847ece49bc9ab1fe4eef4c7aa55b939b5 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Thu, 7 Dec 2023 18:23:15 +0000 Subject: [PATCH 58/82] fix test --- MATLAB/tests/testSDMX.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MATLAB/tests/testSDMX.m b/MATLAB/tests/testSDMX.m index 05d1ebdf..8b452055 100644 --- a/MATLAB/tests/testSDMX.m +++ b/MATLAB/tests/testSDMX.m @@ -35,7 +35,7 @@ function tGetFlows(tc) % Test 2: getFlows flows = sdmx.getFlows('ECB'); tc.verifyNotEmpty(flows) - tc.verifyEqual(flows('ECB,EXR,1.0'), "Exchange Rate") + tc.verifyEqual(flows('ECB,EXR,1.0'), "Exchange Rates") end function tGetDimensions(tc) From 189149b409b7b8bf18c7623638cc13b92e32e9e5 Mon Sep 17 00:00:00 2001 From: Attilio Mattiocco Date: Tue, 9 Apr 2024 09:13:51 +0200 Subject: [PATCH 59/82] pulled java fix --- BUILD | 6 +- .../oss/sdmx/util/Configuration.java | 245 +++++++++++------- RJSDMX/inst/java/SDMX.jar | Bin 250133 -> 244883 bytes STATA/jar/SDMX.jar | Bin 0 -> 250077 bytes 4 files changed, 157 insertions(+), 94 deletions(-) create mode 100644 STATA/jar/SDMX.jar diff --git a/BUILD b/BUILD index 06227ca2..503ac2cd 100644 --- a/BUILD +++ b/BUILD @@ -1 +1,5 @@ -20231205-1427 \ No newline at end of file +<<<<<<< HEAD +20231205-1427 +======= +20240409-0913 +>>>>>>> adaa19c (workaround for issue #254 respin) diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/Configuration.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/Configuration.java index f902557f..b544d206 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/Configuration.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/Configuration.java @@ -20,17 +20,25 @@ */ package it.bancaditalia.oss.sdmx.util; +import static java.lang.Boolean.parseBoolean; +import static java.util.Collections.list; +import static java.util.stream.Collectors.toMap; + import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; import java.io.PrintWriter; import java.io.StringWriter; +import java.io.UncheckedIOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.Authenticator; import java.net.PasswordAuthentication; import java.net.ProxySelector; -import java.nio.charset.Charset; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; @@ -38,75 +46,74 @@ import java.util.LinkedList; import java.util.List; import java.util.Locale.LanguageRange; +import java.util.Map; import java.util.Properties; -import java.util.logging.ConsoleHandler; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.Logger; -import java.util.logging.SimpleFormatter; -import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; -import javax.security.auth.Subject; import javax.swing.JFrame; +import it.bancaditalia.oss.sdmx.api.SDMXVersion; +import it.bancaditalia.oss.sdmx.client.SDMXClientFactory; +import it.bancaditalia.oss.sdmx.exceptions.SdmxException; + /** * @author Attilio Mattiocco * */ public class Configuration { - - // TODO: will be replaced by StandardCharsets#UTF_8 in Java 7 - public static final Charset UTF_8 = Charset.forName("UTF-8"); public static final String SDMX_CODES_POLICY_ID = "code"; public static final String SDMX_CODES_POLICY_DESC = "description"; public static final String SDMX_CODES_POLICY_BOTH = "both"; public static final String SDMX_CODES_POLICY_ATTRIBUTES = "attributes"; - protected static final String PROXY_AUTH_KERBEROS = "Kerberos"; - protected static final String PROXY_AUTH_DIGEST = "digest"; protected static final String PROXY_AUTH_BASIC = "basic"; - protected static final String JAVA_SECURITY_KERBEROS_PROP = "java.security.krb5.conf"; + protected static final String PROXY_AUTH_KERBEROS = "Kerberos"; + protected static final String JAVA_SECURITY_KERBEROS_PROP = "java.security.krb5.conf"; protected static final String JAVA_SECURITY_AUTH_LOGIN_CONFIG_PROP = "java.security.auth.login.config"; protected static final String HTTP_AUTH_PREF_PROP = "http.auth.preference"; protected static final String SSL_DISABLE_CERT_CHECK_PROP = "ssl.disable.cert.check"; protected static final String SSL_TRUSTSTORE_PROP = "javax.net.ssl.trustStore"; - - protected static final String GLOBAL_CONFIGURATION_FILE_PROP = "SDMX_CONF"; - protected static final String EXTERNAL_PROVIDERS_PROP = "external.providers"; - protected static final String PROXY_NAME_PROP = "http.proxy.name"; - protected static final String PROXY_DEFAULT_PROP = "http.proxy.default"; - protected static final String HTTP_AUTH_USER_PROP = "http.auth.user"; - protected static final String PROXY_AUTH_PW_PROP = "http.auth.pw"; - protected static final String REVERSE_DUMP_PROP = "reverse.dump"; - protected static final String SDMX_LANG_PROP = "sdmx.lang"; - protected static final String LATE_RESP_RETRIES_PROP = "late.response.retries"; - protected static final String TABLE_DUMP_PROP = "table.dump"; - protected static final String READ_TIMEOUT_PROP = "read.timeout"; - protected static final String CONNECT_TIMEOUT_PROP = "connect.timeout"; - protected static final Logger SDMX_LOGGER = Logger.getLogger("SDMX"); - protected static List SDMX_LANG = LanguageRange.parse("en"); - - private static final String UIS_API_KEY_PROP = "uis.api.key"; + protected static final String PROVIDERS_FILE_PROP = "sdmx.providers.properties"; + protected static final String PROVIDERS_FILE = "providers.properties"; + + private static final Logger SDMX_LOGGER = Logger.getLogger("SDMX"); + + private static final String SDMX_MAX_REDIRECTS = "max.redirects"; + private static final String GLOBAL_CONFIGURATION_FILE_PROP = "SDMX_CONF"; + private static final String EXTERNAL_PROVIDERS_PROP = "external.providers"; + private static final String PROXY_NAME_PROP = "http.proxy.name"; + private static final String PROXY_DEFAULT_PROP = "http.proxy.default"; + private static final String HTTP_AUTH_USER_PROP = "http.auth.user"; + private static final String PROXY_AUTH_PW_PROP = "http.auth.pw"; + private static final String REVERSE_DUMP_PROP = "reverse.dump"; + private static final String SDMX_LANG_PROP = "sdmx.lang"; + private static final String LATE_RESP_RETRIES_PROP = "late.response.retries"; + private static final String TABLE_DUMP_PROP = "table.dump"; + private static final String READ_TIMEOUT_PROP = "read.timeout"; + private static final String CONNECT_TIMEOUT_PROP = "connect.timeout"; + private static final String UIS_API_KEY_PROP = "uis.api.key"; private static final String SDMX_CODES_POLICY = "handle.sdmx.codes"; - private static final String REVERSE_DUMP_DEFAULT = "FALSE"; private static final String TABLE_DUMP_DEFAULT = "FALSE"; private static final String SDMX_DEFAULT_LANG = "en"; - private static final String SDMX_DEFAULT_TIMEOUT = "0"; private static final String DUMP_XML_PREFIX = "xml.dump.prefix"; private static final String sourceClass = Configuration.class.getSimpleName(); + private static final int SDMX_DEFAULT_TIMEOUT_CONNECT = 30000; + private static final int SDMX_DEFAULT_TIMEOUT = 0; //some queries can take a very long time to initialize private static final String CONFIGURATION_FILE_NAME = "configuration.properties"; - private static Properties props = new Properties(); - private static boolean inited = false; - private static Subject subject; + private static final Properties props = new Properties(); + + private static boolean inited = false; + protected static List SDMX_LANG = LanguageRange.parse("en"); static { @@ -133,32 +140,16 @@ protected static void setSdmxLogger() handler.setLevel(Level.INFO); SDMX_LOGGER.addHandler(handler); } - else if (handlers.size() == 1 && handlers.get(0) instanceof ConsoleHandler && handlers.get(0).getFormatter() instanceof SimpleFormatter) - { - // Replace the default consolehandler with a custom handler - current = SDMX_LOGGER; - while (current != null) - if (current.getHandlers().length == 1) - { - Handler handler = current.getHandlers()[0]; - Level level = handler.getLevel(); - current.removeHandler(handler); - handler = new SdmxLogHandler(); - handler.setLevel(level); - current.addHandler(handler); - break; - } - else - current = current.getUseParentHandlers() ? current.getParent() : null; - } - } + + } public static Logger getSdmxLogger() { return SDMX_LOGGER; } - public static Properties getConfiguration() + @Deprecated + public static Properties getConfiguration() { return props; } @@ -175,27 +166,17 @@ public static boolean isTable() public static String getExternalProviders() { - return props.getProperty(Configuration.EXTERNAL_PROVIDERS_PROP); + return props.getProperty(EXTERNAL_PROVIDERS_PROP); } - public static int getReadTimeout(String provider) - { - String timeout = props.getProperty(provider + "." + Configuration.READ_TIMEOUT_PROP, null); - if (timeout == null) - { - timeout = props.getProperty(Configuration.READ_TIMEOUT_PROP, Configuration.SDMX_DEFAULT_TIMEOUT); - } - return Integer.parseInt(timeout); + public static int getReadTimeout() + { + return getProperty(READ_TIMEOUT_PROP, SDMX_DEFAULT_TIMEOUT); } - public static int getConnectTimeout(String provider) + public static int getConnectTimeout() { - String timeout = props.getProperty(provider + "." + Configuration.CONNECT_TIMEOUT_PROP, null); - if (timeout == null) - { - timeout = props.getProperty(Configuration.CONNECT_TIMEOUT_PROP, Configuration.SDMX_DEFAULT_TIMEOUT); - } - return Integer.parseInt(timeout); + return getProperty(CONNECT_TIMEOUT_PROP, SDMX_DEFAULT_TIMEOUT_CONNECT); } public static String getCodesPolicy() @@ -237,11 +218,15 @@ private static void init() // normal configuration steps: // 1 init LOGGER - // 2 search configuration in this order: system property, local, global, + // Init internal providers + // 2 search configuration in this order: system property, local, global, // Configuration class // 3 if none is found, apply defaults: no proxy and INFO Logger setSdmxLogger(); + // workaround for MATLAB 23+ + System.setProperty("javax.xml.stream.XMLInputFactory", "com.sun.xml.internal.stream.XMLInputFactoryImpl"); + String confType = null; String confFileName = System.getProperty("SDMX_CONF"); @@ -262,7 +247,6 @@ private static void init() // try local configuration. if ((confFile = new File(confFileName)).exists()) - { try { // If found apply and exit @@ -275,7 +259,6 @@ private static void init() e.printStackTrace(); SDMX_LOGGER.finer(logException(e)); } - } // try global configuration else if (globalConfEnvVar != null && !globalConfEnvVar.isEmpty() && (confFile = new File(globalConfEnvVar)).exists()) try @@ -291,7 +274,6 @@ else if (globalConfEnvVar != null && !globalConfEnvVar.isEmpty() && (confFile = } // try configuration class. else if (confType == null) - { try { Class clazz = Class.forName("it.bancaditalia.oss.sdmx.util.SdmxConfiguration"); @@ -315,9 +297,51 @@ else if (confType == null) // impossible e.printStackTrace(); } + + try + { + List resources = list(Configuration.class.getClassLoader().getResources(PROVIDERS_FILE)); + resources.add(0, Configuration.class.getResource(PROVIDERS_FILE)); + resources.add(new File(getProperty(PROVIDERS_FILE_PROP, System.getProperty("user.dir") + File.separator + PROVIDERS_FILE)).toURI().toURL()); + + for (URL resource: resources) + // Init internal providers + try (InputStream is = resource.openStream()) + { + Properties props = new Properties(); + props.load(is); + Map providers = props.entrySet().stream().collect(toMap(e -> (String) e.getKey(), e -> (String) e.getValue())); + providers.forEach((name, provider) -> { + try + { + String[] params = provider.split(","); + String providerName = getProperty("providers." + name + ".name", name); + boolean needsCredentials = getProperty("providers." + name + ".needsCredentials", parseBoolean(params[0].trim())); + boolean supportsCompression = getProperty("providers." + name + ".supportsCompression", parseBoolean(params[1].trim())); + SDMXVersion version = getProperty("providers." + name + ".sdmxversion", SDMXVersion.valueOf(params[2].trim())); + String description = getProperty("providers." + name + ".description", params[3].trim()); + URI endpoint = params.length != 5 ? null : new URI(getProperty("providers." + name + ".endpoint", params[4].trim())); + SDMXClientFactory.addProvider(providerName, endpoint, needsCredentials, false, supportsCompression, description, version); + } + catch (URISyntaxException | SdmxException e) + { + getSdmxLogger().log(Level.SEVERE, "Exception. Class: {0} .Message: {1}", new Object[] { e.getClass().getName(), e.getMessage() }); + getSdmxLogger().log(Level.FINER, "", e); + } + }); + } + catch (IOException | NullPointerException e) + { + // ignore and continue + } } - - System.setProperty("https.protocols", "TLSv1.1,TLSv1.2"); // fix for WB + catch (IOException e) + { + throw new UncheckedIOException(e); + } + + if (SDMXClientFactory.getProviders().isEmpty()) + throw new IllegalStateException("Cannot find any provider list."); } private static void init(File file) throws SecurityException, IOException @@ -336,7 +360,7 @@ private static void init(File file) throws SecurityException, IOException String tStore = props.getProperty(SSL_TRUSTSTORE_PROP); if (tStore != null && !tStore.isEmpty()) System.setProperty(SSL_TRUSTSTORE_PROP, tStore); - + setupTrustAllCerts(); // configure default language if not already set explicitly @@ -347,7 +371,7 @@ private static void init(File file) throws SecurityException, IOException private static void setupTrustAllCerts() { - if ("TRUE".equalsIgnoreCase(props.getProperty(SSL_DISABLE_CERT_CHECK_PROP))) + if (getProperty(SSL_DISABLE_CERT_CHECK_PROP, false)) { SDMX_LOGGER.fine("The SSL Certificate checks are disabled..."); TrustManager[] alwaysTrust = new TrustManager[] { new X509TrustManager() { @@ -473,27 +497,41 @@ private static void configureProxy(Properties props) String login = props.getProperty(JAVA_SECURITY_AUTH_LOGIN_CONFIG_PROP); String krbccname = System.getenv().get("KRB5CCNAME"); - if (krbccname != null && login != null && conf != null) + if (krbccname != null) { krbccname = krbccname.trim(); - login = login.trim(); - conf = conf.trim(); System.setProperty("user.krb5cc", krbccname); - // System.setProperty("javax.security.auth.useSubjectCredsOnly", "false"); - System.setProperty(JAVA_SECURITY_KERBEROS_PROP, conf); + logger.finer("Environment variable KRB5CCNAME = " + krbccname); + } + else + { + logger.warning("Kerberos KRB5CCNAME not set. Rely on defaults"); + } + + if (login != null) + { + login = login.trim(); System.setProperty(JAVA_SECURITY_AUTH_LOGIN_CONFIG_PROP, login); - logger.finer(JAVA_SECURITY_KERBEROS_PROP + " = " + conf); logger.finer(JAVA_SECURITY_AUTH_LOGIN_CONFIG_PROP + " = " + login); - logger.finer("Environment variable KRB5CCNAME = " + krbccname); } else { - logger.warning("Kerberos ticket cache not configured because one of the parameters is not set."); + logger.warning("Kerberos jaas file not set. Rely on defaults"); + } + + if (conf != null) + { + conf = conf.trim(); + System.setProperty(JAVA_SECURITY_KERBEROS_PROP, conf); + logger.finer(JAVA_SECURITY_KERBEROS_PROP + " = " + conf); + } + else + { + logger.warning("Kerberos configuration file not set. Rely on defaults"); logger.warning(JAVA_SECURITY_KERBEROS_PROP + " = " + conf); - logger.warning(JAVA_SECURITY_AUTH_LOGIN_CONFIG_PROP + " = " + login); - logger.warning("Environment variable KRB5CCNAME = " + krbccname); } - } + + } else if (proxyAuth.equalsIgnoreCase(PROXY_AUTH_BASIC)) { String username = props.getProperty(HTTP_AUTH_USER_PROP); @@ -560,6 +598,11 @@ public static String getUISApiKey() return props.getProperty(Configuration.UIS_API_KEY_PROP, null); } + public static int getMaxRedirects() + { + return getProperty(SDMX_MAX_REDIRECTS, 20); + } + private static String logException(Throwable t) { StringWriter wr = new StringWriter(); @@ -598,13 +641,29 @@ public static boolean isDumpXml() return (props.getProperty(DUMP_XML_PREFIX) != null) && (!props.getProperty(DUMP_XML_PREFIX).isEmpty()); } - public static void setSubject(Subject subject) + public static String getProperty(String name, String def) + { + return props.getProperty(name, def); + } + + protected static void setProperty(String name, String value) + { + props.setProperty(name, value); + } + + public static int getProperty(String name, int def) + { + String v = props.getProperty(name); + return v == null ? def : Integer.parseInt(v); + } + + public static boolean getProperty(String name, boolean def) { - Configuration.subject = subject; + return "true".equalsIgnoreCase(props.getProperty(name, Boolean.toString(def))); } - public static Subject getSubject() + public static SDMXVersion getProperty(String name, SDMXVersion sdmxVersion) { - return subject; + return SDMXVersion.valueOf(props.getProperty(name, sdmxVersion.toString())); } } diff --git a/RJSDMX/inst/java/SDMX.jar b/RJSDMX/inst/java/SDMX.jar index 4377eef0d67d3306ad83578c43891d6ebff931a5..b5a7e2b6159cd30a981ff7f9799a7030fd297669 100644 GIT binary patch delta 121675 zcmZU(b8u!|vpyUf6Wg|J+qP{xcW}pcGO?{mGBGB$ZB8_?{hRlB&ikD@_5HDGcQsen z>b3Xot}CqwIpqZjNm&jY0uBTO1_b1XOq6yK5*48F?-S%eE+P{I1f=orLjSuIB-BM1 zWE3Tt6hstdBqh|;85JZIqC1g7n9+rwC_f_NzprNBVpHQKfTHTK<8rwbuFOKf7ZTiG zNl>+>xG6?V3ywnjlrC+o9g%_!>Fj;VH|{bguWn*;l;mj8nGlmrJUz__Z=n%P7+NTq zdXbXhB0$e|fIjAUSm)MI-V0)J3MV)Un}I80nmiJA`Sci<*c4(+dwAIej_UZ>BzQ2I zVwBTr=+Y8UdY|8J0#X2BBKz38+ zh{&6WQ8ys|Rrta@0Q;BvjYIrD6dZmB_&-MJ&J4kMU?3ope~tJ6N1Eq~Xd>vJW$19t z5{c1V=vU1JHPm0S^77SCsB4WkEUz4=eL z8u}oZy@*<5UpX@Xu1ia6uO*XAo_{$iu=}5`8p7cYC~JJ@d;-^ER_A@d(i4l>DARl} zu*n{ZzURo@;Bb`A*GsmGKeowJ*;(=yv+d2nx=N~cr^XG(dVw)xNfeb&KxohZB%DtS zM6#`|8FkTuU%DM{;%KDMH(3#PVGHlw!B0F8an*N4*dx#bq>pz{2;}F~64B;9d!|&) zB$n#ujdxVQX;lHYzkV5He+|rgvgdJ<6}kyita3e$FIc`O z(5mIWUo2Py=2&pb%o2K*3hLl9OkPe@uF7{UW?~64ozZlD1en0JX6;lk0Qb`LO<*=M zHjB`@nT%G=v2Q9Y!}di(+i6XjH;QtPLC!D&;B5oA<%pu*Dx%{O`njW zE^+1y^^v!7mg4ZzU<*${a5E?dklX8`aA;`ArIY^zL@o$yBs@5%kXe5U;}r#L%~!EI z?(|?=?q|4!2g*8*6`X(9t*11pKc$uWK-}{+cL-u<26-?~5r>3I>iZU#Oe|1RnIRlb zt`qxhKK+|3STO-iBdTOUqRXq0)F`?M>}&kYWFSZ}mx$Aj6nTpGiaQafI~*E{NsgoJ zw7B#%OY$N9w3IZZj4LP>8MzvHJ8%MmRsYx0?E|K1lEkpI+t(qi??>+$`s zlrhDHi@gb)4e{UD^#vi=Ab(>+{jU*vlL`mg|6Dt3F6n>unpFMpl950_2#GRSD*ttk zmU7Jl1Az9&JN5u1V0%F*mO#KJ_mPMUU_zpRama5FOGJ>;KyyaWE31?9H7e~!g&=^j zJ1d>18A#vGWL+opT%%Kr3-}~lSJ!Z8ydrf zk}i(Ty{DuY?tQ{~3TE?PE0PQ~PG`(N-O_rf?=t)sg^e&LSC00N)nDPWjIc(Hs_wPm zK3YTp#q&FG_jIfvuU@nt-LhZAB|F!1TBmlb@5Ko{ibkrZc(flWvS0KOUq$o1RrgM` zfR9euuflmi)x8nzM{B}oL=VkCt9nP-{8yE`L8;T*3DgvwJZ)3Ihv3;y4xgzRM$d^| zl~s5Log@*BQ#8RktNfhjkD41e99(qAdzBEaecF0dAPD;25^GIx89w@|ZrTd0xq$g$ z;!8cOct7|vD zH%L^BKe>VNE)o5m@9xo0qqCH|-Ecd5#q?gZ{^bc}Z3`n_H(P@7ZW;Ys^17ti9Jc{D z-O9{x@^tW$g0)t|vHm2v6NHNQY&QY&bg!;!A(d8BECOr}-lLx;lsnd@*1LPZ0NWqn zq4L4M)Lv}_(&w7c8cVX2tf)GITy|&sz$s#1lRn1gbrtS2(mzEVdGlH6X)?RAHV1)8 zR<=J*6|zs|<&BB4@tUWFTenA#-Cn?P0>DTK%~XFZq$CPJrq!e*9hAqW!n&TdIi69m zwzJ9Sjcv9inRHB%`g3Y>laVWY0KA7IAMmK|Ph)v#vq?n2k)6DFvpM}T^&K`wGB*Q) z*lHcC6YZD{m^%+=xtuvI9wc_;SN%)%wE-bJ()9FA@CHGaAl}1(L1D&y&iV8+Fqy-ntE$i0N;OJw8&pE zsgpu(r0>I2LM5I}Sd>vUMg3`W@x&Q~2qCsPtCWhkro)Z2|X)$#PnxC%C*Tu#`uLy49(IP`(iZ!xQNf86M{s^6+Duw}ySg@VVMd=!O z{HLFwdemQJFF-!751S`G2q09;=cp$>ZBp%=Q2Qs*dzu>9#KUHv6ISkN>z+o4)txtcVr3mp zbG9ib7mN@CGtA8>uSCdoySEwDfP``%EB3QsZf0(V%+%>J8Q?9HGm*h4mNT@^*0Li@ zOl(*y^|ISnI4IpKDI_BlhCVEInVx|?K@x|2-3`~Pa{#eZe)GX!as3U+S^KGvkw1mN zugK5ShJTU_Y>gpt`Xmo&?N8Fw*0d!PXQwAPRz{Kqbl5I9F3~$AQxGl{w^XzEY5tAf7dcn! zIdd5KRt&c{Z6|!a>So}+YdC=!&g&1RU67<(n_PZ@lC8hKbeXrlS*VgVe=zo5%00xw zMMTr^8V$8+Y((ugng4HdUNfM|GjZ0z8h1a#R5^QKDj+XHWqlwPDjFMhOb}Mwygx>L z(L1>b_n7=M4{cft_{;0*E3n&Gy~_+&>BbE1n1ivQ@`n8!Hy_hiX@Si+=R`_k@fjh( z#y@?A=G`-H=hqr-=Rw>KZz9Lt@vf2G@^e?B4;A>2JIxT6bH+oI-g8Z-3(e;(+};R6 zt>W50%5r(tm#>ImTc0XV3I)G-A$-3VSR(mAsyWC8E%4Lw1mfpTqX3i|jxGGr_=Fs1m|DAP zas0{BdjxzdcMTTC(7Er&ah0)o{Z#;+QLcjU@WAtrW?lYrcf{W*j}l z4*+4Du7K?Y69|U^(s7GMfIQ9QkTumqe}fAqZb#Fy`p1+?y239sTiy4gbF;m>K18)p z4T0vLLeS}Bi7anw#xM?vg29nDmfoY?FjCb1~ zLeNmZm=^5zub-Q3&};H?Z8XvhO18l0^Z^Y*wwmcehHxM4Hr0%UQkV6)aKYH@m5m1eVqysPE>nLa|!}hyBskeuu0}68cPua!_7C zBjN-ELmY0`wAA7ZnW0;pw|oZT8vuzu2CAJ%2T~I<`575s^kI`rAOyhCm~%Ek_YVN! zoTz++V7R(ur|(Y`ztVO&L6MM%688vbLJl=8q7`P41+wsi*_S*z8L6pcO%oj(pJzTiX+^cdho(PN$D9PY?_7&(DTzd{IA5TZwhOGEa8gwgKLq zkUO|6uw2e=J~<$7QE(^y;KNd+)`?>dR8{a8ykRCgM9O|)DYHYPJ!RRJ%%_iicf1Y8 zD|JoG64R|m)xeIXFyMO;-iB_yiWp6LcY{0l2P*YD>lCjdp+^orgN^_am6ryu&s0c? z12Vu&2l*@dVy{Jm@KfWJgNo^P_i$*FqU*7xZ(u-`X;)RNoa#j6vn~NjAgQ4Iu=@}a z`8mKN-QT5EZnoGIhG@vzYwcU@AtvnLH&Y0z$sP%XHxmS=L_lCS{w&U9(Rl&6rK*Eh=-OMXtc z4sQ_#G;jas(9(g~ku6WCjy>}O{RJTX73@O-*ZJvBW-+*Ye?a`D1#y@~Si*7!4a!sV z^lbDu(*2&8Lx9V}XPs$BN9a zGh7FK)dm2#oqrk6upg`y+;6oh#jUqUHJ!}_bQ|gU=B=@5zkSt3oQ*wJd#O!$6VYwb zIP_Cv3!Xp_jkbV7)QKtUCWtzRc! zRatG}Ao^#Hbnvg4={|3F0me;5Tyg9ipQFUg3WAh+0>r;}J{Z{yZ}AZqm;=5for#n+JDWR1&7<)o;} zWNC|ff(|f3JV6L>O=#O%s3mQiHm3XD*vJKCorv0QD?Z#+$ZEDpTld-G)u}x5)*d0M zGB&Q!)96us={2II8TA_u)M$}cnb8dL<}DOEF8~_bpbtV_n1&-PD@gX!k!1VdYlFHN z>VW8cVm@g#H3$LRbw76n`dj6-YGBycknv?>Uz6Q3~P z;EoO@22uLL?T5wkctqa_pThhV8CJ>ZV$|d|kp~lnO2XeIzJomedC&OubckO{kyv%* zzy#RgJKD@HmSSN2G0v>>WHj(G_B9dUG96dHQX?N)GPRJanxH%`WMOeHca1sc;j%SS zzkn2GcqwIQRG!IErFpdOnTuO1QPcHosqxV=u~y#rsqh-BHXWjPpa)3%AvM?j`_EyE z3IJZJ*8tu_R+*?;)Sz;n?w*fBHQ9kZEs(Eu(}7DbLOc$XpY!Fo;tCEUulU2$ahV4l zkWj|L6?}@mCZuB}IK;AjQTz4(O$z^~7iX5#21EHz2OiaWBh&qNNa)WG0>Y6J%uJo} zlmq?^(83FAjDECqHRZ@Uae1gKEsEMlOg!c&dZ>&7hAJIoEX|A+!r-2QU}DjP=fw%5 zy|KQ&E_PvoJnQ=@Yv%wD7aXZ&7gMXTVOv{U+oGvwSFNe%fC2gWWZ9FIyEQ3_YD2g4 z(&GiV>UQExAnbes1<9n!y$my0r8&@Ll3wKjAeHTgvDV#*rnBfU9Y`2nW2Ydy+?hCX zIyWU{Cpe?+mrX=$tsaP^y(w(okGHKshheARm?Asg7!N|Pm=S?XbuSKfDaU@W8t(sU z!{U%1<=zdeTpc^t^KqvsUi&?8(KZl~u_x8uz8Ok%w>yG!L&fhM1}!v}m~T2thjU&I zXn#TA;xq3Whj+Va;(y7(5=t=IJzZioJoshT%}mrgddGD0nDO$i<^QbFr8r!Fb9m0b zwijmcjEK{F`YU&GiE+C&e0J zB|g^6w=k|WJ7&k?FrdpH3*0|JYR8HI@ZJ~dr=8cmxjDtZa{%V;ji~hG<17SD$|Kvo1_f7dT8==7X zkHO3Z0{Wd9p9>a8!lzxd&99KBz_F?NHlO6|^LC%;Y$LaYnW=@%_wa11wzcsofK&Sm z0oRP{ouA`p-;~?tds6ms``qbQR5n)TVSc+$Qg%k$3;f1z{T~jdiDxbxqokWF)=%(X zE9lFpb_a!@fgJG#?2^T{{yO9(HdWz?^_4fy)bo|YEzb1obJ__()!$sxhl+Gb(G}do zNx^L~vA@KC`xuB*h_xOUh!0a9fNDI><(Ae~$3v8m-qZcrWn~3&^ov>>xxs~2RGXO zKIDsXnEDCCQqZrX&0FMAJx#hx&B{zRvjm6_Dj7lrm2~Q^ValQxHp>~q4$;*a2o-aV z^Y!IasW1-FgNzcHKBnzw07zoJPELG8DonCAT3WuS`5)TIh20INK$v-ie4i@3AezHw z3ehb+>sEn93>6yj@#m`8`lLIujuFX6b-(${$*fDAUybdU)z;fGiw%^RN)5N`r*J=$ z1}eS>{>f1xsz$_yxO)|ix}2)|sjC27jT#>Ae`RSBrn>W663_K02S{JQKw_lXe2VL+ z53kTXsjgd?rkQnl%M!H{H5N#i!YT{{=C^bNzg<|05d#&8LlrASaUD8*j7^RzIKrGC zPOM{<8&up>tN92-SEwZng)p<~U-C!!eKq9^N0QJ^Dw9c{(^_ib?N{|W7&SZ5;IR^t z%|ti1c{%x-&*+cb0VA&+{VGewa>HEIbM%N*26r8EJL4!ai6tzQPJvZF2Sogem#it5 z+?|~Xa?v{|cm)esqW_>oHPvcjB}7oqU}~xx9;$QGJc7emsUtvFx$}+`)^AspQOBz= zSSPk>UL0b)LA}IU3Mp_HNa)TUf?U;Vy&c$ctswdaz2%oF0VuWSdA})q)5)Aa^?ihwyN}N}hdMAPk-6`bnDBT(TJWnYu|_)w^#JV@aQx7~Z!w-yemD zc7inU63QTeQ17-)(~ytGE{iy?aHh$TEFaYIYeCI8`+EWUGi875{Sm^w;zaC5>MRPF ziLd2xi=F!?44{wo`Zs;6@x<8ubcP}&yCe;NVgHTi*mqdv6JYZ~!|z*joLXxdH6kOf z>ITM!DFiR!iW+X2*v7OC!Kru#=6T?Qofx6St$ zJc`i?cJDwKyQ$xu0~6z{RC(f)v#5|+sb`bQp&TnsX#f{LhrOA6SMk-f&@_UX=V1{d2}JEq&XumcLYzZ{NCu^8Bxs^aRBF(I zDM#X10E{;hqPj(M<|@s99Y9dAFoODrUP3ed%6)_ zvw}CQxV5$WMmaO0b?!54X5EAh*5M!)P9_h#J%SwD=3qumvhtH*lW~eR4WtRP<(8bt zC}u;IJ>@PQEcXT54J$rDEk;|XdQh1U(wyz4-6uJz&4u1_27uzGH=h z7r@lwdA@Qk6H(5NdL8Y&`uwttRHP=tjKkq|<@YsGAO(Z^u3%d}tqtGl31*8G#Sob< z4fQoaTgtqzt6nQ)Q+eOh9&~D9ir#Wow{tnzQ=cH@qZ=EH7qxSulo)>p7Sh=B_mHm; ztq5SUywLrz5=Ni%Lf{)UhgUHC^S$DK;HzrzfN4^D$65&=$U?@xa z)byJLIfaigZ1_XFr?PFd!t#9JFjH=K36>`zDwTtao#m6FwWYY_lA_0gO94@;Q6UFo z-^Hte{e>AsLhz%Z==Bd(dzCA6fezZriiFf@stC7dy}Z}_&~7h5f;+3_54XCYDPuR3 z6J7_#I82o1cDlffU6u~B?dguP_;AiL3cn3Jt%YwUMXeS#dSZ4~27YF8ZaiP;OKr`? z20Q%|Cp)CC#~KajhKUreqkyq_bjVKxCfa$MNVxO?c(^VECe$aOrJ0_efuB@%h}xcl z=OM16?u#TeM$XUz+e_J`1RS>2-Bw=0F>PCB_MI~;GS3Zb$a{VXi!#~PxW4*(_^lr|pq2L9SCv1YRU*G03K~^X z3(QtY-3KcGbp_ir{4a7dRn^wFiOWRhm&bxDw;eTGDW1!@yYIfG><65Z`YiMSOUO@B z;Qlmy;08DBEq=Z;1G=E--BDEzY~xI^Wh?_RsVaw#t$}t@FPMTuM!6C2N!=1#b$;1W zN7%KQ*Dp32Rl|)EY^09}Bdr71<#OrEM6gt` z$SMxx1}V=QQ8F|nlo$0>#5Wdr;4qhr%?Q2(8K{UUVSR&UmSP7tRqJLWq_Q`EzRzv}I{8pka(Dhr$%{LL)-N4a36~=_y zwy_<%cNI7jKw<@o=OpEy_YvBeJg`5(#9VKEdIAuT0Myx0gVKbm_fHaRreBJg__HHu zm%DFqG1pFry2yNF{{b(;2FexC2dF z`~XHG#Q?I!a}omb`PT=w@vFK?Q~pT@kNruw{b>|`qPB(A@D5K_xB1|Ndi66D*vuqc@t^Xin!;6s1{l)=bUqjUSq}{G7v;1bsQo1$b z#MMS+Fo_$2i^c46MJV@4nYa@HZ|?mbFq*a(bubI#xD`NHo`uj0B10q?n6sm^;K+Osh!x#=G}6rSaPvAS&3x#Qy9Wdm~t2enk|J^3cDBSpy5 znRS@c)HfAacW%X+;0`%ukf>phEWtX32W*laJ*G;ss7CHzTap>O?ejptbx+Ud23s%} zxod6y;EQS3L?QT{$*#pV_1jj&MYTl&Fl(T(PZ@HI4PjIvi#iT@N=-LIY`)!WW%KlO zEhTbnb|}O8aIVnX1?!6R>)qqi4Y@A_njtu}qpxFChe9VLDvKXg-&`xhoT^25+0gp> zu35oZs0}XR7epvYZn^ERg*%8FDsPd&tp%H~14op(Y637{-1f_eeG=_Sl;bV|0BQ34 zxpZGf^hWx`wFpX9v_f0Pq@UPtuk$C%P8e#1@J=QZullC;w^wv8Cw2l~nc3@y(1t}L zAs9ry!d3U1{*r2?hFTn~f$Ph^2LMm0(TM*eUbK-Aa;yap2rZQ3?tuGw#C=%q&=!lh z)zUQD;t=?u1^sZkZ=t+1k^Y(vfO(i&49$VLwJ=S_J)#jeQH8-N!I6u^`u>S%NV3HG zlQ+0_yr2hP#F(|Hg0Nmw`qg1(3ziUR&SFel1eOa1(7H7U=&N3|T6nbMojt!+`t_)~ zivXuwdmscsx1zBJYArvUoT6G)w1;4wjRsd?M>*7r@C%n#Ww2&7bFG~k{aNj%CpW1c9{=T4Y5nCZnGf4v z0n?vFtQHeKor)U;0KJW&RTk>o!)iqk!r8%kp@0uo6Qk;AnA$!i5`96?(S#^cK6v@5 z&&+^&H0mtg`@jY_Z%QZ4 zqEIsoKkOjIahSXtgE3Pol9jFM9?g@3mT5rVg5eRl+!6@AHo^1&EC+tzW>8!-M5owR zGgMAbr>YC!q?~msCjx+%f<<^u!0?!`@BsbjBUcXEXtF_jwHD<*Bj?JQ{f?2vE_rSQ zp$B;UHGh65C(2{-gfQn2;S-csPM3JGdhjuSw~dJCRYek;^pkhQ*}b+a#>U);mw|XS zjuW;7EN-|QGu0=6o~&G9o*5yLlYmh22y#D^n_mc-TlAQIA)8yYPuHmHy?|tJFxHQm z7cRn}1a=({gUGIEM-#32p_*F9?RmRp6Fq_9%B9ePGA9StpS}b?Iq~#Npn+I;dM%+1 z6ajRm_77`6-&MK~gypK)6SD3!&9+O(-T&Bw$v*gC*!4vca z#ZPyHvQcNkGuZN9NmHyj+U0w_P*bn6qqIe_6x2P?5!{h`i>=~B{r(IrW5RT z4rMehMB%8=rXG#$*V+*Lo z(#i?|IIlA^+L=H2)CHymx68WM<5Tt)IF>doOGcobHulFzQTN>6 z-n9!YC485z4n3}x^2E}&k;nAC$_DPx=$LJ^nQ{rj?)LmyYH^Qag;>9QVD6LMz6Az= z`^N{|LWBIA*x#W(NGI4K%ecpJKkHon7*B?`j1E2e!zH*NexF`UjnKYz|ChIcYjhs; zUiMR;A{ln%73?Y~mkLqAdqXs#64$&hiRXa9+QBYO7e=7M2T=te{x$8Hp$m5SL+Jkk zlsae#>=3{~Ky;u$nobPl{)HB0rqv|1`~?pwfu|5NkO9=h6|^-iT-|J(92w2*P2Akl zR3{WSgwX}i_@0Ahh-a?@Q|FhFXfYEUoza7XAXUG?$5d2QlgJc{42v{|zUoj&2MH4| ze^gX?;R8bkLnfu4&U~lakM(EXKfIn`jKSkUF`6iUGuNAl4}`$N6Ip04vY5~B6^Z-L zC#Ctw3;?Xc)h*%*l`$Lr`Uhz1qcWjGI;W^zi`UnjGVgbst@37gMR2Dmm(V=6A$?L6ico+Em(Wj$X~jhwl5O$Htg(qZuO7BbR` zU?lWSM|2cGErh9@f>X zQr%~ejec%QdIS1wDNDJ9dFbx0Q}H7d)v-rS&`abs@_y)BLjS?7q@o5SuNRQqGG(fVu)5jq zVQQUHRT#+2PD`tpN*2ySHTU06B0@2u^_hcx4~e&l-m=U#7p_b5s~F)?Xb%pAB%_h% zpn+OIR;MB8ST}1475Rdz*+>xZ%6UQlzek_KWpefpl5FSCas|_0P*^O)KVYxFs56)* zO;g!_kzfOF$^w*sYk?Cib&=b=y^|R|e4{<)sQfImxWxm01XAO10Ra z5lJ@X5lFlIvvsk6YPWf)-{fU~b;`Vj zpoJ`V(nM6{jTe<)si}nly;~3v;|-5fSQu*YnDqVrtH2Vx5+~*SET(2jVM~X~gcygo z;Vj_w?aivH={8Q+Q&pdjK2AT%lVH-B>-A^sF~z9Z=GuPQWRAI<^88?AfgQcmK1Gr1 z@5QyvwOs*CQl85e;QsdE*ORnp-kG`|m(C8g7iWb+*sT-XrUrW{)zy&MjY@MIXcd*Q`!5S2I4MLmx*=Z$1tp942K! z-yan2c}781Y&nN(JzaGL?|FsXH^8|5zVXL7>x52gq#rrlXdT@aqUEqudYhaQkj#zn z6mKK0Qx{SwTaTO+DjFYvI-S-9ku62-oI3j&hcO#|1qnM2ZBJn{xp#cMAFBQ9cW`A| zP#Gt5tsKS`(=^Rr~-xh8{P)PWl0$aPli42FL&69)c>7Hf~@HDWw<8!Q2w;%*5L zgH4VDatCgtN6i^7f`XjtXd0XMNX}Mo8+VyQCF?h~Px<^XpZL6bfh`N`P%3V~!PVTun2FvFk3O@GClyM6fo&2c*J&F-zMMD}+OZe8($2`!l32$Ru$IpdK;JprP z3L3`>J!c4@1m`$n_&paca2OXhW*p&f=S#3#N!S{oCTA8(FQ%w6Xts7MGh9#JH1Y!p zy+Sz6apCXTil|FiurhJ(u zB_6GmMd%uUhOy_k;lbvd6z8!;_j|oRs;?k7YLR6CoC{Rbg7(DWRCpWbc4ZF}=}BI! zpD)Kpf+Z?ay=|HuZyNWtb=*e5Jk7nRT63Sa9cyvSXE2Wyo;@S=jMUoD5 zMVh%pG^9m&VO_`UXVDc*P6KB{65>n0zmuBUx;dak^BOT0?U4`eaNI8?*4dqQBH3AE zyncrP$U@jHsa5dop{kl-gG^RxecJNeTN^*k2;bzG;Z>1G(c&e*#q|lV*LPrV1`L zzfBtxR>T=FN57CrleH-;cf#@7Ad2Yeu50Vv>psQ9Znzd6B;DUAqp0A~a%z*0 z;C(kfg_|89un5HB)G_Ob@43F4+v_r!v28sRtXTEVK2;<&1LYL;|F#&I_7A7OQ&0=b zewEr)BhCKogN{ip*$lZ5>^PGkrFdk21zRm13Aji4lhfA|q*^)HLx)X7yXOTRjhr^9 ze+4T(B75>Tl&a`X^aj{0V%_;og>{->$6Bib`6|U345lxtDEIMlBarACKCpzF&pl7> z2{QVL`Eppq%Zuo81pEu^|9&fRiIqG(;Xyzm$o>Ue6X$~y0FHEE_3@W*zJ#JYP*s3va6oE*FZ5d4KxRh>Oq{g{qK6N0(QOvcAk2kZm-#pb3huB91@** z3{@htUF1mC0XMQJ_4_kgG2V!P9?ijX@h-!nOFZv8$?dKvE+@=uOxV8z`9ZyxHwV=1 z@K$*5h{z2{{AA^DJ)VySpw~VU>{WlK&mEznUwzP%jP^J*{ZKCH<^Bwx_$I^thyN_J zIDXQ#h`;n;1f)MOMUd8nL2x)rh;bjyzpfbUGD$fMV5UFg2k$}@A0sV`J(w8uMzOdH zDrnyZlRp?rswmAJr3NOb0aQ9*0~4g%chkSN0nNv{frQn&PK=D8(C;h%D2ilqX*Wv0 z#_&%&zvX~68X@a?2@jHz@J~5^XF%CWcZMb0zrTunu8X|7xqR}u1K)m6WotVt zGKni}lVaPrH>}l&IoA!@+om^N%p|PPQfT2r?f&WcYO-OiU5#@EpB3Oz`}35x#RySc zy_iZ^eCuQ^>c>p5dS1~(mM{5i3Du@!d3qBC>J zki38`ImCNNVS~mMi+UZ}K-QO_9hZfcg%Z1?E5h)KyW02JS8Jkx>McI6i{(N`6ts@9qmo^j;b?CEP$Y zfMm(8_IIQaZvUx(ZUfz%z2q!A0gMnkO9gGoPzKpz6I+31Jm6jA{y`)!{jXE@ z#|mO>;D=XTLDD+&x=wgMwqV#o%XCKAe^Ua z9;B`qB>e`NUxuS97O)>13)rIp-~^mlX>;RT$MAII+}QAoW!9RER@YHBRDCS5N=Al+ zFxTz`()w8pUz4jm9v2amrgvC7#oFUcF|)%?n7sgT-NtHyV&E(z7*Q5PeOn3l;pD?^ zV1G}mB+>9FT7scjXpWKxV~ojL4k2(jK(jL)--nN?bh*T_GdDN1YRQoU76}>lmJsV@ z#5#&qWP?P;{60GHAT&vvR5_`#33Y{ph;_zh_BYd#SNg{AW7=8o8hpUAnVMLC27$VF zB(916j5JYrY$($Gwd)KcpS1S(?OxdB_FWp^qOfiJs-{QPQf`ekyf!P1h;J7{_q2QN zr2NXHU-e>XG`;Z-d5H!eAjr1Yt&4Yk23wE9(Y?G{0I9pG2)ga8E*F3xfv83yji%yM zZ;RkPP+Ub(#X~zWhAfu5sNbH&U#DtGm#Jk;XW@ydN72+Y*1l$&)#Xt;>0gs$a?@ti zs?46)z`muq=Id9#mo)L4ImKEHFiu0DV`E!j#VrI? zZRo>O1V$A`YfRAhWqWk#%upvUD|mTQX0Y?Lah#vggIT2N>qz2g9;X7DU_CbraDK}x zVj-Nnd89W(CN8+~4y@@cHGl(649nH_eou@~+ND0KrxPFB)SFyeAxE)8p&AaJn!Qsf z=xyNYZalVfH8*ntE*;AP=41+sY84dTyg1$Udpb+=woT`N?No$_Nf-!mIzNYNBr*pS z#CsBq>LvvWaQ7mA4zQc?v8SnlXveOyu&;f~UNs6nx)}>teg7 zyD%&{V4Xe*V6B9#fNxz?-Vz8;&@)GfU&!0g=(FJnH58SdK>S-G3nJwUC3uh2Nb<7g zI+l@*VbG^Xrs21_;IY0m%}Ny%K{wSXM?D4Vn) zr(qcW!*^AqH+lGWWB;~N(g>vAn>WrNYsPw`%!$L5S=PsGsAWR6K|mwZ7|)@(`^*V+ zZa72C+pDd9nOD|VQ((Ag`>1f**Z#M1_?_&S%p5MSM;nAk7{e3USP;za1OcPnGWjo8i3$4l63Xd7GKK*Mqei^Xk{`)ElM&s{(+IE zA@4#1X>lp`O<*4d-5YM3O)6Z`O zP|;HPvK6;i34HxsbnJ?Hl%@3JdxVN)5vIBVQ)R|0RMFx=a#tepyjxFxyuUfFS#+no zw5bVd4CP(t^My)uf`F{Q+ewy@2kzS#?h*5&rjNc1y&w?&LnAFz8fUnS&VvR{IM+rX&8hmBxe2*%JKrPW;-S@?74J+M0C1asy!|9-tzvCnp^a$ zkRe$Y)TLjjrHAaxgkrnc%Rb9=6f*YMk_r*3C8-FeW)1Ez$JC`y2b=uVLkCGN0Mvc8 zRmIO#094&PihlHdWl!d(Tp-Tzrj1?h z2-DP`mT5BFr=(8)V-77!m%z`^w%tI8J7>5Skqj%fh5}Iuplq8ZyT>TJZn^eP`qU0Ghaf_xO!!`P?c5hH9ze!}g*~vGB zoysdAF%!P%NlaU4=Uf7TZgfagfv49iF)`GQQ7c+Sv$PLM#})wrgH#M8fQb}poK%F1 z%t!_FmAsF0iWQcJy`(QiHq@NI>tv39!x?O$w}7E3or^%_$erv{CTdz*`Cher7{O^% zP5&7qwnp`js!0yuRtm?O7@WFmB$GmAv%hbeEoFr}xS?%z^W?OW+ekUSD15%NtgMfY zXPKr{8J^36_NOe%RDRG4#kY0*7ehgY9SbCXZ_NMuziuf_{uuTR1SFa<;|3d)GNr*6 z3Gnai@`xAK8|^slYVC&=J0Sv$d=W&XbkOLJxHi#9M4M|+?ncB${7{lwzI4gQAbQxT z(O=5*We%6_Db1hxh5^JEUN5GEsstN4k(Z5K)|99#X|6C9sTwxzhTQ+v4Bk}2dc z;m!j$J~01$<-dG=b$@MLeSAHa8VLbz&_Qa3h~%8VZM*j)?@1}PK?Y7v5jo#QY`z1t zg;4j(H@_NT0R12Nu6I_b?+BmzMdiKUc9|$L5uKv1wcbD7P(HuE8A)GrUAKb08(`1} z^mYA~I*#Ht>cfTAbp~aL!Q#FVb&v5*0%9GAf?~Yenb(O#g zv;i${+@j2%e*!a9!G#7U$YB5ns<0V*u8xdYb8`H~wUL4-=iU{DeNZS`ktZ1i30XSf zbnQA6d$#&wUHiINAe@>eXpY}pih)`Oe$Pj^pj=U_^rrAB3$!M9j+id+PHh_fo?ZXx zdj1&G@=E+cb;*w0@Okt_>6Ac-TqWB_RQxkUKzfPZpcJy=jK$SS(FH)+nULEV5x<9j z4g|#jj>kLb{cQFi(_d_q!clpb5sP^yYy2g`zlkKql&|k(8lZliHFe|Q5XheqLoo%t%38sTZVFdO9a`z>tF&O z-40v9j}8Wdb7k@IpXckZp7!UC6g2j;Mc-XGL_=HMYg)R+o#p6DNJm4f=Blt|xluc# zRx{6Qr;;tpQK{f8ArUCrGV=UVgClLD0m6O6JV`+$5S0!9Wk4JrIh%oS{|SP1sLGHu zYRf!34?VX+qP{R8{4*R zf8iI~wr$(CZQIEv*=%dKOY5yEZ7xnU-| zYo+w4G2twd46$9QM{A$m3It%LlnJ+7YcXul{=0)IQeEWQ>=2 z@}P`><`FjX{i}WvV|)-xnv-tgRw`&)ssGFZ49;ss33%=~1JZ?w9k=RDq(NwC{7qV` zk%wzvp$~Ge@nJLNP@z=dq}CV(3rC&qYg5nBxJl(`nQ5Mplg-mdZkp{*HJQG9S&@)) z#MDxN2iqDe6-ZnqBc-|xzeftyvszw1(BR4vwFI7ywt^tB&31_j=MtKVd!F4^+rIs;(O_9|17J4zlKNuYD5ASXG%`bp(E~nP|uYBmI{Ifw|QsA!E~Cmc=&I?o7to9ci8X3 z96R+W&>Ps;t?tp{=Exlp*_9}`=v15^s0Kry3J@rU#1snoB~@I68EYPvAHU}DJAzz+ zTyu516X-KWhie#|0U0~V6N@ok?N%o>jx#RvGo?fi(?9Z+@-srNOcTH5yP{Vbcir8&(Br~u6gH1IGrHsaATRH1BnortjL7fMx_Yj_b= zGfgd{yZP%nmrr+cQY3Y0gn({pz_EHZg%qmVqJ0Q>@}zD~7``D4XhNw)V) zWq(2J$sVOAu40CL&edY({tj*{^yh*Fu8lNq{E!Ro{9w#!g`imWJ*f%Om}q_>+RxGA zB%sPdpzJ~t3@tC#&&R6mm7ejGe%U3h$w!1QAyG&-g&wj$hAMbhBQBKIr6E<>#wEXC zM9o~ZmQQSz;q65B9jo=yI^7Jv(w|BIH3-B(32=a%*p3rI7`x3$+-38C<;4iv8|BUA ztzZOQwD_^fH$2LPp|l8yUbXR_$9q%vN+7u(vN_#e=xys`+Y^i2ArY={I7Y>N+LKVP z(O_XL@r2Uk2S_aJhYYT8SV8&|J0Np8@D8M%etadMklT{Lh1_=o6(Z_#!)!`id2f>0 zmIEWfMkS)Q_oTSe{<@X+k;eO>aZQv3{tZ!besu>PBtGSQ(C8@l1s)_n?R*g8 zCLEhV2yw=e%`Y-E^y)rM5mX&)_YJ>j$LbimqceJ}szw#|_O z*&JUQ0qr!*s5qM~c723wCoxxvx|$=Qz7K02?Z4(5+L`joeAmlu(6!pK?IMlek|@6{pdS`#A$bz*3UsY|)?e zd1&;s!pb1*4LcR|&M$IEOw@7Oe156uL%m|YLwWvX2lQ%}+%>2i0Q^xs3_s%oL?d;4wPK>XmIMQTDrkwI+5 z_qGTMIdGT_Kt&jn?W~P2$$0&%qDycxj@cyT)iE>kfU8SgwqaL)W@#-(UVJfc;^^1* zOHhfL9YZ#5nYGR+4O}7XuVW=<2ha2J(xW+E#*UUATb~{0T^vTN*p_LM@qQo7396Tn zky~TYGQV^WyQfTUpjQNLj|HPmWvg5j0o6xLk+&HOFJCq_ZNHW^4N7`+Sp2Vadp0Ip zGa(joFuJEt2fB(Es-Kwoy*{{ksL6k&FciA#tLXC?t^l~}P${rIZ^sEmSGS6iSI=0T zQz8V4k|F0d<}H5` z@rB*q%3yeADOY@)R3KJX6!gy&+D0!wFiUgg(NNzK|K-To8*te%ipi1{sz%Kd^TQi2 z6dv-Rwi=>n`oz>R=!=K8Rc6=gDDYILuX)(jsheX>5!{E)t_&0C=*DDhx4cQMpR0tV z-94_~JI+rr0lR9htn0Fs1hd5Z2YY(D4);{z%Au2=01PIVev73i32AZkGLn{vT56Ll zo@XqUm^td~`zVuNIwI?#3cUs)u73}TY(vDtbxhjMQ-7|f5y^xps>*oiWp+5tmGAVw zkbe$0jW&w%)XxmC(;rs$$VHjGZCH42xM$C6Os5KO0Z|@(*#d|U5|16`B?}y-*^BJJ)S4Y?zHq4++14=-Wx9g+ zN}gQ*Qqa}Iim00_a8Myj0>PZ6$R;LbppPne?XuYRXoPSK3JH8PaUK@!_Xh!iKCsLF z^No6L0S|26y@vKIfeBj+7d!GVe++%UgjxmyANP=nE8fsw*P$$4i4W-xWPTj5((sE! ztURM19+nSBP!}fS4_%-s1+H8qEB;7pxQCeR@5Y!d_DBHzCk6l!f<2>}mMTjA3r;YM zRPf-U>-dLHO?i(OwB@(raIVjWz7d?h&_*xDERZ-P+sar(YlKHX@R7tmHxS+?t|tVF zNz~fClkmiub@;o3c11MQ%2>rrBCm%GGG-6+#94;-7I1p2L>#1pet6}^$P1exWZ<<* zajmw>1U8|w35E&gryIBc4(5k-$f#|29=ecKEb<}XfJhO|y!e8BMCxN|h=fiJ z2K))d#dp0BIN9sYrHwq#WMtqE?y{zB(sEXBTu*h#=A(11n;v{dQF=z(DUh=?F6&h` zReeI5c~Q?m4DFOPl}sK1-eHy;=6wjjHwPucItaR9L~4eW`atvBq5@>Xcq$LH+#{IP z+_@#0-sD?4tgSeK|Ebr`1OskB)KbuC0Xfapdbf)^g$gb?((I_B=%8!oNss9tHF6>? z$%=zNJ<Mn2SuP=XwfiYK% ze@U2}tAFUbz!l8vZ^ z<*{Hca56LNpdxiAYSR+XahC9g>t3eM53X=183#(q7xD@v5!q5>k^v zv>9c&zpjA*gcNMx!eV!Bovoj9nU4<5cMq zJERy>+K(X9vz&U{?%#(Z1LQtWY^91Qy*Pr*p@=>yho8^ebw${p!9SOIcXug#$AsVm zXWss?#xcy>R6DP0!F%Op^GXTWGJKH>HU{mpwW^tCy(Er!C)X(iGmiwfIE0HAu_jQD z&pE31*)R@CtBFjF9%;<$o##vib3l08TrQ51#ac3y6AwOHrHw2#24*fN&}XOH##-(o z+3|&>Y{n3WU;AtbX$|91aCRB+$?WkA({k%rUC0`yy2oid{jAT?|9v+hgWUi%!S9@t z#jG^zCD#sPm__a~WYzPXrzGzgJvL*x=2L#6Ah@NkP<{#eK`ix4%*@%%7(vK7N;#Bx z5T9#T03GfJP6#q#1RvK7{>&@;Ex@O*W9<)_D0i|5>FBECz?m zpehDO2i9rB>#J?x{v$?nP05M*L1CRZzhi?-7M;hreOL{ntp=K>Om}|8{^fzhCNZ^Yt)8&eJqV>~5>y*{;9YuJiSL@W}BU*lk&#?tj=v0TYMP3^?_> z_&)wUxb(ZtX9xt`2SJ1ClQJbO1?f@rs!0+79gl|U0(#*)e!1}P&&~N#^lF7;dp!p8 z_W=q*-+wpa5Bl0l$gF}_V;MSMCd~cAXdM4EaN9ocxDy(|R9`Ex6Q;Do z8eTqJ@_#|q_+%mqPA+@Cgkm3mDVRXR#p{)f?Zbn z!WT;og$H73EX;HJHxqg@e;n zBh^={#|F9`CN`{MH8Po&aWaLR2CQNUdYll3PVehBPxqPmxdls#H2eFlHefZtiUf{v zX3-aFzB!e_pDWM;M$)i5Ez6Pk>l$G7(~x(k0sh4~!&qpqB>46uGDi*#Nbs$sI!s;&L-=!O^kjKo^In#wr4izJEw*eE6S zbq;Fob8QZBU~4J&`*?G!ExT%?2-7$!G|>>(<%AVc5Aqs%uFP9iy0C4`S(nA5>b~eQ z24^VM>z<7D$x@QBFA)jbHthr2sGzJV%Q~sb{jm`GcgMiU?@UUTwB#~4lDjY@S5j%9 z=Z&v=9>>jIxh)>|C5Ha@ouQquu4;6au%Y-&DE3@AE2)_DoaGP8X4hf(G>a^#_oDLf zQD`!$w5IVi*xGD+4(Od<|DwP9B4=Zl+#T5DV;n0~Bv+SHveTsbyqw;8aP#MTvOq7$ zh9`~FHG!53375s3%bs)gOYhomAx&XKxt)SERkH!xT<-UaJvgid@-dzX1@parL~%&A zx#!qtEZ)W9pCXlnZqkGX<^omC%=Ua|X02QD$+QF$WJVtbEd|UMYi&;MqRnXWLe+>1 zTAfLERAs8m0qbs?`$Et8acO6_C6%>t?HrD1Fu=2FcyCyp8?x{p{%779^4${-J1J3n zeuoZn0<41jW=rTd?7#WvTJ6fxmaOl$tE}uzFb1r{meL7o32bO^EzO(?B(Pg@77V+y zrzm&~cGZXCrj$&Zj?8f4weuu=_Klp)R0>Sm zd4SBwSv`7k<9CTZ9syFf9z?3<*rK`VS8$PRj9z&q0%U+J3va%bW)AmKk*_Tq?LvqqI7d z73P#dVHbS@cXd@tqaC<{f2KI_tXK}p$$?UBezW88zoEkAuJB!;{pr0%m_Vzj-Lfpz zs#oo0$MBXwATp{~@i^$HWGRWBYoJK)q5u7A1m|B_NkA=(xXhzY++c;#a$6fdaqeKi z1Jkm;PxOURx895M-c5l}9LAq&Ksu{9loRQ%=R34wWBHl|vDJ$&Btb;a6uFh4#Q>Ho zi}(F#Vn;xcF|mZBY<-0Z4pKFpuU0g9>!YdnbeY)86SW5U6|_8JUW{F%qC^BgIyuSv zm@8HlY6$BB8+FlW92eSuM(Kf8Pu-BrLfD|MM_Pn2*)xLa8B;=2vOw^es>N7qc#2kk z(n*m_JWV_-2k~|>=N2Yd-*^h=n*|(m{4Ltwx`W?k)g#DF7BT6`d5i25{I||TN%{Dx zObk#pxZZe*aA6T{NHkA8Y>{g7_fBtQKj;XYT6qce72(*zd>K~V6QWFnfn-Iou$ugm za8#6S3G=OMxS9Tzm{k&%HlFp^=e{hC76!9axsNzahqXd`de(3jwE-9QXEHG8D20og zEd&6)V^;qUSmVC~7`x1#`k8NM(44Ps$!VraJCEw4%}_QaAdR!%VgwUQCl ziLy!+$ZkzM&W3TCNvz|F<&IQ~%`%g(kSlVhgAwO0u*w^OiS}u;?g7Li^);Phd8Qr{ z2wx-M!k@| z(;DACo$e*ieQ;)o;9DA1V>HUUA~-7_nQhG^Ak`Yk};wp_~YD$#4!`?SkKw)6EfRLSm{R*q0|=a3FtX=(Rj*heERL7Lahg)aQm%1{m*Va0xn=h$C9U)igO#w+)kl|&tMCCA;;1HclY{GM zhZ6YHHZAGC0OIHyEs4)ly!rC}D`8`1kQI_RNrsL^K~m8zJh*&q6#=9W{$K52cM{hlQ#=$VWI>cTdTO ze8vdWM6r%Pf`6%mU-v~qqsw&HTzga-_Ni|)90=Eg_Kxa;vuDDG*ufCPmd@Y_4B=F{s0;0!oJUC1l zOnArPG;y&M&(h@MTB)z}HhN~meRZ?^I%xD!#f-B!>+e|5yffnG!luod=W9c8Oe+LZHHHJK>-?-v$oD30faN_^>MX`Wo+TO+(-^^m4c}kXiIC&7rOi>7g z+k0e<;!t22QjZv0W7gKaB2xA0_IA%(J>y%u)VJ47;hwk}hOe>RLr>eg z|IW4^jM@06t2bU2zKvm$ zCV$lKdM3tWInoLjV3=Rcb@2B2Q(Y82a+E3U6kkA{Ay9#F zKVZ_M7G!ru^aSrNFy+w;66!DMQGxyW0L7Qy4~G^8@_n>5bXamy<@`qI6O)lYSe5p| zwa8aPm5x6l#T0j2Ke=F2CGYx$$e9{fOOW_1IVSDIk=lDWj_G2??nv29M`dP{3C0!u zCvR7fCF76;$L&d57MAmdI!S?x?1($(e)QW4)Bxpm(*8jiaxQ!=xs2lZu;~ihqH9KM(m@gEzs9s()cmM zLa8YPWMn@PsHv~z>~6}XrVv-q3OKn==US&P3$K-v0?ChPG5?M6VqQG8(gnJKEyqQD zN`9(^p-9jfM(R%cHUXIRLh(mPQ}cjN`L zjdk4ELj?`)>NGdwJHfD^&_bFr3BAx5-+nMSQs8J&aHFuI9d!b)(jkD&9b!b++S>w{ z;3UImdF_(VtpS2Xgd7NR@H^|IEeUW!#e~f#*(*-gl5n}Y+k2LElEx|uKkVFEP1y0u z@^p_Qabs|k0x8aGii7vG({FSyE6*;;v&hoK%jmEo!@z3T>_F!P*R$JlHV9V02v4K- ztrj=7%~HrZZVrJa zZ8_MBblOXj@GVng#Ml|(nCi;G>w8#HDp~V>)PsVu4bA}#2if^ih~#MSdR%_F*SDE&07DmsEj%P8*V;W^7Ir9|L!Y83*z}IHo)&I0xhCZqm)U3vW>2)mb z(G}a+>Cb($1-P2MHT7lW(bB&~ipHKZwLdyd#kW*cJY$RGl;YSp!=Z^B3M;P=w z3MyjDAid{f`Lf`-{9$1SEAa4BZ-TwJ+*cj5bV>W+toyKsAN_|aLMlESfomha#uT0y zMC-*wC8=+!`vl6!w7OH$UV{~4cyoJeoU=l`eXf@^?7}|oesQb3q}uvuS{FEkU$cRh z|Bem3Mr59=_wcS_i-gfx0VY1&0cCsi-hoOeN7+u3VtDICs_XoAyt}50wSJpwBIC`>VxM4?c5u`^Btf z2OqDs@~^b+FUso>k8Y8=$RBD$@s8PCp*a-53B`BxGs7K8+A|)-gU@+}>^+7?4`Qpb zfyCJ@?p|!PYswWtV;K4opIui$L;b)h9JXSN1!X%WJFS|)fknAUZyryK##J}lAqws8 zm{?iU%ToIMZNcoaZM11F*kZ>bPu-p6FhDo9fUh?l_w zaYT;-LQd50H}Bq9`YwJ#oJ6&%9Q1Dh-9Ib5A5^;P8juikkUWTdYPa31-Q+5=Wh=7( zWA%A%Y9E-3Auy82S{vVnrxTuvU%?kk=)Q2t@nx9%yc@5y^?@Q$5FD39hw%KXB=%=^ zaBf$v9;<%g<~Hq?&F5tK zfuv4-QF;M4bu~dG7i1T4H4KG5#cN4h-prUlg8ycrxLqjfxTi50%E&?nt?X`0i_r;i z=s0Vq-S0@Sd?#W0dNrXF4;*CqGcUH}&5*)Ec2o%nZtV-i@)ze&mRva3Q?*SO5v6U} z;ASvVIeW>-4HbxITgac%i!W>ESk90y;Q}q=?wd2>3xBq}qFD7Aa3?;;FndtPg%jQr z#5E0FO<(GC19S78U}6J4D{m2AG?y|W|)Fy zxOX5JNuKW&3~*9<;z@UWJyXdzQIRKh65{flwOmHG$wM-jb z70~S5ZuK(So&2}^5sO3I{E3<9hjD506p+o! ze`2OBOnq`h-&-0fmUgcMJjh5@TY>rd-u&rj-F-ZySpT!dB7gqOvA21PKjD@m_toE` zea*}pLkFA^1M)Z%xP4JtIS)R_9eZ!t@2vuu%N`|nqfR!bOSBW}S8-e?z%Lczeye`K z6n+UX$^fE5cbt+Qm;V)K1+@q%oRULBYc{N5h<4DFY{U;nwTU|u-FsH z;hiqKIwc1{q!+%;PXVK{%Vz%f|8>f;%cw2Z_Oh_ghCj&{QC`hBD`AksJ2943u8+(Ms0OVYubZX zNm(&7+84LS+Sl7Xo$mg2wD~d?e_ixioX?q0f^9bZTY!G=>ze7ZGP?Kg{dik}2065U zDh3-EK7;EG$M!BF2IBv!lNqwqFB+upOwQ35TkX&t$Aa8A)P>!kJskVV=9u`+&*fm? z#NBjtX^+d9_of;#(~r+Q!9jBFGMLnWRUG=jj=+7WWHc%S$+S`;w)-}LlNzEEx4S{2~ydG|8sE zy(rfj7RvwN_($^g%09a=^MP>U^<&)1!cTGh!op8voO$v?V*EmmjmUhS;JB}!;YbT( zGk%8BFDdCS-NJWez$oJhAK{Mj?~{UKKjle>_uLE`Fd(9!fyS9WAmgBaLayPg;5#srzr%AZ+<#NHZ_K#g zn9M;h@R7yo7ZtY@&Ve2vv-2YzOzFr+^R2@ocjA^;Rv1DW%!1VXh%61$QI|@9gC^RX zR7Nyiq6v(-vAmZALk58RXRlcqlZQsqMQwP_+ELa8nU&0AfZ8J7ML~xWji<$+ z*KW=^JUUL_R;R1rMTb@wHNLY$-t?9&>2n>W3*p4JpJ%;xQ>@Dtb;w>J$(g;JEW0S5 zP1Yt!?!zE4QbL%R-O7YV?-qxDrG%In8%HxX-1*Zq7&0*dn7FzBiWh_VADwf zB6vAAEOnD{&b(&kN4B=FaywMAd)6BK;K!JY86~TNgsFdy_JFzX24ud`#a;RE=wvL8 za4;83z;-o12jOeliz=sor+#`=lK>2~Q6!==s!C@J0t17?N3Se=Cor4Sq5I|3Fs9^) zo_2Sitj!lnXP8J??W5?lg0rsF1B_9!p^#w{@G?R>Ej&aC z*SfPP_dMGThH^G?B~K0U8c^@P=j@pCCTDx6xFoJi7OeS_Q^0nvqjYd z<4Q5TP~84c^V|7ZgE^m~30)g2za)w|Jqf;_IBvO}{9c*A&3SimWXdD$vN;6ypc%ESB;@@r$fCRAaX zyl|vSDoE3pw_w?!*i4LBdtQWrO6Tryf56+=w{21pJ99ZYYLAHjx8vg5+s1!%lzysdyj&tKz4VuAh3& zkLXMdThm5ylX=jOs{UQJi;ddmxass`nCIUeH?N%M%8Tx+%;6@!68sv7e4k1o=kLJU z9^uWh#is`v_H?5joqHvUh0r)SHeJGdd3jo>m{XC=(kx_H1+}T4t9d6hQUaf+Oie}n zE1&ikv6rZaiml1V>4|9@NQy`bMhGKGa2H zC`)u@omO|+)(P!&H9c;k2w_^_rtXhLulWoQ6o2T(F?g#m^y+d06JlsO3Z$kdq1oxa zU=6igh?vxmm`#xe<}yZgs(JADmB)BZ>*?mp9KX@Ja4y4@B4|_H3ZlpkNY&SUiz?Sb zjhM0HszFP<`*=x8mwdYU2yPTC!W4Z$w_3Fo(E)r@JsW{uRXG#@n%ntm1S-W3k$v3+ zk1_J5Rg@lb_3RYj$Vg5dUTn;$UAkm(H=Stk@a^zW`^~K)-b|bJj{`-bcmQGKbCWU& zfs8UGniVM{9)f5@Izs8O*r2jRT_$zZuWD@)EZJi)%=kzNu5MOAjTTQ2@L`IJg>=HE z)ONuc{wD2N37iy-X--%J>M`}B%E}b+KDzYCvSjV@Xm|-=2nC%+Q*J0D6BZLcK}EUYv(>@KLvI9Z67t zU%5h}gaHhQ-?de}Iob_m)dB4uqlCFYlF*{Jk?3s+w`UlG6TCoJ8IUQK9a}n9ofbz` zB;Lo3r(;6TkTY$MMjyq5X&d1zM$B941~5qUSgHrY)Wvv7jX$dsw`DSXGYc(%jrvu=R+zkaj>%@*=vk(t&hU;XkzX_ z;z|RrjsXG^uQmn>KGozzit$WnS{c!HlGr0QWyiW2`qcFm@3_gGBADFKITS7}bdIPU zs#B?Efa*>K292?vQBIhXW^#`w>(t%QB8CU72a!tS6;?5Gk|J~^GoQ>}Ii5l<&oWO4 z-JU6TG@qWP!@grrwpGw}%NnEprl|KQei&dKpPox*1x#@?-kOaB%wPTS=4wiXB{Z>h zo_7`w`|H{tJc{gq{v${oXa}26Z36VMywQix+Q)+hC|=BpQvj!&01SHsrhX!@GD zO9q|L^c04A=(I`+# zqgK+D@7=Z54X`f}71};BJ6tB0Jf!=3u2f;Utpwo?rq8#wL2 z?QP9~{Z1NtUZv%Ng$ifCU?%aC;3}WEsi{ z?cJmM7K&VL$}KgRFmkh6*0?7)I!8_M)JP{ZMQRfAfgy@}BFS+^zD`cm)R}97+ET`$ zv>>xwaBhCXAfPv9!$Wu!eDwLz*2LKK(Vj_IN#MQgbmUbHP!}j4eh7kV+5(c#jL;5o z88N)%=O?%pk~T7;#X;$!^Ocnb!Jt3!l*Iu+nN-KDM$OFs%6H--K})YpEN>g8>`De# z>-49t2+$E@d8F_qH8`%xYrW|_L3A~nnL2i#0(>bniI<9>JdZs{kRfnah%|07-z$%0 zur`Ej4~a)HpLo-&Iw_>*?19b272?@ICJNpc3Dtf!6|Xe9w-F;$ee8w))LO+?Rbs|l zbS1YHrN4GEWFoU<6&BSt%i2>26gR8_yQw;1_p?JhSs87; z(mwv8tirX@eB0I88H;BQ$KW-Yq2As@*bodErlUxOzsxZz_kF^mDyj$HTvcC^xqtil zW9hM^g0gK$`*iU35ODdqx5vCW$^!!}WMsgPC|=iccUE<7*yDvYf#1GV=|gc>z}Rj% zMdm~kX!<>TvZbAKd0u3&w+hb)5PA)j2Tv5emg;i4pMg*PtHhPh+K0jnGXDr~^p5xv>MWzs^m8CTE0C&Zvpc^+A=bI4IPPhZ z_ojvUQ6{6O+veqE8v0(av4SMn>;o*mx98=vZ?ZQ@xE{Sc$m=hJ(#>_TDp654Nw3+e zub+Qb^iKY+mJX?9YfkB>*1 z*onW4dta&YFn|ydgLEyZIVAi8@+NZmZjo(U4>$nU10oB$=~7sRmz?I_qRkTqX~aMY z89Dw83|C=t3~umV<5S&ydJZ+g+vU;4C9h+gO_v5{$~$JLa5Qtvq^BqJk}L#%2md$a z>Rcr{VC|y4dBBNIvnQ^B)Yz462^S~QV?@LX%={yv5s;!YC8@@PJXS6D6$K5^WIY;# zvJE4J`Yf|yYo_s1r6%%X^aZ8@*@O@GLOaQ8**?Dz^V{hqF(oFsq#(NmsOL3X`DmA} z%iQ+nQh+XaLqRfc-UtHCrnh>Y8+ZB`AW zVQ^Q25+O8$-UqK|Hxpa;_f9rgl8zqnIk!F2s3NM!O0^Rc7t;~kfrak>}hjqBo|ZF5ZheR*3($scV0oI(J8 za@-b3MsCXvpe)QRv*2Z?2yW+x(nhtUfm#s~ z$ir133n4a-cwcZJ`Yc&aBUcV hm3N8nmNKEV6nKgc02|0q53wE@fXSzpC{e1d<2 zzJvXv4IdaZvY|sx=m<|UW{wncCKYg;{e}O>ZDsPn=1uspVExvmwJ#>$wXwMxd-vuY zDf2foU?e+duM=AUocb?6_$yapB@nxi9DpJTxuTp3Wka1R2;1DigD5Ku;Qow$5Ban| zBW>|Y-P0TH`@`a6b{0V6P_Hg8E@U2A_V3sF&GG;V>Ql$PI28=@ZK&&rDZ`phq3hJH8iR0TU`#9=0tr9l#ltJ1m* zHto;j@S5O;B@fF_K$yb912)X!HcaA9lp9+xL+Aj~NV%(IH73RUTq}yYtFBSF7NY|) z6(H6>=A}on1mcMLc~?u1YB_S}eDv<_L)`Qi)jd!QFAf$)b`2gwsyT9Zpf5;6qrW7u z_}iayh7w-H&|ZWwlK(u5bdEAt6nRqD9-RerA)mv-VE&Fl4&E@b2ga(uk9@^((ZO5$ z8a6F@f%ZY-mPk-Z{x*4P35eQQ)nNVlew7YXGP!5etPBzJs;Ege^duWBvVeipAC!pL zc#C*G@j?^3q>(eeh0{^X60HM6*`hca7G*s!va;i`cy1W(i4+WMf0twIdofZbLHEP? zU@>9)UOSEvm61bufMBnB45i#Hum*G5d4IE zi{@%sH6Uq`{)@Nai8~KMFz_|nKuzbCWKetOXPdMXrO}Bs?^@S+2i(|-HJ$u)5!9Dg zht7Fp(x>KAmeXe&j;9F=oO($mQ#OuVmV!y=^~89qCmK^AkjpmK%xuMT0tHNnz>X}i zE&Xmdifj?tE=u7h8#n2vd2g)Jq*-NM&vZu-GFLZaT7~`61MBRQY3QDF$j=ak;M4=Q zD9?Zv`xGz){9(#IXB%Suam72=(266tLP_w;usQ!lI&0g^x>jTwi)U99$IU2WP@YN`5+HT^pHil}AH$swSmz7Atl4WGxAw zQ)44*H5qr>I|cG!xdPurE(}A-aIEa7%Ou+rcMj;>Hf z8LmV>1@y2=afvQ_ru9iK9-`9>bx`=znAg6wq;HYMct&=c`fWIN&dp8;>s|eah@A8& zA}L8fFWk;v%zr9q8VAK`gkl6?0+)A62YeGqcf`RNvZBTKhMbkB{3e2MetM#-NHngA zTW?EEv+B0Tv`F~Xzi+9qVbI3t`EdjIxT{;aFPRo4qp2Cd=-$gZ!|aGSwX;&H69C zLWjf>B{B=p4S6h}Op6YsiH;t6FsV)(lQa|Ud$b2ZQ~H59LRoesXai_4;>9}Ef#@Qj z2Qo}@t6tZ-R^CMHM1eoR%hcZV^DjG7Tk%7mWA&WVS;*=J*LqRHH_$C5`8gJ7HtMA6fHFcd8vjOu+4QidPiFljLuJp z-<5x8o_Lt>2*ehxHnM;&$4hd?&OKU9K;8NlE z=AJiB1lTkM9>ABGsPg>)>n7CutbnQF0fBGxYyds0>UstKfiz>*Me zFqV=+sN5(w1}T4Ho62E}{Yf3yhVPon5lhz!(LvT4%GT_a4(m5iHXVuBV_vd2iAIwH zaW4L0`d58sx`mm{2F-%z^Qb?r|M&aI1fIdm9(=GRU)s+$L|miaKPK5NuxZlzp;sDx z`|N^#4U@i}><%#_&oR=`XMeFM1NjHAg__XK@BKS3F8gHim?H@f4 z>WJ9>@iWLfdaNYWQN&C%3-DvFmaq^Bgnuot(rFcv36UJ>+ddr>;&95d0*OGgY&Y5@ z%#cGaSa3tC&@YxJy#f7Y=+KdU1WQCXU5WyZ3BvOy>PhI71*oML6)p{R7X@uUzhL#o z)~x*BBX;{5t*}3~z`v;_BsywTQBOWe!~Dy$ zS8Nxe0hq;)Whm@xBG=M^5dOS~RTqH9QN*c7%ZV4aekKBYuI&?e&=98V1HN6uzTr zWioF-*O8Z8I4CdR7c!`Fs4{==fVI~V*j%6ejl}(%`U+gX$^v*go3@W(<^)3r34S%# z$r_nBCR+62oKk$%?E2Lq_uqrT(HvZYGSenMxiyR&bxvgT!z!pE^~W^LyYkFJWaTr( zBrzuu+;Jp)JjWC!0Y3yl8qkK-7<@M&&FK9PUj6A258nE2elnKW9ve_>oJ*{hVMgQK5ijJ>ND1;&uP|RCF4otqU zj2lyuuc&(r0$)hf6NCQD`U$S#)&L#vxE}+j;6Jcdv+;R3WXHp2vtH##kX8KG;0HFP zpdNMczSYBy6yGwv6IkV)U& z81-N5{{hRIz9*;Ic{gN^d^^61qk(|1fTT#6;D0;9BBk7(!2@r6cQkSTiwwcNsjWuoVjSm3T_9uT)P1d2Rbah^oN0gW%tp6w|l@Yl-!g%JkfWsP%}>` z>|a9w1cj`Hn&w<)zHK(wX?MNp>7$e8W-G_Z#aP~7)d~CZjql*1oS zbZUcdnX5Bsu*}WZn)5u1f9ANr58lr=y;av{bfzqi@Q>Cvj;rsurs->KEfV14%CS@v zygWS}0-ipC1gW`*8 zD3G04eik<~K9fQqkv0luV=P)^gO;nC+y-}T7ipnU=hSWVIF`d_R)06}kgb^9WQ#ss zKQT~g;QJrLyo5VGZvHY{jKPuD3P?oW0%iZL(R}sC(RyHoext$MI6m>8z(~SX}_o3l`zTZ!`5ZKB1 za1JuBDUk+;IT&t?5$fo-2mI)1cfG;8<*)PthHF4hr_j-%3C+v_iW5hYt%D5B*sj{# zWBaLkV}c0TO%CQHMPr3+KmCC)8vn3e&ZeN*Nbj?<>b?g_soi)_dZtg|VKZMcBmH4Q zC-H$iRkQ}7{!5?In!Y~97KH&d^i@Z_fx<|^Lq>RhTJ$~F{^u**@g9#FGTCZRl31t@ z;$fhHns({PtX8go2KvI~MN_hoLsf=yiMdx5&I(uLLMa@menflw8Mm{*nb45h<#r_T zP9@zj-STq*kyS*BryQqbLalqG-h_3Z(azD;+LBi8uL(IDs|J~s@l}qF&@Z}jSz*p? z)s;qkf&8waflvt=c@)N6J$G#l--?+d7FuA$JV#&_3DaWR8hzS}NI$Er-BM{cYwl47 zjKJw{+|(H;5~M&0?}FoBzp+~fI}w4E5V#lKE;bx_Xz{Cg^EJ`q-+lBynO4U;7zSgH zgZe3BW4TQ=JY3xUAV*_AY<>e2^c zMl8hPG`(%M)-flsCfR@bN@Wge0fRoiAR*C$SAK{I|h(*O|a+UYAG$`=4rn<=4 zLMNq7^*#$+9*kX}_F}{-cIhPC?gkitfk0jgpH)eVu2PtC*6Es-_`NyB~1WWb9rd(I@=_u4C21kJAz z(Z=5cXGr)Pm^je&Ng|nq z#~=((iP6Y}2vv*T{EWs}?!5O$OB(9Fcr{~HgcxYTn4N1^#Zub!8*K(CyfO6UnNDKw z3$ZJhQ!qIn(Z0}mP(1t`V4xp2xYC_LH{**|a3BahI_zvG?DN~9AdC?&zXh(z)*Q*m z*a%I&-Lep84Ln;&7>y8=v=DH!vcI0E*e!`&F>XZ^-*P#p4T$3*@we^Xh|Vvu!TDAsIQ07tu~Cv%`J0>VIe%p3SCoMQ2-_(4CoyAj+rG%z zzX-f2(#f7{8E4V%pZHxTPN#gmNbBg=bR@muH{+IoW)~2Cm}eUAq6>5OEB%miXKd)7 za&V44ioV|lQ6%i&DqZn099!o`^Kg5GZ8Bln)Zm)_<{N-A-zlPl;d^2gfq-QpKb-5c z#_=a~k!+}K=?(2{unB^H{67GYf7~9+_hSiRsBhnZ$p6qu(WhY+gCPJ*G$Mew0QAq1 zRJO}!3Nq{LLghfwMUvm)2a1w+2?rbUl@jhKlX3^mhASH_Jr&(mH?`S8MSu-Z`j>6x ziEWI9z)dvn+I$!QSTgQs) zJ^+T-8eJm^=T(Nz;9RJQWFy~lz%~<3KNC4Ez;KBAS{$vgFB}_YYCAfJLV*0tt;9ER zpB_DWZxuW1=&LRPZv~?e{w4*Jhx&Xfeh-1IWXj!3RRpknO$3(D!kCr~F&JQM*M%Qc zq4ZMhU$XQDI7DVRIPneNvx!ofOwU|!49blsT?FFHc1Tb#jKI5awyDnZvW&bIWhdpD2tjVvBNazZz|7GqGu_tEMYSDNVFU85mqqi5iYA zxQ5=?D3YbN%m6QL>Mtr;u`kgERb6Wyo}-5@94gIYUMC<;??aQTN^c3(nouuXLqYd9 z(cs`8#?G5_-4G^SxpIvZCltBivx*v6Fsz*N0FNGAxn`D9*iEGuC$^0OTJ&oMV1M57 zZ%FHL%UmQRHWju>xwi!d>;HECz7Lh%j@f0+MPu{K3A+wDPbvYQySK>3_NNgAha#hed_= zxd5H5Y%SWn583YG`)GDzpfB93=VWN!p1c=@5FCh$NL((L#EGrie&cZZK`**I?E2}3sO2mB}wrxSN+;4;c;JHUi};8G}) z>_=gsX@@#WHtQZyQoNJ-h&*(INOLSe7Ttk71a=;J2e_9(cac1&VRPV9aw@inq<;*IFf?^4tRy;R)v|zLD_l4<&Vx$CpqPz z0U^Fxem*fj)cSY9iQCwO4tzX?h#K5RC)Ta}ejMJyeg*((+QA6zk4ObC%Uoh@rbol* z(^%>^&kWTVkanJ<*VvC@RGb+E*JCWp9~3hH9I9kip?B7T!V*=r;xpV2!0m_@hjDct zd=)4FMI1g3VX56JtWu>UqI`5Q#TPjjFuDvSYy`_VW^fno&waL4~qTPakrl@ z2gP+PYU$b7Mza&;Cs_`o-Bq!cL#^xG64b8%9HCkVVaPJqt zBjeY!YoZq0sIXfNh3-dBS!}Z&9IH|@ydG6bSS{q3VAT$L`te$u`v{l4>}Z0?Z@u}{ zadTglt^OdNQP@kSS03Cx#*$Hv0UE9>((P5jyA8FIh zKu284nQmdkc}!foe&=hiebKK8TW0sF-VrAo7;)LSpkm%xUweF_%3wBkaXpIU&IVPX zQ+Olf;nc{Uu2jhR>HfyG0mzGR^$UlK(ne`H9|jyFJ+~75FlXMFAMZ^43Dk$=I~Rse zBg>puO@`*AFYppK27kBGmCPo_M_GPxb9L{I{PrivE7%(h;%=N=GT~cScc4t)YNZ_2Go(j=*FGbiBH7-WC^4nbzkd3^KnTS|@L z-+r!9Jv^8#IWUk+F3G=S5PL+h`&}}Ki(r-U_{P>FW1Ts}YbgT|Wm~lKQ zMIDGxG$n%fsjrZ0veKbg&-%%5ebd1;n>jtA9`q9CSnTab8cuipi@Gqb>@59peUOi^ zXpK*~hMcfG;lLacrYgw+<;%fN7xOY(W$g&U7hv@GIeOdEUfn+PkHCS8!XKW1w}I1g z%tG(XtDV$QpW6JgN7zo@M@t}18+yIpLZ0S;&tTh8Ly)=qk<(?N}{@h3eYAoJ(_|1+27ACKFo(Mq}v z{_Pt!d>ZpL2w|FIDHs+oN8L_kQv%69c1@Cs1cH)HNLf0Of*A{Gu35@U3YV$4bnct{ zf{;Oo8&Uv0b>fuF?gHDn4^a4>a=~iUbVBx=Qs9Zvt#pxp9Sh3#Vu`hvx8|37-nO5; z0`Sk{JK;BmeE@b4Y#~B|i*v_yo2Ll7~oF0Fl znoc>)L>}6PUfy0{h{MWaZboLdmFy@Z+{EOrGi7>(zoo~je=GAUG!n)l zpzJ7tHQzwQri=m)lU=}J$4Kv#R^aBWWw6{*?NG{2%vwWk$KuH;sV!P+_NIZ|S(H>- zM}MX+%_(c3kktt^_sKoM&Tyko;pjNFS*-1`#%ZoO6xa64B0kdS04HzS&yBT*zLa zHHs(>=<{UJcl7uJ?939}VjI-7cgLO?qcl1a{f;kav9`yCOipynGo8$nMZ#*!oVTPtmCQ+>T~AA3;j zmVXl74_&l4hQOm``Lma3=u;p;KgkCk0Jx4WD)Zgf9PmRo*b4||RO3V2BiN@!H#o#a z-;FeFyBQYDYVlq=xSBV2fwXrYW!`=`i~J<}HPm;?f>RLGELoTfnZitbMjMCT|2KYVo{+ zUATOqe4f@WsBZXORP?E0Fq=pxX1 z-W*Kk>~I2AvY1k5=yD!}_Yzg6MchfQPl>tsQ|uWHH$XhKF<^@o1u|homkq+myD*GQ z{z`tN>}Kjg{KlDf7{=VK!u~OKP?Dp(?SzeYu{A+xmZSH*AJMA5(@U}ea$qb4KoIgq3 zNPBcH1jltz1y!UO^n%9(d4xmh5pJk1?2}k|$?{6vK-eoJcYsa7^)r-|JJ{XP9c~}k zF|bHsO{$FOjOZ2zB|=|7$<^5d;bsr_?2^TW;l&UZ8fc9e!!5?)wej8f0U(m}n9BQ4Vbvm>=VDZCFhEgR?#4gx`}sVFgb<;eC<2 zTZl*s@QFITO)z$u}UsIcJzU^ z_}j$&R{Yod>{fZZVq;MxBFqiDnzegutbZJ$BM44vx+_z)nU zd+W^B?sXz<#;>1F?B7S*VH~@YSX8Z2-=Cq130jY3zP%$V4%a@|P>!CUx6HGh;{9 zP}`|Ek+t%8zFkzdc=uEuj`7G}12VkHwE}+m(^PV&|dY(6z}rx zOtnsfZ0c*wB1v6O48L0iyAdkI>`W`Q600PrfU&D&NyfCwftLaDCU`ir zZbb*#bHUVdf@TC6AikK;ks@tZXw?{XTNGhP*@*;!EELN4{8fl#I&1H?O>-QHKZZ3S zrL9?Jt~2o+cN`MYZzSf!LU)?euzPR}(i?+R0@eJ&5v=E^IIX=$Y4C~TZt%U~RpjaCzunA(*)4@8BH3z+#*eu!=Lvy#s>$7vz8Ew5_dQ zvp>JO-#fwn9e?)U1NI360uPjNSQJ9~q>wx0aPn%lDoEDwq>!701uqjzP@EuE-jHxR z3)mdd3Zak1_u^D~#nk-`p}RkD`Gf0G;S~-V2 zXYlp}2`-)U&pv?rM5ASqp4snNt=UfnL0h z3n8>b*Pf3oO1P@*u}8w56f(dTwfqQhB{C^8X6|%T zv6ZCN!Mmt$E1F`ePf>PJh%Ls_#t$#$Xcb9+tbQW2n-JD<2R+^+F0 zP*K@;ngB+xt@KqA-vD;j@uAz8Rqn!oe&w?z*p56>a2PS0#(1dO+k+={Yoln}FAi{O zQHKml9Ti=b255|~%PGDHu!?#uJ+Hg$24af#=mMX)Y86BVCXRGO%!dEuguZY!JNwQV z4SW=+B2*b$6{S0#=DAW%oq z7Q{{%7LD~r1Mkk5BF|%~rZOscy;MzcSNbv7C*@osBsIBq%9Ux6XPl=+-v`>0PNdtr z7@cY213wBRvguATH=ybhvv#>gD1}x?I1OXl=PzwrF(7@sx*UCQfkc+CpC*3BUPP4l zA7HVNc4qvx`wi=V-zTo#5=TG2?vowRBw?d}rrjZ?<&=TJ0As$UA%Zfa@k5v*jba|W zU&AWe%5KFt1#~hIOOR)t)v_!vMdP!mprw8$*b~hUeZMP;rbh}osFJ!J=jZR~;BTvQ zP+3Vu&d9I`<%W)Uee4@WUMg&ye@s3Zt) zb+)r)xsIw!1N6pvZ5ucaNa80CzkX$)l)PD<=q?Oq6oqR77sXWD@92_kD5Cj(0shjr zWQHyr^R)1In|;9EWwvDU5SgkaI!0=Dr0Z`8%1x*FKNw4N6?LxU>BdiD< zS1|REuyrwUrt3zG)tt{sy~6Rl^v$Z6^&K%HDN=wGZaIBt(%xy!`xgtcjTqX*3|KV!e9VeDm zPav?2g$uFse;#Pe6cX@}Z{NNVg8aL8`1eY^mwh?Rm^fw|P+_Ey-7~MUGLF`YE0kf| zB>4sG2m8# z6vPBt7GAPgd<=9|E$$r*beA#96Jhxx4fJZg4I>TOHy`~N=A6FXlwzm`SRy>ME|23Y zUGez_%Ob%z1;9&{-tSj!7j7IGD7m-AWx1>?vYxMVP&L^`&#jpj2C;6x^FZ}fi+9~5 z)epkshTX(y3!Uozg1vo`qI5`>^Emz=YbTzfs;9rKB?tMpIqhF-;gLX)feH=spu%X` zVW;@HYir8$FcO>;?l`#Zfx+O;WzFV2o5l!ND8Hm)XA4;x_P{=<4w3>fb|xoH6TOl$ zcDH9Sev;NIXYZ2;XYM5;3F=t<4srBgZLAh(rgbyZnypqB07tL%s+q`Ok6kuB*Jx## zEW1fYdiFDewo*?s@BcE_GXKk5mw`d%vIpAwyeg*^!tPV8`%Kgug%4~`22Iw2KNT9< z+=CbNgcvrXodTx9PzYAP1<7a&f=35xA#ekoZhzr6uhV|ntSYznfAX;=^>nD3U-{Ua zuQDWmQiCaJlF$=W+7Dz9OrVC159%no|7d4*w?0a>u`)Ybij1V`cx$~3sHTuKeC#qT zl&whp;*y?>iO;yV##Jp|zQzK@Ie!|5T|q}%g%4x1@Q72^9IjvPXK-s@@OP&#TN}wH zWB07=tlZ7rPqJUO;y!DEEf)xp{D5J|@Un@lm-%u~{HrpF*3lN}`n){$n$!w2B^9}mVb$$XVY5PhZSzIxJVLASiH751wFFIK_(%FOtJEQasg zV0PmZhD@P%(PkYYfcu-ozLdeYk>@TbxoLNxqE(sG58bTUO;`gNDi__EOKK(*+$Wlu z%t^-3@>wg{7jve0=9V)cp(YK{CuC)+q*W(ufMs@es}1*snduxUbGH~=`G<0|85?f< zk`-m$u0^-NenHC|p90$~b4~G*+cbeYkgN?p814-3q$gw9Pn6>k^2_f;vR1 z5z9(+HA1mNBIzJT+%6LRxihg&qO~)a3pA`rSZp@l@#5BjL~0pD=AOpj53I28hWfZa zz$9hGRrXC{pm`!C`Cy-bP<^Dey?UVzs!?J83Z(I|+T@A4b8p|QxMOmvt6B0U#I}@@ zzhlq`6nvW;IvYP_EFP`nCEeif(&10S$o(7aEhzz(OeyNMFhZKOD3HjqYVI_RrkNw( zzQE+Qd;BR=v=3-ZtT#c;w;c3tz&5?`dtopk?N`MU82?mtpHBQv>xo{cv{iS5SoMoe zyfSe09ulHGkn`am*v{_QARz!C@1tVvqJ z=!{QbvZyR1rx1hEfW?!+J66Y>O+#K=q}L$P2>k=LFZB)=qHj1ba5rKfg@N_TUflv6 zNKbnMe0c>Ey`BEeGuUqqA&>j`Bmmf2;=XaLlD_(t5LgRvac8K+ej3Lt$GZ{`s9IOz z;kG#`)LIVD4E5*W8MdmuEXG(2kDNl~pWod~3qR=zG<>1q3IJf=*ibk^%Jgc)<|V## z*X+SY$|-B2dc$HksSP9sdem3%#SLVAlHnZz^&oEdGXwuARC+9pjs=lOaxafv=VtOT zj-|DjeOL80>%59sbT8X@^lwx66pJHFhjF?RYljMrV73pie%HVLO^FgW?Im zssNtmcl9NZdU8%`OkgHoV3qM`tH4ye*3~YO#a*P6*%>s=s2tN}UAm3VxuD_)ok0Sn zxs|vY(@?|gJFb?%RE2t5K*Ra@+MTTP*u zJq>-zUE8R#@xWQQwKOCuIG_G-6Uhl{WVALE$=5shL4OJAh4|n634F8a@iSwQuz_AX!2fdedH=|#r4~$ zHj+;|qdb9NwRy6@`Gg#TlQ0;*!F)FLZEsLtpEPRJnk@~ZwsJk}^Z`+;C?^((s6;Py z8XnA1bC2L6t484AVvtu~L9sEn*@U5iufNQ$7rX4-!(PR?%CN2K)0K-XAit+4llC)ZC+ z@8I4f z0VD$nKT!mZ28-Zm|DJa=N7Enf$BNtf&6@egk96(n2n&Lu5F|5E?Z*cL2T?+Q;I^Ma z=6H>zBpP8^X*?**e=Ls8$^P)q+zC0W7(w0U5BB`10X}^Bz2sZVB3uFz+L5tgyqNd*YNZ18rU+?aPD_W4 zDf+MsjXri=9tdh>f4D-GZl83D88UKTMp5~Zfn;;Sf$qVP?LPT#*t{cMsQCR+@gHz^ z?-))B#q0z?Tzc`XOXFz0%5UCy^t5NeSDALQ15Pk;$pY0+_`!m~KqkK}4-;C@eaJAd zKQJ@KKsB7^eQcbf2zkKH>g%VEh5g0rFp9{Owzk zs1g1@AqY@SO65Q9u&?k~8tf}Pwz4T(xmUX^>UCQV!vXgoW$>j7W>^vy_GmyQXPHjU zP~9v67UROf`u`v#r_e6eCPX+QxEUWmKH2K-77zei`{|7HXG{}IhBUMq=8#$zE1Qi{ z1;ZJm6eclC1hz%IK9dnnd^V$+NrCDFP9g|MRhXb*Hy6p+uKGj-UmG$iTIMJczXro6 zAHQRx>M0i?B!OWL9XfM4@Zz3f9Og#A0b~ESe9}4)=RAaPi|d%yeY$-1h}=z$>c~uC zYW=(Fe$ZEZd|1?IVzeTG^A#WOwrrMa5o8{6<34K6-4;&0*wGn}k1$CKc!9~V0#t#vy*g)xFw}nnrXmBd4A?h#CM~0_WHDsuF?*IG**=Di~)5(3# zzsNIOA@kUOZsMG`>_p2TsOOk7yg1)arXRacPhRqF1wo<@y}9LZHsiKWK zV#he!HXK3PNZW%n!JWv8C21tZ<44N3EMaeG#*l)6rE-%;tl;OGGe;XZEw0w-*%-2w z>$zoKBPX$?n6l z00wsEHR`qG5DiYiCgXL8`VEVW7*K7mH6dS?U@eR zCXFhhOHS!#$vPj!&IAgj<+kaY=;*=@SM3GOjvom`lG%Q~(8d-mxWA1DjfVrZsXlHjWAOEbIk&A{b{CF2$vO?%oz=`G$ zpz}|P8NJ_h%N_Kju(n-G#GXnzua#<~3JM|^H&5!$l!f#c-DfOnYMI9x)b zj36YI%TNI**dooRmuq5rqyYnSf>mNNfUcgnB) z;zG2k0>f_0CIx8%LH8BHw!eMFLi3{Wa1o5Af zTy}v$|NWB50!!x_uFwH=%E%^n;h2DtM{GV9ZKNV-)oK^Wp^gfxQ;?2hDew3u!ls5_bg~5 zM%_pwOtE)BXVsA?7JbA5l)7N#;E74eaIpoJFGLu25wYswH<#!TW<>tzL#}>6(AUfY zW;4?uS61wwRlYO##^d#(V~3{DWlY2R*{Mzv`4bDyo!0PH+%mJ7VToN3L;3-cH`P|_ zl~&&?B=jE(?kK@O{J?s8_=7-g-eapMmpyk@V%igc__&MH4W5M8+O?uT%QiQH$rXK` zECZ$$Blwt{b!9fieo?xrwDCd|TQ0``XyeVA2M0|xr-XB6pBLYFsY=41Qcq}HeuCk_ zR|UXJi#J8Df(KIjO{re{#w2x@9 znW)%RK^C4ug(gMI%|MNx*?*5mTicXiTofH6I5uZ}4U(_4_}n1>^ssm=y-sGNMw-a7 zDs{t_km`ixGwQ^e%5_#C=HZUNC>*qwzjyWpBKcOpgs*B3>0s*3NG=>@G1^&L$L=Lb z;xbgDLe&Fa+$65G>B*P$+EcNoAI%y6p9bRBBrT`k`JGzj!5p zb$cfI0!Cq#QMO%;T9NB?$n;B5(rRqmWm&5A0^1}pc?WpJGW{0qM29XA2791TZzX~H zh$Y|OAqvIq^g6P=d92KvD+0RtnL48?(;B=>7dFTa#ric~wZFmk_P4=$uk~ zyuT_oB2;5#URdsNN$IJ?^)YB-dg@ZsbH|k|+e16csade5G&$^cYMj(5`VUcA_6iyX zm0>^hS4KA=fS#oU&Y>zJ_!VSyNvD4UGCtTeJ*=k;vpD}ae)xvH$-bUHdfiG!GAGC z1`}Pu_Lu70b~vHLiP*0W>tNrcr}R*l&zKtrQ+XT;y+$I{-t|0Nl=0e4*1KSEUm!Vn%ygWI#UyvjdscWc>Nt?LPU|3~~oA#=_VS+li;#OuB+GjhI zdzm(k2SBW_Ba#--HJESH5p)CqfFp09X`?lZkDlWdgwv33;(k+v{})x+wyp@m0s60V zLKXc%sPP5&fQSAEU`d$vugk$}1Vd}nPysOl|Ic}LYk-LTC$3N|;Q06@o(TJ|lm17# zjZGT_6XIXrRCN94+~})hx(xB{8~cC0325+@8l3f5ltB8#kV#d90H-8w4?y|}N!hP7 z6^CY9;Y-NE5=+B!T-gYSPdUcYSk(Wtgg`7Fiq0UJf^FqL6(>0aMb?2kx znT#Kc@tw_={f!{J5$0b%Mj9$o`w=d9vf_Nyo_fid6}#Fz;s2Og{w`d^wjiu0ugwb! z{RJv(BGvy}Fpzfg8c55gYrN((Ue)C<=?N4UqwnjF_aLze@NwI5B)Q?)dKjF8#f=iw zq2FhS_?a1zhJC}Xi=4g|MU1+*Hv0`BO>SxrR@A_^^RO<*kJpg|ndzyv$|0WP!m=c+ zilWv?QgmGmqKTqbCXdr`afp7am`iRg-Nf*aq8ALEG^HwMcK7(V0l`$<(oNiK+%^!m zjK>T%cy|Op6b#7k_qVbZnkXC4-+kaklJ4w<6&Y{j$f~x;9OtCwEl?7fele$uY&4ct zSQYf5%W7*EX<3W@DyXCm))BKbstuIlXxQyqVOIT=KbC2%YbKWpxvWWgyyviv$BM(X zVAyk8xcc0)0E=m0Rr`gKahA}RD`ik?Lt9E^x@mxTLBg;=XOKL74O@rZa`2UXTmWr2 z8Ug4}+1)WO9|X|*>tg8ZB@2|@dY5;cIBvj*bc#^AWW{jUbb2pPe>8g1=>iMQ`TOJ6 z6Ns=8eIX04#>6SFcV1e~w)$g#sivJ-A1nB@e$jY+RS5{jEZ`72^9|Pk3-a3MnIial z!>OkYAVr9~eUN_MI_VtNZ7Y!dn3|GHHg z{6+1mgxL_78?o<_X1J=9&a>*uHfpps~=$^AoR#U_Bn`+0Cnz13nYNT_6Y)! z<`ykSq2v)CB(h?fQ3FE#@4!29CfQcvD@^<+oJ<2V0TBcKkgRRij(}_tYTs7_)ebM$ ziJEi9(q6BBuZKruy_}+3@Y{9YeL0@bp$tz>>AjTutMEMTKYPVM)MeR|e)_66`{Kbr z`|&xu?(%JAzdP>>m_;Bcjl?*t{S;X+8|QxoyJrs{er+%KYmWft1#)lH59QYzG3m|d zA4O^A@L()pB1$`96!Q@PcF?~Z3whz)caALjO)13l8xOp&EYw{1A7e8}!~S2yq-Z0) zTtp{M%zS%;LB{@LVPV4`;q~v9)H!$Qb6&cZ-`jt{Z5zJ_2U9{EQ-ge1!OTi}uEbI7 zZ+zw5E#iwhXQtid8tCkqUrqEjU+gaoON!5|CCNobSW`uG~dYuvT zEs7%aEV6F8L-cN%eRk}+Lj>$;%Y?hq=(al`$6zGri_aAlTke)M8B38arReRRUg#y< z@X~zq$fm9IFT;@&{w<0RmYu{6jWU#Ks$FVxq# z0k#3OqQL=DNCW4_dcx}1iDUyc84S+=FFCbIXnO7w@)>I#oj*SI`cBGz|n})Go zD?SyEOlMMrj{Gf281%8qnZ8rkdp!VtRGr4Dt#T}DF8f%oE@@7;*w|G2RN1U9YqngT zlZH<+s+7Z{KfY%cl>U5~iKe&qv}a}lk7|W$af{sieNiYwq^q$O;N>pU;5v1YnplFh zs^Z=XC=~b0=uj$83(IB~T}1C}S~H`l>KvBiB@BMvw=7UCpmY&EaP67x=NkdCgJ!w- z5y1BsKUQKGCgAep|G{^n!pcQ` zt?ft79Ro|3L5@5|yF}#AxZMRpMB1Hn&SI#p&c%~YwDAeg#!g$L)WHE5>v}AA7DdFR z#ww5_ztwKamBcf->L?92wfNSCL#xLzAUD7}=Zo6k+CnKQ+? z=!5uFHp|Ln?5l627?P$& zjK-~`9GJP9ds9RJy9OPC!d7(VbA9Y5cCA=;}2Kx@~VOy(gjnv><>7lX`lbQTvD*m8R zh(&Z=m0W@3#ItM|-|0rg(`-;uEF4qjvXER?(E|A1JEZ-$4R<$n%Kz;;mM(p5zVH zj-SE1M_NMV5xsABiKY!pA8n+_sO0uS>AuCi!`s7q$rELZ%RC5EpUKULvxo46D$Ehp zFE8eq3=&sEcj#%Y$VKn0j^OPqGvM{ShCy#_h07B;qve`Qe;br8ttYcDU3Qlqp?GC5 zhU!Lfmkeit@sQMOR}q0Pe}w}Bl8$|fy=+8554c1?Ti%$Ono@Q;S1=aEMKETWhu(x} z3T&|tRyt2WK+6_Ih%}#&`Fj0%W_z=;pP>2kfAY_M9hhq!FyFqJq5YSysJ8;aN{ep> zgG_6)1wjFV7-b*1rgF5At-=hqjI0#bWJL?CH_Wn6uofH^AL0 zIUxdfCKF$%J^LbE?m^r?4dDru9cv;V?~Tw2`vF>>If0jI@Q2}nxW?^D!x*}Q({fUg zyQ8m{RE+*o!}PD7@L#h99dTs@#{1vVfPR_SexYUW)q%6ruib%+&}7o;^Bm4yHOAxa zIeMgnpvGB3hw+!me1rGyxE)%wpnn0-Vo^YKD~{8I<#3@j=7&@v=O@_1{Dg7r8CmlM z+Kn06KA|A1l+q~oep1bVxmx@pGTMyaqW!9%=SrKCve+}tMjN>aO)=3rG-hjGhXYpYse(}R_*@eYh-BMfencFFfi^q{buW7 z3#T`hm)#f4116ipFmoHN&K}Y4C8NyYBG>&9VgqaRk^yZysMQLc-51rvrX6Z`;m*z% zkZ+gqmajt=q-3&_Q{w%ohp;>NLJic2x7gqgNU91^Szv79Hn=|zc*x3i(1)dEw$>%7DBqw+dRlvVNiri98UrKBf-7 zR)1E7_U+$-CP=~VeP+VIRHJCY{Z+hEK=?b*=Y{%7I@f57>f0sMDeLLD^7xv*8e>qt z-`AcLxu1XOoxK#oJh^$BS>lQILg{Fx+y9r1#!Cd%jiflDKAeiA5(X$f;Cw2Xy|Ng?&nOx{dHPQ%=hn# z6?|S#0Z0`XBh>Heg}J~?Z$m-`p&atsY5(4%tweTtIQ9=3eEFEMM6E=KT>)F!W4cuR zfdwonj|~Eu4dqcxKaL8@Bw>#gW-D=N>tKJ)3G%#)Xn;jT9Dh#SL`grJmgw^|%`Xj$ zv&JQ;nxmD>%IDvW%!AD4W53s)bh)TJX)k>hb$n~s5V1?C=aPVx=825$h^yz7%P|Ui zMsiS`mi<=5?)tfS$U+tnzR~dhD(H6FAF}6F*q-eu78PJ_ay3Jy_)py*k ztRg`o+B(JGnHbqP@?Ps8zLFZ+A8)`@(I{H4q<`*xplsX$jhzt z4D>xF%k1~Cg;2oX1;Y8bD*Qf#Gc}vJ8(rSA#{RGq+Py3XwAKmDF~uLg`K$4qO3lBt zh6~N)H^ORClGCD+@@guUmBkN+Y+%ucy*n+jbKU4_G3T7)CflUN&YYUPi`6+#h%|mF zpih%X-SW?iu)%u`DrgS-*)uyRDQ~CqIN2(wY7!hj9ts2V$oZ@KWF)Rpa%8+-GtY&p z(O|22`yZ{>V_pgZcEeN`{|weZ_3M`^Dm}06n2q|Pj7lpX_nuXImHl?kj4Rrqseeou zdhHL&M@iatA5RTYU_Rec4tXN%#xvfq^Y7E4k<{uCy;W!~8WC}C%f;6FBgv}T zR8$Vg+qnN43z6NZv~Q$~*o6ER)7akSVS-)8V5G<4wL!A-67uY5To^s7ys9{In5qa^ ztLP0UC>VY^OCT=>gT%#{s{)9?tx;_*`aIXmS546E!#l4pVU{>GN3+r*Mb=6}mq3cZ zum&H9in)o4Amxm*=A;uO@s;CJsH0bVf5Fs^msbs!Wq6*ABG4BvtIo>V)T_?e&Ja)v z3m^-H7p(4xReK6VPU%XE&b5s(0RSE39Elz!WA+t8c4?k!(*KXEw~C4*;F?9zK?j$? zU4snn?ykYzo#4*k79_Z9a0~9io#5^gT!I7%e);}yoqNyy-}<3f_gd4t_w26PRmG&_ zTwOFT`MZ>n-$jUpVvh^MMUL)|1n0>$axNV>H!M%5@4K#Z8u=s_`DBuen`Q|0tre0h zce`LcYXx2U7v+11m7pzVfaNWAjRkHE-cKpYmId+_Sv_W9Gj-?0D0aDLJ&*Baw?-r` zF{HbF_Nm|3F-?p5$ts0imXD9RKe?KspvU{N*;bZITTdM=Q7?AI1b}OwLeU7_uL{_e z=#cnz3%poNd5L1EHDT76l6@4oeflU{?oT@MK&G&o=49B6>i?LXoxMW3Ohg>sd%x!*2NxJAMNVYMZikIF2T$Vi zVytj#OmkzZ%ltrDX#cz@FO_TjnWU85W1RmBF6{DzMr$?qhxSGU z{)g}CYKa!N{@}Zk(!I!GZ{ z5m{QOrh+uS%zf~H>fwZI8Qb=@WO}&Elw&#!>oBK4Ka;ijZ*Lwb7ery3fF67FZdP%R zh^6E_isUNJ)1Fcj)X7>yq3g1FN+Q->0+^c@-!yjNxQVcJ;QylP`K?bqsKr71uV#y% z;!c~qOAkZlk^weO=y<87$hx-8GlZM5Kp35&&z9y?g?+-s++Shw-vpN34CY!G^7-et zGF;DdV(RnAVO41?28`l?b@4)sC`>aQsfMNG#&XWDUUtvUQ96Co-CE*!UfzED@@UpM@TO6S z#`l!(btd6eTg%!^wLQ+)9-=O@R*)a9Rz_6HuG=OdAxS2PomK%-DYZ}qQbO`sXG z8A%?rEZ(pI+IYy0EptQ@h&!>LgEp@>%7|ofPZxWdq6R6+oG^>c1$9KJ>30|& zD~Pw^br`6au@Vx>%v&-d2lSgAv{h{0iH%nBmdhTyw(M#E{Mc*8>#D_F?`;Yu9$3>| zKS5py6S_c*0Gc12>-tTpTb>-&d@uC)7HqFN`(S0M{11XUi($#fZ8{8_U+^^}hh)W? zy*!9Gg0|v{AjbAyRF_hK*Ey)$iD;G!y_(?l2`KxxY z^Zp|Ljee-ddY_tD+eA%EK*_)=b9BUEBp01R)p!I?V=dDa(=riEV--%ML-13$sH{-` z%-h6z+WH(~)<%RIZn_zj?I9?|Iu%v0bAXB%FPw9*5^5B`8RbU(ZU1<-2;B!39xd7p zFy+RZvHPX@N|o~p5Q#p7Sun`!>ZthhzYOm~0PgVC(ZXMP@j%)boNzcBSlc)ml1y z4rFVB>`Q&=Pxd8@qx%D9YnqjcuH6?1J@Gpzlxn@ZJ}`>rOyoY}DUGjr;nm5dS zVLzC}5z;1O&0Q*SOt(|a`6=+J=60>Fv$!is`KR1d@kPoY21EAViJt$W8*#ocT|>u= z-GBChkBDE5X>!xGz!#Rx3CoWanUuR({et zF8vWDtDpUr4P{ddiTQF~5qC=_9tH4)JedR+=38wR^USt!tu{iXZ8Qc&SX{yoCfAR` zP>vDVbfCR{e~S;`%I}#WetJoK!37H8a%!6pcW^lKRUfT?(s6^=_H*j*iZyBg`x2f+ zA1}sd>j+>(OW7Iahvt%gEL$IDzYc|5%q_UVp#83DsN~`V-0^pWp zT=53V04RCtAMsigH$|B`nnN7fJ`&Y}U{>%p)#k}c>qDlHNhz*ay*WEH^gCF=a%Q7Eo`l@9JDhqUj7$IVQVauZu7Cfare;# zIX~7lY~5Lt{dn-w|ECdh{I?ONYMv=$i{ZSL;5Fwygs5BSGloXR;3>%t!Oa73 z%*=MC-MxZnCY%~M;1&HDu-hfE$$BH%^Bj@3<#=rJmbYge1}w!?`=z&>pZFkuFBsmMB-gvy?=Q-h3W?Foe2K=PaXuDDcR2ztrE+<0VoJ}z5S@9?C#Fhkd1uK`JwQ!H~A4) z$4Gim#5%y>Iwj3wO!Yi0>E^ejx=lOQ646~HDj_PQ>b^&c*ZL@^DnRdQ*}mv-Vov>S zdXq!dE}BK4R{B$3#JztvhSVNxc*dM5N|I^++t0U}AcaTIn#@HFcQi_YS6zdJp8%5+4)`airQt9=-a2qPK~KGgD=EG+Hj zX$pOa0B#mn`)J`oz$xM02)z(hfJs}JBsbAEN|03t_3Z-nFFJm@KRrv!MxW@{;=1n|2rQhKoED3OMQ=%#jn-TB=5q5pm%1h51 zDu0mZha5FX>Emc1@(Nj~5i}GPoog}0=jPh|SHyTqI2We8Z(;|z6qw0o!TlBW&;h4G zc2^6p)n!C_cG!^U0hGg4BH6b0mmUjKqICMTXpe*{p}Y1HaxMJeU+dXbidM3wOBqyu z93f`hA~gzj%~aC694~Jhty4{3TR*HET32^7c4dvCWVQ1``)RoAC3Wl=Q+{-ItSid~ zyouISXXS861%w(Uoo#2`;Dt70HNg*nooxxqftcM${qZ&&zfz~5UqtudL+~Ut^!=-+9Bzg3lAdk zJ5W~1JAqU+-)#}BulJdYMEcS=#16t&G9;V!3r-7yupVP}L8buqU{ju-N!NQ)S7>~Y zP`?WeP%CRFC&R{{SUqRJEz{c)4}Q}Epz2cp_2IA$;spvEat1!dB6U!KXsSMv4sKhb z653PE!L7crVFHlYVn3KO#6xiG?<>vwt9~yHj8sg^ z{&bb5)1Z@uguO1AUG_kPVhj~ACMjGZD2RAK&k?#Y0&?;w8g0>qyk&5fkU;gL^Zzvs z!sulI=sv2A|3B3x0y$Hk7sYwQi?JPG)aeQ;D$rCCL-NM&GFNLdfU915PO7CLOj2%u zfBz@=wlupp8jHRo!I!6`rdf%WIhMES+~cdirFv8JpHjaG&;EL+s|6s{`7)_sqIiR}r`99=|M9nqz%D@ys%|fQ6Wcj}6 zmXW>5+EVjQlan-tCX0&aUDd+of+QzJje1=DQbaQGH)afg6yhe>rvW?7n23Zapq|;(Z!S*! zXOW-)(IOVTQ?qr(SV`bmD`*lD(jKw2$LQ_r2NVF<*;EzgTAk$HS!PKBNx04_PyNot zl`kp2TngO4$5bZd*+-yG0y+5r@i|n>GPaoot?wYT873uJo>OCML;wHv9&Il1enR+Y z&J_QrIpd~Zq(dV@Hveagh)Aogsj7j;twcPHab!@8a}8%>gTq!t3S*4Ewp$}P-tlZ% z&28yQ!;h2x?-a4h9aD(!nZyU-+s^#UBLWF{hTefc)wOWhPQq0n)oI9*K(j|9J^a@9 zotSjM?P{>EBeV?lPxli08c>pWB4Z&KvC9YtErk_A6=C+<02K~BO!&7FHbX!Q$MtnM zW|I^=1#sxUGe!a*LcA%v-V$g{mXn=-h!1+Xva)^G5Ci5{LT+S{ed9s;5}2u ztbOPD8_wH(t_{4abmo@<=HME`G_i(W<9{Kzx^(ZYt=OYYNY2ymk{TpY z#8`}(`Lmnf|6j4-|A9nu#v?=bKZr6_y#FZOY5#+Xpr*5CK?5MoItV7%N4Rf+XT`?+ zBqkFXKEHfO<@7!4Nk_NWxfsI;SO&>d)xVElanDKE2P;78K?gFMQnoIZaNx5X%h zvQ5Xjd#PWUT*m_`XY}*drkw1sGT2e*PtW`7Hqra@w%>d5AIQreb11E-LlE~)_=|U< ze8QRL?eCx%{NE7Yz%I$X62*^bK%=PyZP_k$DPn{@Z(JkhYeHNO7xI|pn}7VY-9~#r zM#Af1-mNg6k!!pSj1m27?m*%c-oXqa(3K~kEA(-T;hF^(<=P4Nvd@pkNpm(N+xtd% z=`K*~1sXTpTKaRf ziT>r@wGED!3>)5%klMyXm_Eouaql;y)~;}#f5?Hq`kn@(*6(>mio@xvf4b4r6*`gA zGS~2cO|l_;-Qjdie*)vgf0cvFa7{)N?8riVn=Ys_1zT*$rFlf0$nm!N+PAfs80pBr zj_a967MUSls?)e};1@CqjFU6tR;LTvV4nc(lg>NMSuVGV93epmy@3j0!Z`7CQKoE; zzw3@a!PGN*uy;aEcCua`tp)m1Xy3n`GDskj>Dua*cFOOBXp!a4%NYzae_N=npwBxM zo_Fb71Hh+{`i+tgaMb2)HXBW&AFsPbw4O*{p{qiIRCQD_Wc>|A4Lf=4_YK$TsIGzR zJmzTn9r{e)f?mta`^JUml^mCAs)a2&e5V#PT7DPj6ej*;5OOZ%UV~4cBmm3AqCT#F z(b9@GFvqv8vB!PAktU1)@|f?(R@A0@kqPUlhwT+cw z&rbje7;I}ZF%VK)+h8bmO#Ro=TkX&{V`%<8m-TR&NK1{}?UaR2&WgF2GUe9`+Cf-4 z+IOt&5{}tM-2oRoX2TB6osOjnl8*V&0|tL?0%f)%etdkJWDU}plXb8D0!xRPm!%fE zmVW$c?_e61Ffb-xEtj|cSqz!B zlN{sdi_?9m{J``z3b1GJ2b}u+FL+?jurqaF)dykrbC8Vl1rt&vxOip#A~j%q-P!erW zgq;#=CH9%jWkjId>MOTOwkPK-y_L$c?NI}gQdS1ll!?e>F3UUep^ADy(E{^fxj5Ie zmaW;=t;&@ko+s_lVu9^B5*(M?y{(z>y#^-B@-GwS3m>as9271WyxPL#jCg)Xu;gSW zU@)^eT{h?j$$cMwQ=!o(_4G@0A^Ji2FHI-b;10*1FmcHSuv`rDJ+F*wza&3(VbRwW zP;Rd{>Nt%j;B$}G@q$l3ox!%`u3L7z;o`y>g>!c{SH{C@Hc6_tFL^h-nX4EG%MZ7&WWRq9xj=0+0Ph^_a&DYQkmtGehdV+HhVUPQ3mLjh+< z;X?PaTP-$Kf!jOYFy)m=bP`V(nai31+mGF6cI)z0P54GYr?@PS8*G8_n5?0=6bTZ< z$BM%xa;!e91&s2$Rm<~vRgh2;73?joJ;}(5C*a zXx2+wB*9_l8TxJ~{{%ZNus<}yrpSMv#F>9b0_jx#>VZ^@@7O{u(m6E3I( zM?A-16tz62qeOXF5)?zoGMvjJX)V8#NC>kw5A%;Z*&M~1+ppLI0qm5vKkRtN0?_G?zmSi0``yq{V+J1Z?w3rr9VWk}XYT^|R^|0Z=6l1CQB#A4n+*GdXMa zzA9gSD4C}$wU`l6K=P%8X1Qf;IJuh>#BF;}cCjeE#GB?pj?Rc&JPU@p;?;&J1@RQ! zmNv?n zP6DAA4mdP3(jK+H?qo?PI_ycYY-hXIkrR7G#g?QlgGu#45OdrfAL2OMX4J2AzvY_4 zI5O8EG#-E9<#p=#2$Y5cDn^Fuz9)&2uYGI#FSYwABbiLupl5XT;EW5WNQAGm{H47K zMwvL4r^$*yEF||fy z+u_*H*+JBmsx3)Vr6%Pg5*Dj?#26zBzg4j+s~6X-&u!Ibgd6UmXatxFi@=){r9b{2 zB&<1%b>n0cp7NdwQC3v`D2yA5Lvd#{p4m~ReS zk8Fta95`o!7ETMnFQ04oWdoV9hJv5JC5wSbEHXR|x;U53XuN>C9-NJ6YWyX0~UpT6YINzrc&a-of+g)bF)?^{MXA879H^ zs<*1~L;EA(eQc6z>O-0Gqa-OY@j4F-*;BQoLtVU2%s{M_Tst!4ke_>F8OR}^UfZ@R zZ^a()ql}Zx0Tp8Pan!WON0#}MFV+)Z|1mmx4Rl&-!RQ-!#_O&DLr)Q5CZnv@qpB-ai^8#wBEswLW45t&|U4^C< z+mV{a1kw7Pb)XV!z=-LEm%y`3?j`pK^||jLdg{&60c%KLk2l|pt!@rijk@_h-w~T` z@6)E^#g82=e$w$3Zg4J=OT{%S#03>4z_w%68wb;)QtTo}S z7W=RKqN@!S1)^c;YHR5x;q2k$u4?LJ>F|FrZ$}NH&p3fBNV*LMNf^%|H%0U%6ej6S z@KqI`iEOe7nK)O{)+&ka<+YLxX*)58$@X}9{tZp%Chn|cz6HI}kGOGnVvtWQ`12m+ z9SKhh9c}n=|9F3V#tk~FOU~$*;olkp0?E#zAiDsnd>i`HwrCX(>Mvgtr@immBUs&0 ze{&Dt5PN~I~L%V13|uQPoN zJOnFn^WF*%9*?obc|p;7y~$zQVWo7}H*Z&WGT?hHVP~bKruI_a21=T{#a`*f${TaA z_@8&gi32`6HX~PN8uIndw3Dg=EEN;*@+L{e)8V~}{o$WdU3=nrr&f}$17ij=<+Jw} z5!b3dPMyspPI$U`)$3_`JS0w>X($*!{y_eO%Vv31{d`C}+{BKumL(JX+Tv zZM2a5o6s{O)}^W5j`(}o%$3d_Qj5;J=3an5`86;voQ~iy&$)U<>A<_?3~Vj7$Jd>j z(bqIcV+D!4q*26Mu48rq!pl)9T18K?Yp3#e|M?U?L<39<>qjr+Nu%++Qj{<(_y;*e z=bd*`+l{lD5^p%?t^914kyq9=|A6Bv9hyc&D`q*OEl?@tcGCH|M~W%qLVv z1RyXfcqqlLS6n2Oh0oe6670hib|+jGXtuAd%c*S34+5TzH`whV?lrAmZ_|4qIKM*2 zZL~)_d3O^Td1Dg4QLMu4g=dg{KSquPFIviTiU#JOZH@krmEny=V?Wm zb*F}yQ0EG6iW0e*fZyfM2P0*bONW>3Z0GLF^-Tx*t=IRS9vQ2{$*xSFzgyWn&f~2Q z$3FxvDZ>=4j5!|RX!A$+lXC`XAnz2gA<1kWF%rUya$aMQ!JK*a{rLlqoSXc8j@)nj zD41`teXF3Hfql2!Vh!Phu_J+KePQ&fm++4$vm`OV7ia*!*%!=Y9=K4vvLZOBD$_qM8OJ1lnO`n3vHjyB%Y1Ut&;|*8 zK+wkMes+#ULt+32pw;BdCqS!d9d4*2Xd}Ll1mrM69xsLu*aV%M+$hskB>7>qC69IH zSme!~8iF?B`h+sPSWEwy-)!d=Pl>jXg(85xF+wB3-k?w!us2TV2-urAlH0I)j2D_=W41?oI$hTM$X=d| zCxqmlA+~^{Z|~8tuST>M57-$`XpN9B*p%v9m~;BFk4dU2ANeN~Id zBB$}Su<0-*-g zsDmaLfKWD2NS`WCVydZA5j|A~`Ucu{XQB&AvocIe$w{CQ@f!cK9OZ*W?karT5t_Sr0H zJq5lpAXw3-juX@QNLRQrx~1BwDp-WXsW{Tm-NHVU6N~suarX0(VtIRK|n_f|^ z%}s7g#P$qA4NR{fu6iNW7-2i`j#cU1k>rVe+E?V4Dod|7 zBVayfJbYXV#MVDJ-5WAWVK2WF2t$hK~mbwyXuz1ZOTioIuAfNBbqly9z$3KG% z;;{D#H6!eE=U^UjOC4P1><;*Iq?gT40g`Q)8a%tV9}jF2?Eo*c~9qoWE@}^C~r@v4zdLFhR-<4iPAjO(^ybsZwYMkC~aRUk#1c)SYjfC~(P&$#Z8@EIuVI#JznrFZ`RB)TPlc3>EJlPBS` zUFg4~DlAF!I9lj`t}5(8pUtc7XEnD@r_$7y4hQcDvBOiweCj75YbBi>USS z;dgs6iqOCJFZ8%{Y{bl;$-qIxY2R`xUSMM3!ygwberb7fr1G9DGFn#d(^5e+CzYft z37pvF;fXwJ*3d)WoY?g|#BjM#V0i$mnR6B%1JwC1XEBbC1s$FqY)Jzz%l;X~P#ncb5OJc_c3 zp-N7vn>jU@H6}O~#|j8fQxqXjA12eGCyKed#VX}Sk$S<@zue0kG4g;pTIiA!&p)$c zwLfiIgyCjbf?GCrX@~3vm1xZ(*(~ho0B2wj;_FyGyN8el5ATVS2i0+vZ>+>? zu7uE1;TtI*>b`cx2t`7I%y4c{1$O-ob>tI5nJ>F4Vv-PigUg|ks>;yTdz9WvY*StY zvVWt55Xq($)wMPhSKzd(~y}L9y_2lH}O<7*xo%(Zv);v++StXEjs@#mw{G@#DkDmtp zLw=!?_;eHPj&!gczqHyHU*i(CNBvcR{U)$fcqaud@_s*k0YMF))U_O);|{ZIKU8t7 zOgN@*7xZhmcLK670uJ0@Xb#Q`2?-@qFB2YHD9dM6efoG~c-ywsG#|dyRvz1@0>04&-Zx9$} z?Zqh|#f-;arC-(LpIDu2$_)(~ugZOZUr!nFHTG(S)>@~uv2MfHP zs&XEp45dAV0njkFBKwK;aLiHhw9?^QKne((OT~@m5TiL(|v^ zVI3)qt2y?{EDoIQEUdPh{YiqczFy!q77BQM{U&G53o{qH^cZBhij>8(jc*9d4DvO- z+{pad%o@GUMqL?}+(O^Ab!>*dA1&r`!UKuqDMqW(Hg0@;rze=1>l)oY+@3jpkkZrA zUQ}nN*0uHi>ef%Bs?I$5xx0K@`eJ#m%fW;9*cdOqiE=|^juE*~`xhu}V~Mgrz`?dK zTxglhQLa*$j`;Tlx+EHrZdawMg0>mYU(s|Ekd}U&TO6^r*%^auYG1*q94M$fjTa(K z_32Zzl=POU=I&OCWgiZY$6(Iy@@)g02vi1wPHjF|H{~~0`TMIgwPsrC(iVZV z9~2Lt&cIL|FWjpF>?{-*8I_E1jy$SW4KxgQTYV^7WjQ$L%13Jpnk-Q2eH#kanc3!# zgtcKQ*y<7;#W(mWt*tqzxSsL#SKzlX<_@Ia$G_ADGKOo8-SlXp25^yCZy+)Pq4hSo zB7_IOCgMQ^{w1xhe_>`TjnZQ66>&U9(Bq-T?MVve4$Lr>@A0fIKI0M{Es=2N)46Hn z0u2(^1E6=#ce*$gT;J5`WuAi2Ohez7i=!g0Mp01Z>xxF#pPbWtOP7)aD( zF}0M+aamoj*@$2S~Wlj;uZH$=5J%9U=P@J*rqM6yhi( zhfVgkBQpiSDFqI(dZfM(X<@C5dS*qr~lOjFk_qN`6c`**$|&HnB9o|Y(5+fr? z=}XCe&p%5w#n0fUluEIjXKu_qhhA~&`1$f6MXA^w3ZaUwD2=Sp?`vmgxcxEB9P0Bq z&&-ujpjY$zfYz+`hey@|^6|@Ymk?253Sn|PaPK^vO71&&I<0v+w|8;ki^Tsqrb;y$s-0u*%r6gi&F z7`&F!288S^IDj{RnYqq*JeL#6F8$n4>f%*d{Z74ls{^tKIkU}JwI;Z4M{i^-oDOK5 ziqB*g>%KEPO|OGjX+Q>Ugi19+ag)~<*VAC30qT1NnTC}*HjS0&51s$Yxcj6C>ZP|R zxEOjWY^zb?%6Qyqd$h6`QW%bL7TIeiXV9KyK`7A|xIWLjpXAS>cib`q-c!2EicPj< zViyary)I#m4LjsJ2n{-K%ep$;j~Jfxb^F z5I^;D1uywd_Y)S>KWUzQSWD@bl?o5C52tehpcj(R=Mu+`Tc}df!5s=z(%~IUhjTSl z(t#b9K|dIRyv9~@c8r=~_Y=933Qb?7Y2Ea^#Jt6lBXFB&2gWB}_Yok=mXf>*q1K+pS!XU z4cyq+ObL21dgkFmv!c>+bD$oi^sT@imJ@%zfu0~0EHJ>_T_Cb72-b&V%gdqe>o`ms zQDOpxN9yqGzTlb8Z85CLp>a$1hvv3EXgeR z{Mk0#|4hmM@I0?-IGU}x8xk?%A7{xBmD&#+)GHDd+EcmUCCo{eDHr-+8Vg|Le7CI| zxS)yS>yE08n;kw~<7Hl^?lodSyLR562&*Lty2GxZXI*Z-{xH{fgrQ-nyJK@d7dU;X zU))_fhEkev8&d#)nT?l`o5T$vpXOqqvsUc6duf5y$s%yf6`d5gqF-=h`R2(O?e6ev zVsPMtg0R~4mT7HEISIlnje(in2?VHo3W%d2B*ukwYpt_9KUw{?L2hy}f=>K+P_IL3cBqK69)X&4T z!?%OmxN5c;essaYC37Szjl7x}>GayhP(ZS3v6;U{*pfYDwfxQz)oU1|Mr;|+F7kAZ za?o+Xj)5Tgu&#)4V+#`i}5Y9xhRwmT@CdMNowt7WWl)cDcuN<#PE<$9+PDxX``^pwozxM zjZ6JaS}TjR>L#m|2C<^H45pMroF?~-HNa>6$)=!MlA4;?<^qEX`wK#PL!Gk%i@7)7 zUo4Kys)R1Pa8Y*toVgt>%KFnyz>XF*0qNzyG7<&3A;_27uW@e>qjce9;pOJv#h30E z-WKK!*(QFlqEkp$UX+Ymas|PV-odeNZpct&{o7=_mz;(IB-);iPQ3{7z!K}@wR|vL z&jUMnxo3QtfD^Bw@=IN#5OrE(VgM5X04oWI{Dl@^ZF*&mIwehz|2?b*|Y|Xf- zhy4P^uoI(^RU8I_WdPdcIbEZ5K$!z+H~zwk{LgaUbl)^3(>7TfdKw?espdf5a(^mmsZwD9jF-FT2s z^M4ka4c81iJX<}d-#j$pmA0zvA8a9I#oo@iaq@oy+A>_s{wy~mG$Dk;@3|Aw_P2;e znn86zWc_r~BS$4XE-)|D4E+@S1c$scM#TE_XY)jp--->2?Nw}5LR;*nkJlQ@U#53s zKKZ!0U-&>W+#6UP=9}^BzT%f$8qRt3{!Mqku)M%6{aI=M!}dp6wN|qG1u&=D+0OZ7 zZGA;cD^WzV-gBuqdj2c2x8UdHtwaRc7|H0oR#YJ2er%yN}Uiyph)6ZNCO0fZoOZ zU|4=7tf|<<1uiukHyL|4@=)=ACj^)E>|*ajcBsDED3kK;D;9;N1?7%^^nJRyGX7*2 zeZjldpZv3#Fr;J}nQ8m8g!-Y-v26H%EW54HWUbrw$Ds*BfyybCr#H~ORyud`g~j<_ z?_`*C1~Vpx8ZZWc<*Tv4g;jFyjCu-wqH)1kAojZ5nFWXThC;dE((0GVl19udl*=y2 zGoiWyIH-Z+a?zbTDGsK#TJ*m6k0d{(j5S}|!J`%_B6S?JNO&B)?=VGT`!_czsNV$H z1&xAfKN?|5Pi{cODiohWF4mw@aXVKeb5rZ&VpC76V^bw+##mOc#7ODcaz|G*bCt~J zJ-9=C7#J>+b$UFsbwbd|s;eZfglldggT!yK=xL-{eOBz;3f7G-&||+c>GPmWW`kvS z#R`s4dEgz;s^$(%Z@vs4o>uD_A#zN%-HTMhlL+Qcnj@S!2v^On!d%eFv-eMG%~I5D z)$3^;se7TT(v+cSNoY+Iy0?5IL8dYcQ>CIdi7x!@(E@jy%)A(=#78ghMw3Yj`Od%8 zur>%)QD+GXdS`B~7Io>;)iz?Fa4bOT&}q_Qv8%Qzu0Gk z4x^Ge@hsUgpmSN;kwN22Y=G}%vyl_b=Ys%1@?X%2K)M0C@3lZK$wc6f#@{Q~`~tzb z<&DWYlW%-c$%)#Knbk29(-nsD?$;#L&?)6q{L}M$+h_1QVGXYJIKgt>e|SdT$&?)01Zn0IG0VmI+8-Q%yp zB|t7G)FFQ&Ebo8XN^=KdD+=3g2C?xyP9ctr=i6rDbSx$xx1(%f@FB=)L62K}Ud{$g zt;nA^a44JSVw2vC$frS=LMj5-2*VXtO8B3N=6D6`IW3u|()76sn z4^YDU>vK$2mb0+gR5D$)r1~%TWS%Mcs$j(4C0F=Y%q`AcXCkR{Z=9nt1-k9X$%*-> zF(!s0tyA|FGv@)IPH}7Py_MR2+dOj>2PcNJfqEbBx^LhXxD*KC?*j6j-{}}9Y9V5f zY*wAI>1}LPWNZc_tQb#E_nnrWW^Q654FbE|qXz_RW(7h&4cK=S(e1uowl`T1YAitZ zu_IJG6jxzO&aw2$R_jrdm$W(G9tU0WKS>oVGvC`xhbT3%9RgQ~)Ull> zkfvG)BWnc{h6d7>=4g7(pKCbnG*j}mSV`w_y?3H`a*j4*nI}ZM&&llEDtEKrX>rxj zhNrc`@sOg}BZ@5A-LrQEE9KR*PPfi31fqsY9a+Rzzxb8|H=l@oQ-jjv(tS86s_h!2 zQnPzU?u(l}1i||Gikayc%PKLrY-Z(uZyxW^2s*)4qc`4 zy&O_dW%(d%uq6tCNGoSxSVp-|cIxQe*H8UzSp-WDi-Znvul51~|F*y=@Z5N9CrRq5^W3XVMj=qz8s*7UbSry8*1wfDY%J&NCb&&R`orXu=xZ4r`qc3SWJVtKB6}HS$za9@(e(7m z9h4eeN1G#NTVJ0ZkM-#H6E0pD(xm|N*{5Q z&VA{2wlc*~t=hC%w1G+)T!waQ$346i{t1iC12fvBv*KWGLzsF*W-po$JW~lSm&Ngg z%SM2dlK+VKG@?3+dEdNzu02NbhI)+DjJQ>s)`@XO>FH zj|vfxm4VW07a;0zaY6gHDY<0a*Thc(y^F`s@S|H1;mqff+1(G<*1b&)EFMWd6fORH z;fxR}gi#>oM#I)q5fQ%1%a1&nrtX zr=SQi5^-oT;M1&&?GY8Rg(r^Ux7{C=A_bvdOTd|^!C8Dsficv8W67I4 zqPA=o?aVo*3DT5QL}PIC2p@IdJv1>rK|4|%gltfam$N81@n&Vp!GBqKoO z!?{MOCnsddg)^0=x~Zf2O*pgG=h2D*OAS)4sUnfBR(V++CI%n-?dh^bo0tsui-9Fw_v_zQC6W1k_AeKsxW7Vh_ef0-0@(owt^LO~$`68C2;np#My4 zd;t^>IT|k!9u7-BrTMpcJ1Qy}ynz?!B)_@|Ot8#&XZgzFOmg*tGJJkMRRltxKMW9_ z11*+fFGF0UyXeyz9LIi9E4+jGSJxOZaft_VudxARGZQ+9+i)(N1&}2M7}oj@`h*w@ z{}RHAlMnA5x7V-olL4&DulKKKU-XLmv4a6P2h^+Afvlh-+VEMwK&-*$UVu5B&KUU7 zjR}dL|32zRpIpmL_tRkY&8uLK4k#*GC4!hfe6Bmhhy-Rj1qdowrK;1f7k*#ncsFJ6 zC$N6i7Ea24LSvpneg_)W9@?K)R`-yAR+63Cc5p*olf6ZCHbbXP8ME{f^+|T{E{rH> z=bqBwLzAZ|D7K-0Oq7xlY64?XAA?1zjbx{|QhF3DViSh&d(+g)eW>xs6~-jq55eQ) zIKz&h<@V0RJ~mqq@D$ITlxETUU@3~6L$1>fO(D4rP zlW;F;FQmA2l*W4Q~g8pF{2Wg0q%@vHLWq@@facj9fCDG7< z2?EjJ!GEHAg!{_!jZ_=~$;l`R?lEsBu%3?aL*pU~@*@F6di{d?Oy~5xV>?~5h7?)u zU*3N@c@{`}S@TwF1B}Vzjs-r#95mpTQ|S-RVAqTYWGDuW2nt$0DBt6rUI6UHtE907 z{DZ)6o$Qw#T|z*``gcayU~T*iOPB9k?qaz|s$r*A)P64|9D^{A%T~wd)-rm)hQWGm zXrO^bY3G-cJLwy^x>;$$PuMYLJc_-YQ)Al}1X`W8A{@+LxXyQE`J@dPvSOQ&$nG;mIsj?)Iha zI#j&n7dwE4_-Gtv!dD>7+kzh}{ZSs8aO4T6ZAp5)^uHhZ2aRZ!#gpCip5-PD>kkr{ zwn3YHLwG^45eWS|S=HJRtM-#@Nq%(*~j?DFl)YiVeovwPz1odpnf91xt+ z3S5b<0Eh6s&z987S>Q*xZoJI>5h-~;zOgJ%AVGz!1ER83K57N+VS$d#t`n2CL=#hOS?gAIPG8%qw12$ zCm?$wD&o#>YrFJX2K3=? z42uLc-hF5zv7uKH?$vU;{Fnx$q6i6*!a9wz{k>c805WTbN@CBX3z+XYBJ{haAZwH+ z#921$g3v}S{)<%s4B6iPJSMK+$4i{P-$=Y2_0`>8KZ(va7<~i`R{#7fx)E#XvzzwT$NsKgS)XVy9 znw44DlbGl9ffA0@LKscwj5bvrSh;9d87p7>?8q@iW+%T1YgT;~Fxx9Hdl4>V^>o@e^Q(A^1K*K+TXLy#2A<=<*$%I8 zE4{mpY$*@-$aV$Civ9Xt<+=jox*X)z&p`4--V`?X=>i#CtW!W+ncY+jc(&CI6(|&c zNtBOp6U_#Eb3|6S(5mvbjCCfS3w}DeW>hv4{!M`rlRfX}O5o^^%SZ?cqo0QWwzJgEdW?^u zw@zrh_*E_bZA*HYPL-q!`EP{kzVr6P*WbU>PE%Dn{4)!mZ@&dR0q)m+I%b#EKAay1 z^SBRBb}RbV#3e%O+rihi;LmxvKhccYznL5*mX21hs1pc3Ea1Q5XHfmTTglBW z{B4Y{Au}0jAjf{A0S~QR%Aw>1A=(T^1!HN~?@STPs1F^H!20j5k>$Ru+}(*>H3ikm4KSEr zljjG_2rZu~`9w2Gv+B@GyYn)5ox8#edLo42)D7M_YMU)kF)yEL;=Hk1j}}3OS|TKf znP&=!WF|_Sd}i^1!6S_uLqbinS`QttAY_;};nXsw0QeqVqJ~w|@F(K#K0gdfr=Lzj zJ$xDr>ZhS6)4TnP3`(Xk9~Hh8F!_1-;Dw}~(smnAWnMi}bZKN#Pf^ANG)#}W1~Xw# zNp|NYR`a^1Gp$el>h4uCWOi&toWu1Jq-_7NO1S(u0MC||%f8_n*~olDzbG1bn=VMC zuF0_;0Nx(p&8)CyIayu>o>J(T_BIZ`9KxkC{Tg!jdoU99@xc94S6s& z;=a>eyvGP42w(I>xO*TkL?p2J#a3y3+#~{0ap_KeeU3iP8ipsz_yq#BNA9BE0#E^xfC-yFFeh;j<7A%_f6~SaWedgq zStgTyB>f0O^_RT=3YVe68&Pcge$ddLd>PV{Ha#&A(z8-418~zPO&^UkXDjSTv0cX8 z<}fO2LeY{pQi#Vu(OMXK;Jf&)@JtHm0>%2CK#4ng0Q?2C2Qzh@2yLwHmS^&({_igjF{nT`29y?W zR??asMW~I@{a91(WS$VNxR{3cM`DTJC?z0Jq}hTas~mMG-8z;esvj0i;5G}jKpC+D zc1nPpDE1^BNVwf4+2(dIt)Mvy1+){j`1Oej|3&Z#iwx4flGMhk)K*vN^@+92nTYF* zC)=7*LZ~?t1@eZ{n7At##nbmxe;F*17H57{QeBA2qZ@NF3V9M<8-CjMR141*f|OKJ zUJL$gTk6Wq$qP>>_G^R2{JN%8fc@r#p(l3J^HGG~Cu!HQd^Vpqsm_+JGqmcP`K_l) z8xb3_9MYcB+4dw}!HyJ`d$RcVRK1|fqM|^4o2FFwo0DQs*W`Trwrzd;X_M%D16w!$ z?0kVbkdxiEddt{C{)1f#bdi6btbz7z>vP~SG zH1P;&Tvj@-4l=FX1uZ(&S~Nqf#T<>gIpi=GX8AjcWOS;Bpt<16#(^fhv#sNE)xcx8 zi|Y(q6uv>aiz~ytEs8GCzVLkKvpi0EA|#}wG++vGbRr>9{ZG)rW(Vh)k_z+u1`Tos z?%V>|Srm&Nw$V2btWM%mlj)Q7p6KGb#TKQE{eX+p^R=Qlck*%1Cy+pR!XU?$49{xe zJf3?v34-L4PekoJk$YiyGbtf-K_$#4nC-tTe#$jh?jLh}#7=C*@kS_le0hClzCSMrpwjgv)l7faWGd`spnTqr?a>tx;X`Y}{!PxmqEU8$%|Hos-+GXpw-?jIS|&3- z0%d1yMcmQJmB$=qfe;3)nm&#J+R`KW=AK#UXd;&9VyGC=+@%HFY)`OjV6~9De|gSV z$NbmxTz9M28dG9I_C`1S${mxFum)Ny`x`zQwU^n7_^nMz%=D_{ZG7rG3-sHom!V(O zw;th@TV`7z5i;zZ^(@ZX1M!eh$oR~Bkt{hpgaDrXnlx>5xOcMIGZh?!fI0`y3gxT4 z>P_aZ4%*ks7{%u42~8q(s4@w!8pVNFio$OzpB9CH zE|Cdt%44Y+777OZBMdad1l=O+4}ex}Zb+z!%vui6ika#XbX1wB6x1c+9(Q$P=%`k9 zwDygjZMRR{PIXY3!7lOFiRuLxB>8LQ94NFcS#U))KRyYsa(0+z$AnD%A;~`eH)XGpU1Oi1vwucK5{L&UoHfoKOVP z=lBjNv+T{yc_3oYzvIT7U|B-`o{C)DjvOw9dlF!NrUL=k{~HoFi8bmhOzOfME#oLF zn5=m_lZ?=pK+8w(Dyt|fnz=v4CEsO-wUWh&zMt~16bwc`3ic}hMmj~qr#p$+x%U?$pxwgFr`J6$=^|={G@!O$fN4dya87= zy;)fs&PwfCUMQotFg!T)OMNr3c+jS{0d`C3-$;rZ!h*b6Ca?T!smHjnB<7i0& zGok8@G^2?>IpNxGPF@WLT$td?-oQr}fD@p!X^dYOD-7L7;OR6$ESiK}7Y&>6495!) z%;g!%uM^1I4QvAH3Z1+v0T6}G5o6wQrVV)3y^ryOiA|B+gCv`Ctg=KV@hhCmW6f>~ z1nt`VwvC?uY(dt2TPA(ZI?M#pY=t*HytXIz$>U)bPHa>%yz zU5w!9CI*ktmU^D)YmEA}p-ar}^dm;>roT$C)q+xvnNGRsOcUdngmSZ03Cegdfm2+( zS5dq+m^USu6IV%m`=aHxbt;HMipUe$7SA$>rYTZRohiA=8cjG}d5IL{+Js`As>xba zlU8{}9b-iEHVC#T`2;72$wI?MHRx!Z*mi z3AxNO&%TM0ioe0H+w{tUqAS$l2ZJMj5q>+5NS%H4Zqh5N7vx#Iz(2|!-qXm|ZRj;( zgF4WLL)YiI zid)v($hTVV4ogMQGdc*CEGrHgyBGqqeo?s>vAQmcg}JDRUwbIlkTmEiM~|8+15~L3 zhQI#iCMCy`m~j)qQen%$+){NM>zauPr3RWWDgV3woh{psqLaq_H@(hcsWC|!pkVjn zzokZhANoqC_GHh#2RIH3)5%$NEn7@WXa&?yVc|7+kQ6_mdGJzkQwhg}O&-&6w{KQ)*4|wdglU{m%ucAT02<#SmK%zOfKn&_DT*oYNDrX1pJMVVGfwttOa<#|}E; zZxHyFFoo8Gtss2S;@*Z_ghi>0)^sA3I!V|?>WtQSB0yVFHb}muC?-h0qiCrEvJGI7 zS3v5D0KlMpjiAojul@`0roIa@ObF4_Zrh&B%Wi6sTTxrsS-$YfZqCdIano*_SQc7Y zBwli+s76cV6^2=(K42#!PWFqr^7nzHVn3cp27Qn!3@VQ8#)Wn49D)5*$!caBSvKa} zGl1s7cA^?>N;<{H@K}^z5R@cik_4=9GE(~wCDccFamQXP(n1#sCpB1%7J8>`Kjl(H zaYn|)pE6f*V~mKgLrfF(+R&3^MNuidmabqPtobi~9T+U*A3aMA&_2@eUnow-67f_{F$3mhCf2h3 zcvM!PeU4Xr_UNiS{9C8lk9DX}q})cbauN8G`Yd40yKs+PiV>p(FFg9Q0ZUWa)bdTd zz68{LEPk8r_&7a>F1~(Tec);(qDW5MnO8}QyDVi&#claVe3ZvIAkz@xk|Chkn~x%* zXR;vV*;jBUHylXyA*m~rGC*&n=Qu6VejrWga8Ts;rt(WvDt4v2-pE@q(KtrA_B1$- z(M>zoo+4-JK6swq)IG%sCEvtJef3xi_&2U3katPM1?T0sX0D^i?FB}E&_zAkppR!CNLER%i zI47|nK-p^9iltg-PfM)a3Q^W`@n>(2G&sQ@0c)BH&n4`)Q?X)c^h~^CR*%DsUBZ_M zw&-W}3uL>?#1jFWIAA>G(VX;DAT`n>&q|Uc16%dMYbi5Hm$`DvB1<4orZ=2Fh!AeX zs#|-_p|lZ1U4@GOyfy{rww(gq)v$J3EC$|dVV#!a70R)5FHPmzDcYPXpeOf7Yv_;I zRZq~zI^TCX#@ru?*HO#JN6+GO1&Ii6X6l2&peGK`>aTJWA3)tXmzar$hdF70GE0%L zY9Q6INWpKnECJJq2NV$^SfKP|(Ubz;n83UKN9O?&-hLbvIFwqH)a8@oA4$P$`2Mt> z3vK@Mbrwcgnon+Z%!vbWYD}}EBY9`(bsRm8sMBU zMO4tAV-seOoB+KE1X?9jmB_cdiv86WQxb(~D&y&v{O7`~UxGg`kUbxbu>8LA2llpA zqS)*)O-3+iQtrnm!=*H0u3o_7R*%QChs&p79BZTyu=#%$9zFl$`3rfC+BdtzLT$Uj z6hZTm>XzkPfwOo{x>PJ5j zSTtZ={9PNuD)_9uk$&R{mbxB3O{h+L`{@iXMeQl;4>Lk}7)qn+(NJXGT^*1DVXGD8 zOFbztk{THu?jqY4sqwFnceZ$>n=-OE-ZD1aHJNjoV((~z;}_c}mHoToT9yVGqHvTL z{3t93?iQdzqvz~M#=EIzN$hSD*lNobpHj8~Qk)1d&Ntd!9jI_HlARjqm^k}bh-+->o$;x{$mm_m+$@VBIkjmQwA za)3+saS!UK6uRl*;4gDKu>Eso3Yb!c)ag-%79t=MW5IDUz3g=fr6{09Kyu-eZ6?6L z$dOj#NDXVo7Z!PUW?J~^Y|ikYw+g~cQ0{Ja0A)G!L-w4HtB-c-O#0CV&=Z$t{tij_By{RffD*E|CLG+4Pn^LB3Q#E|X)c_DGPs zPlmJMEuBye36l7-c8m(rdCXZ$&PryL-;o*V@%kXlL5RPJiE4*? zkaoG@tg)F18oo4^sd}k3Yx(Aq_nY*oqYV(Ey)6a@H%ko{HK6MZZDjQJMyrX!j!Ym< z+doaI0ZQG#{GGXls=Xi`@Bp#wxj3Z9k zZOon}0B|dmJ8*8tlqR6>$H(xMLK1FXGIiI=M(j9@Xk#iBiw97os~_n`1r#mjQJGpk}Go6!G^dyKZHs!?~y8sM$R0oE~L;z zXPCoJ-UrnrV+-`c8mydja;%m{Ap#RBZf6Mz@=Xq;IrTw*odbjK%S0~|&B0jAei)F; z)MLSq$AM`;>9d8yvQ;0;%i?8YP)(Qz`$t(n!dWkYK12_hKW6`{rAjEt2JMC+^qG}B z5KT#S6anRTvNk~s( zo&_z&#KQEF*OaB#2klgeq?%2UbS*vgpBVa$Lo*vM{{#mu2Q6-%(xPKXh7us=3cs-E zo1~EopV_sUY^wtM=DHl2cm*&G)CewtB`uMDI}o7Kufr>{tL|kul%(*i9FnN!q+T`g zV{+Vbdw3MYZro6B4ntm)Y?iiPb6MntIfJ-fcW5JDDk02@@hofaqrn6dschJCt-N$W za+gOOBS^Y)_mqb>*~?x{Y#DJyU_th)mffK#{gHTD4*XZ-DFr{HV z2tM^qE_-t*nMF64Jj%Hd&zKVnvwVZ~I}9FZJritgvzQ;P_dDwpW~7%7PLB_Vt*_g1 zqj#{;r&V^89CE@y;PCC-=so&nqHCbn8_lyr-+_V{rbd0DZcad!_Nb=S3HiyOd)V+J z5Bo%C$$*R?%ig9s7y>|}sR=Fj-eiMhj!lPZ974AZ)z*y9qk;r!6H`B4GRa-QS;tTK z)*ZujT$1lrohs6qvj~7H8ozrB{8TXJk1?qT;$(u-a=L~@A2p6WkbI1x z3=u~A%N<>m!m|`LkOYPuN?wl>MgdikDzVT)RvNZ_xJSi^9VzXSLhFUTn@4OI|g8y`~M z&!XSrgb~wuEMIc&$eH!4MC+&3z|3e@PnGne=+9Y?1E_X;s#TQslGdA7I+TXT8bLLE z^fE0kSqT>1E_fnmxx}&I_s+JlUPTTiYG-WHWKf_iVrA(yP6rMy7>R1hQOzz# znrb|$UmdfkcDdxr-K2awO#hVxcbmMubi7};iGOkbDn)Gidy=k4b%LF0%&}hDt$Sq@ zzbs9#znVE=IZu>5!Br5++T<0aE_t|J4&-ehkN#zlW^ow5C6pE6Bb1L>$VxS-hgtl< zk=e=qFFF7!@{CK>zwYBb44K6Fqpqk)rtU)|)j!Y2UG@ngl;|dTE#!c#BNcL2txZ41 zfm9snBAJWJLVny`w!fAUB7oOZ_i)!y`}^~Ir@KLi`^U`^EKI(&7_|eb8xrgMrR|{X z7r3xLm;dqN?$V^oMcSctuuy$?rlm5(!ZNYqGqWPIt==JJrABK&6pY+u==z1)#@Wx61|2a_!AIn zl4pb8IYfpi$nu%YIYXMH7K*OPN#DXdNyGlmnJ5Se9q*G!%kp76XAEbY2Q2(`gGsh@ zaYO_7Bu600h>S5 zC`3v0+eqcrPmSs;cj7VeQTg7gERa)O4xm46RvWHgL7+e7RGR`jMJd-R%ZbBCW9qm^ z>QIx`t1hiuk)uCtRjV&KO-&P~p^nZ_#tZ=R%03n+zsGS0E*a>5 zS`u)`yrSrtkPd{=W&=|JX*qtqWR-xfA*)>{bTf?#tmy@C?~O%2d)tTEHMUC+5y)f&ERf)+nz4U`%?}6-|E>q zlv~vr^x3-f4z4bYk!cAunE}8Q=VovP>uFD3S7p5CJJ@!6)f>4Qgf>W@<=_2^+-Uaz|-c%qUlRbV{b~;fu zwbJm$8@GmsYWivGDEimbOP|P(49}UOM}6T{S=NbgTFYArrGDng?hrOE@9@iB#gfhE zKFj){j$jl4iM5R1cZ?>l%Y+iIpy~K;!#r7j(YlB0<1?O4q@P8;iCbSqaE7gQ4~|^C zFp%d8hlA|@og`G4|FDDN^+<=(|4j`j_^LdbO{tTM^u4a11=Pl~)?i7N4~Pi^UW=XzW zdkVT;x#ADQNz`)ev`IjHier;qF*D6$LL;vwbEp#U|MpgFP#^9VECj#rUn6cHRM z=;vsf-q-(!%_UUl=Za`?tf`}Pe~tNgK3KVIIp?{Fk> zYo*n_^ zxxMsU(<$wF=&goBxq<2ihC1CVpY`;Kg^xVA@cc9 zx<)`_a9qQ>Q`=Ce;Q*b;UrjRn9*_%1F3iZBpK$JP5-d6p#cU0~9<;LXmWdE&D>KK* zIBdF4r191nr4gzuf%@0e7$w`e8a3lN8vXguiD0C1KdR;rt6b%cX7qAI?=3f|tqE`( z*b({fhB{TfQT;d_we;5?^wOw9V;Hed^Hz^d zD0VS$r|Eu(4EISB$2@UQjR}kyQ2;@J=6y-b&0DU@C)2}cB*NG8k&(CTXur!!=vUMP z>gJ!UkW9^IS?7dWm{_O7=QT41WtAumiM-Ncuy8m*jWRXX^d>nq?{I+@HM-E6ByH08 zqV@>WHLYd1To-nx#te(G+!84=6DpW=Sau@T5)eAP< zA8wX}fuGXu(icbHzoJg8_aI2x(U=|1Zj@>jCVWQ1^dSb59)_{q0hNEjO6Q;3qB(mW zW&|x-giN4`yJ1gaHzlO+ zOP0pFM@!{arLzEHC7gJi@9{L$l@1A&cqWGG47iB;)7N+r!I<&5hj@GYkT|5yEpFB^ zhzNKt!wIALrX`0S-T_KgJ;xQ3qsDS?*;Jrg{w0EOgEB?zSYB}2UgiVWuJyJ&#UoJU zCZ5mD(BctqK-FUT%Ft8mwMYtL=t8;b2P z**Gpslf+Eo6}l5tymXi1?rL#msIGH5ZK#j6;=9&ifX&4K&bVT{T<}ajOBC5U6-kRGev90nBV?T73&LWma z2Dp#m5M@^0qD)7uI}3EYLf(v1FbWOUxyIr_pCqIUsk8iZe0(uGs$era;X3)t_w_d! zMBR{5fzW+Pb-!wLyWAOT_anF_SH1U{hfl2Yqt`kD1#u=c_%=^-)!HX_VH+Daw2B+9 zhYIVsVj&tVelp4S`k_OM1cgPa^LB^dHC?54rx#qz8Pyy^hw;rSY^1#AdPmP->nqVO z>B9?ItTnrA(56}x6p~B?XG>Y*ZIg&g#V)^$f#8aK0ysC*ZOX2ri+s22yn3sNwXp`B zUVgN#T~6z;tlU~q^&W;F6(eDJN#{2xw`>(&c&O9=Y_8;e+-yk%B;IeMUEfhZbd}^W zPYhb^*Z;_l?ufLny&W^&4$owbO)SM-UqYi;ro*qaHS~hdC7VXb^AJQ|AdIbry zm$H&VQL4zvWnn`vIOy`wg3QPV4AC3bQ>J5%A2oRtrYQvYPNPP|_PQHg>*n9>JHZOGy(B(V|zL@bTE(p^n zL8F-_({ogvT8#CxH*%XdKuBVK-f%|;Df_Kl$78**la~U5EVtFz;85z-;a#;0xDE+; zo=v#-KD+Y7Kw-j8hbuE(s_z{KfQ?5jzRTWP98_)Afs&F!}HTG=p<~1B@a!-VEb}srY3s{3!Znqy`Bn~l8%@GZgH>%q`*W_ z&rFeDLYfly;he$!AAirg6@EYt_&mO13dd&ul81>Fo^}$`3SJWQqA(N^?ON z;R*vO@aw+q83pd|D6O}2@q?Xi(?lb7xr$IsjG@sfOHIhA?*om0->1opj7f!|!DhBt zyJ1=DLY>2BqzX^WW(yxR0Qt>O*SFzaU^rkd)yl#L&WbNJ1!Hb0)*@%vNn?FD>iN<13>lg;Uhgu($tJayW)@FOf-w_Z!s}ZT`0P-3%y+6Bq%{nfp zVCIhZMzHdfd4gJ0A^Za3hjm_Ypl?D9`^<5$iH0OgJF_qwkbR|^gQ*n z1JXoW#&CLRXH8IdCphi9b)DB`;5+|PKZV+p&L4|9)q5pFJ}6{D$zSq3S2Qt+#WTA4MF&`h zx!e)i_xT#Mv1Pvr3-o_ycIc{W>1*ju@{M=Cc`Mg|d*iZW_QpC?k2??qqcw=$jrryI zKJU2;mO!d>l7Y^@;a4z9x0U}OO-<9!;Mbw+9-keu11R9LJ?o7(K<(w5WZ*JTF&qN= zd>>fE^76#CaTrh!_@c3rvvaMdXoh+-X-6fsc@)(;9rb;;&J<#of2-DHb}v0yoUIXQ z@_2BD2ObLYywrt~DZ}w2C+t#zIeL|NJ-HYh5F8N-2**$| zyEr?#0aJo5=Wr*D5(38qCggCx31Je*hQ8m~K2~SZBP#PqYT4ewMx7-i7#y${?uy{tQ;mYq&g^Y8EZ0Nu&A>N@y*?k8gzITriw#Lrzpq0h1X zmpXht!1I9jqoM4%|No8uLlQcsD8bOc{=+anpaxt1FV47w9&F)1%;POxGfzh(5D+S& z|9IpN=)rLQ8?@x>!io^AC)b-ob=%-sM?77LkWVHo1hK&oH;cN0!7$h-VL*{4p7JU7 z9U;|!YnX5BBr^Ir29yQ+CJok{LFe6Ry|P0d}BupgaGEAh}oZj ze;)CEje|yx^Wgrq1E&Kg%r}0-BWKaz{&i#Kk1*=50s6110bv_wM1!jGv%;?5*p8p+ zxqund)}K4Nk4UI@o#=r3!krInZeh*Ceom1$;)0Jj{G~I16UV}&^d8s|XdIA4bPOq6 zfC$E?DAv)8B}K5)iRbjFDylKAhe`#iXmu(}8ch3Q5b+cS-NJadYOJd^%1p!N1}w3b zN=$2G9O%BYi$}(YjVjVPYPrP5=xbh^KXPG~(m86oM8@!I_J-JK*Sw)2dYND=d(z`9 z512(AZOkenbNgxd(~5>_(vAHd+0)yJ4G`#-8?Dvsl^V8tu%I)nJo**J@!|%s4=6T< zymNFCztVe$LLnanwtyPV&C+*Xn23f7;2l}&jDp*r%zLwykbssYmM?2rZm^USjaEgS&ZdrkbpP8I6vYbl8fq}+_7ee9mTOo8a=(hk!mhM`K& zvuL*!KFeM+*=RWhwApmAxYRhSyzFzNS2LZwX1p+r<Su9gsJ(D|G99tE7~jadkuiWbj4h02I3f*a z1W|n5oOUdKu`P8R%Uy-?F^Bn%3CfeW*>Cv4!;!WHr^?%VB^M~QmUDA@1zwU)PRv8@ z>zy~_Rx{6a*)0Lf&9j|XJ}%6h{TRYFyznQfwCf(OO+KZ#ZhLqe0l0h9g)N!NxPA|n zbx&dehu5myH&^#O{sur~XGKc$kI^S2Z<6?7h1 zrUe(cL^1@&s(Q_PF#*x1=4Tr{WkOcnC?^XzB{6GeudjuYo3c8Dp@iyGt+aBup?PwB-#&E|8IR;b$q2^F!n)xeg*(hUjN*!kuT7`~Nw*kKHo zeisiaPa5j<*!`2`G)u05%-WLK^_UZ{~NPzd&_E8~VUG_ia zkBw$`b@Mk595h0LXoeXY5id+6N7;g--py)O7e6z&r4fj?ayK}##GSufSu1mW2S=D;QaOq3>27gnF@yn+Lcv zDz235oQB>#{Mp&d?m;2O@8}~Zk$MnxkxEp&Vad*JEPHVz_BgcJhnx05Q>qaExr_cMv$%jBl z;i6;c2XQ`uu{Ie}Fr=g)j{YgWKpf(w2l5?%4C0d5>>?V$=mmjmrj0aCe{MbR437_- zy^4cjKB17r%QqY$rH{~$vDCm}3|K9x!NjXKh`5DQ7QQ+$tiu}Y zyz@q2WBTy(Bz9}7@|gFdETM2n`RWaK?N94lXF}od_JobUszHsG`-gy0Lm#t_z$)gc zY%h+*(KqL1(FVRBE)FdZT^5P5i^r&!M^@W31fwsck53bP1?FA3fRQYjO?j$TYKB$eY3_9Q-jqgo z73@0$YE92r*-O0yu9sE0Y-)!1UmLrr^6@G=|30sB^VMU!i`ErByt6{tM}OVJbp0eC zS4^W+HL!j_)o@1!uUrc)U}1K{s=9?WUv#`cet!Cm&c}+jHEH&ic1e<&7+aCMHQ*T2 z$3oQMcc?}>@3lgv`~FHhC^P-OzNkas4t+J#h3IXGytL}!Q>)wyhBSWTLM`Pt0$t^D zWQdm-e<}E1b>^_v=$2b~tzgEOE$sII#T{&cwcK$z-cQ2^V@=0cO;0CEGEx33zSyS= zGtVhuSxvW97p5Wh+w9N`L9Zohxqt*x;YPkdk^>qQy*Iqgy$~}d{p#p8&bx{mU8HG~ zH7N}}!czElcUqKKZ~>OA&}?|4p{5DE3K{g;pH(tN^b>^$oN4Y#EroXWx~M9^3l1|q z8k8&l`NS^fAg$W*{Y<`w&6GM96YdNoe*q7Ri~MbEl1lb1`2jc6*EHA1j(>KobXI^4 zlJu-D+{x(y(aAJMA~^rg70G?iqsW=%7XmAYKRb96nT}Ul=iMnNVVUllO+JFOQJzZM zkm`QtE7-|enx9ni!*eiUMys^D7JYxn z_Ul%?vs@d13wA;Mn$)z8;;6}9^PAb&> zVtPn(h9Ql?K(VEf^t;`=X0a9^DIXCxH$3Tleh=5HP-Q}O|Hfyiky0EnY2NAL3fX{N zGxa3JtE{!`g!q>Z=v`yRD7G{)Mtq?pf7d>Y_|#LiQ?NWdEy-Z&enXY- zwJb3E^}jgdTAb+ZwnjfJbUbjm1dn`HHGL!R~4JmT_jItJVy6-Q3Ej8C|T2C2A3 zPS_yRnS?Y;+-n!M(Xo0s>CVQpyZKMrpjQnmvb7{tp;noQ9S^mHH#>5#gTAd7eodYJ zvaK**@7a_RssaS$1P}QkjmgR%FI{)1l4cr!9v&s{=quV@h0&TAq@}=O`w&sYaZCTM z5bjOb&i?2a!kih1{mx zw>&+%4U3pzTqRxl{IMBw!UW(Im|e-r-)~#*;5G4s?~_~v)q>`z>?rpk_Oewyk?_H| z45>iyRrQ*oJy(L}DDT|EcnkWMfK>Yu_=*Jn(qft&r`V>G(PG&1J$VoAhkfrc7tqd5 z=AR}4eFr33hU=5e_Z#nFp1MKQFDPYw+Z2IS?y-Ttk{|w>@0>)ny79y7I#gia>}qjM zsMvmTzG0{P;Qtz9U>AT-q6YEVoKuV-HU{tNdc$@X$JknxWxT1jJ$-Tuh0|^S%ex85 z3%pLMheMwlNO7!BFBPZv|Lu@h;yA7!(gZWEDo=aJ;*mp}RleiDvAuqU*#7yyG`G75 zCSs$n1kf``5D=k%hppTQfMTYQa)Y7*uGMemHZe5nvsS>|B@)nSW^6W;$jZ0Uk{hf%9iKgQ8FWlFxL3GGP*RdKN6>CtX{={^Q(<^ z65L>!0;U|cg=N`q&3Gkq>T*>B$nIh6{VY}H#@k%|s|hfRN@2!Pf-3!n#+FAz=oHq=^+4(~U=73JTG892&*=^NdpT!K?C&Mk(j-=k1NX~m;f zaY<8SKT7Oe{I;{sNj3j~Q%Y;{TI)JX-^)>$xEkE>Aq2vJ_adsFHiCFWs7r-%fZ`7i zykkdcNY>K3KK-0YRJe5nn0lwn)1NJ1=OhFi^6LwCrAjJcU&lhsLE zqGcn}42(R0F5Tz^Sw5Ho0GqF~*B6mT!hz%M`)Kn^B|zP{Yc!7{BgH*+SXBU1oG7kmwK`o@lmSN{nX|V%Yk@e-wdx) z0#VEs@prKQZm=BCN`z5-1>2K-eWG8Vg>y;$wlN)xkyu=qBc6f5!j~G|K#)G^4A>*dazDcO$9Nw1+X6(}aFS%QD312C9>= zIIjMx7cwnf0B#*c7hVu!q^xwYLmf&i2hlQwVjHcGBJcZvHxyv2g^@)hn80l3eW&M} zQAg@W0|85=B8f8@PlI0n=e587(>V$LRuKch5dGWAO3#FfHWnIIHJE?pvws3hbc2zP zpdV^IXt&f{s&I)ctZoakTncRylI+xL3eL`|OzOvkynEH;;lH{mz|CU(Xn02<9V}{FX0hr--$Lfz9rhiVr3lviUdhG@KZt_3D-j?`RdFjR?X;#>mSU-OnODJ}q~FhAcM zHR#mr&bKKU)!?MEN5k(Zs$R{(*a~}KeK%Z8N1{zou&sNjdXRiAtW?MB=?-s4H$~~wyd=~h z*ChUycMH!Z=3K<4hJ71iMg#_dFoA_0ST#hEJjX+}{O{&cfD!#e&&migf-F;F~$*+G>By6>EIY8o!NgXY!w7ApL*Ji zt3Q4oonJ0-W!pO2Mz52xJD6x z=wokD-vM3VqN|Q#R{Pz&SkfEBF;zD{Di`2_E+s zGj3om$YS@P)~DT~wcH$a4iv*}jr+limDZLiEp{{V*P;!6wWxW&Zm)yVFN}dQ#%Dk* zRvpW6zq?pQW`A4z>|kP^PR-wt6~|VVOj~`n;NU{3Y17(a3-EAS#q5>P8AA-Ded?nd z<&C$inu2c;U7RPquWJs6gX)gvB&}!7Vq3X$LIaam-@5QTcw!@kg!=2e80x;GB}b_~ zPI(?uWsa^HtYv6@)?K{DQEfpL%VGh}$6*xf?Nr|M-uEVFO*2{B&#cHDN|3|XBQ42F zEjAihJJ#pkETXWdKG^mCWZD0@g(~%PauhI~t+Qg2-U+pr<40gd_;&w(a{vXo+?%3z zIdXk-bIr2oIFNBw#sKa0aOd5N=Vcl`1>*=8Mj4WD#u{moBmT+jkO-8DDTpFi`1oHY zH3+5g9)~Zqg8nbGx`}`y0sd1ePv-WS02H?%1QD%6kd?wMXhYTIRak?@R0#)g=QV^j z-@~!lPw0+P2uA;;+PvJHN6vX2VjypvPkFr=cr_2*RA!1>Ei9x9w9%D>JfMB0C1P)| zjdkW{;yC?Cs=@0AJ^^^Yi2MHP8LGc1Ne(=JX^>JGRlSI;sxT3 zC>T~uRHksG1sG(bUA=En@v|MN7&Ud4ruPL7PN}O^$kV0YVn+VnRpgQ)D+~&6LS-;8 zvZ{3NKcmiOwN9)kRG?_}MVQdU%L*yh93ygD`#`t0m}LpDqY9tq3-E*xi0@S=6~Y9C zK})j!11A)(2e4!Ha8r<+D*k&PZ9!?}K6u7Xr+1OX`>P7?{AYCTC(3?_d%YU78=Ure zShRni9BS*O_Tg}%T7&p1^CV4`X@f+=A5ce_n?9G53ImQBsS#4H8gtK4_&3o}=eu&QKtTQ9zkQ?RxP zC#@rg3$idRB%@X9`-1~QhKcv)L#mAe3aVLGNQQ`Pw&7+ejWJFOKQQh4{w|#@9$F8^ zHjez{d;odXbuEcfL%?_#`bC-$yFY6~)U<>+Lrrb|CP5;prk>G$z5D(`WxiF3X;QCI ziTp&@V8ayUc$$r?Zm(OsgV|I?5l#s85|5a4KX{5l2gNFQL?{Zk~5~LFc0m-vUL5cyTOcCevC!JFYtNC-3T#wzSnq+&)D{VYuTSjVh|t+Hc9;rp1LmamzFoghXe$D*P{x zSd!W>9egl`)>Q|DQ&A@Mp_EeWWqV;_fdJKvgi3=aQ zt%;1ZKN%j()6+WM?>v6zH;9N&0}s7{L71eifI$9HDH7$0S{@0bg-G^aQT%RF8$~o(eIcXwLV~$Pk38Kd**HZX6(T z6aY7pPq)hNoR>ob97Q|xFnj~~IZ4l%0n=Xgyxl}`w?tv$D}$K4?r8e)&-H`q;2XDt zGqG`K8tWcHgo|JnG#H3CS`&CM&TE|*--@bAco$ZYuTXC|9UZcs4QM0{2Wu>)Q>moc zs|GxIY@j5P`IlztclP9?Wt&6$ZMyJ7Ujba6?W0$DOIr%;r!?pAnN{t9l|{Fgj< zXYkx8UPh)9Yw{?M@SzZ6>nMtII*j?0$}9v`Eq}3Kqu@utsAw!s2K-5Nv+@)N8a?58 zrED?rOPQ1FwQ#tM)P4!DlX|k4p5CSsNE9mht2n#U=Ee+yR`O3df@aTX3}V$8Is<-$ z*GPHG<}%^oGP%%Xv5-y8`E#GXTloAwDT>=r834NO`KS@{SHDnBx1ig|gP)Iz(DgIx7yj)SOLorN@lxCkXF>wbp3AnYi5;75nyS z7@l221gedRnn#e)DCA(Yf^k2obzK`(XiI+5iOZmvc0w>gC%e#YhIs*(H1epzZj$r& z2bYwjF-n|URkwk`Wd^_vq}p1I1hA$02wz0tWQE}crBsYKEE9-dQNf^Cbeg1wFFh%m zua(oH&=Zs~6n_v_m;$YD>R)ke&16BxnlB#JOE*CwX`@KNJ1G&F1)At)+%w!tS~a4K zFKkL;(RlivOzVLq)Dq!}VTs2ZQ$4oNN?B{%z0qjIggGt5-~iypI9?sCTSe&Ubwo64 z;bSsPRrJR%^46+NtjIMsmWO^ZX;OpHviTd3Em6T_qT%z@hLCJtUPR(Lx-@P%E;d(q z7lNXY2vUNUX-SLDR1oZ~^vHSeL_TMw23)Z2ZcI$@M}X8#`IMvHSbrfKun*T0Zu0rb zmRJnl5J_Z4vJ7Z_=hfk-M8$k>Q)BLVHb8xr*Y;P>M|r9U_(0MN#GMthx@2+dlXfl* zvn6{iCTRzrfQdes=G)QdXM|t<$ah2XsSVQ;{?ykMv5I9WF+=p}urMKy4j7IYh7N1k z0R(u#k6AazG$+oU*ji=>okvaf1Y2lbi(>gS&yhNJegNJHX2W3e{Q=?hvvdK6(aJwi zu}1D$s4$__GKGWH;)1zh%T#3q4UROkRZ*5N?=7#WN;OI(>g@A&7`VSr;WpCJjx4M%?6&ff>-k0AwrO&ta}*5{d;Ti{`lKJY;3G=XWkiHR!paA&3vHHzy3QCc^99g-rPCODjdJ#QJ z5kuH%4w3R2MP)N#k=DlvOVY)O19w#m)i!t5ds@tzGkh%QuW3BMtZ!H8O(Cx?ovJ( z6hHyg9LC3c`EDXET{a?ZK5AO7`S$0uYh6UjdOQB0HLN)6p~VH&oTskfIgPto+R#;i zTvb44nKRz#&JIiU^|W0FaZfZEW$m%#@K9et)a{Bui$s&%bh!oi8?I!67bu+|w;RKf zr6Zg6fCgir&5e`@Ib3+3_a4G3|H!3B6u@#&6p#MEVMnx8=UiRCSB&H%a9!W;926LL z(vHrcV4ET_jmlc3qAoWVb>E&mmw2zGq-R#=W*|oshH0r%rJE<=j`Btz9IRZV!`U^^ znk0r8-U(@DkF^H)_FsHPgZWUGDhCM!WZ`WJ~2NB@kbwOX2!Qp;SK zEDk@#r$ckNXue$nsu}uTIQ5M-U+a z=hNHnkN^Ng^5l+H!(R$cGM&^Hivy>ZvGBl(0|eEApQ$yAw4yhj#TES)4|WHklfn-* zegL{NdEe#R0-AaF==m)qgk9qPmy1cWPaAE6YWZ5pz9rL#W@P<+#cv&LgLLFSEN2FJ zR}bj+G8^Vb;~tav*afpSa_h@a^6Z!SnF~m~625!f1(74c?-jpMknL8oGXJot%U+2N|Jwzp3eldJ`)JE8ZQMv; zEt`={C-asoap(*w?}b|j+(f&!zBJnTzOTD^`NkbC|E?h4S;3tA>&A7MYY)yu_ZEN~ z-Z=CV-U~7B5&pYH6>An5{ULT-leu-3+Z0}O6ha9}a@OLI{eglw315DOYYKflnPK=1 z^gw+E?vY$<)Mhgl#}Y9UZ$5vKlXp6tgfB&ngLlY&176O4Ys@|xXG9+%A^r?=v!JI# z6tjvmu5fX!ljhnBgkdt#UnfI}>wG|*h|0RG@^o`?kjW{=z?U?;m#oCYOQiH#tSQcN zomQeO-Cs-kw;vBlasY!$SY$34y)J&B06C74#HJr3u-$0jAHJ)vX?w~MHnYoKJZaS1|JW%VR$oHk%vtG?4 z@V=JPVe<-1so#ovOAe*nqN6J!ea>?XIH(N;x`%-Z52+tI5}=}yP!kN3jc}qLJA@c4 z=Z|pKWkg3^tZ~x$2)d-nUIj(e?4HBzcAYlL$|0vAZ1Tm+X(jRTpbQ6(!SIyt;XYH0 zv>dqm2PhA<+~S8k-glNss{^#+Qe`<;a~h~*u9a_fy<_5MCCZ=q2nqtJ(kJ{G(=xq9 zrnS&Ejl~BdV%9vD(8}n26sA#vtM?qrvX-Zgpgz83|7ta~UAvydE-O?S(O03=D%lHt zMh06S&RxVuR?GT%{s4O4egSt+d5bh~Wa6RodNNY46=tyZjQXyU37|qM^rYVT!H!(&+xv|TdBD7aN5b33vhX>ij($> zdXlyn*F(Gt1s}bebT49Xrb7JZx=DWrO%%H4dRCanY+K&5~YOq@+NII#B z!JWiuA22CeM$#)y6Vn6rf4rV}2P>3(lf+FqyOv>lyXEE?0VpWzuZcwn&eGa3_D~WG zJ0~{M&M;!k6+e)L;F`9>5i0tw zD3r2#uYD*?^YzdPXEi(YyS3U}8jBQpW2W{rhBO7XdLXEuQ1wy7@es{Pe>PnsW&N!J60#xMdZ&~{YK=^T>XEN zcbbA)0LeS+P~elt{_l()>jG&y^jFqW6c2aiRM6vLr;9*NL%G6*~I~P)zN` zA?5ugD^<+i8Y%{}Fc^<1tPm_)DI*bEPPq&V0LjWipYmckL-e}-29$DBcQn@7T#U>? z^!W8N^WXC-Wx;nd1hIFBv-=PM>T@ftXWLdec@EoGYoA9JJR4rqF4MDEi$bbacdd71 z>0{~CBMz*)R`}kL>U%ChHBL9_j^UxuH7@o!HD&efcfNadgu(jQyyqttxn}IVj8v3g&&AcucMkW@><;ctYYJ`LuO0#mNf#&^e|j5>tVh0J2s=DSwbQ$ zHmx$CZUy1?LlFZ|y8VjitZ=-%oObp_`!8Ow8>3cS%V+HTUwYxDuAjJ70NG0pBF z0NYBzPeZ(X03_8(_|7X!OsB!ZiGX$i*je!|u)0@UURpL6Twc;1OBb4J{yMPgef@EU zl{NJ(v~mQ=bury_&y(4cRhelyk4~%QMbXrYatwpd=LNp#e&#(bBT)6@I;Tvu5~vOG zrd18}_^-5Ln;Gmy^Hy-Z!%8Bx0hBAKXR4hVW2gFy{ z;it?CtasqSa;f>5N3cvpPJA(thPwTok^d9AZ?TQUS)I8j`?7;z`^V+wp?a z#{KVYL*n4y9cYrO)n!v+lH|B=iS|MrHUkx=TA>wp-YoHo>mqW6pLt$?#{v4cZ_IF< zSZd~$kn?$gig=&=|4oZpUO>Sb;QrmQsYL`chWKY@)|y20e&|cR;YuM!2NMNYc%d$% z`_^=B%$i#ZkoggPLx!sBGnQyra?Sdk8_)+CfZwa>MW;L1Yffe=RxO*66x-w_tz2S} zQB>ApOdR{0Lr!RpO`HGm6!GNqhde>Nleiw)xT%G5)V1pr@3_|#ui1Od{k1R14uyC1 zzUhP0M%69>{2$9!d2y&ep%(4{0r>6NnKI#DexyaD0UuCvv6dXUwx(#8zrZmN%69F+ z+3LCQ4xA4hf(91rM0D$SMRzJP_+an?kt+q%;I~!lLrAcO70GwKET4VB5lJd`iCx}* zj*xOyi}r+wFTSVZfOd_LxZ{m*X3yLd0x@`oZW}|)oKxMUJZ>w2ggc=CF5e(Rr}v=! z5;$ZAb$eyU20ES?;x!)$IGA}1x#5dP-SN>z#)b7Z8L@V_ap{EsyVYVY()v~W8MI}f z@#mHZyYRqK=Kf3n?H`y9B5WaDZLG5}XZ85jHM)^IZY<06^gm1swo^snMf40hF-KFy z0t2y}iA}Q8ZbiS--@MuZ34wFBe#KV3 z4;xJ5oLncN1}Ard>GG?=^5uCpCy%0MKdasb{bV&h;`cd$`VLV5d!FfADacx)-M^}cnG_WVmfs%!;po~bc$iY zc$Czuh3#ZHtGFVKyXqEz9@<&g|PxRSLo-((f(|L5i-k=vxy z6@!+$%HCol{eItqh6X?8Oktz8qxA*%kNxaMDz`)&8d*Ng@3f~w!Kf*#o&0$6=#a)6N!a-nzhamgb<6kuYGz2a z$uo_s*h;knY^S12V8^ywskhns@YSIOzb}taR%JQpkq?*xd$6B7`k#!za(0wMf*TTY z3^t2Q_y^M4vJLHOsT&?bq#vDL5k}15Xc%-NvD9=6krWtPV9y1MmXCM^Y%%3`bR_aJsgio`Yw8ToHqDYZF$h8VP<%SlIr`VE>L zoG?H;01A0KzWA<~6m1x(U5IsFU1GwR*tYPnP~E2pDx4+Bbl@&t&JzbqSjBo- z7o-H6Psw?5sO`7fG#7Q?!U+kK2pMhbnRw3f+lJ9x2E z5K{qZ4WrjO!Jaiqlk4?pP4M?i5kzn*kcb*-0MKBPQrbQn61lG23Ti{ON0Ux_SJ6Jp zSBxI)1vkae!*bC%eFDLrLJ#aU^XVD6b0kai&#HPKx=Ze{Czpo-71R<&LCQ#TQp+z4aBGur2@Ev;Crs3-C#J z0E=5TC_e-p4!uy0Kp_B5%!=3Quu@f<9|#$O+#G=s4OeAg7>&FgK!P#czpo)8f~Q{b zL-8>=l@B-+rFDfas>2z8kE$WGm)z_qsv$-jr(ul8=u#nCmCSsWOQRJX&1i(DKB>d9 z@L{>PEY|aW{9|d*(o9khZQpoKO03HppbGVt2;o4!s9dpl_MGm=SxePAOE}Nh_mqmE zE4+SeF*H(_JS#2(`@-UHH9F-odmdpPVZnknt26kj;UlB$jcZwJhbB!qGe@||5pq5) z*Lx9Ti!%UkCO-Yijj=O1BWwivnu7NEb3_iPi`OCj+2>$pftaa2&WqQD=X1nq9wc;J zdj>mG^5^OXfP^rK+}wdd@x$87q6oA*wZ9m2YT3@5Y7cj@ZmHIe%R>#k42(7`B%<|} zrIESyl*OGYS}5V}j}iAISDozu!%Xms`hP!xFQp=$VqcFP8PdN8LB7NZsFe4ie~A-n z=gO$+XrH=wE93D*A~Uv4I61*QQ4w0Od=a4N{^hyPOZ2M{YQiY&xM**+%}*vdPqICa z%5QN~&H>71mi)76zE}M7!1>d*jts0H{!&?Na9-D(e=azCoTjcf4wm@=@6f#nGGi;@ zn8tX0iqIp*?m;_({3CuEF;1CC7=T6u$4oTW60*!>doeM(DaTCIa}OXa9_G-K=&gbY zIOAa4!AuZlmQkuvkWu0QQiL>K3a64G_i)_NZ+m0TYN+7Rxcyp=JG^~7b{!+O7&Fq9k9VPk zIC3V{?Jmwu0d7>JW^HS^V6~PPbhcjgnA(tg>3M{UzjcPUU^VkPW`ZE(WzfS%YXNY2*WE+?t!%xp zHKIOHzja2g!(F0hofkPYWVw}$oNiF{*q)kN;8%;3KQ-wB& zBDO8rBQI=$Y>j+ZNv}PPx2i#UXiT2OvKZ(4_~{pOQ+MMLN}T)kg9#=9o6Nczfvv51OWIR-88=NUOE%ww8)o|%Z935bo7;XwZ0+s?)9Rrge+IQLsejB_TY zs4|^ppTbss1Md7H9=Ytg7HO8uA?sfx&IzbJk1`UKXaPQH4uDIQPijECYg7Q_4W}pe zQlk56NpT4CQED}^ptMiQjVOrz9!&@xI%i@_luE!A?D4C;MIBPXacp&zv5S-BFcEg! zR9)psPf6Je-00KeuV^Oc2`5h4pEdXWg>Pa^kJeJMXHIwoc&d}%vT(%kEGr7_KDa?~ zDSgu37Oj(4dI3l|n5MxNmKjC>AEMPu~!2l>cvU*^X!bOq+;Yp z9v@|1wV_ZRr6@*)&WU0QOgD!j@s&~^CZ>w{gB*aQ^jWAvSRTFhsBkYMX@AYoa@Vjv z$q}yi9)x!=YOQVIyt+b3%-owstKj!`fi!UTNE}c#KB5IpN;E6 zLVxM%I?9^TF9vQ`#U>##FcG7Ti`JS;m5sd)^TM1I_Pa@@&XaI%W3w=|!QvEDpjT+` zru+(1_gpwkq#cGR3&kvyB(#N~-zNA2A%|@2Mu;xe>d5IZwe%KjQP)`ylh&e49_#UJ zQ|zC=EzQrbR@uAt7%Bh6vbH8WCwOS*35zGQ-M~59eJa~J(Y#HTK# z;~>giS+b;3B+2uqsEl}I%?j~9Eu4_C)OFZa*ub>cKMxpll*{u3j>!Ao)Z8+UfNinM zHZ;mAddh8k{n`BcapjZHQ~mdq+mEhwM;xopa>1}g$J2Y|NF2|L>xfd z;EfDm2LSnQuRtHlf$(-C0D`y|Mu?a<9TQ4Swn``W8o53#$dQ%W=IOz(?14D>k`(cQ{ocys@#sKkmtf2zD7zdsyq*`W8nj#n6{$}ie zIwM1o(vY9?mi=|k%$rj?tW2kkri?6djtxM7ZRs6w#d6{>F0rSggfja=N^GAOj&&1z z-Zkj-0#i(llmWstpbvGkPeH%+Oj<0V4k|D{>_Ln)y!-08JDW_{#oO!S;&MiI^VGN$ ziv8NG^kNDwcD3BV;LF*H*bx_9ULYJ|$(>9QvJlu|6o)+N?8(X~@C_rFVBV&rtL+3} z*n(9IZixbvz%Ox9dcegQLB*4IoKT! z>shb8ttT%1B{pDThZsO`WDWPXyJTP*`%M4^||g z05_Z$b(C*EjI_pxxx0ahal#|%qcMO};2Oh3BGwGP!HLl1O0y**Ty%M%X!Zgxig3mL zQT>UvdM$bjjYbSSjMmK9Z9o9#EsC)4S6H3_A$b8F1C2XG4K+vbGFm5a9%idI1H3+< z<>2w_H8ZeU_1m;Ozn}LQ9uyxqlTz5kJXH>ty`uDQ~fc+KO>6a%iU4VEY_>n&GDf+P2^&j&*5K2 z*P(P7nL+cW$nve;f%Puiq4AcztlYu%uJ|QG@rvJl{46+SqBpBn3-9LmUb>U1@*&wb z{TzJc%#{yk^@&@^fiQvwPO%nh^5Dg;q`<08A zO4gP`jgdEab!gJ@?Ac411dJkwI%@gGb6LE!O6l$D^^!~~$&&NJYC5r{?4v#E+;Qk3 zymY}E3FNTq!gnu>WNpE_dv31feZMV=PLn$tRf1dMCJws&o17<1lAKj>OnJ=7uDcl( z8+05BRAP`V82Ek|MX&*;@2F9p1~i#!ZITyEC0(0q(KmsqU>=QVibB;{V4VSYX_`Jp zRGytMA5J|&#+RtCGqriLhRa&6Ji0$mT84A8r?d>ejDI$Ua(^>_K<-2y!5}ts^dx5%ZID=u?B{B<}5yv zL(4xzeyCu_$1xbS1{|u_8iLZ$*#Ck%H_ojvMjAh`U>yKoY8~sNP~XHY=iztl3Q=p3 zvuU*T`^3rXot>I>fL8=|aBy*6eSAj-dR6zkp%YB2R+i{}vJyDQMWooT0BtYqkykah zMImD5B=;C&VDtpJ?JRWpf!b3YVQ4fj_5gxTa(ZV0-C9>XD~7y1m?hl+GZZoTsSo-M z@s1o3Qg?(uBo7S#Q~CeV7|STZYQG`;>j=R*fqn4h0&Imy`DXNuFs0TS3?e0x3Jeo) zt~4)z_R*|^A{3d)crenP zcrak1LsfVNA|g~LD%|NOU@LXS=(%mby`a>9duI{3GhTB|NOC0$bPn?f&Icb@I!4;g z>pX^>e2BrZ7&BdF8Bj(ij>3%tSXjQS2n8DW{xb!?ixfIqJ?d?M) zB?N-^s~$QW-$SR_ZwP&$&v?e1Q;J2v2KIbLJ|xi(U6hcK)fnR?&pdYBdE{n1$|E-h z=qR&}e%bhYoylbyg+er+qIqeyRrORH=N~tg`5`|?(m-3L71&{4HJ;-D2;0I)XW_G8 z3nsjA+jn$rE-ndrn?tC=_lxa-;BU4<9a<}5Rgsr6voT{?>fN$XE#F;H?%j};>)&|UBZ`> z3M#{o_Ba5Fcmz^G5Va`?ueKhVI0K}QRF^Hm*rcK3>YGT>V)>#LO?H)eMO9UCs13wA zk_>tkx|ao_SIgSKQudQ=mD=H_kDaNjSpvM_C;zW4?`xlHukE+1Kc+9Q88JMNAZB6Q z(z%&m>n;g$W`4nT=nu4fM`OzuL^tczoXUV4 zyj_0bMjrOymGsv?`Mse3qp&uG^~vlB6X%o0&M^#wlB@notUFGmU4RtQ{xPF%v$tw0${~@weJF>U)IOhEwx*L?%NKje#gw>OQEkk zwww?CqDjrK9cZ-z3sbYa!?l%r>-60Az!B5SmDB^qd3dg}ReJaMuvU0yYN@TVRel2x zvt8PUU#fex{QTmb&<}=#Ct!+fuI%2?&pvMzI^1$2#}2h6Yp0Fg4X--cVr5Tw4VZmK z@bw>KAgjkLyO2UT7^1#bec@J|qhGq+fnlIHpW3Um$uDHRhJ!{`AAUW-L_IH*JhT{RN$RyX4NT z?0u8EN9j;KE_1u!u0qupzRsztAFy3v!9BhGhSMRr z`^M^?yIZfbzr^1hRlv)!%7+Ka zp)fUn>5VY8xICmW?&1eTFhFs);AHE)c5LJ)&kd<@a!fA6jl@NB=%^r`Hv(fB{=GUNt<=A3^w)_a4&AQ@9(m_T_2{9SH0wU zn|bZ#KiCv7WhhDO{2?Ld(*b*RDqLvNcJQLikb$cS$9q=Feg2Ob9c)ag{2sY=6&3S6 z-5nL=rFSJ*i7w8zTfnYOU0knacF4aHRU5NSWkpUt(#J>B2WxE<|W6SKgnWVH%6y`NYoHeYeixXa(QJTtVo zIy^Jjnpte>k7vx)&D?5fR+`!xhOUN8D|*_Bm{-=%5Lde9@4c`SrM?kS;%aeWPp}qc zN{Z*Z%s%&mM6}WSRmF)|bdXzW?>}u#C7S}wq?IwRJa)^XRZby`;EH|Ew>@K4fd2UUxRDiVyY!rkXwL&d<^i^?8k!m>8kRJI$JUX z{*=F&ciqVvgD!d2!cp>72i=7!y9Dk~zsx zoCcZA!>$lFR-!R^%$~ypl!($PBn}X6Q0P=Lcm8QYPWNaN> zNb+02h!#U$8ijLqj3XsOcrT)mD|%Cm$>jHDo_CUjlq~?HDZI1sLKb&a<445!74U(W zz;*roKz#BvY||p>wLLc2oq}%kWp-l%ekjVGiyHUYt=IYNWxUn;c z4s3|6D=wTh%RLOvZ%u0W6z`VEHji8#>ql5F@yCr&uqyRFa$Jb zP=GsURl;Fc+E=f$rbb;8&)**Q#Jj zi2%-i8h&hSK+`mIEvBLR+rh7Jv3e@$Aw+8Lw* zN?{sW++=WBlQ*NPVSa@v%f|3qmJ1WD95o=5@kjIcNr6OApWgBI;WX8|7uP4>=eJ=% z)@SUe#4*1qxAO-o#=?udCPQF4)gcX)R-2*Gk0ngjc$m+$shnf?=a;rAKp&v&UjG); zW$E`4b15HV9<-*2e7eEba%gchsI?6oxVCe1&SsQ9+;}HO)@S-BBt#s=NL}ql2s+@y z2b%k1AMGQa4D;;1XfjOB*jAVlKEq+_YIukJN6Rj0wYNdUbE}4i>9i7f|7h4@cXih7 z1JM!`>S8k=YWS1l+Cn=d{IzZQNEg>9-6y`|457T|{7T0-))SM)PIO^s>Ma!2-0{6@ ziG6#^G+a7g)@QbE;XQwC*c3gnXfvQz4emm50;an#3FAie2qO41Zsxo52jxfoRJumP z)S9NBzxrCW-L=9(iq!r`sJ8~=i&3~tJ1d&p$SA>i|1GgTHEM!HTq=2I|H?<6h{`Tt zX_c-p5T&Bh%5L#RzjSIg%OY@sA^*N-t~aw*xuFo7hUNU-?)};v(}nNfveQ* zxR#wGQwmpD&uYw`cg&^@O$)$-DxBv+9*VDYpAIVt!x#K1eEdm9@iC-NLToxC&qPIf zIuKiV4`^8ZL6jEIwL5w){rXtiuC4(-5F$J&#*q+J7>b|Qxv|v>aB9X(sF?Z`j_C03 z(m$?2NgBegS_iccj|(q;7we?}%}8Y!stasje>{D(BF zz3!)^XXem9il<^=XCRC)ce}~%L_)0fI#I)#N9LMx2U*)viE#yq+IL?y6ho(pt1=1V#F`9539h!nv_@tsLnLzE-7Ga=46 zYAXLEU*iWBu%T{r7dAq{MUjL>H1SLbbKaRzcVb2~Ej2tTn#E73!FdZ=P5o}&DzEaiB zp_`c($vlKZ%i;2MT~$2%r6e%T!W(XNE)`@ca4y5fu?~@5y#ebl?MAzTq*0@jyTMq& zB3&dn&JI8hb>!p2vb8y6f`GY@z@7eL1sScMYOY%f)+<)yoBxNcs{pI2dHTSm8>G9X zL>eTeJCz3MmTm;Eba!03rCaHc1}OpQF6mSd1i|kBzP|GQzxzD*;WGQ1+1c6I**$yC znI-Nn-F|1>io0pzh1zc~L-{y2*lo)w-D14kvkFlxlh8-yLa3C?%d(i)mq3n9=-_QS zM0yCDAGO}+=ZlZ!9kL6rUJ$Hg5-< zZd#a69|yj&$uC)jqjzDEkT~{vSqf39kI+SVpy!9FSBYQ|yR6`ELaH#bMQp|-p1$7( z=jbgb8&BwrGhoT9hy`_$Ex_GWrLUpTt@k{ zMjHzzG;Ty6-TS|iXO_KODqkPw@P1$TC9MHVhFnP@Ch3z2^0S7g&{nB@Q<*d4;%;EJ z#(GWWfdMBo!oV*n@~7egBt7Q~*mI;ZJ;o-=^qD69=U+Fr+&^{eP0R}LA<*Mw`Fk%a zQuFO~3j&v;)v+B&(+T3%)#8tlvV%=)g`tNUo*_z&@o~tNJVkPV$@%QGLsev;Xuo9_ z#o{RwSirrp%OaRo8El4aA{bbTv{4K0El{myS!7t~4(BZrbXIVFZH>K;i`K(g{gc)i z3!DE~+Sv$<7%iU4_O=(HPpz|Y>p>FfMU?;^=!78e=|!#Rj1}@k9V3;f5EuzWo56l1 zyGMn9+ta@{_pFkQP&{NoHcM0vHgY0wFheg_ILr4jmGTbr8SP>QA%CNo&6n@hwV)2UF^=P5 z53^dE*OK1#9UGT^C9GLh%%{Yjy&%u2*j(b#rj^bfm}_nvphR=C^(BAA zL-S1eAUuxA{Rs7yh{4W9PCE-Y4f1d+*is;ux*Y{s&*OQF&ww>bcDo{pVL(af^_^-#lhhbCxKr`GPN8wG_D`j0z_y2h? z!XBSBFlt1Iq>|ntO|`A%(+q3CC)e54Y;YMJOFp(*OcNTNVX#fLGSa0Ra;1qtB(M6RRM;b9J0op@ir2`>S59v|C z97FG}?0wi(N)L(6qBI&(Cq(lhMqYy#-`t2c>Lj1LpXz8T$uV<)O_J2461V)1o_^$D z1VvUjh9)b9vde2pYV8=n4~!OhR4M-AmB_OGtk(SD&Cw_%Y|J6~=>X$5vkT(V?6y2g zD!!68t{)dBq`AR^!MSA?~_-=wDZ)pzY`AK#h!J ztc#P|nrh z4IZyvV(dqvj`SB=UdZaYceP@tY95=~d2dLaYtJCx@O?l>bv7JB{T9W}C0 zD}$d>_E!uU+Y)e^Ccl}TcP!dNW+u?HCH~}7#H%-yWQ(TjU5$CwP>(%$(Y{Z`GWSRd zP!+JYYJGrOG2QNkz;$5y?BV4d{19!+nOmV z!YbhKb3a6#6V^>o^>kIin~f`vgHS&6;(lnTE$pA&z+YG~F2G4MWc==Db=2Fw40mkf z*fD$=T9fzv;O$Sl2OHw!`qR^j` za>T+F28geSg;_@4#+hm`bD^pBIKuN6%tz`O?N3*&{Q{rzBR-dKh<>d;Wu(@#p|sNf zP^00!jX0~dr9uY$x;LB^TBopIPf=9RLsx2Z+L;}@f=pHJ7E!94 z(N_zG8IzBEjyYoD(PvXJ|(Y1`pplbSiX33>k| znFX1{4$N0@9g+JH(&-#hwlh5f!>V7OCk5G3LObe}!owy!=x>82WTnsK6b2uJ(c2kK z*>{{T!4J_Y3AlBykLD|L5_M6GWFg}8Sw5`EY(De|I5J?1@5F;DgvChhHUk+KP;|8e zx7ZMx2@In^FMN;YNd`CCy||ayuAw?mNRCwe@%fg)y;v{S-()_W-hD$Z;a&x5gS9z+ekWe%(tD{nTbbiceIm#m+K1{19iA^b$` zs6jv1^7lrshgso6@Osd}L~8%2qlBaqVPyi{U8tjge>ng#bL9;<;wTy29jn8dRV&sAMj*j^Kjckb_K7b?17r3pZJD z>^d@@p0a6bs|m`2cChGID$$_#p)983Bj1F@Lj=kdMg=R$nO>k!aLFs9`)nn^qk1|G)L>17!Hei zd=vtAr12wvd&&LStOZZD0oWke3}e$Y`0Q?uM=96YVsB>l7DOAbXNE|aGX!s$EMfbY z{e4kr$`iNtM#eLvAJw(}E#j@`%DQXzjQy{RF5jzYst5d3x-&Pr61AN`9PPwUg&IU;EBF7M0GoQd)_wjxbXuDF1QWDO z0@k71%z-MF!QPySb?-&Qp++ConzB_ou{O0-|J>p+?2jF`eq#Ooa=Hb0bD zPdkx_b}4tArr;y>-Mo5Bm~I_pmFAos z%jsS8a1r8&#<}j?N)H^qoiG6j)TO#`QSc^r3a+#2LCRAP8^IsRuXgEQ68kVZC6n#U z_;flpsMJ3#cV9uYz#~5Rs^VV2&xy?6OCj&wp{HoDgvAQ$uKQlt4J>kuMf6Ar9z_2} zg@7cW533&5FSOSM)^+6=enuEZ1s-8J>?F`Ux0g~~e-Fsc>fX|^GvOdju^_iACjh1; zGsTI`h*gm$g=X#}_d#7Y=4m6?djj){;TzhNHQ7E^J?b)|ZX~7t6Zi$PQ-U;6rwRg} z2x%!=>_Z|Sr_xrAU{}HKWMz-vB885G%KZcUFm(7q|^^EW$I1P z*B|@Y4(hb`;RkKSn4uS{7ZB!5FR?6YX2VLq8sdm>O9YU@CXJ4($zSB9sYdUZF zDdb=Ag-6aEo&1ZGf!{=Hs<*FjPiEWc5XG^e<`JK~#&mfEa#$;TIZqZTHT?A#@K0W6 z-vL-0ZgB^H24-~!IKdY_W&zzGWVsV6&7bhPG`ZJrdnw^*ho6|$b;Kgetssk2X*WWX zzh86+m%Iq6q~z~*A;~RP#l$xd{CY%Gso}Gx)A(LAFf*L+Xxfc6vZ(&^Qe>x#U=nQw zMrAFVJ2~Ga8iApDTm%(Dmkk%}sOdY^x5t5BLlav?5K{ijxR(4v_R1k4Q6?&S>({N_| zoSXV_hq3)Pk&%&QJfrLe4B2+Hl2TW+Pyd-zk^n5;nCTj4;q$AUbJ8GE&4GDvS$lunq!4(Bny~()x|sSv+~7H zggJAboXC$KG*N0rf^M*+mkYK(LmafrO_2-~M@{}ripluKD(6+t@}iV7CxO3^tFro` zc@DiW^PD>bB8$_*0`$Vd0H|Sdgo?T$}{o~n?44N zmGViPh)xmIf_I_lo!OpXiBgr4m&h1vU0OTzULthwJaFDeRW;xYOf7cL_mOu_>l=Ly zmRTkkcjt^#88Uf3z+RjjZiSayk{=H}B->;Gh1gvEbW&C?iK0e`Xy146wj|8@vwo=%By4S62Pa7k>g86)@MI>d zdA%9K)s~uIohL5QyXgW#X^SZeX>{jy_FpDJ(P;8H(8@f%^ z4$Mm*2{F}42f(m#QSrA19DLxE+nf`Z8rnSIKR0R`b8})L2nt=Zrz}K%g#lmr$gI_f z0Js6Ug8ta!B z%*$L(`eGj@w-7Sbc|&wo@_Mf-aI<5cUM$o$SA}nMVVeP0hL)#ZD z&IT9OO8)H2SsaugcsB6$B}ce0M$MG89cj?!E32Ya4@1<~8FK|F=ivzi1LXr5Rl`{n z5&I-(k4;q0QwGX-&mY85SsXlwO3dM($y zXWpp=xYVjHd|)W)BP-*)_=JqtgS?712e)>FZFN`&?Yz9Ca`o#{;|uC!iX&+*q+B!`Vcf@JgPX4S~VI^ z&5_>sQ-a8dG+|VeJ&m+5vDg1u<&RzHZ(bMdM!(SZE8<6fMQ%MQQUYldedkLHZ8+je zmbL8<1xL^(NpSy4QrXiWOrx{PMm&cpdULh6vDZGao{av%naSW|=JnEG89J$hoRt69 zC>w-FDhK9uT43IiQho$&@-y}dG#lmQAT_j&u_z^0KXx45xR2fYlP7SAFy@WFWMDTU z+CN0&_F8%iH+71pn>%oHu5K(<<9SL{>*bF|6a?^+y2u63pJs8n7PQd1qRC*-B}}lp z*Uh~6MShugRlNOUOBJ*q2d~e8VC|p$`8v$BmuQNnbPD{483HP?z@8+=Q;z|TN+f93 z(icG5tq)LpX@q7lbDre+I4~TmkkEXD!$I_k@g!<@ibK+|XU$~puw#gpL{f2RZ&KST zPKnVJrMm8LJe7da_uv$j{K)E9gD8}x_sjH535cFgQUggpW5|ZI`V@d66L?xFdT5$u z!ZIQwsM=r+9iP27;raxJ2RR*?I?xg5xI*K73ws%*G07Up+7npZe#5~^Gej+Q6pG0p zDO2+Fi$)|V;lxw-UV08RJ<~H&xsNr8!fKFr$;N|MtQST<=$XI-NiLG!1oNwgn%j$Z zcuU60Hl8r%xaXy!zdRRdkli%9c)l7BVvv0|BrxM5XJEmq3+3;!SzbY*X$^Y}+m7$> zSpQ{9x>ZZrvRbotE1U;D#x?oBk8|AQf~@P40@Z_V(@0SupnUcQK|yK4|Mg^tWFP1O zIQ_Yf60sD{HN30apqUt&Kj*=te8@O+w9Wj9ufultP=J9vQEF}chT)OoR{r+`SGRQR zqNs!m;)}$>828}k3<6MAG;-ei!lChUpORoC*;R0@1vxec-G-CD4Hf*@+}5{&+N?5K zHEkAr<7Q76;HI$7Y8z{qn$$+qi_@!B1K!R%$_R1lOO;;nen7H0apV(%ag5d5OE;FJ zE-8|2&KpXnXppk@AW{oHck9Os(Xi|J^C?tq276isg_R$u51p94q^>5~6Lsi270ayu zu;xH^ZB7Zkh(e(%4VegBKaXGID3QmxO& zn0^r=R!rFQc4YSQ^FUcLn(1&0O^E^JpNXJ8_;k358HKv-M-o=TV=9>aUa zLtmw8TI~a|JHMhyTs#%Ek?s5DpbxUgzf^cWC*%(dwTYQ>(XUvP*X40G9E>{DfalYy zBWc@J3Hl3xW31Lf=G`mkF5)FIhDTij-g^|UegCNcOGLa%K5gtkKBxgp92fgR=gf;B z269{(t#1t(Un0>}hQdi;_pM6S6jbs`-k%GcjuU5`#6>#FrhhSAX+nEDFVg=aG*3=Q ziF50q07%pa7D#_b)1H9}zo5>sHwhj;dz^G8ZHA$51RjxP4U9XPF48AY@?^8{3Mi#a zAslLKLHnKsB4{gdk1%*Yq}Z7yg>gP-yXzKHJ7>9ufjYfEPKs)mV^fa1}~MB8TDD|*gbou+vSJ}9@!VCtmqKrbZi$q_b_r~%-uJr&$2V3$&J%# zcZQ=je%_vexd+X4g7UiC?nLufhDG31Q4Q5#OuM;w@bEEw@Aef2D|u&jx3LB1 zip{k$+!-nZCVS+XF80V*`#22Wf`XqOlwe~222dJSTXN@|Q zjR&zdZ0GNqgO8Vi*ER^v@lSH-xGl~24iySGDh|mj?4Vp#q}!kJ1y~N!u|Y)PXIRsR|Ry308wzsR<-)rZh~XLJe76=HE$3$t^vD zPbAEbY{7)QxRl=_USf;psPa{NAQPUfDVAZlEACDe{T*xSXBvVm>_l;6T)JP67MJkg zFcT@_>kl>t3tjNs3gMl3&x^{e4`$|LQkr6QT2&Jr4_>Kj$W1kFg)UdkoPxJ5I?(+* zh&+Q>G-T-m_cWd%EU3%Db`Ww(UA=}bh&Xg5ko{HOZGgJ;N%{Io)5W2SHK(BMoM@5g zTUEn8+@QfN&nde)OLX=0mtA`2DAcCfW7HDtontHy_f!$YDOZ$5e4nFhgmZs{Vw8W8 zGHghrvbf_XD1nL>nVdt}DxD}4lkP6UEci9ty&-B8+Q!#4txYCJUgDb5j2=2(`WO8w zjqqQob8b5E3A|gR5s>94P>J@ zz7(aP2&#w15q)DpAq|7A>@Y1Kn=o|H$l;Uqwrrx740tqea(XhSMgaq(%k@Ec=*d%S zjEdRGS*tQP>$2IooRgO1nIYS1q~%{{XHu=-TFzPy7nVw+z~|t$PN>SK7I5|$UWHE| zlc+6|!KP64+e?f1l*2e1XN3O{h;f%vuY|&dvlYdNdX9l-6yx8Gok*_?BW23`maJty z-hm@fWq{D7)PK!{D?nbP+x@&eY0BJ7Ngw$CPMc9n_)9qwE5BmhxG6WWcjXB z?2O#DnR<~PI;2!w%^+d|licuB_g}h5JWM0vVdL+QxN330%jyDAQkzWf(6({MqHtXE z2kn@(jD^O;Jp1#`eFPiVREcZoNYu#wmCt(UKN(~9pd1;=(~m?3!U$Thck0dWt#7kn zxUSj4J#Lqy{h0*gFyCo(&dZY-eH0fi^)lI=kS9|$xNHEo8Af=&{nN7fk6lZz{xYK?-mEQC8Yxo3T=>nUzIv&fO(-PVl){_z1sT~ct`-STp zhIl1(JEZ#S$2nAl*D=`(E>f;cX&u*KFEXt0nEcH5Z()BO*6^#=cd7mG>lO>)p_#)1 z^;!#Ri&DoWPJO4@D`B3qfpbBm4;2R3m*?@X2{HQ4p}=-%m2~9sN0j+T_Rz_*BCs_= zL=z8cu!dNj{qhwehdt$M|$dCHO4$RtC_8b$B8 z48*zs7hmvqosk8+dPDKzDO4Yd(l~9dXF9lH$(}}KwglQuFY2B}rJxyhj_1l7tB6gP zE|yD(X=|oy(Aqhjz)*=eq6`T4B z@y|7MBJ^cau0m?pBetHvS{K(iNn;VLBF?5|Wq%0HmQK>rs-Q*Xd!;N%%)>cu66{un zS5efbEV=eQELeC|t!Nj0+hJoo`UneIM`7iAp_wafaDa6pCqmE~Gye;5=oG+t?5q3d$jk5`ni4z7O1?uF=n^Uu>K;O0iv=F+mvYBfTc zacZ(PD}6wXi0i{VY-Nl?S-OyN5&ANNK|Kbp=RqRB&7y7)tKc%Pt($q?EbD{DNv#$S z8!>OrMbq-J=_R+R%D8Y8V(S{vilrZyZdqA>{y342h6I+(4qmSk;)S77;bp<07UKct$SeWO?Eq~VX;$BA#}xHUx26VvSyOk9uA-D7q-cpKw& z6)`<9aG2j%zXs#H#Zip95c-AMPr=r4&T_=CH6H^z~eV@qipe;JFFqmA&Ql2fsh0qSIv*Km;*1BR`I9QTh4Z97mSZm8#xO zx#u+t+%rhxd*mt>mgoh(&yMP%2ZY#Xh<{yn31JF`x)hT?@Z|IOz9-&f-k)tlw-yMSd`_mx z#~Nq(<;SEtkoDEyJbcL3NR{6WeksVo;QP8HE1uY>)}wfp*`bz^X!^wlx!p)#?BK}; z`a*@2&RUiIcphl`(Nh*)0tV4Urr39CKkD3)U&m!p53gM7rL0WxuWcMWDWxvX93Pww zUDVy))_ydGC+ECV_CCYmoPip1U)~4d33o`c)7T1lU34_Yg{NtXgxDl<6pS0yi@njm zkx;Dp5SeDQF!Xel1URn!L^oX!Rp=$>3_+f6qb)MJ$|F$~{+EF+Vz@)++!Dv=iUP&c zeHTewjR@Kpjc9s5O)|KZa8v1Lf}Og}sMzaXT@*>G6TK&gi?vYc#;a1p-3X=osqZe(2hU zChpuD(b0f#u0wYPCb2q>$U_G)I4Sj7`2ZioPa%U5lw2piQK}58$^-)S8O~)|@B1D7 zTjC8r?=T|A6ge_p$!1AOvh2Q(loK%#Z$qUFDXWRMlVl|NI2z(>J0%6?0QG)*^X`S* zldTvEs`ytsQ)O0pBN-*~rijI=dhg%Zn;D2lt2EeW)D8x8*dewkbSUz90Nz!Rpp)Rd_BJ|2TRUFs;yerWY9e{1^6I*3i4xSi_B$ye4)h>=A zqSI5<#|;xVYEtd4X!oyUHFTYWg`>|=PN8+uF8&zmju%d%7?fG1wOmvw&Z`<^R{FVV z-`XZSE@zTvZXW(ormbtO;uDqpcDhGn61AHX+B)e?(Y$M(9eGzqaawrWz?V&|eU zdk`G46}KlT7n=Ep^)YSWHQa!_GR6o#BF7u_WRIQqf!)&u57Io-2w3E}+7P|y3w!-b1JcZC# zez$01f?AnJOSWB9dil1Woq}?0s@f@d#C2vKRvzT(X;WFvbi{MM%0_3wmv2N@6V=YC znaud?;X$0LVWR_1yY{AhFbz#rt3qu#+`UUHk5pYw2KG=6AT(hJG}m~!WBZ$o>*CqkbC$1pf`;L8lD zO@fr>ib@eo`gsQe^~3DHQpN8v3lBJx1|5ogGcTk|FSiH+w}x~+wPtA6rX?GVWywJZ zHGL2!`F(Mv;H}KK$%KSfGv;wLS|BSAD^bLJ)nrzDk8l>V& zQ$Kb7bBmHE-w)wKriUwSOdbwCi%91z)nI4h{Wd&F1&xEDMTO)zGS27Hbl^lbW`b0* zGj(hSt|70=01wtmoRz~0V-ELoz7c5^p4EGj!4<&2hP7apso)i1+F#P)ndc&H$!)aX zN67bb{MgvN(vk3W5oPFmq2r*4=X|bYnR_vB{b1F*jIi{mouXYGsq9{^F&fIzp`gPa zFIRyL>|-z4GEfP-`Fi)l^);ol$u0}fc0W_fv_6yD%K}H1#wW$W=veRWmaSSvYYTqS z-W^(HGqyfCcrK`$QKD&3v4YTQrcHh!HKb3SxJ2>^`{$%fymY97U~1?jm#ww#hqCO} zqK3#ljQlpi5fmtF`Q@m6&Xl&L)*E_0f4AO`#0EGwB;D zk?~MJWJF;{3nTgfC#M!5esi!<4=@VE9dKe!oC(gY8L~M)6pb zxni9uIBAzbST=z!mk>{NxN7&(zotwY1I2ys9PgBeYbn6w(!Zu=4M>b-9g-@QSL#4L zFsGwzL&O!VOb}sgPLN45jnI`TT+OxiJ^-;2%j`K}`W7n*LQNnF!b;>eFmHLZi|V&l z96_al``?8Kq}WBoR%V@TJwv~u3bVq-i)EHwsgiJPn8yh7q*xu;9JLg0Y%BQQxk{GA z0aZ|!*M)6Tg%b^|76ep1-up|^ycN>)9ErJLU!*5^!=Y(lMV>~;JdZJujEfzmgeI%u zKJsMb*}--Yt{}OP<(YC{froXnW`lg%e)mHT@cZi6NJdDUvbl9PB-3B5i_xWo9B!s5 zAK%1Ul%4)$^5IG;89nKncREQSfmyRCOqSj@R^I6~i+#Il;kDPSyMCUBPh_S?IvMS% zpQdPyMLm6n&7Coak?OgeI1{vzfAutONX8eVZ7ff6(HqA-qpbeJ#%&Py)}OJA_m2umR2_ zPUxtghaq!|Uj1yP;a7sST3%KDw%oSh18SQ~*{5Y!>LsP_2VQpTp>`4@KCIm?dQ!0yqDY8u!DZ`U|!$V_PMH4Nc z!7@t$^yqpqsDE{gx>DJJZft150J2_GCbjX)>H^ZE6ask&+TGBa%lud}AXAKP`j1 z(2;~lDZ{J?|9Y&+(tcQ)NI;6RCiQ0M`jeTHMgFzm1oY#!FvaisPnpuL9xBpz7te`g zmtQEBq<+AsaeG{^=l1qxG-6}eS3Pr8y}=KMzLoU4QsWEbbsC-(3LP%iCFp*t3I3nX z+TKIg3#DhrXDG+s4huXL=o zxy`p*Ptq4C`kTdfCf@huKcQku8^O?Ta!QK+`qZ5ns|CJ-p8y3(Oc@;O_E-&!UZ;cg zZm`KMQLvQ@KSTyEglAbns$V1Kr~#GV4(h-nTXugJ?EvB1M4mYr4y77ex~ zXJOcu_#<7Eixr*trB;QRBs!kpmNt>8OVX4xQ8tVZa$>8?nK>n-??^usrZaj}GI7PvS*>+srtD}@3~BeZ{aI(r8Hg$*>N=nCAjsR9v_#Lg z<~y{1R|_P313hS6;AF+}2i&j!98^|Uq7QO_yW66sFa`DhPV9YP4uS#Q?r+Df!|#az zThtT~%41-E8`z@8sbjMSss7%}4tfb{yaR5+NG8z$_pb^dtVMUg2X#L7AkN<>%QrZI zJb%~2;{nQnxxMFQrM=To2?!sCfv^?*ew!Km+|*RY*51YWnX{v*q0Qa?sg25z;@nfr z>q!SA)(zpj_bfR5nZ_`!Cz9iGaH=%)2$-r-VJ&KP1pJ{>ZB6zo(Df7|(N9;Q-Rb<3 z-qN#Msi!2TC)=61wE}O@zJfYJ+Xa$sp?CC{qi}G`CQS_ElV*IjTI|tawy3c%1b^&c z7o!D^qoXItul@D)0a+iX1?|4>eo^FdFEMI9HkDD~=~z<(;|7yLvh-=X;mqz_HvW8U z)pQ}baxb~1IL2(MdA0>pGF@^2ZlEJU0b#e?i>o$YDc<6!7gur-#RsU z3B-nc{0sxPS3%vMER`495hY3GEy3rULfS{9r8z4GXk3AT&)X@LM9E~jjX(Nv4)`+j z386UBt{LbDchIB8dBd9|F}z+jFRmRE2=VO1EpbH|bvOi@6<_hvnJMzCVsYe8jTL@9 z;m0MsfnBc=f$}-{QH-2R8NOKz$ zoG+Ufl})?5Xu^|#4EO(RlGiP~0&PRX-t3px^?QRBfB!56gD7C`s3Sfgx8GDbKM=+5 zpLYHra%ij@Hh7-dj(i|9{Vwnof@BAR9zg~JKwY=YkoZ8*3Sj!#^ca7^CGUOA30a-@QDzt%+Gc)BeO-gkt zxY+8{>kD)SaBp?G>#i7%49=#*#?WBuCtuvB=-?3F=W7ypZ>db+WStlgWkeo^LV6ax zu*O;+C(-FzWOS_PTn$Wlf~her85&q^pTwIm;9{vdzc-{ZWu$!@%k)!oyCUzj;WSx% z4uAA$n}2(>+)e63%tu!>rXvI?Y4Ah2L~Dx&xr{&MUU=GIKbK8xgFO}@=yqf`Sd~iE zy=)?cgfO6-ljXWG5en*~3Hu|=uh^ml;AUS^oVU|^M&iXCuam$w`8)TC zC#oG7U^+8oP;5vZJE0`Kf?n(9uZ{6O>Rpn9O}D_d|3{+V2FgxVAB4; z>&07=Xr#I2UP}?SY^W_&t>G0pgu+t+qVMKcl5>+Mn8|XQzUJfNA1py|Y_S4S!Ec=h zIn&q=wx(UN%3u>1ztzg82EE&|-zLm;D*B3pVNLOD@Tshsv>rtac#ug0nI*_`C?emw zNg`Zk=jGYM?6WZ!|FajK3lW>-z3a%BC?X+cXXIMUOcFhe#=gJyGcu&AU4DADV$*KXZCeMCy;~-aVmFc7Sr_}y@FUxmX~o3pE6H!#xeCXhP!MboIyO)D;i!* z5=HJxw<0|;>mEyg1uko;4t2_?p9(H@?V#vl|0dv$dS%92+XJMUCJ96g|Crq-IzK3g zfN=HJa_jZ4u3-I@-(e7i4_z&xd#o`1Q<{;J2lgUz$Xh&f_l3C1)hf8Q zFIT*`4n4;SdlkT%9gyj7x~Uhrp~6Xc<>JoD*4n28n@!ridRSx>}A@4|+?Z+d>5x!b!tGAAXGQCDs zIj{)_v75_Y<6D`XlZGw6la`5^yEX5(=_`NLSMMgAMk2I|kbn2;3{cI>!>$!GcR>eh>`JYHwN2y55h$8~Sn?@goO zbTu2%6;!VFIaNQeo_4WjN6R4;;Sz17nO;3sh~+5zPz&!T9M$2V7$Rco{1v$n5q4PO zSOL^`*`^J537>{4` zw35Z4|K;)3cFc~NZ!E7n;^VbxWW$hI-Xfo@r>IA7isGchn`027>B%8K-<(LrO!$gP z#lsx40q97y9L}v~lJrT9A}qnA6E9#o7@D#V2>Qc_B%DNCj*9(P^74koebRi+5V;e2bhFiK$F;iU*p&Bvj>=1CxBH#7_m=q8Rs zK~)2B9MTdE;<;VCK&{CIB>}TR6$Cm4#C11S@Wp_L@J|7vr896>|6k6VIR;`46hh-c z0%Jhr6gLC__U8lK;{E->gxVJohmKQ$#e>YnfbPPzXnN2c88{Ub5%cdx z+)R&mn%RPY7E=9h;cacDH-*%Yqj(U;UpgGzQXjCh-LvAj;dm zbb{6NPXx}AL@OEOC{r$dIy>e@xqw0tks>zb%3wq=InnWRs@? z*|2R@oLTOA5poS8_$#Rd2*7%kSL0myo9axh>D9b>& zw-pJ%={98n&_UpPzal!*8y2Bk)Y9H$;bWjT!-4kQ_Zu9u8x(b%x)Bycs~CiO3-7#C z7Ni68;09RkJ9M1IU3_xL01@0mKf;>?)B%l*!uqeuAgep*Kn95D7D_~+5)6sVbiX0q>LH2JW@H}u}i30?t0s@u(kp}$D z^XZAZgQLGCzlGoVtbH~hsVDKa2-2DjqP}gk)<%^j957ll2>#pXq@)|D_$`W;m$Z!m z=yYPhk{tKyI?lO4(Z;d7$Apj#{#H#ju5u(3=${fmy(jnJ*7-MZYRGmD2$S=l$H@LW zzWYmF02xxCpe_NOc1)|tZ2)FjANa_Ui z7svjuC-x8DK&ftKueiN0NcY_ShLauRi=+q;puvC--S6qSiCazxW*&&*wvrDTwbToM z6BD9BL9yLa-FD$mC6L$oAiP_+O}vmM2VhrjK>B^ZPg(sJzK{>XzlB>_ou}PIuSS67 zKAd#pU$|hwZ@9Ck;7ctU-)Ig zZ{7P(!b*n#I4uCb-%EXSb_Txv4U?sjDUcBY#ucOTE9bpr;_0jhm`ugc@oKkSh3A`s54 zhLU}66_|k*kpL_==gs}|$@2mIxLe4~7l9t#Eh5m0fe{saaYyDMhsJ?4-$baJS}*J0 z{XhrA)B@l8p}6zs9o~@=n)nufH#!GzWYJvTm3dJ^V?%0-LD+X?%q2kC(7$CAkeQ6% zBTaxFWnmQ15d_rp^dDV;zj;2xP!P645HTd96odi^x>BO)BT>i z0(K{UGZ8>`%7M^z(->s}?T1Z3l!*q$q|m)e9)tei*=_^Hqe2ET2EcSpz!198d)ur@G}|M}$kJg2*XQbCleK=gMOdQ}BTXk)%3H&lTr@5qZcu{b|Bj1Fc|!KzfbNO~W`X;wsa>u+D5o}H^`F(hT|0OGYTFP9 zKofvR+;?qm{yRKa9~u{;|L!+FbU6Oy%{dK1KuEklckBrL!J|PM-~DdCcLV-(0}>RJ zDX@~c@0~spclfNA(D?roq+8Q?@+AP3YJh6)uk50f?%0}Lfv{56_|Me|at&Y&dbK}g z=n(aq-zqfMhKQO2{dY6H-VgYzdUyDdS`ZqfuI6`trv(#<4+AEw1Ju5cPu2emPgwgK zZ>cW`u>fSB0zCKeO(uWgU;TqOWF}N30Zh&anDKtwT+ILA?`F9q(m?_)K(z4xi2h>r z2a28;3k?sEuKV3XFxn~b4*~If|0DjT%^w~#NN(NliDF@rmk9x=gYtjs*tGu(k5K=Q zdHRF=)&bKfIm$%irKl?Ix8F6n!f!1XC6{rhG`g4D5ziA|DAs2!taF5H-Jd)TJ`fr z{nX(*@|#1z5KkL_&*C&_a*FOi8*V1C`_9re@&}J|>)5w#j?kv;NC5EAKs)Z^Bgg*W z(IALTpa*w#lQ#i%yNv%;X4UlDewK6PUv9G8!x8`2e)RKq_~i>=s?x3b?Mc3o>m?t6 zxT_RH2?PsjmKdz}A5jiUZQks!?-zbCQ(9uxeJbYR(*^cNmDEtn9p z2M1=O{po|E?lpXaC?4Au_l?S9#y8CT|4(d!*8ThfvkZUrfLuOLtn|I|$=mE9JNT z!rvT>aa+lq)x&xKt*s930RN;-M~6)G04{g4iS%z~_5Usy$d2wa;X(v^0o8Aq{>?xA z-;0-L-|jP^K@xj`mGxct=>=4Q0+w(6z*gs0@9(Jh?;DT*mDNme2L)b#yxWIe5cygb z2#kDkAn@G3W(p>`gT7V*{pC!5-pT?7?0vi*^&S3N1B80>lGfcy5~A>J?Ee-AECd}f z)N`o9)eBGWSO$&3eb=YSJY)ryF2J;e+S}O*Y&?Q|2{fO3`q`7fLJ$;e@Qq#==066u zDuL=b;oH8Zf7k--`GGW{Y%D^F_Wi&%C#t54^PnB8ZKbXG%0QRR0X8#HtED_=h|A

3T$GDPkiNRA@}E+-EW);j|ft_g<-XP;qK zf(TCp3IB?L2%kH{tOCwTh!q6rHRl3glMon24%n6xAa`CtA$@tFAL9~W^n=(I^w>D4q<>hO1YYUUwd5R^NG`S>ZWwIiBg~+JLbSQUEp(G1rbB_F=&G zEZhOs7oa0~H~4wJfrjcA14r{TQ5=w!2UpKJebxn7v9STDlW7aE?FuqWz7J?OxI+#q mQV?_X=yunYfz@kao460~W(5`^3=AuQP}>2xN}vW9;S2x*g1^@Q delta 126960 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

Lr6OrkPBbR8QXp1h8D{5-M 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 diff --git a/STATA/jar/SDMX.jar b/STATA/jar/SDMX.jar new file mode 100644 index 0000000000000000000000000000000000000000..06f6dd676ca3e10ac26b046ccd0a371a791fff53 GIT binary patch literal 250077 zcmbq)Wl&~IvMr4}H15#2yKCd_?(XjH@Zs+6?(Q`1?(Q^BL*xE9cjivanfu8jpwK`-kU&87;$dn)|MY_b0tJ#5R^q1-ml2_R9|HoC`@1P5 zP~9J<`;sB4pXPO+56b8B4^wG=8F3L|MI~Bk5$W&__yBs8?+>JJA<^k88NV^ev17g< zsWW4-Ip!_TfWqYA-u@CMYe{gF37O&@fp9NcTwgsT1Rhl1eV3}+p^snLKw~M)RHo7= zAR2#onEt+rj61GlY~V^rgar#R+y3P~)7dPmlJu4ro%MT+&38i(88rQSyiWISy+ZRm z)G23IOP>*Sck>u$S_9M)N@Wd7T#`)t`!D~!5+I=3e_1rh=Ss|-=>FdZh<`IM(6=$v zH!^q9w=&oN3+q1u^Eup~tZf|~|H0Mt{|DX%&NfC?#{cU%*y%es{^cD0G6sM5c44Idi&gw*BQX5` zj==O+bHMwnNIE;2Tm9qhkpH!D1NtJTLBN23l;MDY82`%mj}0K8?`SM*@EJxI{Xg(P zYiOnK=$NItu86IS@sUMb+eS?@Gtle?lib_}G`qH@L5K>xLO?@9Os-s!VFV?~)?w}v zC`XrdJ$OC%@DA3^4l=bO=PYt9Z0dEreLeb|HTe@f59xR9QKs#WvtJ$Oqq-mOuT*{! zZpVY>8~22MU|%9^3OnrxFM7qPq1>inzO+2;deiYFgKb>*g&?#}gy`Jv5q)t5^V)d3 z!dK&?_{rWccT5o1K6r%`NR@XqqBWgQVf^bW z1BtOxH24>y9lZYYk8+Me%Z(MwJdVLgV`3VrLli{?RElD3k%f;XZ;0$Hv4itG3fL>(#2TZg|g85r|fW>da z-KhY*$6_Xs5U@rjEd`1S-i@FL-u##V;2Dbsrg4&%}zAVfvfM-oVVM+K0(BaFrq-dy};WkDU(Xx z7Egk^E{@~UQZ9py4lBKkPQiT#FwzrPM?nllDdy4i?1H-#Slu+g%G1q%B9^%m+%Gn= zMGcI5nup*8c~7oce@r)Fnphj&%PFH3#b?gN&^N}5VrvkiL0*KU%>RfkSyNv1QAo-^ zt`k06FXG;r@5IavLPakb;<~r=^H$@)8Kp&X~u8z+#;gM!?gzblU`HHkTD%jh6iMP-qIVI(-ejbm&wNeFfiRl>9Y zx>|CGQaK=$2?Obxm9(@S>+2RZIwPYvW-5~YUV13w5+*nn4vcY>=lp?wf?Javm=~o1 zNX9J`$~90{{k(7@4SfPO17itxm)NJO>8R%yc;NwvsU0>^1)ax&u8VZ*B#QzNDb z7dER3(Y&g%T%>t6)|r>7Z0{0QxUaV(TBOT*n{?OG4R3gFtmS-O75iobaMUAGd-+&0 z!t0pQ610bmx;#593Wp$lohGi4B3E62?&V;3hxQrY$!c`*Y&BQl5 zC%C!E-^@4|JvUC4xIHj#Ut#HHn`Zq}c8|bhJo#!&^K+Vxk7hv77kxwT_47B##L24A z3AyxU`F5gIcHDxpb$7HbT`zLaTEuP{+KKvo9nxz%K^|P~;P?PX5I#J@LD@uhJcIV^ zU_xN9Fiyo(WVqRL9i;jFYtbvwks3AwR&3zr&NEm$HbVJ)`5D+ni-wv3H238Zq-3;< z`|g2LDH&6$$FHP&cQ=}i*uyLy4ou#Sj2az;M*10+Brd17oG-)|NU8O!rdBmmB9vF} z@Y_T<`yJYkl!z^l%>mhD?9D7kqT6UtV2}?4{PKgsenj+Cdg;+j&gierFgBWA9Ujxe zT&*^Svpcz0IXeR`ijU$ROcAcu+91uo!|bNFWRJKj!nwt9CIMB~iIZf%YdKm`xgWd} zmNL4K2Y75P;Z`=X#hlQ|sMwW_omVDWj%|@=WIJHwu02{HRLybE?q4DPTk8CcQXN6n zf|4PCfS^B>3)R1)R6$!KV=HqtLwPJh1 z^F%-Ggzx8s89}Y$++rX)Y8R9pRM3~++YjEw4{6OVXMS}V1?Cye<{r8q#TOZysGMqF zT*eqWZhm?mbv~Hf4}NI5gZEfo{lWmZ*XhkLgxsZ}5!m?w7 zPNF9T#ft-wafQn9RF2bKyc1?JF=z**Ydh3Q>@5ht9a$h7ZtxhL_*)xn+Y&(0!#dV;X=sMa0JpviU>dxO5AAu; zhmFfjLuVCSf8^FZIEgPfIf2rdpl>v4;t1p-k)+S8)W-c?%*pn1PJMVTvTdUEXQ63p z+`jwdZu`)Dv31FXm;R{Xr)(DDq5EAj5TC#yu$M&G60{q8%GHe4?N3M|6v8a%7)`&C zv;sdaBC(AkI1l+WO&@1=4n${ha(+A@m|&n1JIWDP7NNYU6mC7q$=&k3LD5SD{ZPBT z$L_?K+~Z0AN41!wZ#s*p+6Ds+U^A?nlEIKS>z)X+6){)HMrSR8T&X+T7H7K!6Blv{AwXwadc) zl*=Mts4y}hCoZ`FsW&$o6HqJSWV2pRjbAE?uxO(nGu}KIpt+U4|4nH0CJd=V8 z87^?cVUu%X5e&>Aa#yh`3L|W~nw2m<3%1L#vfgt5cc@9t(ceBblLkqi+i?~uSQe!K zET+>eLL*O)KDt1f5ufuj!U22aq>H6FDz#k(UJ($>@dlTSrG`&>h6!(7aRYi(uTwqw zwFYFF6tEmfc4qz&Gu5$}{Zh#J%j=X?oy$olb@V3NVe0`_;l!v(Kpx#Ee|xp{Si2*{ z)M|K-LzL7Vm1xvwZ;h+8V&Fn-0R!0eww<#;bY5!A!Ts3csOT{=-1CYPnqPR&z8p86 z5?!XO6~?uKojSzx$`RF(y+lAyW6(ab%ndeC_2O=f_>EeyWdc>ZAq&K`@pV_H zYkr-GMQV$;v^7W^RaReESjB=jiUJj3OdmBRY*%OA$tW=bxsSv2=S4I5(%Nn#MeAHN z399Nf447<%8~8M(o6I2Hb!WKl?()Kp1*O(tL2kXIwjgQwV^m|5p@=a2LYHlYn(tbz zLh;#Vg?cD3;0b0tpNrMuyHHzOjt+oa5vD z!F(BBob|pChg!?E0jp8F2R82s-)}JY%rg?&9Rx(4&H?~pL zq?G2?x%i4vUeyP6uUt_h)C^jSfM+9x9r+7~H~WLqQF0C$X%nfh1&oV#a*QTh&1n- z$=J7xJ+(&E-;lvittmET^G4X_&q=K*lI=yj6e{6PH_Ns^5@hDnV&My*^(ZNb8q&`v zo)!Ah^KMk`tA|SMj+%F(9F!xVc*x=~`!Yk^?I{j8;F3%y+0HYvK%LdAen+24?+hw_ zXCeOv>((&h$JKE>hMi~6Ch$=-eLxCU03A)qF5>&W!uHo0lrUL&jWgRM29Mz=DsxR< z@NR%*T1Z#S(&cdLFLgF~f!mF5NySTuFuNQBbdT9mh_vT>oZec@X&U~gReU?qWW-6e zWZKbedUGiofuWXzTT@FT^D7Lvq?T*-^U`z6=f;gG&NJp0j!NgGBUqdmV_%E?NQAYcKu)h%?86L|+8P|tc5F}xeLhWeQPmK=iAmH*HP;&Wh6YwB z6Z0rq!?TrIOPzB{cqvyrtwEY;6@8YzshSRj2=778@ZB^?wel4elvU<`^8|nJ7^kMy{bWSfzLIuSp@(%A*97ivC7R+o1 z`$n7mgBsVTa*YIv@>ri|U4CE8d$n4O8o4#W`qh`SE+sUFt}{yTV#T|s+Hh45G=MjD z%C$&~M88`q=W3c64EU8`Clt*i)w}PD(qS6B(w1Q~Y3|XFYDV|ra4)!?+SuWONsFlxlPs zqeE$Rfvmg&Pu(lvw|P)i=mZ{G^2{;y-bub2TnZsCG}ii zvsH;uu?&%e&JV#ctI*+sap>M;kJ)L8skxE2kd;{$Q}tSL8oyZX869&PyKtuD_mF5a zpiSbquKPg=Q&^ijfrVK8@<%aXNrP9jFd4Ziw}C8b?M-N*csK6OmM7jwj@1ukEftAL zFx_=8CtXY!4z`@As$2%`M}%h`7cG>KS;iE-U|gft36luM5jjj>mtt#RfcP=D};3^?1P6sc>7 zO@1o1^VIMFqGqeR^r{?mcrx)}-r~=3J~`?A$~=_TI4XMf!2H_vQ%=e|M(wVORDp8b zY1U~JVK#QI;G}u9{zRP;95-dfkXphrK8ek(zYX@)nRR$?nsy*znjfICH1t0Ns z(IO3+hbh4%eqtUi^t)a=+SWBly?HUuzBYm>tK-M{0(F%-3T!xKm5ehFH6#(vh#9w+f>o`B92DH zLT!7^+p~!4&VZ2mi5e$TSgT+mt{ACd@q31^cs$I%F}(tk2d_r(*0jpv9uYoXzxw#y zdy-xXW3BH#!gwQPr_eu>6_uh~!Vr7c?KS0eLMyz79E-&=wVYVtXORSuB&3KPBGIPo z9}^*eH7(ge+Y03K^7BJxs|?j0Qd7Ti;vl*x{`p0Q9n_HOmVC$>aWiPe8PXoOW`&@g zX21r>}s=;ZbR2PUc{7?uvc8T zVkiViNulVmG`pZDJFaZ25Xk^?-w3L#n~>Bsgj-*|?k>GCvBBpk&KJQL=)NTpsjdJxwKom);jJ${|pe zIuYwo{NziNkVNZwT8UTXbTLcfXOLIWk^ao~YvsStt z=Spn~`i?v;$8iUTS$u`8MaA@Y2tj|Hv&J6)j2uDowoBG5<94Ck$wfY)){uSOavTSWni{cW?n2zP+90# znJL0NxgFh=ad$aQJq4`KNsmiZS4vbARmpLp_FN;P;+-S)B?x8%@ub90FnT$f(VVIE1@vxPF)BRE^~MTBwWxH-eL`(0Jt1Aqid&E+{8mgneJKm;_EA}bGW7+e*R4RybvUGlT{RlPC3az$=lY%?_w5k zju7#4;RBr+1$d_+pQ+8G7dEBd{%Mx2*Jl5w^Y@OJpj0P;%AR+HikL;9aIhW-$-cKpLIIcJnJh zdfW>Xij}r*uhI>tmM!`fW*7*lX0UY2JUrXHg$TL&;HrwB8g^{%I|e-_{8P6f`PptC zqdMJk;^`zl;lZy|(63`T~+i2LX2QGXLgjWFkqDt0)h#G~X52NRQ{Bz^?qg|;Vi z#=?^a%V=}`nf=0P+WqnP8?Hz2k(E+SGa$-2Bl^sEqt;Hbqs5BZPSexXYD0Lw4-hO3 z_-&sqPBI_l4+dK_%oukHB{+S7e~o-O%#Hb!mp)>&0Qao$1i_8@TZ|G<^0Gwzr|Ilt z)pShJ2XmAVHPfQ?4+Hw!D1B>rOx&8tAP@K1_T%OGBxouzl-`=mpP`p+C^u8q2JhP%A0o$6t#kUEn2zN)X1&=jZ+xi7w6U1j zGus$?dMqdBhCV7qbff~FwMZ0 z9b&Wd$~2D`euq26(K!Z>1WX)#FX>cfX`QAq6e%p5bR?e-LgIJg0d9_F=PLH~@A z-jbUVt51Byes%)?y)3kKHn94irSvM5Gnr3Ld@nB2UZZum4%pHD(n8Z3?pDwQT}93& zpNsKh@LkFz(_G7VyNG2rOl~Jw7y)L z=NMa?g`K0ec6~*ATQ)^&etH%5DR+%gJQb|<({C($L&@j%(F={Fp@t5{hRIM9@hNpZ zrL=kLrh!T2?&9^0nKq4P>P3xpx8mR7)iMr}n&ffg85^XoOkn)&D3OWMhgv!>?LPq_ zyMFPNOl5M_Nw746y>G#(wOW{hYT^n9NZ6hAm9}Qd^35b0q}qxsj>=}Hu_e-q6+hu@ z)YAvAT7#Wsg2ETnKz=-?8CjZYah)3WToJAyc}|Mj39eC4>j>e$>9$}aPhU}L;?yvC z=G`i3HZisNED3z6p;BYNXWlS4+vXL_0f^pHU_k-o}EjtQnr z7!`WPO9TEPo{f@(;yNH>Y6J1(U#4;zr*DFW_{qkZ1Eq4BCx=$ zZ%qzcZ2Pbvylf%US&rZI4k2Y!4VOxpvpj8gq5AoYc05;F*0=npX6CIhH#0jG7_ymQ zDJEaWTq~RtC6|JvZxtrd*!WEYU16VcO9XEE4lb1O1MkiD(s+pBN{;JhrE5YEpJxN# za@QQX;T2?szwcv=nw7+#LwetRgT3B67AtyLYwlGT^99e8Y0-H6zKT?0bV zi@UdX;XFHU(KvYxbX(&*^DG5Wu5Dvdk7m(0aWSM3V#P0=5WWV9&!Uu_IV=Wo3!~dF z3Bnpc3(jJ65tQVL81nt2fBmG&pBHBV?EVk9vv|pJ#DYmqx-CiHJm_5K~fH+Zp7N+tv=>mK<#nz-g9Kj(J zpR^aRaR(iDSi>g)~3v{c_6btPdcn^h%s}=$e8N z>%}T}+U6O9;kPVV>nt{6Ihyg7(MRUl^4p7Uf)+nA(SOBNIFVxk(4Qa;8Da&bVqn{H z-tp#Qec&ysDo5;9VHSUnHL%o?Xz4Et*)sutY~#f4^E+rc!0zH|CXcm~@Z@Ax;ZtTk zx+IiO#};X2kF}RVtCk0Cee`N)eDu$`FlVz8P{}S$6;YlQmK6Bhe@^nPr z$}}b;z`WpW`qlleJ^BD0mTFr3MpkxjV=p!H-u*EGxd z=z<|VhEg%>^9Xv={c++EJga5vQ7zB z^0+8@p&eJCyOgP&D2uBy6CeTBQMnu7{DeA2U7Bol$}i7l&# z8;L0)v8nh2oGDQ;QgMeb=tRVd#BD+2pp06*i$5Q*s$C16K;|i1@&BBy5bi{W%s#V~ z=V!M1w{2f3TN~5=(e|xU(fmWd|2V!M&sHr(GaPXy$#Us;t$9Bd(jQ^@-Qlw+k*mOEtIxbX7sfo%B>~ zgne)uiB=Ng7NSrC1p$f9!v5PhR0*+0At5~okI^{xZHa~Sbv&tdXU8|f(=Zt{dKP}-GiuE*w|zB+Dnm9O4X$0 zE9uqLR|=HfV>59q%TVYVORTUqs$@ZRTztgKw+UkauSu)PBRHeoh zD(@y!py|xVm|GSG3EMgbtsPjBkaN$rzMlvc1I{+&Ec5h_BL>gN52Xo(^f%vljVDu+ z@?|{U)iMLHR}YF%treS`=9B3~lYdeUrPodpOk)EyrcO8Nl_GXmziebaq8#fByIz+) z_Etlh+`Th(-Zy{mXuFaqND$Z?`pws|k?H_&J?S&TJsI4Cah{Yh<_0&YWZ0z&?#H#I zCV}WDs7lKao|GfmFol%0^gO&;GURVL?B4?33Vf(AzDni>zpbge8u`HiV`yYze1gwd zcVJ|or%Tk4O}}wtQW>X2O0o}%H^Lt6!;p~@n{bWj4v?pdA~gIGV?@2ja6uboO|}n} z9CVieTL)5g+295|&N!v7m8$)<;f4`lcS3IhM=ME=6J$2~9X6%wF#X%wUZt7+SfuAU zrawnLpW#CM6lTj~W*%R%WnG)=+9kM5hA$HpCy{$u;SU3hFqUP-ailZGh^0j7D}zBa zE??I`Q&{yHPyWwDby9^Ev{uNzAkt^&Uya)3Bzv`s@;rlZN^x{S9;Nioj1U)DzAy_E zHwB3M1J;kB9@mjP(`Tz`uDDI=bQwQKVtcs1sssrK4n`GN z>3~9q=vKaiYNd^Y4XC}9u+8hVe!&ysQc<(@0Y(c_n;p`?E;={vupnph%}tGsdRnrT zsx}(SREg5xOL}T)`1!6*gn+RDA|>VpY37*)y^Iz9h&suF;(nL9+T0AnL-v;Er90UJiSNhTJBS{9jRVG@6&g|N;4W(j z2fVA%#^kraRqo5(?nnp@BZi8dZ$}={7&p*Z(CN^4_9t}#U{eu{$wt(YV%AnouuyAb z#VcPuG@Ycp7n`c0)l+iWhobd0FSCP;mTiz%SzNTC0(slcG_1V`9klXIRB0NBHmapH z2E{zPbvwj~(%dTy+ob1cllWrq<4uKF;g&^-iX1X2R-vE@ir#st>IS%`OVK27S~yo# zxd#by4$fdx@)^CRlp3)r_BoKMl4}ylCKvmweopRxFfMpbTTZ2Zk=vlr6&*CzlDCI9 zq#WXqvSW{dIk*_<53r8lVI|xT3omga)u%o+tFvs<1kmX3H0`qYF+=A(!I_o1MWa(z z?_sT$qxNOk#%5^v)8_bTQC+=xE~Fq8(oveE>NIM3Ydf(DjXMahBRwbYAIqGbRns=p z@UR26(ut^Sm)N4<)`ogU-)1YmM}%utPFJPy#Ua;qSv!T&7wyQOef1%Cqs&RB z7s$bm6$nt3A@9|E_$?G`{t#<7+n*9kCdDRH_dN-d80yR57;jz8P^!yx(W$||GJ|GE7QPCxD_S=UjNs{Cc zjmV7tFgdE*9X=i&B>=fZ-zl zWWc0PSabec26VP^GXFab{!ay?z#|LHkLVrY1sSj>YHS*!yDDJdm|~eb`<*=W*0J`R zaxN%J@=9XzeNdv@H>NPGGDtU)6^N5giL<$T#WOG0*NoID)Dq51 z*RPZkXdti6m?wof6s+E72c{l16HGI~d`w!QEXWVWefR7TGUp(VsG92>DhMKvbgnpygr4Ve%TVmE( zleYw@%sQqSgEtS&q*WgSMx7l)Qcla!ClL&_DYLR>!&Ry zKADNj8T3!v&yr!hddYc>oEjr|EqMU~n@}S$QIs*}1AQN2yIhs9_z+Cxh+CL)`?V~3 zXDlw#WbSt(3#Uh`NFg86PhE!4#1zjL!ZIFO>)dI;<2%wDW`UZr1gVR+06UdkTi@FRt=uQI=E zH}wdzx`pNfZ(xTBBh1h)6og!5@4+I6K(GJ2oe7oy6@`;~p$KD@SUh~y1BmLA{Q7ne z*S#D^?q5XY)VK@r3J0p;{%tS#;~HSS<(%OfnmcIu-G)Rs6lJhb8jHwskoTEJK`M5D zH+trTLt5#0Jrd7Az$z=>zR+&_sN|ztA@t?d_n&SA{P8{dYi?`)`zO1Bd^VU_|K0AA zvvqLN|Ewea(O6M5b|PjVX82nrB1v)fk2)gHyh?I%unMIz1@u_?g+kiWm5P8sID)hU zbG~rECye@({*vfHw)0m`d4R}1J)=m1v{b;ly zvHqEJig5@+*a129yri8th7H*5EXQk|>y+7*aQ|e8zHlP*E|rWG7v<7(ynY#)i#?mJ z>DV(N!O>V;@$p)Pvn5ZmJtaGuzOTLv>~a1@q#Omj#JL(-w?{Dx-d9S99q*hRpp7msJ+u5vPEJ;v}-ErX4a)|r{a7`8p z4QwaWwz7vgj*cSmSEFP;1l!?i>&v6#-*CaC(^)@2L==ukZiAx_c~8n0+L!UOzy!L& zr#R(tG^}QvN9XTG6D7j7frJ@zDAheATA={OW91`Kl)}DeNE5mpLPH+`=cdGgnLSmQ zc3FCu;l>}p=fG_>t@1_8j=^oROjpp9Ojne`BK9YAkI+-YP_z;2VYC~)+Tk4S6BTOt zR%sRysnJj7kN?u5Q$tg|fBi%h?I)uCZC(0*AnL#Iq;2^Jo)QME>Q|Ri(-*LQU|ZK$ zWr02?BaxRO_@e|{^bU`jNR?Q*k}%Z`ZXW~&H0SRiT#1IcvPFPW?@iH9z&cKSwlOxI zp3c@0fVfs@^ZnYR2rt!IEr}vLS(og#hd{U+PtN0lonhd>O%XvI)*gbF6qpVs>*k_Z z`|ss2d6E3dhQ=Uuq3|pw?;dY6BU-|LK$eI^dbQC-vL_ZxPH3Z&&l?^y&&z9y!nXOa zC&R9WF~d?#@>{wQZb9)fjU5RV5xwo@rGxfO6bG$8V%KqPzYwNg9Tgy-q}jx%aa3)I z_DwGNjMF! zpHbO>uiKh06AaKT?azzcGj=$lsBvgUt&e%YTV*jK2Vv!U1C#0*HbEv7C7e7vij$CG z*iH1ZR;5e$z%Zm_W>hP%l2J|{~7|Rxkc2g0bEYZe`E6oyre~) zF;casl6in-(=SsCM$kKO@h_dQn%n>kpikum{=eZT#{UaHEfvuyl`Ehm3a=}qCI5q; z_+NN8qm4&uEjb&$zmnoJe_`f*{Nj^%ZKHX|kGCQ2a=F=II>p0f`g3^NcKge@0a=8* z(w;d>2sNH@o!>A=r9MvxnH!cY_9s7Oz)rQzY_WIh>1hKvJo6)$9j+pKFTnkATpQ^{ zumC2q>b!{lbbvAFDo})|T@yE#(Lv8a-4H`6a1A_Ys_3FSm$iZB5@6#8OqU9AbXQAn zfD{>y1mIRo18`{3vc!dY6kz!^^0A_~?3RXQ6yxq2xUyv-pJ%0rf9-54WfTQxy~ItR zf1Tm(dN!lWFWqGCJ&I0PFI+6t$ml{Is1RBSx63}^USW7wZ4`NDdBM%zDB?Z(% zKw%zl?97Uq_1=DMq*J={GJPQP`zNAio6ExZdhm@qVXy@a3^!J#Oh_Lx9e+)=-P|l6 zA^@$gj1YyCM{!?jw3-q{y|5-<_Y4Vg*HhfD^o0jw1 zNggw7#GOrnDHKWGIykHOwkrk-j^T zl)TpvRs=({Y4eNwCQPX53G;U@(Zs`{oBv{{-R@6@>ghvk@@5&WPrjObi{G;==g=v`*O3! zW~d3wbV9mEjrisRr#XUj1jnI=0N#~(=&#WhgYyj4S^b=~@e*j&caR~uTvjhk8O~jH z`ddAR+ejc4Y7v_`T0zGz%lzH*)d48peizl=Adb^<&jDt&Bh=v&^l6wsx#ny)PB|EJ zN>Y&~QP7|~VGh-7!&F2pd*7g4{4GsKe8Ou7wUH_ZauqU}&s3)MCI{x~Hjr#&BeaHa zR~T3!22xKR;r@)J1_e*-cz7TnywB@!|F*9EFWK&INUBnU@WMWF_Km@C1(hiTg^KU_ z#@~+y_7#{#YMnqhgpdM)HH2DDiI}TSb|)+V7MR&?K`gPVkO{Y%i@Zg;pwT!a!9yTF zX+UPa-FgF)%sQc!$vTVqL?^5~^yxVE-Q+hZUJKuK(I%D;_l}gFVbXNbM|8_?RiWRS1bhqTwxMsS7=fN$Dc`yzJ_ri8 zuVz(GEE!)5V!CB?6;7}z-x4G~s6#&T=YEvm+ETuCNPOhY`Ig`6QogmsyoYpC^tULr z7tei^J82i$z8r&3Qb|!Z^f~jMHnX@-PSd)K@5ryfSgXhJE1w|qR-5KzKE736Lt|p0 z*xbqosP0kLAO!)T>@G4^`WNG%tY{=HLmBZH9mI}FQ?gZTnFfw zfHe!N_yo5+AM1Bd4!7K}syB_+Y9kU-{4M(g zEueO#^eTxdZk-=?z24-Fc1-Epl+qx~VEOHh*(FC0Eky+*!dqoJ6zTOXYaCDJmg(AC zit5>6HK5FNl7WZG+HK@rpLE;Iz-(u?ck2x#P|Cko@!6awdA0$$t}sp3l&sy)erKi! zge3Ag?rn5VL;5x)`CY(-FK(4R1fDDw~Q}OL}ekj)NICJ62<{y+v~V`nRq_Go{RC6PXC+P-`ji$>Y-w36 zadH!sc2NY^yB*cmCo_KXe?(y^z=})7Qq@*s&nV1j3_!cU@=D|0aT4I`%_^z6!8V0@Gh)bmuSOUXaeA ziKJ#`(cUK@<=VJezNbAb^e7VSDKDCK*=`KH8JA5fN#;8Sz0;?*_8kvQVzfE-L%^G% zw&T8gtnD#)?r8%vq)}G3C{jS*QdAUTem4U}jgi~DN1081Vc}9~h{BR*v!Kbq=JPIL zp<`X)9e3e2EocYxv(NLFD4$p#v4V$ruqa-Feu$G!k!{hVwC0VV?^xcEyoIyE>9fb; z&+1VRj`)gR>XT6pNm1(I8BZsP3#$%y#u_c`)eo{IO#8ocnbqtu5Z2#eEjOk?#AdJD zrpSXDIGC(5gG*d2oRaX+yRv7FP0aulryG)z{;&~{L+rFtvUqI2cQ?Xn;lJKS3O47? zPR~vg8Q5ONyYXd?r_c&!4(>5EZA%ak=v0Y5?eydgi2V@Z6Xy#?84|oqPQe)e7KL!t z1^q*PA9TCq`i;Bv3K8B;?V*R3I|0`--_ymMdx8jfl_qxTI2(TTJZ^Gx%7l)!!vzFA zCC(Tkcn1Uve~%c*7F@(31(u*k6a{bbkv>M5!tC>+A9~~+JRX2ch3-JwmbWG+;eda3 z;Sut|{1uHCIuWZ#rQl)ih1mlkOZ72z2;sLN){mrZz*_lr|83_`3_Y~#Ihv)Ph-0f{ zPOhwlmzG$uo0egqtQogI#%{tb==?=U!_X=Pxj|$|)fSQ0Pa{slAo)jvwEb1~KAOoA zW}n3D5c#$KNbqnBs8L=hA)~$sr3JV62CO6E_iW@T)u3M2hYz1FJ*7@VEZJ*A=pz=| z+OlirGprmm57~Jpz06}#;e|)o7;~@WX^K~usO{cW%8vc0ZO&Mho1-0F%caN8Sa&jz z`Wux1`!m{uuRqRIY%f$EH?e+%;Hf@#Vf~2Nj=?KYfigJlN|T5i;Em&ny15SYz^kb> zKcIphI>n0N4HtHP6WP@TBL4oJ&5@jf3e8XD(miT8b}?93Tj_*lu;FB}q&V`NJzSy+ z&j4zqOnXjzB@r2URcq@wa608=Av#IRoG{!_6pn{4aXg)DcZ`CEuEij!oa; zhE(y0bVbm5xD97`B^_IVq|#QMm6m!puK`BPUdC}_9NVG3yuv+J(@t?GG&rpigch@- zN?Zbf9N$DEXGnT_TX=bzIH5C zWHb=4tkZ);cN=-1q!HhgSBrW+2=HFIdCR@4$3}CM%Iqw2I+%+C0(A8jn*6h%s}19FA|#52|B^L}Gy|`6j;3BZf*N2f25Y=VS347=7*d80t?t zbh&nP$*8&2<&4I=VwnfitEez2muyq3g=i=(GcKDJ2$Z@&sA*=tGvlh7j657k3|5Zb zF&hFpSz@wMN6sCbnl1Kf(AUY7cW7_Aeys9TgV(j`h4RQ*#Y}2BB>9}2qTf6qvgm%X z>3vLvznPqGE7$$%d*4L$1i78j*0XNHLW9+=Ve#!r<1@=z7JspvJdR;#@dHmcisXyj z#69Q>H}gDTTol%#i#gG@!a+}z@cXjqsvg88s`VyfzqTwK{yGBm?&fe-1TeU*}Y{dd3t_rvcDuv(v zcRdyWVO5({ZwmD(U(~E@wQWKShg%dkDpqadRiCHwf@e;{AU=wyV2hAMhtl}UbB|!OiZiTDa-QG-a8*U?O6SsJk0G(4< z01fLVD%xf;Aq?p9sV=BUr)l@W_{zn#nbw^hEU=VPyH)W{1`BzM(1fxID+zcNm8%HTO? z;?St`z>~QubGlCkBv>Q(8mc3FgkS77DdW8>KeLe0{oXkk+#u<^Z|dpqSD@QbP%R-l z=6|n_0q2R!Ejj2q07H26c24%PZ;_lSFo47#G;>`=tU5r08bCAvC7b9Lmj1lTNf+zW zg)@UWk$;v;Eb^dyD#EkE7Bu#Srr<023bJd+M*drPL?c=S+>(SPLfg@CHYcY6YQl6& z1i9mFF{ekG2fEbk_iF3~$S>J@&4Y{khKCj$f$CQDchncY$=cxrCQhnah zm&OFa#=$X5DHLBH8mDH$5efIYBM$8ECZ>LLgYqba;X%1;(9OR!+~}(BFg!}BPdOj7 zefhyZ6Jy&Z;=C;0dx~YPrBLe&V(C@PG2{tl3jI@YQfBidR8f5+2E|-#u5oj8%5zU) z0dswq(Mog!MqglyFbd^F&zQppNV(NJ4{3bTtO2y=+ioYGgEc_tqA`SXoOfIBa)(=o zm+YLke5S$WYI^=uK|<}jAN3>4n#v)9*W{90h*pun8!&20r{JU;w&bsw!}RIYlG{ja z3O++3nXDg@(Ykf8;C!T}BXqygO_NzUOhR!QWPttUkDLQI{Azbt5ZY8Is#YczQ8u-a z-Uiq5J0$aUX~L!|^x(n<=s4fcX?cqL`}8AyK0OesDSFcoxw|QqP-zu2 z>#@MDmVe}|I)qc8ty`t0&?NiN{QRg~w@;_PQkA&ekYa!{d%nPKzOEHwKhU0TD8!`n z+g>ufMBi(bUnfm<5DJ%|ds1a3tT%gg^A1nnlXvS^g^1e`)Hze}q{C}B9t&%|z)D47 ztQ2Y0QoM@T2UKY2!vo=guRQ>(A;D}8ffu}oU@sY(6=JFgMad0>fmpsmz^iaN(Ea&q zO7Ft~P7z6L`7dj_ZLY(Oi~>;_#`-aO^#|Slx6zMrZ~LjJn&nEV|3le3MpqU^Yn!Rq zII(S3P_b>>wv7r;Y}YSF6BXEW80rt#I%`cK){ zDCMa@xqWTFTbYX1BzN<`-M?lRe-RZIxfsoNw^w)}!?0ofvQnlAhkAd9nBfGYx=PS69y;7lVUy2Sg*IlF-t@D>XD&8? z=60k+`*~ng%^v3z`}vD<6J7K=aB|Y4MVir~ttZj$(i~!(s!-S`>X)(0^_=AzEM`*H z@%QMkoB>cQew!c|#`BQoR{Mc-4{mgTk6N^_`=;pR2V%Sch;4#sa*aM&m@&4#)E+1{ z8_M99^Qgy+QG=sijH?Sk&;J{_AiU*9vI`9a#D@n2gzf+T+WKGXsfi250PS$`YSNB* z{PI9cLI}`9L^NtAbfAC&3Xt$OkYK_Lq<2Y#H#BX)b^isevA(vpCVXLvG~@LtWo-)w z8xW>$9a*iqZdF}f-K3^%U8$yRiw^PmWY(RYy*VKSu%z97>2~+K>azb8OVIK310;Ug8`^zV?r?Tu7!b4g{Ti^y}jO6Og5Pjj-BB0mC)poyrR;;(R2@h@3UAT5W+3LN-M7ewAM;B*CZkrzb?)1R~ z^NAJTHphSO3G&v+>Dt(skHiaPVGN7#_?x%Z2kC~E9OtI-et5Ufc1X>4E;)tzhWYcny2TM0z$iD8Q}+LhY=ZY+|># z!d8w$E{-W=SRoJY!I=WTZLBrilbCRLKx;(YBC_m23#pAna0R{`54u6SF9T`XZ_}S2 zx%X)2B#Sl(av4nEhj0@t7Vppjf?Q`@42cL80IT4e0GBC0n2j`}#gE^Q+HQnRg8=27_o7I)YpKKqGz5CG<)?_I%Fr_PlhT^0QL=HThZJEOVSS#c5sd7R z-`wW6*m7YeOazo83X&@i!m(}lG%!3YV+(e8II)OQs8e)Ss^rEOTBZ`!wJ?j^h|SJsjK(F zO(6%~0b>sjkhRUC?t@-;T&zVrM7NFi=$vv9vDWWEXzR(Nj{fm6X389qi5UPydeYg1 zLJ-?>L$af{?e280lgLVPP%{4XbA-$HsbgMJ%hewDnRX(J;0y8Cwlkg!N{WRo9(j)} z2|tssV@>x_sEn5jYi2cixI$4gt+yr} zK(T|~af#z9`o&h5N;>>7>Yibw?nMyV%vF3rA*-{E8$%Y@_m7-9Kmgno@*$n5-H5^z zS&v8K548}G1UM;r*}paCkw6t^C-9h}n1d1+&y*>=X0~507mycUW&EapR??tgvt7EZa#GeEBjno^VY-4MU7LJ z_7Qk(YT&)dQR6PKPk9|5g>cWV%+}q=^m(p)HVr}AnraR8yz>0Agha3^)R@iob@}KT z(U+WFWrwddm&TI&^aP{HoP3bj)^$>oDujHs6JAh((+3uZ|85lSZ~|28Z7mBaly{|GohDyF(!gb z7Jus8qA?vl!sPf8wMIZPEFO_iE9|tQ1L6|VLe%Z3gbkgwrJbF|($?HsbA3%=SMcB3 z@#l&_K)a0VDu*T)a?E|1BLt>FP2ks{JDLw>?8tLYAY8rL&@#GDu6xWMJSA05P&F!# zD06{*DTv6K;vGjAG!HaNePvt_^K8IuVUpI$^{zal%ccDd5u= zpnhR_dW+I;T98WD8q_L&W=VAo`r0KX-l}L2XU1f<>2XGq+7*0z~I9B@YCj8 z2NP=f_}gMou|stS&~%I~e|BY^M!sJH$LN+kL0yxXmg>Pdp0F5+w>$Vt6X4|v0fi1S z@evy09MbU-qXEU?O5uU~qZuNVz`p!cLVmcBAhgD9;8d+oRm zwYblwqVxf^9O?CdPrsasccw!8K0p?z#n-CpbCI2){xC!lV3;q#rT6Ozsaptx@pZGav=)EC z;2YG>4uy;F65Xuv&J;hysz!RjpSCBlm8An5$+N!lq_`Jp|xf$l8>=3(6Nz{B%>^-5h1SeV}aLUZf0XI=z0eRIM1Q7iA%N zgdc9{zb=(dSt5j?j6zbhCDToOUJsX~CZ@Qkr8JbYge#0*M&VcnQ+_7?c^J$vUxx#Eihpiq}He`D5)C zV&hE^X2*AASCJw1wsmyd`dty$&@ZkG#chJ(-}^AlbPnjh03!Cc9&KK52*AvUZgFhI z`zJ9LW3OBq-pnv6nFlm%XdZMqW652Ip=z>U0fI#V=}Z)jUpNR2!pXj&0Hpkz0D~iv zU^%$;(;0wY#Fn}>rXM|yydTN*IUXMA{ObeD;8n%2A@`)6)8-_^=ClB%C%RPR`-#IK z3$*aUzY&8J^_vODTBi?D7mja;&+dY`EKizPrBGXbqEI4a;=J<$kQatNR^4{@h zPQADZGI?N`K|UCI8X!|ZoNiAlNMw4-xFAzpfv!vO>9QX;^gAH+mp2!v<}BS+9A=&b7k=>Hzk` zO!@B#vW%uU0cS`0K~_W0q;Ji+IdiNF#H4PVs&0ZP^CT{?L1N^XGTyWjsc&^ra`d*x z746m~C6@zq-bC=OrSXG1vP}&I|0s=Bon`XKO3+cMNpwb6b&n$O7z+$}?2-Oonj5gr{q4=|0Y;ish zISxu~TcZ#*n;J%%Y<)k}p&m~6Ocl1rQ(jY`A0`)qvY>BGjS_GUsYMKxps|avrNb~Y zJ`wbY7nz&60;AFa7& z&adTrAC-3CVHK+P`N3(IRd;__$P6VUDpeHh;$D{+_>eqQ{W?Uh(!%6`J|^_15Y}|_ z{Y)O3{<}*rGYP}LFDfP3;6Wa?B!d^`r3=m`9Zz-ZrV--(8Gvud{z~}1C6Q0^^=M4 znE&hW%jKH7kNo2YtnqnBCCH0$@sCJ!5-}b#4+P4^KjJ&x3o2aO66xni{d7O)luuPy zeriR|e_)a;>xCS&lVICU+>JsT%NIyVRdkKyNJB~1A#Fl)3SMsV23;FsxGwpA;G~jY z)I}s(RnnJFO(m)DVke$;D8%^zFZl{^8-O8^!6CnOA`YF{Xd*}lY?PZ6dh{L2r}x^2 z7dmA);Q1fm@K$|z?CmLzMPh>;0tHS`UVk~p2-kv*`Z%wLMy$vYTc(`6Bh2i!UNO{X zhraa3D6^fg#A0&5W*I9zX-i4x=NJHnX1rzZuiKaHjUtZCd!fyyny9Ia&ghT{Ec3a0 zu59%`)M^=+WM{N9X6unYhkwVZZN<3Y>rTDO;a%>CjW6uqFVk;3-NP=D=k#8KU2VjF zD~5}Eh^Q`#bNLXIzyk&(Qh;Yky!ft&;sUF&8$ePNDqO=o&gYbEV?HS=n3ZgfaJ8%s zb1K7hYmC^jlQ)VbrgS$Bv`l0s`^NwD0Omo1O#&p%_3)iu!vzgpXzH*^4Pdf{`7jn zYv}W)(bRhu@FKi*J!5n0*g0TjDB)Oh84k1Y%4m>f9JiTw8fR^Rp4YJ}DlW2AvN9TH zwYDvxb|eh(G7RXiGXSR0G+tm~bdaXq{*uu8$Ez_sSe*!>Oz#?v`4EVA?U!`9Guq_Z zZY=5Y5++6R*`|O-II7cvWOADrE9sCr+0Ejz!vcOS;^>S9$w12Z+6rfri{L;ZsBT~i zxlmkQ2FB&UgnB05s+3pWez^T5!bJs`Iy5~YZUya?foZ5S)4*UK@tY%yeGgKCB;ZdT z+qVJDNkrLCmW*8>XdzP9`|sH4ppYL4>0>JigGl`9B$?8Czjwp*D1#MHoM zMVK{D48t(0Hef&q2@K4x7X|O&Af25i56=me&O-6!LpRJu>{yUoE=p&VpzaxmZsjYi zsg+Zzoi01K#&g|_n_XK*Ye0tT>;zSZ-C^GC_AGhx9ZjB+BE{E89{r~;r*-aQ zy2rgp~vX`)M3`SwUFB7aV~trwqz+ENz?6>rt0 z4nBa=V6aB~v=my@2uh_)b+g2@)?N=jDf9y)jDGC{qtF7#M#;xLXNGZ@Gt#G07%{S# zA7wTiznRIsy-h#mf>1a}i$RAIy~Z6-49aRzd=nc}Q3L`r;WjKbbPiU?u~Qv`ud?Ep zMuRE=H9w)v;)$7CifT`^L~BzTI~SQMi{XU@7_k@ov>`1AEm$YDl9lGo78~uDEy6kH z=P>TA1Q|0@^nSWlFWFd4?p3m9=&?7wZ*I(s4;9SjQDUVZ@C0#a)8fE)c}g>OPMkgr zzX}Z!Q2=UKWXKT#95NyNEBee;be3Th37ab5Fx?lh@s_+-mN3c=_H9a|7||7`3>jiU z#0yirKdYU#%2?nj%sTj5hATL&wNf6;R^yMQ$r=_Y_88@|H1la_FvF@*yy)~2 zm7oDp6q$NtlQNY#CYc()inzzkiY-{tHUvU4Eg{U2m664xxJq~Erl`|?M3cEb2T)=4 zdn$G0uID6`#*j_kjVsjRs#@K7q$=Xu#7Sqqvd&fe;kSlz@oCRyE>s2Zf;A>$pGgtw zYW9Re+hbLebecEEuIWKOV2h6;DmKCfZ1tE}fzc&z0kb|~cUeRp5dtyavQ~}<3s58V zElB%+{_zBNJJAvBbA0uWU(IjCx-Z3DwPUG@?$3<>KMwOlHAxw{##O4QpF8 zyp8JQ7d2YaeKt{FIqoggHJlCFxApKZbI_0qZp3((3mCa7)K(}0C48ad=N+D25%~uN zI{nK6NtFH`z6Dujw1wynv|c%{ooc!r;>@dKS`d02tMF)m+OY&~A0x&i>a?Qc+B?_Ye0cXalgAALtDfM@+SbBK?6daD=8B3qMWf zb_+y&=Hin*CHu`oR7|7u6)@_(`}%2W!_%MwJ0_`|3fETcQ*+^#w|Sox%Ueih;dw_j z%x6+))(;DLa}8h2`40l%2pZ2(`q|e{Bg-yXtzGA2pF{s*Nx8iw={vCR81_Hxr$FQ8 z%%>(7K#S@ajr^Up+%9Lr>b3y#*tJM#)E{DYX&~fi4ie1it? znOClgwVpxN`#31*;E9ciBjJUQnovVr*epU!ye8bdbO>^?mMVYBes;OjQ?KX0wy!5xAwE>4z4 zt}g$%wQ@h$FY`e{LZU)4FhH6?y179jxi$N+P#*5&6g(=ydtm zNhp};bg`af5`)Azeos;%fW&}Q6N9Xt0DKe;bRG;OO(YCtO^AHF?-_mUC2hcd3gO{XESuXM&e0L{ zh(w?Xl@IHJ64_j%74xS>iDnwJqLos)rL6-7uh*fKi*cHt`e{AO7K@XMD zx}#`O`@%VVlD&Yti)E>HDcy!gmQjWYzQr>)1u;G9HoqS2g3Onu$+PVsjq2B+b|g`GC@Ogrsr^jWuu?-sk`fMCur+n`ar-yzJRY(`7&s=7Eb}EDGjdnp>Ty|l~=5z zb&altHO>jE7GjwuliJ`=Xj%7b-9gA%Iscqw7`Rk5-R!&p#gw!Pc?@_2K8p*QS$PTv zO4$Hi+N?qg_G;VvPL|viy=QHgz}2=OPNq*n+@iWZU4fa(l^dsa^=#K$dRv=qv^AIjY!>Qypf6ic#3zvRN*o=v&HLx;wWllJG-A8kVMog;OquI{`uCVgu%IS7W& ztp}EwApt=F1E@$!C(w?OpW`gFOc+G!mL~t#K!*CMJE|($m+YL`nu*q&fS`!zs!VAx$R!$zZ6unOfKqeC ziSP-d;Mt2lP2zv80LI(cG)3s|nipTc^V8NRV8bu5y z#G_u zWKs?R0N%G%CTZ*mJgMUBPCLXV>9YNjlm?gi_?eSk*~=m~n=1;PiKRbK?zf%Q+9lvk z;_gad6BA6b?rHfANv7-6f(b^PyvdjUHZSG@)*A;p4emBqr_3xVVijZ(9{{uUV4bNk zZnx0n$-}k_$r#Ixse^~C{T!a97@pB=LCnVA*!)|6hnO{CcqhC+&OTmT;Vh9-KnF1|<)IPCoVAk)YAjQg)VGq7^( z#PhSrszupNO-e%|Y@)ie->+|P<`oUM(OPawI^1;8I^k~k6AtXJ%~8kXBf=Z2dnFTD zCejLX17UgAboP7X1x`l`s~f93ylNzzmrcOEt%I*8389>S=Y@2#a*4C1xHR=mP{0n; zj07^)BK#Ci0pI)jA3=R;?5sz=%G4a_t7|Numwyi}vKn1WxH~qzuopb_`d-sJNS%zi z2@gE&%sjZ+2(cLz_`Lp*yX5HmSFmIqtaf+SBj4`dBz`{ z%yWxZ8%R7TWBS3jqW5_ruJ*yO32C0835Oj`)ad!b_mv@ruhXNZ(R~6K(eZ}WnY-1l z5n`xXVenz)c8Y-LEYfTc+pxpk$_}uht~_D7*Z$y(vjXVfw!5*ipl1ON`UnOK1GpsvCq6*pZ!5oj&!5%^~0=iUM5xRi#% z;Mr!x9MKGcC<^JGU&%a6I_80Rbib{WiK_u4oi#39S`B9sq|Q9c1WLC37THqVWKjEV z*m4^KXH#4`&nrRUC0b?)i=c8>%Apfv*Iu7V9t-aK^h(W8(RAGN`$96LZT=u>2U2`xcZ71;xFL>n~&6({0n zydWp@E;f*-3<%1ib(tbwh$To{6%;yPxhxTcwFK4~Y_6+oU1~l>f^XR8AH-bVD8eb> zP_wEN4&l7kKLr|X!7=fLqg60!i0;`lOl-6mjafDy@|Mm2&ODXHHv*;QbiNyo7&Z^5 zM~Q&^lHOwLO2nDw9;nEqqK&`{zVSda`aggS{__Y_GIe(OkHVLQ>AxTq zHDPq{7O}thHQYiB{Y_94WTv8jj{d>R1bWa*vVux70YwDh1v3#lz_4}AmN$O{Evac= z{MK5}SkSY|+=`y1qhgb+ZCqPld+V<5LekExcHG|Ps6I7?pqKFq!Nxk%-f)hD zF_98dSOanXZ{!O*Klp4~p>qdIcZZ4lZ z@4&X+gZ6b`NDCIwQhfD3hY6)3t0BBOy~t*YC?~Z36fCL;t6wP@+ghoMG}OJ6 z`{%+ua|SIqFcl5T@LG|9zX#^msa}198&Lbxzxb@#P1Q~1S?!$Qhn8KGGiF{b2!B^@ z3h~3oewbtPYokGZ83cTxDw|JpVkqdXtks^O@O9VJN?Xr*Q30`PMzF{5;3bxG3sR4| zE+EkUQlrY__$rGP?Pz2m4s-ZS{_fJ%%Gymxx8_9;v^JB~5DTK0Dm1j>ZNznWJE-B~ z1so+XT3Z^mn*LJXPp&!gaF(GfR51YGxCYxlFy_gCfr%6+na|-C0(#|Cto!Ia&N$ z%g3MirSEmp=2%vk1?=Fe^P5dSr)7`(XA`CsTT;$&fVfH2J~RJ>I)OLEL~lrx%5`-P zQ$vJX^%P|jua4iP8zkISCzX6^UXMqBkJ^}#3!H~ypWQ=e$o_@{tTOI~`#p!t7u#;k& zMsrs1JA|`h4y2|KB;^K)N0O}~%5N_!%5Rq%`}c{t1_$Rwnoc=4eVWo|;q63>4K=ZG<2&L+jif>87iA`a7C%3c=IHd^MsmV(&nRAG8}nVACuk;P z19P+g51011RiWlEL)pi=0;;{+beIt8! zEW?{t{T2n*xH{HNwN)?g+THYiTwGOt6g*`c76_2L`S__y>|G5N_K8X6N`qv0S{9ah zW}N&VN_9QBa=`HX2-R`Ao=n$H&1tHHC0Tbjid0t4R<`pqI#AOj9ZfN8wc{ke1{k-E zJnSPGIZXI-XV;WQh`4!YuKrcc#X2ycpy|MAvrCrJIS;_o@YFXJg_g^kL-5td_TSl|MHcA47cy#z^&E}yh z(X@V9k?vUinhD-KoZYbIepX{{)?{Y($vbZ`AQK;PM3IdeTVoC$Dg$vNs zdPkWN5bB(%Tvl^1q%G~%gzk90JC-F2gAV<7TC+M4E+*{6W9%z6u0g>#Q_ zgKc;N8g4h4d-Zcb(1Cqt2|sdF>Vp|G7i*pxLYvEH=2z{Ip=E>no%kCF*X zGHUvvf81A9+7kzFH#Tp}MfE_s-8q9)(nicTimYfH$t4|}x@ty%B|Ivr>R1-_-Dj4s zL){rd&Te((%bbFavMl{Y>qnXWp3c{n^23B3JH`5_a;$4wqiq&A6~B!dXYmnT=HNS; zgE97MiqB?M9=kB^aWtdZ)AMFePgU7{Cu@dFZXJ`TYpa4r#%`qR(XdqGzSFfIxeM23 zB%;;R?7G##EK=SxE#&F7AH3&q{MA!yOkvNJBVnjR?4ZaSU5x;rx#1v{5b^BT2YRxq zj3YIK>7_6-?;Z-82kiV?gaQQxF@6)cj^qWYL$m<_EJUXSNOp`qoq+5I^CuMXhp^z; zIP{H~2{JwwT}~hNwMlyEOnRvAtf*UC7(0;Z;Wkgxz_qle4`&1%vu@XwJDiH^#>V$2g)xM#9Jt z5J_>@@qD2e5z8y(<9w2??~3y_igU>HsOG67Nyi6-`%p~|(g4sY>69wgv{u#9hSn#s z>I~_pdaEfEB0G#HUPJ1N6H$o@Vp{VBdaC9m=QJc}nDS?QpeuvuW6}Ky_MDL!-T=+*LRETiO>`b&FOJI4I=^ zSnLH9AFwVF2=8Dmc`nhCOWI(G$%ZNwCBYjR*SSC+Qx!k$Z}3nJ?#DX<_LNuTK9l?) zYvxdNBKFF=(>|qrv5zm00gfFHgtx3VU(oco6VGw9`hr}9-ZdH*9*=B`is>|6gL_={vw0NkaeOSSS( z#RMC0Gm&jo7*@q8j8V3{(Z?&X4~}|-db}XwYVH)VM}In)$&p@#xf0t; zm&C@?AGY%pymO?sFyMy62P=4SM^^Ji7j`Y)F0pn`CtKp|nMvL3ED7Y&7_jHQ>mL~Z zzH(o_zPi3PuRgw>i}m?$&_JpN38fv7w_N&=cE#mdA$%t$2_5c2H{OAn{D9rkjjwuW zzrK%Lr#o}NJN&0kLFr%Q9Y*pr1pA0<_4iL_l+TPeeTi%K>lV;=U35DCznD9z03B%i z+i`xCUj9CQ$Gd6J_ek)_9sSCk?VW9iXC#zQWl*GdDgUp89p<4IjHj>3$#wX*7?8gh zyH(&#*R(J{;xn1;#w?Xxpf!klr9cOyen1caAY7yzAdn`53N*cO4mWvj z2Bs>3@%N9DLGLTUr0zP|F<{P0^B7cz@u8f1lr=QZq!gLv}0#s_%P0AL9IA4_~1(f=isIF~qgQaD=mORqb=@{EutUKLZ*r(SHEP z%&>LOM=z8PQTVVG(me#Ze}niWmuPkJfy)k<>>cEtDBI)G+ruLFaL>L!(1Bwyw%W~& zuB18(_2Sry?~=li&!qLeg7jP`S9yA}ti&p(`MV!oRzk~0is1U8X3tPb778$yA%Iyl zKbhr^&VkwiHov?k=hChefnyO>wxSlYg*Y5GR`P;GK6l~?xS@iO0#RpkJV{+yqE|vrK+h*#6g;_h-4(FVzvTHiUZIQzLIucJ(*xu3ZR5F zgMcS*P0jI63J9}`@Du1E;*9qv1~0euQ;5bTW6>4pJAtT8mq;BY8xlji?ePTpwFA}uGQfvpyFJ4yyN{dHMzHY;o=u_L&qBXRfQNC+46a% z*p<&gy>1K>lx?TPzKXbjBRz-b3Hdg}=-ZN(TOJSUCHD1&s%AdLff46tkE7TKU289i zShjhVmyT>trb+CvhZh?fD;$O%m zB2e3WZfRTfSGtgSNY#0wl@Z!*$`@N-LB%fRszZPw3c5v;<(g9txh$Vqr0y>{+=rvP znv@a)xAe4m)r9CS8iIKQnxdczxuZorkw($z7J&z+ZJFJSw#J|C65$~vXKMXn_NwSy zoXF#;=*afI3)cKk6??mMsI{j)n2I4#LSu70MkzID4skY>K_CfZd26z~gqCZCifpq0 zMVD;r)ut_*mw`Yj5#0>1S(TaS0R$JTKQU@(+Fquugj>iC5@HB;iMwiccA?xRt%;c( zJ9gNY0Uf727>e+!>?W@?fWse2PC*RrD?<_e;OL+7sf#D2qaQw32-H zB!zpB#-53{-ZAX>WDt1ZripblD=bZ}OD_sDJjctrbEEb*$=$H!Qf)F%XVSLTu^XXY zr%kafC9q?99kHi+A`eP=g)=UR4G{;0a`FHV0|oJl)BaM^@zB(q7!TLwYx5mLiQQ7O z>Lb_i?|ecK&axdOA9{*7r~QuP7DYkj83u(f&_c$J>T~;63UJnfTXq%N$*s97)aME-bE|>yT7a0rkw+Zz>E7f}@J{8Sj_XS! zmoicxBomrV;J?P}rW+>d9Rh6r5VX?Ea?IYrfOcP05P&kVPB& zTwmM*ZX7)FB=mpEz>B-*yeR!1D2VrhD5TwfW?z`UQB0-j8srExH*)jM_p8az$(+xs zX9VeB-=+(;_jdp7xSPypDouqh|LugE^=EwS*ga!#KDH>Li7hk}P~169pa*nWh@f*0 z@t7O|x#SyJBUlOgs0X|_1P{ahej3SpG;@wf!cl9K{0_Kjt?X(gbpR`EJI4Kp2ka0< zi&bQTeR}425LBbbZwUnF0znY$+<{W)2`vfg;p3F0iq(p$(zf6j-j6$qo#@4 zBAwH>8twQ0pjY;BzT4ui6he*?z%l0xu`qXsZ71K5`?P6r)H7m_mQ6CZ z4f^n^zpoZ3RV)R{=;0Ws$t4TGo2QzpB+JURBob4JMUhNbDD}IgSklu=rCne{M@C{I zL2oJ5CZUXZsbgyMA7-R@EZ*02a-XbO?#hx(awX$Yk3kQJFk4~Pgi5s%{wh>aw!_!) z`k77r_2-;=yreA0>16H4VpZ{4I0JoQI|QftfMxP6v6}?(I}WM?zEyRwCtDy&bWd1wYz{qWox<&>|zVe0V>$MpD%mzjJ9q^B}KcF zob)XX9adiJ4jWkX7*P#lL_^(P=))9uLH+*>go=GqT&-`?*xf_1J51><%NnK2@hF}n z^F583IJq(?sk_xJsE|`4f@5A%Y?v9WjQN;IL1}JYZD~sHC?3#rI=!&7Q4&7I(PZ0d z%4u`xPCc-fAQNFa9`|DNPyfk@o!(-!mXsGMDXE5_FifR4iKRoFWsvzm=!Kw{84V*lq7iGx+ zP#)vHG9_(ve_7KDOOfO$g-;Q3!x>EH?Qozp>LIInMOM@4hya_)GHNtsIVw^XU9GEC zOfW|AE`byCeR!H$k*RA9kK#*5ib2U2*GrdnQ=<%Rm8TZf8S=d8BHcY59c??CiqR!d z2{#^eh9^EVMfO!XcW5 zO-D%&OUVS1!E#EHuG(oW_LC*+-FKv~ef0x%LL4>Ye_3dE$~vUOjUSgy-IiT4rc}q0 z_*apyy_tOpx8rtIJ@9wuBz?48$ePt3+|ybDTvC+#V6|cO#}MVaVV;FQ*W)y7>=Sr) zlWhdop{tB{)b4&M>RVOQ5u`bRc#G|yy~t{5V}w>u=GrQf#DkzukYx}O)6s_K-nW^q zxz>T(1qAtD8#?p}b^itdf!emt`1p2)tZrLAx%Y0G`NghIAFs>Yedu|=^ELeSzurV5 zEPX`1UxGBfC)}agmK50jNyRM~I)970vs2O+N|~2{+j|U<_n$vbkP}F*y#ycWZbzFa zaE<-(CF}vh2XjatmBM6c~$ik%+f8XI}-#5->UI=JzplB?b-9Z8oxrx5-Aj$d9 zVSpy;&Z#p!Crm1zuKNPnneqYy=&ty@uWqa5}v} z@R`RJfh>Y?<_>e0*vm){5tS130rD5u*|h&ir^_!5q$vh{-QQr2iyDRvhcyN@6g$jb znrB)mfrn&8ht#b+nX^Mu?!}`O`^0I-HFShf_UWSuq@iFf#tFfmJ07?uKL{|k1J3CY z|GZBL+ z;Lhq=_o}dDAlaD6)>&5HTUYi7327o1_n6!;abuF%MVepDNqd+!O69H!t%YOS?t@Lo z4{keV&}<#8EjO?VWpU@sz4Iv9(dM{{sdJXc3Xf;HUzfG)13EdE6jv=1@1+qi2F79d zRq#g|Tq;p8g!S22j^8J(f3~rg*qgT(L>o*3%7JMN(Jq{k+is>5zp|cC+=a(#tiaJ@ zFi%gY$z)>9p{DA2#Tk^jI4hVuELDUnvbCEhPsNA-= zFJzglsaY#cQ~98-21&x2a-D634$p_kE_g@gW!fOC_0P-Femysw>z@*g$DynEfU!J6 zU-~?e7~}cepnk=+nikb(4K>H$>U8||NL}uV#sSM5nqjtq7>N3*!b?q$*|JN*cY1FJ z4q;VZ#p6~AEg?|4DrN$VlE`ZN3dfiMx#*H!Sjn!%liW84nene_70?$T|LdYL4S1Lj>nKqX1n@S!ooC6~ej0QZ`@ zT;VBDfI$3R*x13@0G7`pQXzz(ABSz52L)OHGZ+CcoNWqcYX9%Do(T9o_RHXFf9%b= zSZFwk{uuiM#IqmR%v69$(}@RZ-B`6B$bW@3peEw?mwxu4LVv7L1pWuGhO(gYeffMsEo7&gQF@?C9R~5PzoYR zF$aIfRR+u;1W7PUFciZ##!3MgBQ97lEXzFvBe4Mxux8kS)a}Q^DId$oKs2nP_b|(i z?UuEUMw0Fju#p<{9ZXAR@Y3fNA1g0RA67f(u@^?7XM-9IB0bKS6QX7QFv#f+ZpyZ%o+6(G3S=J@U@+K(5&9dOxC(Gn5XEB z(g|% zDj9n>VSvc-V*dVDpp4Muk-LOs=D5e$RNY~=1?4x%+uBjDFzDnR5^qowJ`6tb^G&~J zVm)_{hnaB4fdwoHKy}-uRNG=D-D!zbZfQj8ej4giAMtzN!5h#X`zI*2r4o8Vd%0G6 zrme!5j@3`<#+FrZd3?;DBz%rgd@lMq7snIAxV8(6bVA~#b38$K`}NxWHa3Y%&MGG9 zZ^9t&xV;s$GUPw-|C%sq<{CXQ|2tts{%;cIKXzJ8{%g|Yswnw@4TCtnQ!g+_uhhZgm+n%Fq9Cb2SsIL+gVbOGG>Y48cW7lGhik;pKM%KPx|Br zu3$E$hGB$k!(jaGqC`ys3T9K*O%ex~!d8wreTn|*Mg%h&e?2#BdWb3jIoB$4%spXU7uM4|)BEcE}0uAT&&qjT*^ol6MR3d%gzpcXtPL zyI!){3+CK1kNg{2Iz(W>Fu*t;rEl0H%qz^|t$%+-OQ@vjvJJ3n4cMV)Ybf%2 z$2-!7eFXg6Q9AvWh$0&z z>p9~-+kMK_Z~yu}IwA_#>PQsb_pn~wm89rf{4#Z#m*mZ(9kmY)<4gLIrmOOJPr6|{Gl!1`EQt-|pM z*QR@2rPcn4d%t|5m;MLb_k_3;>LY4^)JzzmGvV>ksdSiCuhZhqKbj~$TWLN2#{TxS zpOpoUiAOtK8_Dp?lF8Ljo#SkiSp_ElnKZfSXmu4pU;`y>JtrO1Mc`9bNE$(X2}8gI z>PI4@LvrDvMD=J7mpw;P7kqn`paEFyjBfQU*I;s*Zi_UL*Kki5_2)vV7U3se9g{X< zQZ;^>#~0@U!k0I->I2U~x(+^Q&?RLaSCwqG36CAL@SWrm1Kg-fci1{Bn5HNR1N)X| zMiofa3s%@h@$q!$9` z?;E=Qk~u;_b(Sa?i9^_(>y*xZiDbVv;X9(9c42;TFa2=8Jhd$5TJRna%#vIpA(D9u z3``o_0JL=s5k3LxD7;hN$@%BXaZ-7)Fw$0rQYr%#I3jv>u1)A66>V4YgnKaE_B$&-t3V# zR;W-H<_PglovM`{A~h*6jfO35Gl4rmVw+IYaLv9S-z zZtEvul8|P8MwRVVOf>_tSFxBJu)KDlg%(v*)OF~#^JHx`61x~?SPy@5#2xpjyhbO* z;z-FZtUX&OG?v>3)FO!Qgo4@lW(UYZAF4M9WzlkYBh0&}l=kb+ze`XAcvs*rs#C_0 z64tPblptwzlCLp~8I-0-mO_ETXK1&tm}QXW4`}p zoTho&XbJXX_nL?KKikOr?*;FF(gA8UV04t%u>KJsJ0)jF3jiz2`33>E%dR&qpIH$lGI~hlwvJ{^Op} zXFFQ{exJ|GKPg+j@%$Hi{^==m&3$vty)!cWct&*aw$E<7u-qL3`|DpvPzX}oRK-AJ zTLHammQtmK~0}xn;pb@*|dr|(hLqRA6M&65&bj?pg`rbigmVc^P zt#8=u@eROA&lMQ)6B?oQPj8NS@8H#58F0Mgi*8RL7<(ok0CsuDCtAIKw)A;sA9!|o z2ET*1=P&P=d>5nd7=5F%@1}l&pW*-uiXSsW)uFPtn@_E^oDSb(B}vi$EC4!zeNjpO;c$wMBTVbmduFtR~D; zth>ByBCi_Ffw`c6l5D8zV);;4tKHC&QMg(%!z@;^fK``KI9{6-RL}l()$-vsBQGa^ zL5^Z~x5W~;x;&m`lwRnGoNGq0|IZQxkG=%dR`X&6&Z;VK-6Yt}v7c{I_MrN9_04kq zYAtxNdVDrO>_AWPVwko}v0JMa5L)X-Y(5}@exp)d>Uv|d`mxzEn;~~5GZ;_$83K<) zdR)=QwzyhF4!67gM|qKrG`h&8iei8=j<<80m*@Z=ct?X=FaB0!&FRq~(XB+BbMQLBVvb^2;Xu^w| z2;Mvr9}u_lMl{ZKN`_$0b4#!~!(;<3JuY5(>>M%?tdWPh(u)HX#rc3+pyrWqbJ<>m z>y;!J|Hz!hKh#g$z5-d5dug8Pef76ife}w;Cj zu=*i2Xo0XsjaCFdk<@!{F#mo6(oe~Oe8(uGN;>w*lB%FSh8KNDslh$ePrP!{ zPvHUn2YR5+?0>QUDBkGpRPJ$SDdy)Z3t)DjU2K%^d1k3Rfaai=WiBU1MHUZb@MSf? z&M;jx1dxT0JX2@}Nw<^6F(P!{RE4~Wc!1S=I;cemy%y?VMI~?vLUq;g_EZC@hE$HA zq+?%Sk*lRi5nbDnqAPPdt!`O9KA!DXBC1PF8;QF)Y9aF-;%&Npk(N#v`WSx(qMA>( zRgjs=RTe(jRD*Lq`ob;08%tR`3q=b(Fc6FDYHgKWW?F4yfmf1mcd=)do41vRVJ9&a zDWX6x%kau0?_^Z9o#;0zwV+z*GtY~LRlHFobx#nhR^4dplElSgp2FidE!+AukboGI z7d2B9dSgI!ZVn@U=7pIOVv8W~F8p9@i6sGUSKcbQELS^aR@m(4s5(DC4C#P!Ql>J4 z3c;a6v|-C$NW6Z&|uoJMd|qb7p35zGaa+w zV#_2GZC9=+w!D~}l`6sIZvWDSl{ed!33Nt0IBt-pW;PdpUc|cSHe<8!s__!s7>b|M z!Ans&?YGJ1ay#FJ$(Sz_?G~Ru+wFrN3vZQkigCi=StRlySb^s(fv0Q2Q`tms!*ycZ zvLTa1i91HD|EAlVPk*-3YVRV{gdE3L1vjVOk$6K^sb$e|Yd#1&@Gc#b!b_a>t zISP?Gs8~4%>DXT^2*f^tosy>qgGh9K)+Ia5FL;>r1&$+xFSYv+9Z)5?bEcVc)v}G$2=>A+(DbThY!)gqDN_8$YH*@kh=1=5 zAU~ylJW@gUc`kXv8Y85-^UC0nLpu#Nu)4)xWMXAK6iA-yN0uE=%d^+^nP^*Y)_ zg{b3QLuhW%#T3PJxF0F%v^9Fi$aO~@fFy!RfNO zq-rvjYfMh-O(WG~LH$VzJV<6^X9|YG^7-A5s3$icS~%E}KhNE4CGgxH!`gjhO1DZ!Ymu7d^n5m!JH zT77FgrtS)=hEQ}%WCZ40Qslu_x{fWDeW#&{OeHC-<~SFogARo+=s7Qc6}*N2Je=anD7*#mNBcLG;X#CeV1&zkt@_1FhY4En-?=Mpe zLp|f&P8lTv;Rl8^;WFIW&!zOp4#Z`$0A>qt#gjspp0PNmsGNbD8yGe5JoQ2VVtr+kC_xi zeSWy%KgvQrAiEq$jnjh1Jn|%Ij7CdDIE|i8!|W$b4?GdH;pIVZrT|ZLB4~4%xAMms57sw`pDWy3`OAz4?LsL>2)(DzzyF4$a&X}FQ~vPyaef$& z%>T1iLB`(vf5WK%SyhIrY$^TVK)fhIY*08Oki-~h-DH9q3is$Dh`~if3!s9&+HA%; z8g9xPP@#QC!M)H_=nAIqW~qB7nlHy>019nZZr+`8?^&1E>AAhGycAZEjGZ{^_QeqWVE;NQ&$a{Z+fr^@h~l82y06Aca_-(4NmG}gZ~rnD z?+YT9n>>dEX@>P%mv@xG3`E0XBvF5K)}@A6TBaq>WxMH3Wm$to&#ekLh7o2mZ97D9 zrXLLRrJIxL9fCrd%yidADF&^jBr>M_utO{KwS zoCPB|2i7pTh!@O^QW(Mig&3y(t~?+6HPoNTsk9KR2Ntg~eb5+0PL-6Qz7Wm~s~elW zO`oYIN5}iP7N`bK-+4z!||F!?=ZQ}IO@*K)Y@94 zKwPBf&MIx5?(2~lQ zO{ubyiahrJ^z|z2x7~E4SlkAl(N(0yq;QyiYnr zj-C4B07n=`9ibxI1^PPwY3G1bt9{=i?gBH3|Jh913qbgwTi6l$i#7 zAUkLhY8pr#$_fopzLN>JwdkCX3I2%Ysg7hEy$AVJ47==!fIyM#tiE)u((6%KtKZ|V z1L_{u0%6Xm4K}WmTlo4#;4lp_f9x^-5Me0&ylb5g*Yzl5K@YxY#dt zZuzC8`g8sSH=Z+Z*duBL)0M@D#*lLqS`7;h(3~(TD7Rwcesjw|xd4Zt2jsQ99a|V*E=`u-X&Iv_i4y!K5<` zkBCTl0y2I{3IwWA0jur}SNXB^6+TeqA8?8;_fQMpkZ~xuI0JJPh;z87jA3MIjdFPh z_>995@SJ7yaA8fzUeOG)Zh>~eO&p$pR-FF|%}iG7aUlIr>;C>U^6dXNPyIjNxuqJO z2B<&Wx*n6{Oqno}z+Y2^!Jy7}PLbG%p@=L=pjmJO0j2O=!b}aB8@F=sRm+>3T`zUC zFKyyKdhG=}BFd=V2G)07t*^dYo7%MNci9`%8?vx};;+5`gH?BS=Y8kxdHnf>@N1p0 zjk;n04_YsJ?T0SB_B8h+Z=N{DPI*3*J#~-1J<;4Q<&g~xHa2yBROi%5VZ&lkeXuId99F~kvy5*iS z1?pb1TxRcVkTc_*-R2zU15Q82#}#(ya$-s6Mp@jK0KsZK%HF z2XD1|2r&QQe88vX01(fpkALF5I#_3V)EMWsfAYOM82C5QLB7ptAK+74z_yu&WEXh_ z1&V}7A+G`A$Z+Tjy~2jS2H|3$!tM{4u-tab2OCt1*iA1V30=c-F+7(U%eb`&d|MaG zAyxFq4H2`^u;g?S?x>va`1KNkSS&p6s0~r`++yxP2hlt;+}5cN^`l>Vwf$gz+#fZzs3) zO-@2_cznXH-Rd3jEkCf-mBe}kXPK>I%CiKZM|eMK6BxXcI_&`T)uq*Tv)x{w4<_5` z{@)f?&tI=;*swPD?Rnw4gxb0!Fq0b<{)sQ(sw=Mw4M>!OjzVrwVEEGh7oi;HY=>IG z0;VCGNODt@706U>w9pW80FR{92P`@HrL^@`nfL_U5^_E(+wn}x;XW+%y$Pcj(jOmAk`Eo(E@dg>e9&=` z2I}9`E{uPvvB`r5LO6Jm+a~td;>TNv#{w%2v$aap91qP`gx7SGwPbH02A!j|xnou< zW}ql5VC~#u$c$Z@t92NG6^)e`0648K3fj>~yV5$ZI5{WDBu*76r9zJg1+HeY2Abhr z&1%hF!(9T#JC58npI_TFP9|=@+BYP*t|*eCQ5rFddqVzxh%T+t7)2f+m{P?RR6(O2 z7B!KK)@I1EvxN1Wk?y=A;3T$Eab&bp4JA{9w#h}O5<3ln3Onzb!6x=HX~!>*Q4V18 zgPgu8t0)Z~p}MqUVJ_5cD^A2QONka{riG@fEd#0RVnnQ9%oV5u0%Gc)(d%dCM#Pul zc=<(ii`*zh=wKLH7iHC`WuV8FXE(3vSXq%MQcHCy(i6ZIx^2nLeJx0x^q`0aSEPt0 zi~Ig7y`X;2(WnYCinU6EdbQH1XT2b5YIro0Mg~nkJ<)-qh!Q3dF&(BR^QP{P^&-SU z6|Y(qI%Kz9QJ0qR&gSZltrqnA4EEXu+6FAA+j^W+7`h2l3XQ9D>i9HjYN8tKKRUKkBs*Iq6>zf;+tmP_gGu@1#XEw37^BZNwRTc-6 zTK)q#)oaLkuNaqb^fPs?o|R1DF}jQ-e5~csOy;j89EwfmaW>MohGOZ-*?+sy?F>8h zGi-8A$h07gW)<6!w#Ch%k-*R8WQU8$L>tN!@|EXjF6#eMex(a2&T$2PY_Qv0%pbdQ znYh@@XD-@$xv!LcrgnakUIx2%3f4vlC=bNhWwC{11IFZDQBL%>#3)ZVcnu(_hrG6(c=dDwCNPG64?~0rHzaWLAu5vnuGBsPTgsEH$b;i&)$nti!mw z+Tx2B@;Y-0ZotIB4{v@k+sWt)ab`c^ql~u3nFgZGAJ*xcZ`*E2En*RQwZhOE|*uoo9~O-ZV2GH=`9+Uf_hXyrWVmpl;vt z!e7(^N#SrN(@XbUchRZm6 z9WCAw)~d`)%weT0#|!5C+J;*WMWjx4U(k>-Hoz6-zM3m)y~h~po&1o|j@*Wl zG`F_6LrJsUyngob4;*QB&nJrMCkoP!6;sX?rJl=Zn#$RwJeQ*QE3s!IGfu+Fsr6MQ zRm=46oc+Ze#{lv9trn)93uJp`@yz6fJIUJ1GGvxVZ*OpXOGFy{&AEJi|h~#R=LRwTaU){_##ybL(B*$b)yC+ zS!8SHYwh$ld*97oxT0WZUjjPnK`e?~Sp?%1P_~yccb&Xl$Iy0TSarUPGS+g77M?iS z)a>Mrs*SVPcR6Eed&g3tINcj(JiDR`R`Z76#;EbEf3uR-(?q0^x2Uy~*Bx=$bB9}7 zJamz51HE+`41=|;9AKb z={cjR{3nDt9B`dKNzEPl@1zesH*9v6J?KmC#kM1l)+dWK;_H?%oyI`UWn=#;y+Iay z^3Y0pM22kHC*CjqE6Vhnno{S9TnR}_$1CewIa4?jIzLG+c!KU`a>bo?50*t89O}89 z=DyPt4Ii#%F4v{5Wzhcv>hk!#Pg!vUnIFU!H%@V!iy9%E>MQx2FO-nTlRw`T!Qz=F zwLBs10Y}Y$otF$uW}QX<@4pGuF-t1X*J1zql_2v!tg?URo&RM)>_4mQ9d0NOm6esV z?aT>p&nHMj!tsXj0Ky3XQB)L{Arf-G0diVH7atS-#JCCBtc=F?8l9SUmjzg@k~L0s zThKBQBU*af{N_m8YMYz=&3AjNH*L}9S-0uwjLA6gdi}pSh}WLqQ@_piZ+*MpUX~z! z?b|#Q0rw4_KzD~>coq`iyw^$&nCTSuQ+Fg~tBx$UYmK6Vt?g?;tx@ie{9&?7_@R4c zqhiKh{r+*Vk~Zm1(Wj>#oqB)qc(( zV2sM$9tOmC8*-6#NJ?cW8IZYAcc8UDblx!C8sOHe-D7vB?bRJYtx02p3L9)9|yT=DhTV%3|xs883eVyz`&hIkmjyK$ySd2g@J!)%(QdBQ?w- zzdkEdALPq>WBEt;^2|IvH}wX4b)I7&bMCOUd1&4h0XVrGO*Qv3@zYO#z=6FX{eFm@yE_netR_6yIir*NS5OW*4qldeC>|LGW1 z!R*X6KLh@ph4Xxpl--RneTN);sf^}Nyg6g}6CGLed`RDZrN;E7J+Oa%XhZpvAKjsK z#G{@0n|y-weJch+IIy$x))e|5wy&9fG6#Rd{Cleo@*nDRPCkDBw||O`^>4!Jg&ymN z-m%wx&tU&f#x9Pzr|pr^@sGK2u$Bl)=h{i>4EjN)1-jLK_TX-JUC-vCuJ!Ua}ddgg)wDRLoETrS3%wU{I|FOx;w zDn{Z(BRW)!myp#$hfQr4*)rCm;w~g^F@cxMj;Lk~P;J(XZnZj)kct*-$?{;*Oony0 zt6%6OW}SM@$ct!cTV}VdV0Np~72rmli5@1d1cR)5jBQ!ASCLHFMy{UusPw z-g0c#>q%Qm7eCmtG6+ay66&nxX2R0wN_ zVD)~OT+dGH&Uh7$X<3^4Bm!o%MY;Z9I_Gq7yJ!40;oQcQEQ_#K$6Xur6mFOrokoml zr$v^%fMR1CblG^&lE~{TPzZHcn*ef?A;obDYBmoPw1tu^3-yW5tBH0WQ-W-C#}qFv zCrVq~fMNz`GBjZ9dg5<%5A$)lYhm4j5?Y#I>S6;nM;b|ptZ){qX)^Qq{pPU>m;H z6351UKRxl#5wPWmN9tz8`o=ZquNlwch3I+5pR*2f%1M$?=xbbo9yaoAuW)2g(YG{B z#x9z?0#sL@Pl<4-$WgbftdVJvQ;zk>#F^tn8uuWv+m$@&t7oY4Lf|=?QN>AMppHAg~ z-Uz;LCVg15iUVg?VT9ADj%v2l?uQ8$#-_Ja2w|jEjvvturu4jPTIp1v8a;AY*>8q@ z8z)BUm`61m&W?zVm#o99cnR3OBaR3Jq*C!)oM z6$(#-EjbkKR}ihuAdh^n(jY{aIs`_Gix6e&WaL$Cc5?+81f0#K;WehT@lJ6!YD|k_ zCaX@eLg|u^s2o&OB#ZP=rA3q`X_Q65hz0|wR2y?bXz7qq<3~>`9%D!wQIk&^^Q?qp zU^h72my@e3kYlSXPEAjST>Yywh)yMpN~zQ$SE?+Ktf471)|n!B3M(rPDI`^@jc6?? z!Wz`ju7%1#Lt)So`m_T36wDdAJqIMT=>Gaei-9 ztq*tlGim~Lj*vp0!HcR>TZ(o!huP4KK=Yo#F7-(kNsTNVDou(Y$r0>g#Zl3rq)QvM zMWGC%LADOD7Qy8%bb8Q;cA2RJK-NaPiw}Xf+9qmn%wr>5DK2&d48&?q!^0K2s1YJh zQCLtgzyMj=G+U^OY9wg3L`qLUL-4Z{r;Ab={XM-!t+l|wtBQ!AmaOrlFe%AuL3pLn zQ9#p1Bx|l9&LrVArfC*IQ(UNw%7~~glGYI&%>$ELU}0F-BBmGsXC!iuG{)UIZ)_c( zG%(VBz7N%E3Z4NcKLkW=vS3F#Efz(UNK_VS+o+DPtqwzRsG)6vVM$yZdhm!oTk6Vs zRgvJ!#nB0 zmVw&Ls`YytBVQxAA#1s`9W%-yi=wbsEJY!|bw-=2NM#q0g;zOV8CYyCYXmstm_2$A zz%(IjEkiVLQAToy?>=ho_vXMk(aMiKSfzO&nZwa^RUd%TR!khzsrbfs^%#?&r?`D0 zy7+1MilVwkc!$ddJB6B29^}dgDmpN)5Ua$LSgJMR&`=MC#Z_y>oVZ?{YMecGMI%Gn zhNcHgrIQAtRdiTAxk980!tG0AtX4RfHRl6g-Q^XJc3n{0trx( zVX(fO9QjA;SjXHROiHm#ASjNK3_NLESk8#{6gk(x_c+M!# z)L%3oKz}zG8`*Updw2uX2o{PS+zwp{5kRq)@KvwTUMmhI(bxE__6dg39yrq~I{*?h zHcdt4B3b@)0L~{-rCugQ_f)EvA$=qrjJe*F8o6gB0@`a7dFLhhZ)-_n!D-@h(<;kF zjR{!56(i4fie`#7Dm)vKTgGiP2y1#(2WomED~qL~o|NB~rIU#ik&|>j#vEY|rwZ~Q zwo%lBP%(qF#9;tc-buk(!8{KG0jy5mBIhEM{wgPH!rVNCGM>~Lvn|zKDLykhIUC0cVTA1N=cs8^7NGHBa2W?exCnP)t_AD!6SjXmeokvAfHp zDbf`cIe4hg2R}~BYN#(2*n(;8M3bw@cz6CY- zP3#-)iP9cdOrEJ9l6LCP%}Ca@-kDb}8{^Pb6#FpFdDTpRFPYxeY5DXt331EYP)-82Ve|1@;gkRW6*loP*?cBjMek`y1d8S{g{Sb5Av7Vmvh8{c&*~BdI;Q^&M6PDZ7_eG&9N1n>RX5Plc??|)B4NF&i|Np=)P!^SAh1TTbhs@om8Bk)$FhBK3#Edou)_uw!ctC@qsWIDGuRlns6!Iax%rz`?wpbqS$jA&cn^x!`_|A0 zk7J`!Y{RMUcb79W_4(tGdRbsqaod?kljj)H9@8vb;mg}#vFVUqoW)WHf^7=j;zafo_GPod~F~lxN9ka3Us;_5~?t(WKO2fX?RCd&7Hgl(c1txT>Ngq)&Dna%uG;`c<1A4nY%vH_8QesDyJXYY6 z9W++mwGWto`$`hO)6ulLCn(Tr5oS9i7G`wX=T8g{U{qIlCK}`Y0lwY<(}0YA^xAgI zodp$L7C9H!3pdIuveAXb%vG|@HkDY%6z3RP)Swo+q!>&ICh=9|a3e8bgY6RYy4X?& zzy_LmA|+H0bye$S*b|4n$1rM5aV&_;Pw4{l%aX!JpGq_POqJdhPpe3@uWD=DC~id` zG5X=e)fEhaqxs}{x$d0&jN=w)?>*kl#>(%?{#S&Ho2aW?1>hlws+SO+SY~cEX1Hy% z{hT#c>+G~)RRpMYhOW0KcSAqvjp?6#u!oN{yD7ZB^P(*f13kkuNa-=G^XdL*UbDkY z9NpI&_zW$CzBZ#n3jLE-1$=$#u)2hLxG2J4W$;|ENe z>H=>dJuq)1pyyxm_gt<1WqFLxB3@oWe}P_s|51kZ_3K+wA;hxJGS&h=Q%YrRbgyjy~1bwrS}-h%HHX~-~l23<_39YOQ^soAn`yH z16xu^0kasw{`JeVPVlia6;Zp((`$jnK{Bm6et&ly~o z&EP4WzIlC%w)lsC9}37jOkZS3G`}geJsWhg0PYLT1jZk<$py7fKPGfT9T2J+LLLeI zVz4~&%kWX8m$?X5M*1+I5;8U=07Y~YO3*7K;(=Jo4pQ}Xz#a+W%NW38UUKlFpOzAS z|Hvz*hj=yVPy#-r#iS>aqJS5UtyDh`GV0A`aUWxcA_>ilhn+yjuAj!LAIBOiGcctG z)$~XuVy~1^9T)a-DlhD;yhLQ1kMhfq1zmlcl^Dw8iN){bTrN4NVab{C(!RM3cGj6! zaYfWS+nXEO*1Zp|V#(QpI3o&)`V>XyZhOcch<_4Be&R<>`g#=X7^W{TbR(}hIPv?9 za0&&9_BR?KXieWHM&)(rGnS1C#=={#ao!!M2MnuNluYce;X|`u zjmBU*qq-yjXqdhiqiwoTlgEK}!?>W(pn9I$58)ILf;oVnwP{M&OSdZ%K8Zp~kxQ4) z3KREoE2J8bSqz=gW-M*$_&~YwxaLiiGpm24M)=NOhb3&?@j=2=Yxt`SVziUWnm@$G3kzxA2+V3?V4;aL}2Tr zO)a-sxMQ4tFbdgm2>uf+89y;SY zPi0}1QQLw*Vfu)HMg36_`*-VafpGtaRdKwzh>n2Y?d>Hm__sRKH&(A|fXU`Ca)NDk zLEn)?T$p1F^YkHu%i*upG$iY>t(s8ki-|&;KNATzA7(@CiG90=L4~0{(1uJzB*#-0 zH4%B{xfEo_%HpagG2%B57Gf~j)s|A`B!JF02hC_Ok7xfNYcJpYezX}+t zH=3y7L=DQ{$ZDwQ3Hp8c9sP;rnu4CDSVp}XUO_v4%(z3Zp_H%3weVoC@%N$Hxp)no zSwrinpwp=z4~HFmwJI-`c7sU6$vrpNX@t{1bzVJzi4#E=?b#lY3ZG?R%0w*yM?S}wEuwz)96Ph6F{!|Antiem_ zv@Zymxe70Wu&2jIT5|ZKYFKqvU4d7_rY0^5&C-CQdnO`t(pR| zz4lqiuk7hiGb63rIV4NF?`Siu6tq6cXtKBhmVYI3!If*5$Q73;93n0wwA+=`bZ0G1 zGf6SqZz0@mCQo!mOECV6E7v46LyXAu=mb0DQJ_QtS3^Mw*&A1(j82@2@;=xBr6_qr z8zL<|;I;Iq*XKk()&%{HOHDJ*u5?-BRB;u)6$x?&BUy9R%f0A8Zq5yHir#ffWh$ll zAnd?pTQ&{lNqO_&-K^5xhrlOb_o)Wv9oKuA-V~Dsbx5Hqq!->rC-kJRAk+k0AXH-X z>!}K|&nn0E;1zj+H!3eaZd>NAY3y#Y<0`>OOrRbK2#suLVuJ6j07Ixs-xQ(@JJA6n z=U_P=VZ-lY$gIq}?2aU@akE!)hRL8N*Ez>tywYIhmy@-?0evft(?7A!!NYZSC#So% zu{*ZuFwhN{*9KT!XNq4_x16zp{*4nLeq0#|ia-Bv(TH@L={Hf-$CLjpm2D$e*bL>G zcDq5gBVMVa6i?(+9PA0qP+S0>6X{GN?n_`P$P_jPCtTlZ-PCdiB{^-n7t zmi}LXab{Btiqu|+r3UXF>%jLxqUWRS0eXZPS}N+SPX-0&ao_kU_sa0|(^G z4;KFLVm(jt+)~@zyY1EDGyUVHk+E}KimwGkk2UddV=Nal;PZri&M{J{7ZCFi9_Uy- z>=j_L$}r*sWm>JZiW(yXpD|zsSE8IPj(d9amZCsJ^x!VwWB!)ov5V)QJyJJ+fl%`x?I8(_oJAwgJ*LFN&YjoU6Bv zQe&q8y?|(%f>&hq4Ei;QT9V>3TZK8C0vaV2CHkK;ujVowgYBcYfuMI?N0#lq)Q_X1 zaq|#zhBu@i_r0lBO5e~f!L$eS81PxW?Nf`;dkYLrv3CwcPnq=KTt9TsF_zv7C94GA z8{IhT#4!z;nMW6$NS}y%!xI1Y7+sL~#`CKlc~F_gdmYS}+IR2Sml|&GrRVxDJTG=I z81rCwE>>YGA|FKkTdy?dAkf^<{@j)G92DB0{&O38w2ax$MB*hu4));xhqHH#u0-3m zg{xv##T8o>+qP}nw(W{-+cqj|B`daVTa{E)U-sMQeRrSx|@M< z*+&;`>5JIxYlBzeKf>QygEikT$x#EqqQX5AY{Zv5bBfDpeYw@H4{$MGM~)TV*TIm| z@E?$ni2Z3}CGQCiN?2;p8AmZXQPMHP8{IU>Nzpm___%x-6a)hjk_SwY&^6fh>MDSs;0vIR#u0S0?i@q?<)` zw$S^fkPv8oNHzo^k95);vTyit4rD+^GNs_44_-?uCdb*+W{ku3bumTLK$%NF+oQctudj$A&R!3`b#2YrLU;Q~ zxn;xb+<=qCEFOe#o4d3S=#YUA<k&qv_-uq(xyAdtfQXtHmoaRBj7F zYGSoUDPg!jae~I|(7zeR1$~H*Ltkrk$7a;2UqktIkOr{tD(P*K?oCjgdb}{{)Na$h z`cTu`8~<8E?-uUoM(_Tid1bbU-mOEt$2;y>7e%>AvG>+1og4N7T>pA~E4cZLL{D&t zst)CVP7cAi1E)^;)EpJ_6ir~h z-Q;&Zc%UzF+Lri zfnI*m`E%KpC5BV2GSXActGr@tLt9=6r@HyT2IX2r{Q+LWHlz5v0+$Jw?_$J?wHfUk zMtM|jntCGBu|r)F8Qz(?YobA&F~a33o7hWqVDk69fato!Hm1vb2jyc*u>HaSD+=*n z*=D6;SPDNS$ft(Q+_WW=n7qmY8Vwl^0MpaqO^|YzIBXC>oMLe>p$#aLb|x0wbry>v`A9%B(>Ot zW!VzvwE{v3o;bOntP0Za(7qIU79=?(8N!)jQ%(j2p$ho4JdZ zUl95G{j9$}J2nZQjP+IBQDSoV@Bv+=+--xq6}Bwra*eQ+P)t2qlVCcPQqK76iCB8d6!0&?^b` zkjiBlZZz!9_jyA(5|Z!CRj`_rU=!l5)e|M~6yG3x)_y{&z_{ccHZGd33}`fn*cX19 zjC55(#Fh)27mf1(daZR$ov=5xW(8nV^^<22v954i+Dn`3lP9g3CJ6FB#Lpx%<`OqJ zxI}^^VpLksV-pn3*KMo0hmqmx5*oR~XEUl-#MC`AibzkH#l*j}f>F?sIbc>zdk&ip zj_hmBFBXQwCl0Ls$pkO_RzlbV5p^`Q(g0ztx&&}Rkr-*EW7}w-fiC4+^%O~~Sy@*T zJvyU0%r@CK1YR;eD(n_Fzi41)zxM3nG%@U5h$vL7lnU#X(F@-YL(bG7jLH+#`;kZ+ zET8Y_xi%^U^cIlLXUJuGr%JL_HJ;}-AX}9L&pX~)-O)xnBn9DDs@~3$%gZe3xHdbV z&1MGG_ROcRSbbwvfLVhawJcg|v_)}w{P8?Yr^`0G)O+l4g8~Vs9FQ~0;Th=WCGG6H zJkJ10g%Ogifi^e`iO^{3#C^eSS(g zlZBXuRjU!Ql3vsLvS=hxn1Hs+%A7b&S?`X`A@MsxR}OirjqKO1yVSMCsG_vAOZQX& z?itsrTzhUGI0gJUPbFKu@eqor-+k+H-oltvm!s8KvAdSAu_no%oPEiZEH%c)2l&fn z!@XK5GPbo9?9?cK!?gTu4Q#*^#8lGdV+tkx3`@c6s=Pfqk0lek8})$fB>|*g=JDi+ zJvDf|Bf>>$1l<&9`SX>lf-sr#b@F+PXQsE2lCuz;BrN^gv(RS9c_g*c`o}8%E(~-= z`#Vw}bzvgnofy3Mj3eq>p9xs~^8hDWCB_a;qBAFn%n+W>84J@{OTO?SXiTZVih-N1 z?8bO0-0!vf(=y`$W7RO0o~0C*Qw6`=l5@SOB~#^z%g35!3WI*}IzEW#&h~Upk?<(P zxYqQhb!+Z;Df1{v&Q?8=&@e<+Dm3TNa5CB2RM1ax0`w11f7} z3*TScGqXH-!UgnXbr7qTJm?+(oQyvvCs{BVV*zKiSzIuPoS501e@ z1$osQ5CT;C1w!>0BaQ3AwovJ(`qQ#JLj)hj#qrg!9vqv>g@>qZNOkx=)4BlA^qO-V zLgiq@bmxYeEYk>xbV_cR{H3S2P^bdR=c(@qr7le>KM_}lQ{3!|pl4tx=X$XA^^z(U zE$y2QLMYeTuoQ%Ys}?vs9E4dNt14?8>}ufA<(Qr(MW`B0r0mb3VLL16OrmANm@No( zB(2}A`YdXtmB>UGV~X7QDFj}X@q-e|7p&oL)+UqT&2ek{o=4d0mO7&CA)K4F9 z1H&AI+t0m10EjnCJ$m|_k!f8G*6A%BiHL`0b_ULo-xk-O2UFFiw5$xJs~h-qrm)8V z55)~~Mz$Rp&~#N89m2t$CA0;&xy8j0KVUU++pT&!^ZW8Df++0V;B${u_{je{Wk{9!oX2TzPP*6T(@iYy4h-QDutS2347= zF0+e9EL;=%IMLM7^wsud8b2|8O|h}Tk6!9n{!YB4s{uJq(!E1I(E0NeIScO(I4te~ z1nh!QjyOxKy6iu3?`Zu|nNg#sm6r37memP2mBAdfBDsRh1bWXh@8KeWdtVDpa&#PF zN)kn)v8u%$65=|XnDi!S)CUn-^A9<55^k`QVJx9$?>LT;6NkQKip__1p;PBoLAmqx z5e{ApPk}?0BER~B!yv6l{Pu?03|1&p)c>U7JwN(ISSj#Yksy~K_}lnC0@^QcEYJLX z!r}?0Xov|M@Ig;wJKPKa#?&T&gGpl@gFJ?WikF%f2M#z~F=$wv6_$W6uX8)lliMB# zh2lvdCrx=tGpmp-3J^hqg4G-i3?Xx8u%!G#Zb*y)=dtmmR`(`0*`^Fj?6yqN%9&J)w}sp&stE;$w(90W0*&GcAvwSgOltp7<@}_rSMLM zlbnY$AJ*A}R@8Mvh)>5x-b~05<8&%Td#y}9U~{ia44X|nFbc3Y1^?gyOu8@^{>;Wh zBDrq2EYB8N`j`}5xVfMXNwbEzveknJA)NaUEt*z-)sq&jn*9dBmL?mY=50RI? zvQV#cpSV!lG0%WuO?>*`)__*P5O;zl*)zt^$C;a$r_S^G`uxDl_e7z-TrQ^z&j2!G zNTWbacGX=Nmsq-uhC96t_{+-y)&({Nqw%ZX5{xKY`F_*|jYY7>Hvb`y9h{j|_!`z( zW2}F#&oq9Vt5PBxrX_9FOAm;>F2)E%<57yDuJa$}4!jqhSktnYiR!!(IfnGJNz@-v zI9)<;bw547r8sr^h>BtNZ5mdy-`gy^fBiBXBCx;;9R&!(5kLqp7)x}Lch=*%1xbw5 zzick`3^!d5_ZvGvYwEbyNALho{ma}K;vk_p*G-0F69Qqn<_%;-@oWmsMtK~s(LCW@ zp{K61pE8_&D#i3$h7}OlLkfM*YjxZ!tQp&2pwVs5;!YaDdP@FiA8(1 zz3IbE@0z)?6o9VvHm#ASF7<#6*|EL{)?q1f^GBoIfQ7*Qi?)e4MKqrTv__r^sKAkl zj+!d8S*r#y0@qkS$Doj9s7B2uf=)6?j0T9p;A+=S9GO}rUZ|?*`0{Mx4sM}S%#$mI z@C;ex;h)aMh&;-_16_6?n9bu&6VX1aOV|Le34_1lfZr8E9L(YUrc{LF-%eVZ}>uY>dZl3GuZRY>>euFB2 zKE-_PFf@pkic8ZaVKkzpR_(Ub&+Gk7m!sXj1)5H6hnteKoT2zv$1H+$Ox!E;*J3!U zA+hdQW54bXeNx{!mXEpoHw4sDYFEb?!yY2p`l%uedugEX2zZHW{#s8_KDrcgM!seH z4&s6*u*i+l2>dY2>s~~ zn5EnRo56;t@W`XLS&Khc7VUl7c`Q~UF$X=(>Lj^uJ(;E)c<{6cKq2V|Fxx7KX91{* zi)Zf=fPA8krQsRF{wqio%(6kF)SgS!pF>bc2YjV^<4aE>X;V6Qg5WA#4=uTRZFWG) zR6J!KNr!jXJnXE#;nyZ_;`q>`nyAC&C3*H*YP5x0aG#k$T)J4UUz)oj!i0dEah`pYTdg;B!BF3pz-_?STGo*Qm zwRh|)ENM*9rjaVMI5MfI9`M0SHnPY_jh&ar$~3xB4Rctfg$Xr*c zUmC%;!6Qbb^B1ykB~;EG&r;QfMtcNb*bFmjlf&m8D0~f%2yrNUZ3)9w04h(*H3Bn~ z87+_aDgeG1%S+B9o9KH>&twh{y~IZj)Oz;Ps!wUV=1CS>WGf}@EcHO<4kzWYH$vFm zAu#?Y{E;-+SB@Yoa4*GT8LEnHF!(gWXE4dDY-XbKVZWBKS!tumNSYFCG3$9on#&t^Wt$(KEp($$VV>mqcpjsyb=xd$)Gu zTfSOrAJN6SkJ+H>Lg_qO2u!J@;%6`8A>Clh7_?%2H6MzfGJ}mrHj*hugo~I*>gc+) z^GBS$QHsy|T_<$`Gv;z6Qd;mQEDNMBCoCc4vjLL>d>Xr-3R-+wd<8wem3tu~F{y}( zRhetC&XH*uc48K@&gZ|t4>(`}!%MMtVP|sFmxb@}wfOo8f8*;$PQlFSo~euQ<-a|S ztk*EML z`s*L7+x`lx)}D3gzz;6E2+IFKTHN@5wW{ciU7cO*ZRv%Cr2mHep!%8jni|%hoYhD) z(H>7rZub&bOYxlIoJCjTLA|a+J^K?=Ni_*+!zka~$|N%J#3q*_0rur~n{zOn>iUNM z)-P=N@Pn2(m_EDUQ@uAa{DFTyk9wP|wBQZh%w2d&(2R&5@m_iQ_dUA3#{JRzgZZ=P zNu!?+H^D&#zz9i%d-apoL!=)QH0U4%D%$lF0;Qq*KqfKCjdGCb`KtC)Wv5<$i20@6 zq$B9|du69Gl9AAokOYsVr^c(+W0?<3C`deN!p2cA!zqi&MbkpE-J+PGod=M(xpQw9 z5E`rXqoyZ0$O*FNq8Z7%?&5H41={awGxgH$1qGGeLv=>TPFK{s)iYp7it za>ZDkL4|2%w%nZOQT#K<83A}R)AU?jo6(uF0OB30ZyZtEbV<|GT%W_o!;xjG#(%uO z-xI%o4dF9&+IqiALiG{y7npko1@8s-_mZ@=UyYFAi2F={)mpaeV2+G8muGhU}n*Gmji z1blrn$V<59;p8pD!2p7uDxkh_7by9y59O=f4b@lZHR?}~;1RtAMG@?X!qQiGVAYjB zG5QIuw%|VABWMu#DVM=>g@je*R=Z=Len%ZHR`|q)fyeA2wg? zdxTY&LwpzBYE-$FBDLOQk<)Bq$s-bTX$7nz}E55>`+i%N;y=X<2BilI+Nu+^S?ceD$RWICm&PkjF$=cGHS9-wPOFyMV z>F?!WxY9?ep}>?h}U;BG-5v}_y>05^+x!S zGHYy%NeV{t8@_sga4Ns>E%v71sVJ}Gvg*ED3CXQ^4_bzI!9i0WQbWB#0!L9mo(fun zK>wL{X-!`reTzIm6@AG;7f=|*zekV2OO3wm(*JO-Gt%Q;Ln>44K^zPHN;Igis#OY_ z(#+*kN1r`AZAvz@ugXv=G4rg#UgU_HErkcui)?Q{=5*pa78p=H+lV6CtfV=hS$HTQ zw2VygkY$%hsCA3d9kuE++}uB3p4ZI%H7aXu*&w|*vc%RAc6;_DBgnp?ve<~nm)|u2 z2os}{L!r;rb<X~g(VO4`v zB%PGC(+X8Om%&djR;sElN4*nxac^xyFrd$kCv(Ce)A!UXQ3S)Q9@)m*18+d^8|85h zoxI}B##NTnN{PR56NBOn+(I{bJu{Qc7&Kdd1)uQ`tK`ZO_U7(|tCyCA?`gTN9R zP9*>>C9qc6U(Z$Sn#8IQwvlK%gc>vKV+pR6hHx_%@4PG5hGEXzNo1`h};FPFc_OLd%`7V1CNNJM<{{d;+3~**#af z;9)qlP7meb^a@&M!nUcxH~q=i2V=ZeKnKV3z%2RHQ1uYX;LBK9uI9~JH2mtu)}q(6>0`a39<bHN>~6Ec;%ZAzMR(O@ZFX>x_$nCfgj zyNFgrCUV!fu*ykhY+GV%I^TJ`SqM~3dB}kfo5aMn?T3YvfIP?({=GjDSxgN8j@uet zBLVMOhEC^HsDWfH*Rsnp89_T4HNi)>hx$|;Ex#ie8*XAV1Vq6{e&AH(8NEr59=frN zopSI|6GO0sm5+Fqgv~>JI1;^q#8Ncj?4>Lcw|Gh{pMo_h8=%w2*rdj>pCu}{7!chFfOs>-JD@UE z<{GQ8Dl-IDJ5IUvnM3)ZIV@rJjVHr3Ed~}XHI;NlNyX6?NqzluN@0WHS(mU&YX#EO zmdVr0`qN5gtTQyAic8JyL-fF@eWh8<(_7N3Nm5r~)TKR#5{JhNWYk_?-B}qL_nX{PK zn*0U{=LR3J{!i!cn=qM;m@Vd9G!~D{aAjccF8ET#lSqnL)D`+N07d@=h!|7|I6i}L zbk#vn;t$nlT>ki$A~>iUT_>N_%&AICcPqm-%ns%L$7^3mek4&iR0Qu+u&K({qP3gQ zjV_+oW=A^O!tHu?y5^0s8(~O(KwMDQ<|SI9Jn0%YM$sJ+fTuRymlm@eXnG%Pke%G@0kXE?u@Ey^cazoGgXG`u1! zGf?A^YYd>+gnkGIu6FwoA^6Oc){t(xTWnMP$W^^x z%a*_W^@#-1vdhj&bBsaPeqR>SAK)35TNQ2=2W{&fmp?T9J;^Z-4bmTj=>6NPYX24l zQ5%cEuD6E(VT0??=!&Ipz}^+yd!Rp6J2-*eJ_-L>nRBf5#85bG8dLq+v4JWb(&j_- zGV6YfvJ)NuN{mJMtwM%4n+mCA*tHeEpjcI{=p^T@|3+ks{fHVDo-(vJc^n=#L84t0?D0tRfAgO(e)_h1(-#jEI%T%SR_~#&$#I%++FJ zUqORgONgW@8cUb~xsSX>NK!k7TOnFn>^o_z+WHlB0daMVl5DZg~T*(NT zT+o1|5Xp*7Y{)OMrO|4;MeEeFDO zqQ}iQn0F6UzSBMJSBhEA<``qv4tn@OC(|kc zHx4kRm0}DQ=V&(9tk|SG*1gG>yo+mkD4r|#twlsyy7#rHCt)JbWKGsF;@n5iT)y(O z*FNgigfFmqR&R=u0zl5Ir<9DFE6aEHlo^a>&Mx~=oY`Q?H1f{`TkuoU3??pe`uk!oD7N|AU(7a2ADCf&Wv=X{?vowIT1uiBh8#qNrqvkE$|dIf_Smi zk;o>(Ls@uqb#d#C`t%m;8R7*Fc|AfVk?^T2B6Td@J2+vRNee4iRGf6V8=(X?t)YNj z17^vXQnOdayB%`dxy>*T(( z@W*aLulJqJ(*Sq_+x8oR&D{1K&k7x;MZ2$*KF^GR8Hq@Wryq6>@UP2;_R+=Vcn+l1 zpP^iAgmJj-ux-i2l0W8)9o z6K{XP7m8WSA(K&=6AHe2de_o9-W5z}o6~vbUhbM-Zh0HNcJlsjcP|8==yt@hg5e4= zD}ka2)a@Ue1iA|dqd(@`13Xk=?IDbid+l^Pvaqm_59#qYsp%Ah3}j(#=;iGN2H4C@ zW~QX3>&Xt%f=vu=+T$kYc72`%AL(`R+8&Z4B!I@)73DRvos`K(Se@7zPI z3|HC|wvGeqx!N8p?B<$1Heri-w&5R4t+~6g_N%EBh6y{%LW?pudzRj|xx5PhQR%=!yg|zbSALd7sFW2Y4&1TP18%7of_IWVrIk><1cV_W# z(-TPQJU#@SK!=-1xXZ|v(rj(hIW!m_xvhj-mAn@8{l)m6mP9X6G>no4MO?)oLSI zgfl9(>xSjuks9<*)z9cpy_Jsk9{D3i9!LH?{3A7-F*qO-)k zSb@W5gEViqMcEre*sY2ueE#xd0Se*szF2pvv)^uF(lRlR%sRD7+791gI^0>}nX{=1 zY=}Dye?NOkqNO;u$B~nHo8=a;sxD|9uMf)^LJONeEMgTdoGP89wezbPd=(bHuK;Ef zYRAl!k%6TZTI%oLWN4TF0|GF~{|-ML>&^Mbm>q$yLK;)*1XIq1_)?<6 zFo!e7@h&zUe}pxu?kXPt-AH_$83if(qe z?E2tyR$i7r_-h2vHhr?;mG**Ncvb%6-V~Yvf;UOcP-|#96x(G^8C9qm?3BwG8N{Y| z2R~33{!XMcZ*eZFFX$PX3t*9Vc@HDu3~_UCgWu@@%#mA>D1CAI;u;4nL|Z_?(b)s( zY6t(|oW+6RNf#a#Wc4M6Q-saYC(DP@f+8KR=6R$w1iMpJFEt8@ZsrM2k5<4#LcWEC z9*yXJ&}|xTY-d2ez5c5#YC+@$FNzqVh>HWPOx4JrK$cA29n3Op;=WC~* zr``Mda`Ul)r`}>4V$xZMVLJ3jrb!a!ytSP3ZTNH?5jYT&(O?H+v7q?n-H+Vs%a^GTarbnz?&rsP-C9 z`bTfMR~>v4wUMfZ>JFW@DLTjHZJ=E4l@m+5=b@A-uUgA4=i=74H$tigmy-`p14 zo=Hcw$iYJPH9=%aWpR8K=Fd2Uw>4J^Rxm7!U&WE%WtbVpM3CKOvH|quX4lZ-BLlkY zd+Dr<;V%dz-ePsN*_ADX!V8^B;SbOdQsF7> z-px(JH^T$Q3PBXVTxiz5w~aQ_cT^3u9f=ZJDUIaY{>T>X9?!!z0{zh^#T{EN;FUW_ zN~pc?j;#W@O5|ESO<{)hszs%Em3L>VcIsz;zxY-pp(8FSoMUB+CFizZucGIkqH!j` z>ouL_e(YlIs!SSkH5aP2(Ol#L<&G=LSwt*FWq%j3qv2MTpL$(%X*`VAt&G(Oonm^d znOcci5?nyvRWdJaQf1Fg2Xz@Tm|3@|jqEY$K-#4$DIN-+RVmzKlD^4Gv!%8ZLb7Rf zh==6LuJ`9~eFGW&;3NUb8xJOL$BqKjI`7Bu*r>Ct2K_Zv%|!G<8~S7e>>i@bayc)+ zue1N&qkz*d(e1ldmxb*9t!#at77G6i4oO8`V`1lfRZCI zB54@3(aDnl@kG}4Rhz~L5^oH1LP}e+^mJ$93(g4C7hh1!tGUhuyFoW_7|IKSL=4sJ z)B(I_zc{VE2YAnR4SZ>M5_koV^;s3LVgw{`Nnze%k24Y{_<>snEezbqhY;2L0ZxnS zn~$)IFJTXHZhl7o^AGKSzd8t3R!`aQAB!eCKiu&D#s!sC1Xcca!5U?0`#AxmcXHW1 zHb>89%YtNe4|3TtIEXTl1cgx|rByN4I;pkUBenvjC1e`6qao z&wB#eArR;=bv%2T{x1_xSvTSI_FJFZW1KLUhs_%zN^s?NT#QojvPX;{&GE9G9dhF< zP8HU$4SSa7)m%)D$7)-drjhWXNu~`jgO#SYz@3n zP(P%Q9TL`dHBW2dXKjRdte?rD8n(KthWijuQ@Y%!)5UPLKdt5Et~ z^*w>@sGznR*ugfj;o@A6!m8nTD9>;GipsvD1aMj{#Sf0jYG)k}y0vNL7A)9DM_r6% z-#rDJ{#(;97iD{U$e2#;59;>QUF=%a0sT@31s6pCmElD>`G@RTQLlx^MVBogrf8cc z=z*hFUI;L{uPtOc_?8p)$kFWNGi?ZXEl@$MGO{d6cR0#(p%^~~k1E-n(p@e)Eam=M zvZ7=xCXX)t)#DT(8NW3oFS2!c{+%ByVNf{M3k{+>W1K9HshZNT;OR^y#Z55)*eB^! zA|N@oe8iDyo@bP&N!th3lTN79I~Sd4?2RzwPiWnpWTsEqCt~G%fmjM7pKuh;vcp^2 zwx~~XcYZc>>kNe~S3g1YfHn6;&JVz3F6Bi3Y3mk2mKnR#0`QyfB~I00)6dykrpx9V`@R@Rql$ ztDl0V4AG=pbD4Ik)UX;}1cAe!x<}ADmpIvVDZ*^V2d1l1yyYsPwi^*Q=qf^8=vem${P~>(r9+~e%i+HnW%T|>^~8r!$Ucnn zpFADMJ+~sAZ8CWrPayM+8_Mi|5r?O_Vo;4%H zbCh3_u~UUi4cp+al)Fhm7@K2bCW)R&8Cx4u7(YpBm9lq;1v9r3k@&UEe}_7_GdEWA zHB-BqYED(F@j;+hde)3)u*NQ!oT#@ljg?&{BR%+|65bqxSj@8<0GTX`Iyr3{^vnJ$<*29FKHnrhQEmhf7_`=-P#*<2;Fa} zv$|UkrP@e|l_f=5!epeiUK&h8Knfvt0S?+msD5r#oBJNp+86TG@xwZeq+_w$mbR8|W^RYskLz*ozu&p9z?MV(hnIts zYL;VekjMw_8j$!%=I$I}^HPWml|V=NQt4K~(bXZ@2#`re{c8*{Sd8OR(g!XS)vrdtkLAmBUWvXKMCO;Cs@)|!+{ZnA?IU5SZ8vjv6DA--`LsK8Ue%bK^H3v`G06xU# z@G8w+?}fTvM308DSZtq20>p^hLZUr!BGOK@asqdTfin(| z&Bi^LTi+E+EhEp|RtE-PhDS8i$G!O{DJd+mt`V6fQjh`r_yp>stnAbZwNVWV`xl{% z4pheu)tq|!rbHc*Q(a7x*C00}75yB7U!f7&WYJl8DPnP{9nNTgze@+-38Ho`vDPK| zm@*~5FNYIQE&uo&RaVWJrrtEU@6#8QynKTPR`8`Tgn;^E zI2?apb(2o?LhXTGr?_5s`K9U?jc8@i(hU@3dl35#>W6HMHUf91Qc_T!VPIo$P~P4* zgbG*s8>wB1*qP`3Y(5L@FQ!dWVur^&d}Bprp*e*Z6#7gabY8LAW-RJ*T0*`0iH7K} zaDA!QIFNmVK|x!QJ1BI_=XPr5=>D|Smyb{2!dDZ&xq$sQo!#gvvF=B{mE)fC@l~xTa&cN87HTd;WQO^%aSdA5o)u%vMMRCG^3H6nr9~X} z1Q|S1aRiEEU0RbnKuPzi$L1wIcGqmfMae2@pnAb!II02?gWT(@x8nd=@1(f=!W?Tm^Sd<-SUsmRfoh8k|yaXwGVCZ)$H*k`TFQu|6bHxpzC6C7S0 zv{Qg-FNCo4pwwb>=9OMcmHkydXIE44*K4a=Y}eE5fO3_FfwkRiY3QVRLhQP_R%@@kc}JNE3Ag#lr~$;7LR;KIdyw4s)dLd$P1 zamfIWJ6(hpSJJ6|tjr`$lgzw)7?&P<<%;ZByjz=J)3jc4zOtlv$T)#~8w#J}SQT5& zI^z#3Uqcj(U#hM4UHHy9ejC1NHPsehgW$ zq+!%nu7n@me$gz-iT$ETD|r+V!d7#G=q#g(@9wOhS6@NCI=$9}p^m4wz^WU&;MBuf z#lA$hq2k?@i&UI8QCnAgnX6mGyW=j%npf7iV>a`E(A%n1ayrQlv-x~SG(=y9+NLTW*;TMv$(8p!?QOvN{%At>imT6KbavppefVmaHrrj++ab1=5+AcpO@ zr!)s{Af(8k4Kt9n`74AMaUd}u;U@~;KClR$`p-#6b2RPVPOPYn@06)uJg941TaX_N z1wWaAawk3nh!Pfn(|!b%<2js?XozX4ek(uoIyXEm6X2J*8G2j+LfzmE@%(ue82iLK z5B@nYz~N=$06sLwlV-m*tlfA>U+Ep z{tyP=b$4TGupOvy@P%+qM2}Nx-s_{8Q!Q-@1zpjBx+4AZ))%hb4N+1$qprswm-P+V zTUQ9;{x6YiZ|Z`VGiQ}O{~>Qzl~n%!^Y#z%KQvxT>$1fg)w7~r*M)Fw2zL@XADR%lc|k$<22?Vp ziR28GwG#hg9C$dt00J^{tzs<##C`nBk&%PL_3myyKJewAPS|h58ko`~Vb!pE-(@hf zStyh-oG?mZ6SIWiT14wJ>ET7EGO8KmDG%Yrf+-6V)NQAu=-XB92@z^ThlI-En@&LCR9jCj?Hoif$plS{I}+mh4koZIPX_nsV&Jt)bf1v_o?MW+jw z%0J){0u~ zG2HiiF@)_b1l@`&M*}o8r5)8t(d5(O~xf-c~!KUqu}JsKB&8k}&%J zJONYxR}ogDYNxhCv3+KU6OGCJRqPfQtMqIPnaY*i zGEdN9Z0R={GslY*Yx@i+=d#@^7%=D7ei&kSZZ79`OYPhs#-PcTLQRIl?`3sA#y7~G zWM%qm|oL+Tut)amuf96E$h1x0lYKFApJM zW>k2(f+Or36~3WT;FAw_9Qydj8ssvnT*K6DuM~p}j73}bB&?tcEfq*-s>6nS;vb?x zPnNWW-+1lpt*#(%k1boN$M-xN@~G`$p{$H_N3XQ9FICty?IOZSHt88OTMuelc_?Z>RjQK6%L`##-m5uL6w;n{A2acL=KYbrRm&Q|hZ?lpg7kzG z*vBGz2j?}SSi)!sLmBanuQUCjw^b=G;mG!sS_Jb02UCjFKmP#8r=?5=(HSh1j3gxv z?%QusF254qs2=X5IZRpmL`jc~#vU)@BitU+YBCBfy%c~)s3i2VX+nt2AuvS$nb?96 zL6rwl!d%b=QvHmwcBfN50TqI%p%hyYW_yxJoB_Mq3BkBH6x&h&o?z>C@2yO=u3nmRihnwyIL_3wX$I>j+5pa2?g5=&{Eg|*M# zXbfos1I}RRE@+5Kw0ili8B0hi%fg)ISsf0eKa^lwJd)j(4Sis87ypvec`AFy&)44v zjAK9!9b+9%N@HxSGX@bSi>(!NydVne7f|G`R>GTDsu`0s$Xv=19Wk%HUEV{QipQWJS~fM-gdMJ>b3 z&TIsmh4tG{LBzE$ROMXtie?mA^x$cd5pjanZl(9I|lA+d>n^{B~`l_ZDIO z(_kfCVqZavD>HRv5XWW^_znwhmm8tBe|Q5UyKC)GPN&=^%`OA*y8eQJD`NmL0Xwd~ zAMO_5<>;6akF3>?GoB`7Cv&pZ$e48V4>hU3E*VuUE~%@JLlFO%j?(>~4?*6+)b1a4 zPf_l-`)D)zW-T+q+QF8hDdj6r4mv8+6l`iepg0OJS*0jku9=v2II$=6RIK( z6n3zkoad|$cR=7C#2a>+aV-8icc8$)p~-m2bl*i4X;S`~3-?B$7~uhdK}qo(TCvil z11B`GN|BhR88bD=+9jMvah0GLO_KZ2vJ!R^9p=~FP5zK^1E+Ysy8!LDAya$%>zwYC zUoo>v<+(VM5;TIXyWX-a+2G6%lZhz=G4JWJg26wD8$zH$w-kkPV3lV;wwPz-#3jnw$(;MV(6?m?uKg`fW{bf9uo(W zgFJ_oy*G&)j@@@c*|%nYx1Ar(L@E9pXtzCl36~kgz$E3FB9$|OHf~~7T{sE^j7_HM zKe`BSce-!O55x#K_n{huB@EjZ-|rbYwI&9V2rD;=oMFFGlH0nleQ%2rPxh9X!SGCa z&3r^0U&AljZvjzya~oso0WpEEU~gj@*e>pf^24WHk0Z1U91es`=r$ z!TcYRo|9Gr)IrYaLs{&1X6bE@Y3iTKIIedJw*=wAvxvWP*x;k9+%V?h>m{YajT0 z`-H#xnahG1#&$pk!#Tr}#FR3-ES`_HavJ3Uu5dX`Nu}BQ@+k*aHH_~epv4lW(}{#u%s_b+i~^%^)dC9 zxJXPw?7l&F)5AUdrtf5X|M1QF58rgB^>EYt@JWM@&;K|E_}>QpyI1oM>vBKXFY!S^ zL49o6af32*gTfGl${9y_D<0_HA4ncg9LOFQd3)V8dfQE2hkKiEobN_?%b(v(G$33; z|JWRfG%Q6UJwGKmF1_?9KPn|lXJ~9xar%I=h(KnL7O)$a9o*t^eY`v_-DSHrg8TS1)8*$r5>L!Hb4S5FmVpwQB5B9-Z39Y5Q`XteW zMmZ}^JLFNZKXRyUIDbm!to(>olo)YI3+-|osA~I&_t(f1ApY29Q`M~V5iJd;FSvs^ z&Ok=@f}Ql_4JlxYmDj&L(0&5F0-!08ejR3n9>@=hgj7sZ7`i)98LI<~ZIV~oC_>m{ z4t+2@J+KW>r@+y6P+RS@D0vypnW9Vg?nHK*B66_w>nnh3!$7tIBrNA&t|BmBSbnrB z8`d<3T*Vy6ZjNU?3Q<%vKWG}Bebt(ZN#V16tEu;AOuP$hN_|{nyDGFzDCIpM<$g%4 zzmva1vUKcT3af+!fkN8rJ4=w4}f0cs25`c>gW@F~-;lF()!O#Dg z0RQwSclcj;uHb0zWZ>vzZ}d0ca-rx>X%IQYped>v?2kZQ)8peea%+RaesD4(=fI1Q z4Q%@n_oeeJ=8j~vupoqO0l*NVQ8+uJ4uiww(&G@RFDERAX--PcuWf%i*d}|;f+pyy zyNqHmKjpxWjyt|(iBTad4K_5S-LzY2JgB|$BkrzR^5v^>b&4YwgeCG^c3Ouu0c_mf zPLz71Uv`&)FhfPKJ%Miry5|J-)p^l9RH~|1XOgF*G@oocf8IWR>4%HXSs+VJ3ra9A zQuF7byr-LAQ2@vz6!$XLejLA}e*ViP;$Pt+f`vWZ_zDyESGfM;y4vW!!u8h{_HR)N zlHr!&=R?dKfS~z_&q0=75sg$TTnaQB zTlk>4c(7i~Ss-|V|E~o5t4)!`R3~l!I;@NRGGgQTZzkBkMeH9AeE+C2${P*}La3is z84sI9J>LAevMuU7vmkKL`eqhj(4x78jiuA!p=*X2nk}uY>+L5HdH5wyJps}1j9gE< zYwPLA&>T~RJ zNa7wjW-jTSh#uECv0=qy(a?c*nCh45xZ=e?#pIS<;r!apO=PN+<&|+}Pz;<%oiG|j zgY|%E)Jn@8xKJ%wN+u*(pX4H=(wd8Qa!!c*Lo>%>#42D`b3hbOJrow-+7?RLf-2CP z5K>G?NG>&GEDGkqC@e`j&l#)W_>lH>M{xlelOC@@g20}QA%8A_G=|y)3)eOo2q1>1 zp30^`A9u^8i^8a6tbmrlW0zUOIy6Ym3HTw}w*El1n@VsF^U!n`pX%rqzoSZLQy-E1 z@yn$%!Z}wTwR>zC`zMAr+_q3hK@VJazjR5f|8pQ+3liF15p|yM zlk8_`9O62Of)#K_h=jSx72~-Ex!Pz1(Y+9!7oA-58NPFmoCF5K9yi3Kgo`EsUp2*!!n))TIB&{aP(M+01cKS_ja)N7#8!`ZM zbekKw%Yj!V1{F?VxSx95xH52GesY6Fbg1LK_)xC|aY8iZT*X>nZx-E;-dI9D zd>1K;RnZkxtT}nKoC(YZ&__`jSl7smrd$d?35hdw`Fh=k5*EpuQl?z-oh zp~FD}qt%tLSR0#(n3%;{a>Nw!UZsX;il%MU^n8O&hbd)|A(P1mh-l{7lF*!^HH476C%!1MY7o zK=D2BsSTe^XUvPoyp9))hPp}ZAuyJ8t~s8Ch*-Tl{23Wr)XK-pS|!+NFuNtblLAc> zHaVA};T#q0=>pHMF!ZcFm`D5Z(H$7el8Qpe^C{eC88Ru6!*(~Ogxra)yu@8?+`{f9 z>(+?MLbk%eCM=t=C<|L9;2y5+U=Z~`z8TP_TA<4UV3t$g@W^#V@UB&XId6T7p-snt z(mebBh1dHRkW!bB3y^=U58A(`*Z=6q`ZpjIlldEzW+iOdAoC#(b!m`=kS?gpt*Rf? zC?l9^S)9p8e(&d*pH2-$_FC_SE*`>d)lz?}_sk6=`2hZq8*KFlCBxk1ULTh}yv=HD zUD4_4`UI_sAO%;JqFWC&pl)E5TIc7uqe4lE4clu9b6Tgb^>f5=ky;m6^|itut0^(u zhHNJMcJQ?M8lVDu&fLd8^O%U9T?N@peKg~NDR3UN$L=1Zw?gBEKIG5I!|PhVRXUnX z;>X|Ai%9*#JQ90m($ZUgTL+I*t(`i$+_?{b#iUi`h%c1j!$y@f)iE>A-M(+?P1I3V z!mi#Dz5QEWb0Hm<=F^x$yXaPt1hq8HS*zyjdLEb`M zG@yy(?eM%+)~6pVxEw{c?;Ad*p}7gj#~PTH^^Pgvq=?H!_~ucE(o$hd#*a_{qF z92TfkDsXlze?!?r{ktP@DMgX*{#QGq{ME>b{14g^F>7Z%OEW`RJ$pSXqpywD-?A}E zmRsW6mp`xri3{c}n7)BYu}LkYGdQ1qI10?p^$UG74rL1WidM|4hO&PUFFvn04rClE zdYZoRrswap`>7>XUkgbHwr;u}vYu4B`&B>{%teRUxr4Jz4n(i%rt0_QVE;3hjUnMs z#HmQ;on%}4kEc=U@^q`hKiiR&)-=%kHk*m=p#qYSE+i!wO%gOx+p9I^9V)*yoy1)v z-q8*7Ra&>lo8oDIE#HVkT%fNp?U-)?IJr-F*PRJ{lK3%ALifMhV@uBn=vY#b@e|^W z0KUzLAhRcziCV^M&ypS++{XQF7g+Sn<9YrSK>M#i^8XJ4`L9cbfA-4%SP8~!?4N+#-8hV*f;Dcah zAZPFM_DK@&^8R_UF`l^H*qR={sdU6RvapZlce2N``6~b4CD}C5)5MZQsbKAij8K^{ z8ND8R_05g7T{Wx@6ThrT3Z)+TwSwtBsyiRHk>jHIyMkbtW@eWcsrV~08cL(HhsrX^ z(aa)6RPMlDDvWEdUVuy$yPe>4|2AFVUS0&bQmDC}myMP*ci^T^+9~Bg@Dpsp7Z{*YZC@B?Z zq1F0waVf8YFvZXNtK@oQvu-549X`yU5rN)|8G06t0b2{w$?SJi|<|f*r!H38nrBMODS$tRQXYisC;GhD7H}-XAj*rekNV4 zca3|J3{j4kvsckqAGl_@{TRv^H*xTcZq42U-h;f3RY$Q|3=($qPvQM$0+ z+T6>_P9q$P2zf9H$>#;7=}k_qtT5i*Jiowi108^(%i~j##3Ag-BL~sZ6w?JHfrdj> zAlHRM_`6Z#k?o8fK9l>=K&G|PCK<~&r#^NYVB!$=BLtzogvM5DZr0&BaFK9I3qbHY zn`=<>H(a)7%4XSf2WQ@|b(BjD*+}oWoQwoqYvL8qhcNS>Qe1oV?mrk~osj{gGMZ$Y z?iz8gqh-?});A;!zB!AIAVmi`Tc=tws+b-^9X^S(k9J;hdM>N6!zHjDWZiu~sOdY_ z34H(Lp&zWJ$jxLsb8dBnYM(P^0)7vzM2cVi{!>`bsIDfMA>P={7>SH9NDXCArp9mEl}sZeX|v4Kbr;Y{sVS1c;#%w^1}mxN}<-JQQlbR;(q zk!*dvo9x#c^8F9qPu0p&z{dJ(J?Hp;0@Pm|LN5oo7|baD0DV6% zG6T5C?}25#)D$J=6=q5J3z3RHwce8magB(v<}QC&{XFZVefan6Z+;TH3;Bv%@K^T# z52N=5@D66yCV!8fyp#;;SM&yYCpqAOk%SPP5D~taa*$+d?)t?91WQS>ST7p1D*)EU zA0&&gH@Xgt#F%a%zG$_~k*QMKKfkwWE0t+$duhHsKVx_EXoIRk@wIIAm|J}hbPa99 z;)b?^I0I$@;Ub~ptcsk3&}3Iwj=744y34L{Ra8A{y#JQ<>jorUB=EtncCd?>XyioY zT}o!&Fq86#a?ybKJnMmWX2h_+5To~U(wELhu|QI_{8p*Ts)%T8`TTl(pIikgxkk*@ zO6Z-;&58EU!)B5KCvi4S!dr?u+Ja?0mTAdVBb$aXg!^%c0 z`pc4gN{v?pIdX5LS4`Gi8mv8Yt2CJ;t`1XbjYmLe+VHu1O;9vWAQc8Sq@9W-(IyT$ z7+-K3)kAg;D0LV}Mtj%KUz7CBv+4TYHsN6O3Js5wNN=W>`?UZ5%4hB0AV0reIpYg8 z|KliOYGi3^WKYYdZ{y_nkFP`cuQu+V`g2(d8-GbSeFUQi(`b~)BMB9X&sdeiH}+#k zg_Sb1tbl(@el_FFl}K4BVx0XWsOg}`to;PUlXzoE3C=vTO_Gu2aQM37a5%nX^Q#MJ zdC(b}eBE|iccDkBg1seZ4gOM>8{PrOh5gdb($>;`-6XYsqkF#@lfqk9NaD2V98@{j z4>gXy*D+c+ue|p+R%lA)ac8CQDutB}!hW2)@ZFIg{5ec;@utr;%q#4O`Meyg#0E-l zpx-6)E3O%N{mFC4AJynU0Qk$#5`(-j)}s=29BI&559KBgxD_8#jofr}QFrDI_#Xn} z!F3xYeK*|$gj^Ujvp8TFLWyj6ZLWbsIK2btqcqt$y)`(m;rPh+S*sW|Y| z{5U=NKJ3n=Tgk`7bl0xZq0g-mn~J zNq-GZoY)Sxe0V4rR9vd!8u#C`ia@)KAmA&j{t^cJ|Cd$&JV5=b8QAoQUI~FzR4`&W zficMl1n>knk{bPBfv7@?{LtnIN^&uiRRqy2Eb19CT}n{lpvW#ya*!UtP)eF5#A|yu z9*nob4xhGOFuLC)evlb32>ONredkA|N6QO#_dNls2R?)}T1zlC%DQg+L49VAb}Oi! zEk4;mKTZ_ju!wR}JFHq>E@P=dNtyVbeB-xle`i%%ut8wS@)6MW5+Q4TCWuJE)g)j3 zose^WdIEZrl* z`_D4LUk8o|88J1!LZojSPSu_Sf*#^w60ry0y{gx1P}lK< z_B#wF%i5bC11B0KWN)E^c&{VqqDL8x0Rrqrn;k$KIZta_%5hr4gLMw*P&n!sryg8BXRvc60V>`W#GK-S=BkM@kE=fG=E_E3UeBNb~v{g(Gt z>9Oj+Sm0Wx=@xf|v)Ur)w%Bo!x^{Q{hG0`Lkiq6!50nvhO%1v=+PCJ)*4MY@<_dvu zwZEgq)sYeMczvynw>i}J>eiAFQqQ$M&HE!=mzt-i2MqXS+Z&!|q^}qh(^qEh+85}T-_-0iI~Lyl z_AN;NwlMr}{GTA!1p^rDPw_xYy(wllXn4QHuPwMdwSH!J1_an3zbT_|fo>J8xR^fC zz-{I4ymGzyZXoY5RPDfErRp`>La{D_y+bds(Z1nB~6}; zqXJ7^z6x)4!;16)|EW7Y?ZJh0cC`JA@D1i8Dm~)*`xEUcO|Ou=Q_>i}$~5c<{a9uJ zWw@!NGW)C~I|mb8k}?dux_TfsP-TmCwE1%Fba1DT)KsjOSA7Y=$i1>E@(Qx@P_26$ zbB%DEU8G5kBJ_aLnzB7b7Aw8BA;=zklcFJ^#$fFMp+=7~15g|@qs~DQGf2H!yo(Z1 zzLaPaV`cfPMxE(^uJVY*i=%2CS|7Z8s$si&n^=ev>~36bG<03QG&|p&=pvID`AmTUMa&gv!Zi)TAd%TR`>_tQRA)Z1av1aPas~7f z6PGpshfIImr;+fpn)oRO=OGcPE^b918aSguGUMKcA=S2i zpGz*P)|Gf`zC_CcSr4R+5cLNCHV!m?Q*>0&x~fA|?$n1rqIjaiBWLk{n1v+PVtg>c zQFe0sa+mK3=8a`a@*QkSI)BV>{J$`yJVlP*MFEh!OvA}XXIG?`8< zmA=?g(01aFX29bb)O!Y7@xm2!M62H}tgxp!S z{s*~4e4M+Fcx_zhZp@RxOdJW?Sg(F*X_KMxjiEZ$()zU^da|FIFc;+=H&GKDv((uD zY?e~Xu{vJX0l15HTDWpg!vc#K zpF>-^NnvFAKt=7yXql1TVx!VA0@;bgaGf@pi$2$0A z6%%#)d|TxpX_PC$LHXhRBupjCNWK9+jXYACMo&;`-ik72lA`kIRhkkr>heP3GHIa- zQ~Alv>v5I1Rt&Te3l^}jBVYD}l@yMtBtRTJZES-P%}p7DC9P4ahC`vLk81CFA<4cm zRq2{)uJhSlqNR*{1}B#<^>9Np1$a{`2?f=k)P$v4jhY2QjlRWjOI!_-x_e6iiz@$| z0QtEm`-G!L6Ky>Y+Pd%8YsXy}=*2n3VG~+*4Y#c@i}G}R3LdG44Z}|dd8pD3y$CK&fm1}KSr9H)X4hEk2fN1Q`yjMb(N?^4lkt-e2PGB{uYZZ+t6CfBJ2 zoc8yI^cN5y@?{+n#gzWQDv!^!B7E}%-B&zHHO~;Dj6!N+SSTEk5%$BS9eLc6ABD`rP0Dwz2*l=oA;O?;2f$56iV7K|F!B0jJ-FPSA5Bj zfmsS_PfZ=KJIewqjPh*=^9jR!1O?h$@krQQM^`RUB8bNPtVzU7-#sSpI2mjj>>yW_Bu`sN?`+JbzC^nZH#E$Zl;nA|ABa}*3$<5d$9POn zoHzPmVJB0P1OduMa+qtTPY8*mOx>#|bnU7M?;b{ZoT_`l@}2}3^KR1NoeRIrM_%Jy zPUEd~WHZ2e_4^|#^*m*D<-xe*&g_bHCMbk9>@rRf-G{7LP;)|iY6+-P>OnfPYpAV_ zQQfcHkSG^vGCZR3qJ&=E<7aaF?{9KH@Xir4^bv+YCK^EQON{D?udkU3I!)W*gg7q> z=l`r*(zwNByG08kSOjM@SPWAduXdi$D~Yh>l1QD>!L*?Z-6STb3+S)27^fQnKHTD* zTI}bUX#)_ZW-2o4-4CSde=klQG)Ggm1;em>+0-Aht>E65s9O`I45If7DJ`m-ME)-x}?aiUk^S@Q|Mnlx(GB5RMyzUpyRIEJofdyW*R zquu%gH~qxT1o0)V0d^ez_N`AVZQHxv_9&8PYFibwWY6~-Fzb-U6!0x|*z>99J+WzM zvzG7cs`zxO?#>HfTiDDS{>e6=D;HFXCl^$rFY03ure=Lh739XbTZqaPIQr#`wtH0< zDmlx~yT6L`4b4Qix_N;QwztL2CRN~kLTS0YmrMVahDAif`*M?UI*AQtf^i$08=~B^ zT%rbCW-(b8chd8$v+z3~6icG+kG$-lG0&8}!y>?PB$GVh@tVAUC8_^!O0JrTZz}HF z6bKEj_}hLLc&7K=@CXfV_{V;+5QYd19yxvAvS><0B8_7;KJ^o%Sb+ErZL%6yi`@0At5Ssu zem@4&sRJFd>wOlson6%=Wu|Sd0wq zOhjo(fo6Tq5VghP>l=-7I^q*r)ubF;T+W(?v}-|+ufbvA=iMKz@$GpwY=N>Kbb=R1 zS}fmIZh=$QuaVw9C8FvK4TZyzw5J>BVS*@TFYqJ4NrB(Bh5V%9XS`0yneK+Hyd*68 zxpB_^lNLf|~KZQmc;SOz5iCv}f_-GwPt-y6^LX%14fS4(xY*mHG{cx6gm! z3;sot5m-0sE;rdT&zJH7)0;Wa=7Wy`>e^Kxh_4F-`q-+e0EdTNQL|H=x zMFsUknq*|3VOR(?PPcra3UOL-H7`h1NDxb?M6lM>ij(MDBs@xb8rf=l;o{~+=jy`% zhPLOlw(RNbfrQS>{71m=$L}o_&Q~KpA^RJlEwUJo&R;jTHc5TfKQCB(i?0nJv2A}2 z>LQ-SLhs?j-!PyK>UAIv(nVj}D-K35Xv60sR|g^mj*f|j3eGZo>2w0}2^9B$93q40 z;khIC*m^_)R!CgwjSK@E83Enpo|8BFBQ*lUdxnt3bOYL%$#%jyqqFvH=CEe$5>x3R z@$F#!+J51e6=o}CW(cLi+PAsaq@ZtJ-#R~n@RTyeY{F-LK zp)^xNu~Ofs1kjN&D+15n1^*lqC@})jzh{0Pi8Qw;L_f_xfU|AL7@Hd{Gx=C0{%|q5 zExJggB}W|1Fe`Eb2#d8rbA9PWk7wJ<5OA=^p62zLOW)XgB6^lWg)XW0YhY+iiq7t5 z&{~C*PbS_Z!+tzurph6#;(fb0&t<#Yt(d&0Q(f7 z^rxGO*XYiauGm+@Y~|Zpk|?NX9U%_Tn?r8MG=4jScyp6kBr+RXV(CT64%D zcd~3m$CMbWAHXv>GG{kdv?QgahR0Y879>Y-J^@CgYk3D8752!U;4zFe<*&KDWf6rE zx(7cMC_udFRnu|U7bcMrDN-8n{p{_esrVIy#Jo&F)LsDDKd~^#3Xw#d#2{vsM8XpL zP^K{~t7!CoJq8)>+bx_f6+ut%@AX@7gshqZwox9%24B0$D7orV`zqO{q)&6auyV=h zw#4U8^WDFsZTQKCi`_7tV-ix632LHH1+|pLCZ-R{7&iJh7m_oe4Jopit&~{FleGUt zWLV3n=#+){YA+70g88@>eYp%N4C0m&Q6(I`p9VHD!CemL?mX2L2MuzMO#0Y_(O_7+ zKh+0T-knopT6Ewt-Dm z$5x?f3-;fD#-&|Qz1<;{OgLOaBd&RuCj9mSakz$Q@Hp#qhy|n3$MyjOy~JO>v@pv| z4*W#t?~8Z*wliPTyvYh7gwK4wR}K9lKEd_Gy~uBDP_Jq?LEn+IDDHZhuPt02d$X@~ zo}+_>(?2I@-N&-@e%~O`5JH%O?_si?R7FL0-Gj0$Cd1RT2Vjkqa{M!0#iYrfQ)CbR zJH4zN284mDhX!y_RS4fE9lPOwOkdZR%wdz~{={MaQh*z`OdD&hBMfsDr(AjuPhnE~ zhftXr!@9#!fjLAS0ba(Ve>|WoJz|go|2-l$QhLTSMUy(!GdYxV<{%xXz=LH)nW?c= z@sq|U`pd2jYDy8ZU*A~zU7oK5nowFX;|FAfdbtuQ^@eQ!V3n7jU#qhdY*Nr zO^KUf{fHmfA~XDt+*;!eD!f)d5ud>qkd&dyxm(wf((e=CFG619-~TRhYasI}di1r} z?EhM9{zvlvKe5Kf%Jz%x;Amt2FCgO;uO&186E%2i50`>5?(^m?WuS4jkFf_&ZaIT@x|t3_c5_Oh*Jx7Qr*(OlIab;__T5O0`CAZ9FjudXZzaO0Ih!FXzg9vVFQB7c^pszyH#S^_FJ&vRGn`&#fqYw&Xa6B&Q`S&RHiP{_Vujkz&_X;_P$TRa9ei-b1bX2Ln+;^6w*qIT?F_b9>oX^w0VH)S@y2p{{tn6N<;# z{N5#ixldXq8f?X^*!9UBT?1VN_yN0m5}gdfkK$@M?SfH8SI2L9M~q?tJ^J&9v;xMfScJz5fAHfg3yb^&?$t?bdte|S*2pTPcoaf%|~`(5RW zuLTSFf00N2N9O!>_hoEp+fiP^|QQZuXxPai zJK$qcEX!aEk zg#itUP2=M~ffn}V_?lCW=aeh3-`a<#PfhZ~5GdPMi1mym zPT4wIn}=1~_w70l48K;HsR#q|42rB?_F%)asptadq}Ave+8^wWxn@3PF8w;CdG zs-s66qC2J}SclukkEnBZanY{8@!2ob2LO2yx!g9&mX}MK6serDM(1?Ne!rmB!XFqO=~5 zshhH>Oxa+vAi3EJa=)7}jprBSMk3cP26FGTc^Zt~d9D_L`+=zi{-ID+)H7G@h0Eg$ z2r`0W!3q9=Sd9;+P(CJtU~a)59&L!5+0HN0SL(x3W~z{=Czz0`K-|FE?0bcXb~N@D zOMH`q`@Ss@eA$|8@O>va{EIZ}FT?yL!UzcdMA^%$DeJZBzOyHSi`Z$PYPWW^5KKX; zu`%oisaEsG4|Z2JNnjNNoRk3Yjat`TG&w50@^aJ)+8YcOk}nz*>dll@r$+ap6+9Q! z*5KR^rI5&2BtW#2@<>;s&qlbh@+r`*(yE}yYulAF6|Gr(@6IziU}B5PBGxm|&%A4J zPADxQq#vz6wA}&Gih(}4#%e2dHC_%qsFywSg98z+N@E4$CimzsmTpSzC9Z>%SC!n7 zjh`w8&yts`6{?6;H4^^j1$bN;__O{i4BS8F7q@WQ7WO3-$@BuEB?ytVN0`ewBPlv0 zpNH=H)ZgGCUqc8-wwM@p@S z)kBJnGy*~3oLL)IxcmeVBn_-G^Fm&Uy!iN!`}X$fxsY6oPkwD;o`#SMS0k$Y`7PkHo z&lXQBY)DlbmjA5Zuz4|wp|rxCOxrZlMA{V;BGBUQ@j5o2V~;S@JdK@a^eWHm%kpP9 zOBXx9ke1+$Rk{RIp1vbWOi&S%B6}UG#1(ochm)VTNy-5}N+f-cBKrdd+^dFoWJ>;z zgX?c;E7HdBNXo56c28j1#UW{=00Q$EG22n!S+sYkm?Gy`o+bhIkG~Zv*BMjoyDx~_ z|N0}$^4}Pz1Z{-PEWgNnf4^v&`m!TK{Vs=;8o~z+?WYt@;JE zkqnD1fO-W$yP3;|j|^w7{<@-aGUT7;S7>ac>kO=UovR7S*A+B#n{BM!Fo+g|~JK#WkX>L7O` z8+4U-sD}^($foGi;D;bo6c!Y}W|MNmat42s6xK?U)fwvJfJ?$Ewd(wHMZVQAX{3wU zWRq<|Xj1^+_s1{^u-?SZzYI0OjDae5!KaBY*i~{kp)qSgF~en zX8Md#A%1s-o`pM3AaTTS7y_xA$raao{+VZm6759+fbgRyyk$Sg!!4Zo=mdF@-=i4LZXX; z80G2;A(s>Tf@)9{D8g(?C(JpY7_(kxqn>U6Oy0hG-UVTNw;hBr0uLq~vh%#&x&eEi zG&Y+fGQ{Le;C}Vmx@yn7YI?sN2@nC2-pgQ{Wh*Dx3dthtKe=%S;iSvOvoUpLj0Pn^ zVGGg6IkMyH6N0lDu!AZ@J((i9hOa8>rb7_{)Q5Le=}GssV{ICUy7w}-GL!y=ZD)nI zu;&Z{J~Or4BUbD~mBFFWlk2a0SAN`h0`rM^!bg)Cti{$hO4h3D+6>0%)?wk}jQ!9> zR-;hCwj`WGh~ykfeBx*lwkdiUq=u!XK7@0MHllM3MUpay8pi{{T5+h+cJ!_zlm_oc zBb1bL9Xw+gRJnSz0y-<2b*+{y`}^YU1HI>#-g(6Pq5PD$vpxC%jN1L&>s~U7z!;T(0*ks(M{E~M|>%C4%^W0GFhIORP@K< zKQJFTcSoQcsOZLrYK?j|7d#@BoinXN52TJ7uA!9YnVPUT2-rp}p_h3Y_Vo^n1^1;% z(`wUHjHl zLe{|HpnZ2yIv>F3hXBEd?tS?Q-C#x0)K2cb-9u_B@#Us}1M(-*M z9KF6Im0B+aoX(>9fKUCIycPtO1GJW)@2fR8981Zy8I4$ z5s+TMc7El2U}~R&z~Hy)Ah|(v`UVgw*IeZg2p{dvI0*tE-4BkhTErD2cPxpx@T5dS z2xGjv`%O8@xC2?fON(3?Xt?q8j^4_>3A%Ev1Y3T#X(i=ed#01S2qJexvlq2A{-?^%# zPHKrT74K@+%dU8kGH1g|Xvv1&pvKq%!2jN}i3Bk2GQH|a2 z=QuF;#ii-*m6fz-MUTqMzXb7x2@Q3YKKR%qrI7T{uIXDCGc(#I_P+(j)_9*Nc zI)Xy~{%G+&1MpV1Tm$*4tz)**y+qUq4sk4Li3CRQ$z2Wdtb}1VI1DCDL(yz!E>e!M z*x@M8sT|2?IKI^o@0#Hs!TeQkp}dES_WLc#XRH~~OAVvmx5*{1eECeXd|J}#oY0V8 zMiBKsv_EruQx2c}DVa3&m+eN%+r33yg#@X)dSYD&E&M#3Hf;$nIoAL5O+#Zx@M=)+ z(1dlThot~6nKhA8mm>&J=9Z^`;8LW*F*Sx!w0L&{02 z^h5<#1i|V_sw94~+RpV;uNSaMEvFjj?vecdhV~<=JZoy};8_Q6JZAnfW-4X_yO_fW zI&fhOOm@l~-6f-{j$*u|Ur)!b8)2%w8)kT{o-L!&9DR(Pk~>dfcNmfEfMMS8^#=>v(n>IP!5ptH(^+Zz`1Sj-q~6Pj(O z+4GNWlW$SAj7ks4X~%J0*1~_N-kOw#&o%v5t>GXxw=(fYzyk|_=Gg& z)n$@LOIix~%{XOwZgOPj_;p#V1ap0cm0#y7zw%;o6w8{Ue&_wMi06L&bSl&NL}@RB zTIHD@v~CxtIWH6cW!9d~rLWT1@y_{MJIsLR=PeD3&62M+?^5dbXCE>MC@ z$|2N;Z$>w%nCdGvuQjmnjA!FivtC=yTaO1bS)`$fNx#peK4tDl zyr<4-@Y_v0Q;(jsrXF3mr`|rMRvds9cRGH3`77Y@iX+kvsNaR>PQ`eiLvLHdhF)0n zK5XMbJ%Vo!c_BZ%5d63tdY2Wa4-LeOM{fBZLBB5o-RE6`i8TA_IZYJ#A{XQe!~x4E z2{9e|u5Sdc+w(y119i}o4gb)No@=`=K;L^fBxK+%wC2^6JnK4j+D+3Gp~V+wL;p1} zkQD5I9Qe%)YD&~~F@|Jk^-EOJBsRZoa>7}vmdcv`$v|uE(fTahrRknQaZosso;Z)( zonqD?qb%E8kIaJAaZK5@p%+cjG$AFA zupeqgqJmk5b8-{v^mBM)W^CxfTIh&KC7p$8LHUF#c)-EZ`rwrjzDq>vBs`1$OK0@? zZBb%;)sT5Mi*czgEwQt*tZFp_kQ{^oB)c@VZOs~Qs3mR!&b)wSTmp|_M`K*D%cYkp zCQ@86q>TK^k>ps-P+~_qOe^jhCN9{^2hAH`B02_XP*oHANW|2aC*WBLHPJ(40Mmw< zJdTH|aPP$hP@vWrG+rmkN6R4UpxQ(0px9vsRPVt7CQRe5iz1t^S^C039zD(>n6lT+ zi5T)VNd>O9wSv!J2IglP2G=abA9M!~xz|bF7{2xf$ULz(1U&IK^gQ}xF4yD`=c4Vo zfTEx8U*-))UweZQ9e@s`tj;cCP%Z1~O5D=$p=d2R6NC}YAQC|2CMmKy=!x}7xz~l^ z_YeZ=gWj4ns|X>3cRxLJ?6Ugg2b=UTTbKeY@uMn(w1I!#3PudnZb2ktYP=o#9E11Q z(a#`z@U;IuKB#xx4W+k133cph9+81CKaxN09#l3uOmL{V2sj#dE|HSPj3TkVs&c=0 zbhJotYx1G7VF=@e>|Md&L^?_E;Adf6pNCo2#I>^4)9zdOQH;_O%Yy2HhxyXH>O`Z3 zMTJMX#nOUmdOFaECYVO2@U`dDJPCYFm1RFS zXNg+J@zdn^Ld+!v=O&RnA+NMnxssHSOlE;Ow6^+XBa-sA0V&S!f%iM6xr(`@4g$N5 zol`wrgUlcq4qkY$Jq5RA=(=&(+_>+!cBcu`M)QSQRySEQS!-fkI8nj_GcXPAAMr(N z_2auN0};iNKk^m+um;0$Q^cQDY}Hd=vYjs2r>ThxuZ5r~h{+-w&mT9agE$9;UZ5u% z5~pS6GOS}}qdZmhAY~7KOO-$hKR`W$=T5uY0t>e~Y@0$?T$+w09&P60n~I(=Nvehs zp{?#T-JIhW5*sc>3J0oMlPZj*bJUOXB|mGtkt@8hh`%M+W(BwZ z-eKYz0v0LwwpO=$j?-~HlUc?KHU-+D5R1u@QpoAhud`$09J0Q|R7VcFo*FDE zJeJN)q~Hw_0iRFRUdHB6OfbcSjzBdilwyILWMZ2%oq_1MgzAqM$dx2fEGGnBmCZj4 zrr$1r*W8!Ccbtl7l}s_ z9K;bUGmT%fF!#%#kDvmwRZDGADsppa5NC6N2B-5W1af^nR2ttNHQQJms8778hRC{T z!C8Ee z+6?31%OF*rb>_Y@`%y4R$^0<>hC?DxxA%Ld7c=Woiub?W#CWx0EVn`d0U4qG_xQWg zMlS!nV-hsev$Qe!-_TU33gL<~fc7Dx^3b4uB3;~82dtO5@0iRk2}yuVP_nElTo-uI zyF=S8-kyxHb%EzXIc5)evTy=*(uom2?MR4DP(T{U#E;*JH0x1KbTx4~Qd}>&@Mvay zl;rc_c6&G>+Pvj+rwn8gmVoLCZH$JaSPS8BzZ@m7KJMUJ@M|);zq+drEu+uCN^H`3ankSEkvO5oqi4hK{iPX_ z+Q-pB9o#&09gVqJx~)YqY0Pk?Tnlq0X9xfPaQ02%k;iMA-ATt4r($$$+qUg=Y}@Im zV%xUuq~nfl+v%iZZ)WH0&Yp9#XXdVM>-j$)e((2Ub1eShlWP&~bp6%!T^~T8WM372 zb8P@5=oQy=&k8tG1?+_e;25?l4x;PyPsmD!Zw)`5QPBHJ4$?ll16s%k?Qx{}MtWb+ z{Cv`}d_W~Hl>t+fkDUSZ&?Hi7Gi;6>RfZ$3S-QmiV1^k2d$DJUJpI?MIBlBLU?1Yp zA`xm9Y)5emp#sZ{f0G3qZ(;Xx<3_M1WlU$OS0`n91OhFRiX&Wmi8cJEtMLj*sMDT= zdsVX?sPdn()@RV`7zfJ1hi&+x2l-^l!x zmELcMGE?dhw4zh6QV+4%Z`}Cl^H+BO{uMqU!fCU(iWAmr7I=S~m(?cE{ha?2vhyDx zw1+$sM9Ql-t&y}O(NMrtYPxpknr8%pYN)ZB=UppP9dtmhefBi)==T=xRCEjWSaeJJ z_RPU!!1d~#vBz*w&92o~&q2SKi`2{Yzw6lD(cG-w;BGLPZ2IXNXf?J7J`ZUncBk2{ zHxR3s!)J788-dLhKvr*5H>*~tt=TIZZ}D84wC7xHl0ZeH&8#BN8(sLV{s&4w^;ol2 zPXC08VC7l*2F@Q>hduy3%$<)f{DlDQeCYaP@y9v=FPq%g6PDL+50;OVmvdLl>+0NR zrHq3OY_i`Xjt>hKh8x!LL|QEO=o$|Xsx2Nl#SbyoUr|zE2U6h0Gvf#IUVy$;JM6gc zTlIo3r&t9$ZjZdA#tXg21w^$gjBs=|_Uu`R_+z+NZ<$DFFXXg)CoFwe_dpgXgNKg~*L*Ysu{-dwQ z1NEJFy511gyF;K|#@&AL<}r0C>PP8LPisQ>PVSj!=6o>Y*xH};B6qY0a(fe<-VYWk z4SDim-H2z7Qp^Yak27KGK+xF~RL+J+~$gSGgw5{uwgcaGv&-jW)Yc zjlR)lB1s*xMhA2p>NJVwRNHhpw+R0l*3vHe!a&c$9@}7s%azbLaK*}>!yFkg3_IOM`5vW9it>o^#v0RCI$n)O{QJH(|uY&5;D^^gvTiP@k_C^_& zQab29uJkB*a!ijY*rckxi5vKI7|KOS*l-<54wh#;Syu|aCFsO8T($A-(c&ES8^gV> z^u9pl;J{g^2^z(lDGqbZv!V#d20-XY?(iO(aYJo@qXSueD`yAI&kGtIBfML0hQ-1) zgiGA#T@c67zg?En^?&{8S7OVG%WRgk_>%lKtbT^dIjX&jO!-Dhu-tOwei0itCcB!w zP!rk&7ULmt2D2GO-rQeyTe6J*tW6b8rxQu@mgNc)by}O^dy+=eb5ca(MSNTmkiCia z=|&!+w=h5XCC@8QAO7y45Cd6G934qA0z#xsu{Es7PQVAtl1mAcjF2>wD#wAr~11~LMiZP=kc80QgT;Wsc27|YP`9_o90PqpEtFMS;mDZ46O=z}@ zT+cTZ4hy@s=3wdmnP5?AEG)}izw;Okky)>}W1xf3fczX)-`e43gjGUkpv&g5O0@V8 zd}nW%A33bFq%gFXtRTKz)*XtUH+Xv-M_LFDiGw~}Aua^BOtCiSbyq7_F-o%oa9o+k zC~|0wWTr+6uaR=S233skj_?=?HgOksKt+FNIl7u3@vt8M1=1HF^s)?UKJwuzsJ27k5$#Ah|V# zab#=bsiQ9=PqCM~H|4QF_A$9dtuh8yp?8TAHP3%|$*U{W{v4!MMCs+;VDT0=U=_%eqPuEl3Ftn?ER-93i1Hf1?NT#7acyNOH zqtFJ(>~l3AcQ7>X1piD*=+0y>7X1Vjn?6B`f9KZsxeA&&e%jEgS(v!}7qVESe&U4o z=_}?^KN7U!UrC6Gg1~5N9P{fNOE?)(Eez87?>a(??5q`2W@A^=EMgeFQui&lq(`VL zV1-POckL*>mdO+SV~)b^*$OMhSo~nssxNQN)|*}r`^^zQTo0H#=2nd`#{JlVWE*bm zm|z>OQXK>qQ25i$k|CNU?{%z#BOE!5Yf&s_ST*z42phvbS|lY$RX*Zg{Dlk-wtXjj z6h}pT=TW{pK7A?XKm?Uu-xzEwSfF6mq1rl7PyY$9R)6%wvIM@>=-giy^~)vr;w%K5 z-+u6ma0Lll7oY{+K$B=HwtBMHr^Folxfco75m(wi<8evacX$#4M95=T)a~SN^H^+j zhBbU2kZ&Kxr&Ubgsyl3Aeorn-zd1ae!s_D_5V`H~A4~(6;TvcAADIi}!Kx_LzI`sR z`-$wf;b{s=H@OxW@4lcmk*;x8Bc+fRR-Y=5R9v%ArWtHU6g&M5APPwc{5;H6b!ZMg2R%%_u;W^H z2coGx>bpS#!(;i%-UNl^<-)UZ2{<7{TVe-#VWa$^Cwx$s)uIMt4~T;*$Az;&-zkj` z#B@`6IgvV$o$&eBvQRF!PfM$PH|hWM*V<@Ai^~-B1m#cnpt09~}o z_am&=P(VB!lvUnjxV`!$|CmR2aICIyzO*Pn+2Gk}#jOfvwm)kFa3y zbE$-{l_EO&%bHDq5VK(9-x{>VnFcTMIK<8LI_wlrL_HF@JF1<#`?{-CjaQQ{hx+)TulI+6os+% zRgI!kOxGnd?EaV}sXb=C1@*f9Wwhar&iye7=JonMud5GF0mli~=`1Q}{!UFZtmgS+ z{dsIzyU$pr(f&_i`@1){qHpSPx;A0&VWxtyH zTN#`;l)y_y^yb)2{6%EFR?|>4FULq+NXo-v?_G9KK|AdoqAn3y6aiTH?n0I_YBpAA zQ1T$ocn)o~k1`!TIB;dZm`dBBWb6P6kM&r$p9aeLo;WHV99DZiKJ!n}^SrO|)X#f$ zgbCVm2Dy$~YI#_RohM1SF_05S*xkRDuRdUXlurc`P&-R1~`o zPdW6v>71I+?9L_x*p19p?#V!?MEKD@G!o^mQ^q)Q+riN573<(1Wd4cI18*_H?NC5* zbJI}M%wYF8E3<~?oWlTz?KV2rOyH;XbYta8XVSf$g=QHvbiDua&EhpEmP`Se)+TX|p zx+Gmc7m+5aP3L+D@4@G9c~+~ZM@kDL$Bl^Vnm>kD=R1DN0wI|oK7p%H)otE=z3}^u z{maE<9LLxqJCtb3eMZ_2TYc~JkMnpwr7t>>1cVi zNNpBo;d8ReGZz;&k{H$E_lO>$8AW6uX~hbwb+))!nncplK7!%>h9Y3)7PAW89T$9O z?tAvHZx{PZ0_q1iyVBl)HPc}w<~c;^GzYe5@^d|%+)b@srVbA@VjurP!bpQhvM~Q- ziv9R}rnCGT=pGE;2Z%zaAaV5%zw;5-c^?@*NfVzATEBL&Ln$A{E?DgMmUGUED)3fsJ60r2BOq-*eo zM4Z~+(d6OD2s!$8rIVdA?8(;?$>OKTs27=%DA+faIz0At3xt*1O@h@6R=+uAWzwtA zC(s)fsZqaz?5u+>v8OKB9O};qzc%d*mi4t_+yu2yyF+bK?&&gZ((du1%)8E^xeiR@ zigTby;ToK!&(K?ow~Tk+tHI0~z@&)M%sH^mT`WZwQgA$NgR?rd0N14+ZP*({pFO!d zV(uDU9$Lg#NzNnjm&h9JXBVRE$C->I*U*b`Y%@^m3awUn`?9Bv@&$!<3Qb~Qw1uV% zQen9h+Bs1!cN~6k6BXv;`wYyl7t)fj?DtvSieh8?ztHk-)_QLZ?Cu(;vJ&MP!esPU z;in>FyC}P5kVJ-fd)myxi&qY`n#6yFUzrFu2j#(I5#6|RSPbbn{z&agmWjoyz*l>a z{vD&?P=B>ADq(wmLHeSWVE+{p3*ii}sY-IHkW9Ww*=kzSsVWE`j@?T+!URi*nZ9c8 zvb%9r*YXHmL2acvs1xarim)_bu!%}pM(rYr0cEs$-9>UTqzPw)4+S-H{@h}D=nQla za7Ln&A$+x)rD~Qs&*`i)pfgHPWJ5(ZlvYQ)*VVXW$hgCy>f$o+SD&K1V~21e(!yb5 z0iX+~9gXU`8&-Bz$}kj+cUfPBoB{pp!Z^~BK`aX%#Ymi0DjU^xN6l)X1@o7%9e8;? zn&I2mAk)BIo?>tAgB@b)^MYG7a`N2 zom+K1xB;b^CMl!aAAQ1fJTV+AGnuhs7x$1t!z*;-*b!ALzS=5{CYVkgbKFO7aO1Hy z-0KP%NMK?>&_Ar|9l(1nnMvmKw)FG3rjwEK{A6`i3z%crer6x52XxFnYi(xRBwSad zzO<$oD3P|Om(5YU)?6pwbE3K&1}A;w>Fv(ljd+X?r{ANd>JG0NaaR~zx`xNvQn{w} z)*f`b(uHxcg8Nn8Wj*?!f-BS!`KRLX>$CBz#Gw3@GLXN2O7%6M>qZ*b(^sSV3S#du zxw}ld<_7i*6OhbT%aWya^SF{)kE3^CTHZ!==~v} zWc2S~DE;9IAUxh`S@LW(oRk|537=Wmhb(n#ILbvTP*dTK7+?%J3k`0y58e|$4yHhy zUr>f>nO$w1`w|^;0yTdrA3JFSRRrgII0ALGBD|u-3Ts(5n&0(uUylNfIew$` za({9b5?aS||NXw2+0yrN?nGTZ*d(Q98VIRYs*v3XWACoP#G(xq!Z$Q{I=K0MIC1zB z41+=c9E_7IZHg`JB>Hj>;^tk@iR%?nL;Qd=;(OGIYjI;bhYi z*%XD351Gl{*|GQrD_d&(&E!+VwZ#d}_Ys9nIC|Qk$R4Ry?-^#_0)+#Urc1d8xtJRW znvG;OHy6=0;)$+{Eb(X;=VmtXvVC!NBf*DygFH2w`W0lYEYO{LX!#E}=bBQL>RqML z)6^x5NBKELPm)lTzGhWao{g7%8mwFSrcBR;P;?xi!)aMC`k#ESI3(Bu3iz=P-_gg6 z@SeRNRJOlz!+imTIUqm-CEnDM*hXeX&TnmHWQYr#@Ba4Em>wc@ZzGeKbEWbYhn87N9>J-$;M zmDHM`_dW|SY~PF;85=ex*@KxRQR?u;*aVuanc0i_C^9faP%AGpA_2ZdxSLu)Q0fdi zl{I!4lLS|IbWsOWWrw}7@+3%cd(e4_z~(WRZZd~pD|B>Q;hiSs)_Wmz_&@LJE7o!Z z^LE2G(GYdk($STTXNcm#tVvfdvug;e^uFr%0;+i<-qPgG3CZvCW5irv`294 zl-)^gxC6zDu8tdhW3J7m(d4RGCe-pr3Osyd-#K|)@gQB1_1?hnO$?uv#$a+h##oO8 zSWjK$!wPQ4$gfbP!Q4@@Gfg$q#c1`*_zb_uYtGlNbCbw5n0KNsbaQ%G1V-=tEK$L~ z@BPT^L%iMt7kmZ(7~)4BfP-!hW3VI2%(xbMzCK0oL~Hq1g+ym_n2^~geKg@yA@T2Q zE}yRWF4oRY|Kuf<^pEJ(gE9`D0gQY&3^K6%g@FNxA$UWkZ|qbw>p=6uV(0Nj3W9^7 zU`B@>s7J-2Nr1F$VZ{9{pWGkbt{+%zAVwa27?#~bqsZF*hH(^PZ%eHD*+E}L zsOhkAiYM4z1UWk=wDH4%`7g-An#*3nHMUpjXS22XjY_kZ%yz4kLl0%zq7Eur;ApW5 z|C+k_3ma7~A0lP11?j0g)0l&ixAel}7>eaI@@f$5x$1if(DfXbJ(uWMzrOf2e=V-I->(%ShjI52%R32qwH-6UM6)pAdr@$Xjl^7Yi7Vg zrfEAeOx9g8W8~VTvmUZ$w+X$o8o2hW(I2;eRdekGc0P#r0vZHwbabxiHK}BBa#&T6 z=Mw90r7-hgY9jXtm_ah(WHT57&&iEQ&BR+a!>bve#ziYUJvBSVN$_X2>CogR2VaY8 zKA z06<6cWgaXC>P2saI+4WgAJ60?dVoV9ggHS@I&q}#*f(7%uv|fgAPyqu4lqVA4daeN zZtlCo**SF^OCXz(H;vwT61&^+Vwj?4tB7{&Niu&fz;CFH#CcD7wT)Wx47SOkhig*5B+&iZ{A4C@}0b zB|_)J-S7YS#!zWV2{BtYR9LQ5!dPu$t?J9zxG!qom*9yVMSjV^*f=8^R=v+1c;a=C zC)#p%eV`Y{632GNS%me#MwNWGuDJtMHl69}WN6zrHtl17tT!;XYH~JPHPpl-8WQI} z4-+NjqI3u+i1}hq3C;7Mr+x&0urzB>xvqZqwM4=Am{RS@DWtc8IvLnlMAfTP8Ha8W zIf+zgmk)7~R8OJ=$==O0R>QWB4JKzY9ZaC{suR#>Ef(3NSjuE}aZ^{_uGV%GcE-zf zNj?`|Bn}`^X6&A5c`rEO=J1i%w@=%Q*$hPes=!b1bmdX3A^6ixZ+a>qD=H{KD*P_8 zYbK;!#pUJV!iDYzjdkw+)G0TN8P&H0zea~1EPYYmGMP+mRM7ky1m51#r0UQ_*e&Nc~)+oum%ZP zlYk3TbyMy0S1>5%o?$aFGlt1Ms~s2Dgi2^v6een^mzli?i{B3FTC2%T$z0SGW5-%c zuQnW}ZIoZg#NooG4ppmthh!6>T6TvQha_UJdqQuP*$|*GfYO=N3PBQ_Mey+TCZ5{BQS1=6^7{RL=glNnSBpvo5-}U?*XKlCd^bU}!kH zti<5AIY=}^!|f?&x1XeAwhhb>GTxM^Z6c@yze1R@ZD2N~YBSEq)6$%}|EzyXr5^vn z|Dwq*F)*OOw@o|luMJznlr&%o<|ex|93Oz+2SjE_>}7|+EJOZ0PQvuOZ7y+~11JOKZ_=T0cRaNov$ykfPiNE6s*W#{|x;=pKx7 zpM;c67?U%K(*}QC3yVsqmbC~k{qliR-bSY@*b;)&gac1yyZY4!z-Mx{tMpsX&HVMN zGFaT*dI#nZb7(45Coec!B$sXEEjguPHbr(9^SsR83|%UQs>ji!gxgCJShI}o`{lp8_FWiT{!?7P;uWQ%3*f&v%*K~YRM}9 zaBNoTeQJYQ!7_}FyIPDo8+7m8jU>7Y9-KOB02go2_ulnh^;7!EwJPn+E2cNncmpF^ z=gJ4v_7R>(+enEkPL-6ARy^r9XYg@IebG^P?sca{L6iawx%P;DWV#Qg4ALWY;RKXU zr=zGhO%ZBy1JhaCe&-$doMP_|Q}7b|=(h%mu;FaM{WNVSxt%9DCin&9!XvQ=UDRbU zgG~t058fq22{v-}5qf3R8EjG(jW$+xsJ!}2KOlMOc=3wXSFsq8i+v8iec5G{aShr` zb^u$lkeO|8L4}By0jp0Ze}wsGl;3~`OAhywK1}sVNBnnC{(oA@SpJJYe4>OZi1beO zjlD8ZpQEclOt-I2L=ml%kpf!*H8kKTHqyXlMfSq_7yI9qWJu|9?=J+S_2j(~!Vy)g zCq~bY#T{ndJ|BO9zo7M+bD?}ZCDV>Yd;I;;aeH&aC_uM{IG+Q2NE7@>CiOVRKxFP_ z^)(<&Q73XIJ`8iH(Q|#kM8~36RVQMn9o-hQ)k44T7cFQx+&&>&BN=dgZdFHQt?q8Z zO#m6Kj&HV%O2ZJ(U&i%$pj^SqZ{-Gb|L-fDzS& zT8xb*o%v_fj_Jue@jrG`2W+DIIffjNLO4()m;kScih7XIDiGq;qd)iL`W?de=q?!x z-ENcZBI;4Nx=YS^M$&Tf{b`0-Offy#axP349Hg0YvtR4+rRL%Ileb%Apl}i6m}8Gp z2XXs12c{cUq!NoZ>Gh-ckPiVohpEE>{^Ypw*O6awr>+CES~_;g=KvQyjGI5aX(I^z zU#dn`dF4|w49wl~$~f~&ryc|#YhLv=lQE+;qf8?frjw~>;Vy7o5+V=JY>qrFsr`F) z=PR6tR=M!jrXtFWHS80WL$I6B8!vl&K2RBhkp_ttxYF>8N4Tu-SW#4khnsYJbc$tM zlS=`&oe@%^p3a56Hc0n2iZ+c|xJD*ei!T$?25%M`>hXeWWWYc{I%b!kti{FYeZ%

ky1kD+072k<@LDDa3bE}oUZMNU9-8Q6LJ{(FsH0j5f6!v84=|oAGNXlv}jZ|97YVTtVU$AWYHoiWZlYPA;9; z+?yBv@4pz5q~eWZvVKkq{{P9OVEM|QV?iZFwJ zW1IphqaOSP^nXg|+`r@u;M7QxV9I{}>JPbscyXJrT;|_Y(i;-=x4CAz$%4D?uO}$HfJ7B zn*91I;FV9Gc%MB)Rv{Lh*H(O3^#=K;dwZ?BHjbFRqWk~~nbQus3#ZX$-AzGgMG$`p zm*Y2QYq$Xvu{{<#6lIwPH6KH3cvN|y2aN(ZR6p~+U(5E>eYUv;C`~$|a!le=45o!g z0?C>SgsmPFo4#nDT2lsS8a}Z8h9QCvG<18AKNFM*D2DKJ$ctIe| z;KC?3H=UyOtR&s=Agpv3=%ZLtUrK>n89C=lY+teb)bK`)5jX0%-5(;THW=8l6A$b5&#oVcan~ zjT9SozEv*1#8;DI$II12d_3~JFV5`#j{FQJv39fn!NnquD%>m zO0ZeAGR}lnx%|Plfa9H3e7RKfpM{5U7-q z=I-+YqB>GLOw}X~s`S-Zt+x8(zu-YOmNQXI{g93T@4g2Uj>9mDc;tSCP1XB=D?CNV zq$?c*C`DuOqN1hy{97ufMl%zYI~5lEaMCnRW~oKG_U;Ng=FIx$@=RI=lA(ZjV{?QG zzNlnS^AzPyXF6JvN8Pq07pJiHq+92A$G5+QDiMNVM!4*p_j}*P5uY)mKc?<70lHW~ zoi-xjXzkSP)~XQh-&UvzxXP)f$L^HL!51(+)<=5W_4(_+*ctjAFd6_}?5;;D5;HnA z?Rt_Rz)8+|?QQS*fd30FqJpvc1zu*NBFU)IAAXUzJ>+o6Pm}guW$-DE zY+;6L{KyTcgR4M;$3Jr%?#OuaLJ&% zdtxZ6Qac9c_lqxRej>r}Vci{yufYWByKcHl*O*#Er~HreK&ul|4%D znkP?#3>q^VGI6;nn=^C_=ipX$OZ4EpHL|x4(+K^9=@)rTV&m`rG5T*6=AKY*jJRT3 zTu1O)hLd}&EEq5RKYax9>9jsER;ox5_>mUO3BQ0g(BdwYyQddCH>9O`MP8QaN!Fc7 zx(GZT>p9V>*SXvuLi<15e<8xlW3sJ4fC+dOPRQs?;w5p5wA_{tOoV9~Sqb*jA7;AV z|5ADziyYKYpA&%ae=-4B|9Jv{lB=sKsvv;n(5K-xlrm9{!HkUGP-S3(sKTx-SMiRw zU7J_3nmdy*qQw65sj$Kpo`>NY&*{gxm3G6<@8|RKbsOST)7W7v9w?2kQJ*f1V1vLbnDoFtOBx2jY}npwF9n1h!8{7c%^%IKT6PQhLBjKln%! zH*DL!jzxRF&oYN_H0$|Wb0@E$6|J&z|N3N|v13D?K&2bK+IZWg=+882d+kyLwL`v= zOH}&Yk&?iFX_ZBy#@UPQQ;qu@??k8<0pojijy<+RpT*x>)}v#(T{e#`LW`_hkKLlv zA?Qji9E0k1PNDMlOngG!w}7Xq+7SHV*>4R&Dky_*(c@5#4&A$}%T@?uB6Acw_&V|7 z#v_K_Oh)%O|Gdg)j)ny8e*$z0=>MN=)PE=e|KC;qA6H=wD1Fo;;Jfcx;SVl6{jt>V zU;}dIXa2}Y^~O?G075wc*>A?L?Fdf{82j9!Zia>MHsd{_f1DPGZhcEqoP( z3}PR?Mqfu7*1l%*#ZBZGNX5ata)s;+eA=YErUSxV+XDaedXd_y%mie(|K(e}^HqEO z3JkdxEcOW{AUGTrS6PqLe!Nx$c}EhoNZ~5heS;#gO=uM!WZIlkN+c0et<=~4vwLlh z<|fXFKFF)MJ{F{n=_0ecN2RvIm+c*J;H|W)Or^FrCqsBRb@iwjHdUq(G9`Wu0l7gi zi18Ulrs9qDBkr+$VCh?<-WU@sFXx5>Ks6XFr6pH;5}_dWlu{U)K+{62xI=0?K#d@4PEu!xHg>+cj3WD#Z_c4(6%ry5 z-|P4He&*`zjV8S*#N#z5P|Jxh3ZlYK1q}rxiBC&t-41rEecjbs;%j&&b|VDsc5Ry2 zpKm2by`y|{vNlUqm3+qSo|E&+&3lEJd2wBoymrNGs}Ly@SPbHkfTuNkHMKAuBMgfw zE8yE-F>DY#yU~7Rr4`^w-`{nsw2RUV@#RU$&Plh+W=*bHW;X+63nkTx3(IGqwN+n- zS8;Wnvd|{!vH4e}b?>yUQ9%~{;S!FT;&-Q0I!;Mb+9smJ@mGX{pcI4xl&vD>nFh^% z2XtE9c9re+#WKA1x!(tr-fUQMj7MA;80HDe_|qqAZhg5X*3++x&E(+^OsXeZzya)*xAR!f3G}>okS&)vcDp-%z&Zu6$kv`Vp^*{h2G+n^zh^=e!4* zt}L&Zh?b8q__J3G_{bauLvU% zuHoQ&25P=3&3zJ~dWP&sd@DXl+g$?$EU(CZ`8*3(X0M|CKdxKqpUd~=uiRdR`}wcw z;fJs7{7L7opYl!4>%}RdS$ROiC1YKgZNscoNuTU$cM(*=JPBkn`p{6a!ca>hG8Nf@ zU@^|3Ff8MW)De6pha?cP2AC6B43B?tIz;hZ`%oxa!#8ww`nDlG_NJlbyaWTQ5!(*? zv=h41x|^5w2Awqu8hM%DhKdBZ&P@dB7!&KUf+bj{)(vFXA_1`ZsELuLf~o`#!`!8& z5p41qt}HVYrt(V`NA)nW>8Zq%`ur1FbRV#X@=8AW^R$PhLaZ-p7KWR*@>e|Qu4ID? zxfbUz-&mdQEe!eYm67R|#`S40JWT!3;8-2dtMd|4qq+P=Cek1W(wb5ve*T4V-iO$b zZtzGtwGYcfJSZJkv8DHKx9I|lO3(pkrJU<|qgovoq3%SXsLdtXTDH-!9gV?Y`(4Yy za7uj!-kh~&(*6zve$xwP>u4&EhES;|>TOx!i)Wp6$|vP0xl^&+)G5g?A~)j}^UK!V zwb8b?IH*uUAu`ev&VX*Y_e>!@!5LnKC@hts%ZR7;k1oPclnFT9UPuM7?miD2mMrbxcD8V*K{7K^lruE ze5`g|iy_Xk7oW^ht@b*NW8&yQJbM#ri#Mq$Q_`@k?(;US~f#bpH zE`4)&!msACXlgN~*x{W~X_hBNksIlZ2@j>vajyfA%ue7;fgEf|@<}kd| z5+2(8y4Dhd8jD0#=b3}luFF>E_IEtAz4;GuINIK6el{_XR^Br~HNH9W6v5CU7Mw1J zoknV5Qc`O!p`W95zx_3war;1c&N!3AbAqMcB!2bG#0k#_MW0_q7anF$*jb5Qi{Fly`g1CSqLX?V>h1|%Z8~ zPzfIK-L}oG8xrSJDgyD60oSm~foTU8evqe~)E_H-q!J+%SN&z~$gErWC}zdqca7M2 zKXN+?f=XTv29%0A&^u8cluE+Nv!S(I1sa(MFZ5YQ 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∈9AoFj)LjJZsQBel77ha;y#z~-1mA;sp{alB#V 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

ort_q9WFFKG)~ZPw5krZF;xJ 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 literal 0 HcmV?d00001 From 5521911ade03c8ded1b236c3f914c2478fd9c00d Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 12:15:15 +0100 Subject: [PATCH 60/82] moved version to 24a --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a738b454..215c5359 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -66,7 +66,7 @@ jobs: - name: Setup MATLAB uses: matlab-actions/setup-matlab@v1 with: - release: R2023a + release: R2024a # Run buildtool to test and package MATLAB. - name: Run buildtool From 96a0209e121cab2a03e217bc2b0ec42ba6df4798 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 12:18:55 +0100 Subject: [PATCH 61/82] moved to mvn --- .github/workflows/ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 215c5359..161a8ad7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,10 +27,11 @@ jobs: java-version: '8' distribution: 'temurin' architecture: x64 + - run: echo $JAVA_HOME # Build project according to SDMX instructions - - name: Run the Ant jar target - run: cd JAVA && ant clean && ant compile && ant dist + - name: Build JAR + run: cd JAVA && mvn package # Keep JAR file to use in MATLAB - name: Archive MATLAB JAR for next job From 738b5cc00540a743a82b80232eea4e4baef51ade Mon Sep 17 00:00:00 2001 From: Attilio Mattiocco Date: Tue, 9 Apr 2024 09:13:51 +0200 Subject: [PATCH 62/82] their build --- .github/workflows/ci.yml | 2 +- BUILD | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 161a8ad7..ea5b6de2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,7 +24,7 @@ jobs: - name: Set up JDK 8 for x64 uses: actions/setup-java@v3 with: - java-version: '8' + java-version: '11' distribution: 'temurin' architecture: x64 - run: echo $JAVA_HOME diff --git a/BUILD b/BUILD index 503ac2cd..523101cf 100644 --- a/BUILD +++ b/BUILD @@ -1,5 +1 @@ -<<<<<<< HEAD -20231205-1427 -======= -20240409-0913 ->>>>>>> adaa19c (workaround for issue #254 respin) +20240409-0913 \ No newline at end of file From 69352d00151dd9e5e482c03b5d8611977d4cc729 Mon Sep 17 00:00:00 2001 From: Attilio Mattiocco Date: Tue, 9 Apr 2024 09:13:51 +0200 Subject: [PATCH 63/82] modified gitignore --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index de25ca9c..95f57811 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,8 @@ JAVA/bin/ JAVA/target/ maven-system target + +MATLAB/.buildtool/ +MATLAB/releases/ +MATLAB/tbx/lib/ +MATLAB/tests/reports/ From 9d00a9b86529f20c4afb8012a72a276e043db0bd Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 12:41:03 +0100 Subject: [PATCH 64/82] back to java 8 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ea5b6de2..161a8ad7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,7 +24,7 @@ jobs: - name: Set up JDK 8 for x64 uses: actions/setup-java@v3 with: - java-version: '11' + java-version: '8' distribution: 'temurin' architecture: x64 - run: echo $JAVA_HOME From 1a77bfd9bb2f0596d53305900e9aa12155054d95 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 14:32:24 +0100 Subject: [PATCH 65/82] removing old files --- JAVA/build.xml | 4 +- JAVA/pom.xml | 322 +--------- JAVA/src/main/assembly/assembly-excel.xml | 28 - JAVA/src/main/assembly/assembly-matlab.xml | 28 - JAVA/src/main/assembly/assembly-sas.xml | 28 - JAVA/src/main/assembly/assembly-stata.xml | 28 - .../oss/sdmx/api/GenericSDMXClient.java | 33 +- .../oss/sdmx/api/PortableDataSet.java | 62 ++ .../oss/sdmx/api/PortableTimeSeries.java | 62 +- .../oss/sdmx/client/Provider.java | 176 ++---- .../oss/sdmx/client/RestSdmx30Client.java | 99 ++-- .../oss/sdmx/client/RestSdmxClient.java | 554 +++--------------- .../oss/sdmx/client/SASClientHandler.java | 2 +- .../oss/sdmx/client/SDMXClientFactory.java | 389 ++++-------- .../oss/sdmx/client/SdmxClientHandler.java | 181 +++--- .../oss/sdmx/client/custom/BBK.java | 78 ++- .../oss/sdmx/client/custom/DotStat.java | 102 ++-- .../oss/sdmx/client/custom/EUROSTAT.java | 111 ---- .../sdmx/client/custom/EUROSTAT_COMEXT.java | 38 -- .../oss/sdmx/client/custom/EUROSTAT_COMP.java | 38 -- .../oss/sdmx/client/custom/EUROSTAT_EMPL.java | 38 -- .../oss/sdmx/client/custom/IMF2.java | 84 +-- .../oss/sdmx/client/custom/INEGI.java | 36 +- .../oss/sdmx/client/custom/ISTAT.java | 11 +- .../oss/sdmx/client/custom/NBB.java | 19 +- .../oss/sdmx/client/custom/OECD.java | 13 +- .../oss/sdmx/client/custom/OECD_RESTR.java | 12 +- .../sdmx/client/custom/RestSdmx20Client.java | 25 +- .../oss/sdmx/client/custom/StatsEE.java | 35 -- .../custom/{EUROSTAT_GROW.java => UIS.java} | 20 +- .../oss/sdmx/client/custom/WB.java | 47 +- .../sdmx/helper/CheckboxListTableModel.java | 14 +- .../oss/sdmx/helper/HelperHandler.java | 2 +- .../oss/sdmx/helper/NewProviderDialog.java | 42 +- .../oss/sdmx/helper/ResultsFrame.java | 10 +- .../oss/sdmx/helper/SDMXHelper.java | 388 +++++++----- .../oss/sdmx/helper/SeriesViewer.java | 15 +- .../oss/sdmx/helper/ToolCommandsFrame.java | 39 +- .../oss/sdmx/parser/v20/DataflowParser.java | 1 - .../oss/sdmx/parser/v21/CodelistParser.java | 1 - .../oss/sdmx/parser/v21/DataflowParser.java | 17 +- .../sdmx/parser/v30/AvailabilityParser.java | 17 +- .../oss/sdmx/parser/v30/Sdmx30Queries.java | 39 +- .../sdmx/parser/v30/SeriesCountParser.java | 46 +- .../oss/sdmx/util/Configuration.java | 26 +- .../oss/sdmx/util/GetTimeSeries.java | 3 +- .../oss/sdmx/util/SdmxLogHandler.java | 1 + .../helper/bundles/HelperResources.properties | 2 + .../oss/sdmx/client/ABSClientTest.java | 39 -- .../oss/sdmx/client/BBKClientTest.java | 38 -- .../oss/sdmx/client/ECBClientTest.java | 11 +- .../oss/sdmx/client/EstatClientTest.java | 38 -- .../oss/sdmx/client/FileTest.java | 21 - .../oss/sdmx/client/ILOClientTest.java | 38 -- .../oss/sdmx/client/IMFClientTest.java | 37 -- .../oss/sdmx/client/INSEEClientTest.java | 32 - .../oss/sdmx/client/InegiClientTest.java | 38 -- .../oss/sdmx/client/IstatClientTest.java | 37 -- .../oss/sdmx/client/NBBClientTest.java | 33 -- .../oss/sdmx/client/OecdClientTest.java | 39 -- .../oss/sdmx/client/SASHandlerTest.java | 1 - .../oss/sdmx/client/UNDATAClientTest.java | 39 -- .../oss/sdmx/client/WBClientTest.java | 39 -- .../oss/sdmx/client/WITSClientTest.java | 37 -- .../it/bancaditalia/oss/sdmx/it/CodesIT.java | 7 +- .../bancaditalia/oss/sdmx/it/DataflowsIT.java | 7 +- .../oss/sdmx/it/DimensionsIT.java | 9 +- .../oss/sdmx/it/FilterProvidersToTest.java | 7 +- .../oss/sdmx/it/SDMXReferenceIT.java | 5 +- .../oss/sdmx/it/TimeSeriesFromIDsIT.java | 5 +- .../it/bancaditalia/oss/sdmx/ut/AllTests.java | 5 +- .../oss/sdmx/ut/SdmxInterfaceTest.java | 18 +- .../oss/sdmx/client/StataClientHandler.java | 14 +- 73 files changed, 1197 insertions(+), 2763 deletions(-) delete mode 100644 JAVA/src/main/assembly/assembly-excel.xml delete mode 100644 JAVA/src/main/assembly/assembly-matlab.xml delete mode 100644 JAVA/src/main/assembly/assembly-sas.xml delete mode 100644 JAVA/src/main/assembly/assembly-stata.xml delete mode 100644 JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT.java delete mode 100644 JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT_COMEXT.java delete mode 100644 JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT_COMP.java delete mode 100644 JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT_EMPL.java delete mode 100644 JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/StatsEE.java rename JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/{EUROSTAT_GROW.java => UIS.java} (57%) delete mode 100644 JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/ABSClientTest.java delete mode 100644 JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/BBKClientTest.java delete mode 100644 JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/EstatClientTest.java delete mode 100644 JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/FileTest.java delete mode 100644 JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/ILOClientTest.java delete mode 100644 JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/IMFClientTest.java delete mode 100644 JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/INSEEClientTest.java delete mode 100644 JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/InegiClientTest.java delete mode 100644 JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/IstatClientTest.java delete mode 100644 JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/NBBClientTest.java delete mode 100644 JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/OecdClientTest.java delete mode 100644 JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/UNDATAClientTest.java delete mode 100644 JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/WBClientTest.java delete mode 100644 JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/WITSClientTest.java diff --git a/JAVA/build.xml b/JAVA/build.xml index e399391a..4aff29bb 100644 --- a/JAVA/build.xml +++ b/JAVA/build.xml @@ -40,6 +40,8 @@ + + @@ -55,8 +57,6 @@ - - diff --git a/JAVA/pom.xml b/JAVA/pom.xml index b468896f..6bf8cbd7 100644 --- a/JAVA/pom.xml +++ b/JAVA/pom.xml @@ -3,8 +3,8 @@ 4.0.0 it.bancaditalia.oss - sdmx - 3.0.6 + SDMX + 3.1.0 SDMX Sdmx Connectors for Statistical Software @@ -32,19 +32,6 @@ - - scm:git:https://github.com/amattioc/SDMX.git - scm:git:https://github.com/amattioc/SDMX.git - https://github.com/amattioc/SDMX/tree/master - - - - - ossrh - https://oss.sonatype.org/content/repositories/snapshots - - - UTF-8 1.8 @@ -52,197 +39,6 @@ Autogenerated release description - - - - fix-missing-modules-jdk11 - - [11,) - - - - javax.xml.bind - jaxb-api - 2.4.0-b180830.0359 - provided - - - - - - compile-stata - - - sdmx.compile.stata - true - - - - - com.stata - stata-sfi - 14.0 - - - - - - org.codehaus.mojo - build-helper-maven-plugin - 3.1.0 - - - generate-sources - - add-source - - - - stata_src - - - - - - - - - - external - - - sdmx.external.build - true - - - - - - maven-assembly-plugin - 3.1.0 - - - package - - single - - - false - - ${project.build.sourceDirectory}/../assembly/assembly-excel.xml - ${project.build.sourceDirectory}/../assembly/assembly-matlab.xml - ${project.build.sourceDirectory}/../assembly/assembly-sas.xml - ${project.build.sourceDirectory}/../assembly/assembly-stata.xml - - - - - - - maven-dependency-plugin - 3.0.2 - - - copy-packages - verify - - copy - - - - - it.bancaditalia.oss - sdmx - ${project.version} - SDMX.jar - true - ../RJSDMX/inst/java - - - it.bancaditalia.oss - sdmx - ${project.version} - SDMX.jar - true - ../STATA/jar - - - - - - - - maven-scm-plugin - 1.9.5 - - - commit-release - verify - - add - checkin - check-local-modification - - - ../ - ../ - /../RJSDMX/inst/java/SDMX.jar,/STATA/jar/SDMX.jar - Release v${project.version} - false - - - - push-tags - deploy - - checkin - tag - - - .. - .. - v${project.version} - Version ${project.version} - true - - - - - - de.jutzig - github-release-plugin - 1.2.0 - - - github-release - deploy - - release - - - - - Release ${project.version} - v${project.version} - ${sdmx.release.description} - true - true - - - ${project.build.directory} - - ${project.artifactId}*.jar - *.tar.gz - - - - - - - - - - junit @@ -251,118 +47,4 @@ test - - - - - org.codehaus.mojo - buildnumber-maven-plugin - 1.4 - - - validate - - create - - - - - false - false - SNAPSHOT - - - - maven-jar-plugin - 3.0.1 - - - - true - lib/ - it.bancaditalia.oss.sdmx.helper.SDMXHelper - - - ${maven.build.timestamp} - ${buildNumber} - it.bancaditalia.oss.sdmx - - - - - - maven-source-plugin - 3.0.1 - - - attach-sources - - jar-no-fork - - - - - - maven-javadoc-plugin - 3.4.1 - - - attach-javadocs - - jar - - - none - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 3.0.0-M4 - - - **/AllTests* - - - - - org.apache.maven.plugins - maven-failsafe-plugin - 3.0.0-M4 - - - maven-deploy-plugin - 2.7 - - true - - - - maven-gpg-plugin - 1.6 - - - sign-artifacts - verify - - sign - - - - - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.8 - true - - ossrh - https://oss.sonatype.org/ - true - - - - diff --git a/JAVA/src/main/assembly/assembly-excel.xml b/JAVA/src/main/assembly/assembly-excel.xml deleted file mode 100644 index aaf88f30..00000000 --- a/JAVA/src/main/assembly/assembly-excel.xml +++ /dev/null @@ -1,28 +0,0 @@ - - sdmx-excel - - tar.gz - - false - - - ../EXCEL - - false - - **/* - - - - - - lib - SDMX.jar - - it.bancaditalia.oss:sdmx:jar:${sdmx.version} - - - - \ No newline at end of file diff --git a/JAVA/src/main/assembly/assembly-matlab.xml b/JAVA/src/main/assembly/assembly-matlab.xml deleted file mode 100644 index aff4f807..00000000 --- a/JAVA/src/main/assembly/assembly-matlab.xml +++ /dev/null @@ -1,28 +0,0 @@ - - sdmx-matlab - - tar.gz - - false - - - ../MATLAB - - false - - **/* - - - - - - lib - SDMX.jar - - it.bancaditalia.oss:sdmx:jar:${sdmx.version} - - - - \ No newline at end of file diff --git a/JAVA/src/main/assembly/assembly-sas.xml b/JAVA/src/main/assembly/assembly-sas.xml deleted file mode 100644 index a38afa32..00000000 --- a/JAVA/src/main/assembly/assembly-sas.xml +++ /dev/null @@ -1,28 +0,0 @@ - - sdmx-sas - - tar.gz - - false - - - ../SAS - - false - - **/* - - - - - - lib - SDMX.jar - - it.bancaditalia.oss:sdmx:jar:${sdmx.version} - - - - \ No newline at end of file diff --git a/JAVA/src/main/assembly/assembly-stata.xml b/JAVA/src/main/assembly/assembly-stata.xml deleted file mode 100644 index 7bd366a2..00000000 --- a/JAVA/src/main/assembly/assembly-stata.xml +++ /dev/null @@ -1,28 +0,0 @@ - - sdmx-stata - - tar.gz - - false - - - ../STATA - - false - - **/* - - - - - - jar - SDMX.jar - - it.bancaditalia.oss:sdmx:jar:${sdmx.version} - - - - \ No newline at end of file diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/api/GenericSDMXClient.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/api/GenericSDMXClient.java index 178a156d..7b958112 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/api/GenericSDMXClient.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/api/GenericSDMXClient.java @@ -20,12 +20,11 @@ */ package it.bancaditalia.oss.sdmx.api; -import java.net.URI; +import it.bancaditalia.oss.sdmx.exceptions.SdmxException; + import java.util.List; import java.util.Map; -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; - /** * @author Attilio Mattiocco * @@ -118,13 +117,15 @@ public List> getTimeSeries(Dataflow dataflow, DataFlo * @param filter the filter * @param startTime start time of the observations to be gathered * @param endTime end time of the observations to be gathered + * @param attributes comma separated string with the attributes to be returned ('none' or 'all' special values) + * @param measures comma separated string with the measures to be returned ('none' or 'all' special values) * @param updatedAfter if set, only data updated after the given date will be retrieved (e.g. '2014-01-01') * @param includeHistory boolean flag for enabling getting the history of revisions * @throws SdmxException */ public List> getTimeSeries(Dataflow dataflow, DataFlowStructure dsd, String resource, String filter, String startTime, String endTime, - boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException; + String attributes, String measures, String updatedAfter, boolean includeHistory) throws SdmxException; /** *

Gets a list of available codes for the various dimensions, with the specified filters on components. Only in SDMX v3 providers @@ -147,7 +148,7 @@ public List> getTimeSeries(Dataflow dataflow, DataFlo * @param filter the filter * @throws SdmxException */ - public Integer getAvailableTimeSeriesNumber(Dataflow df, String filter) throws SdmxException; + public Map getAvailableTimeSeriesNumber(Dataflow df, String filter) throws SdmxException; /** *

Checks id this is a secure provider, needing credentials. To be used @@ -164,21 +165,6 @@ public List> getTimeSeries(Dataflow dataflow, DataFlo */ public void setCredentials(String user, String pw); - /** - *

Gets the URL of the web service for this provider client - * @return the endpoint URL - * @throws SdmxException - */ - public URI getEndpoint() throws SdmxException; - - /** - *

Sets the URL of the web service for this provider client - */ - /** - * @param endpoint - */ - public void setEndpoint(URI endpoint); - /** *

Gets the exact URL corresponding to the data query in input for this client * @param resource the id of the time series @@ -202,11 +188,4 @@ public String buildDataURL(Dataflow dataflow, String resource, * @return the client name */ public String getName(); - - /** - *

Sets the name of this client - * @param name the name of this client - */ - - public void setName(String name); } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/api/PortableDataSet.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/api/PortableDataSet.java index 5e585a3d..de00656b 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/api/PortableDataSet.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/api/PortableDataSet.java @@ -21,6 +21,9 @@ package it.bancaditalia.oss.sdmx.api; import java.io.Serializable; +import java.time.Year; +import java.time.YearMonth; +import java.time.temporal.TemporalAdjusters; import java.util.AbstractList; import java.util.ArrayList; import java.util.List; @@ -31,7 +34,9 @@ import javax.swing.table.DefaultTableModel; import it.bancaditalia.oss.sdmx.exceptions.DataStructureException; +import it.bancaditalia.oss.sdmx.exceptions.SdmxInvalidParameterException; import it.bancaditalia.oss.sdmx.util.Configuration; +import it.bancaditalia.oss.sdmx.util.WeekConverter; /** * Java container for a dataset/table. In the various statistical tools it will be transformed by a converter into a @@ -45,6 +50,7 @@ public class PortableDataSet implements Serializable private static final long serialVersionUID = 1L; public static final String TIME_LABEL = "TIME_PERIOD"; + public static final String FREQ_LABEL = "FREQ"; public static final String OBS_LABEL = "OBS_VALUE"; public static final String ID_LABEL = "ID"; @@ -54,6 +60,7 @@ public class PortableDataSet implements Serializable private boolean errorFlag = false; private boolean numeric = false; private String errorObjects = null; + private String dataflow = null; private DefaultTableModel model = null; @@ -77,6 +84,14 @@ public PortableDataSet(List> tslist) throws setTimeSeries(tslist); } + public String getDataflow() { + return dataflow; + } + + public void setDataflow(String dataflow) { + this.dataflow = dataflow; + } + /** * Returns the index of a column in this dataset given its name. * @@ -168,6 +183,53 @@ public String[] getTimeStamps() throws DataStructureException return (result); } + /** + * @return A flattened array containing all observations timestamps in gregorian format (end of period). + * @throws DataStructureException If any error occurs + * @throws SdmxInvalidParameterException + */ + public String[] getGregorianTimeStamps() throws DataStructureException, SdmxInvalidParameterException + { + int rows = getRowCount(); + String[] result = new String[rows]; + String freq = "D"; + int freqCol = -1; + int timeCol = getColumnIndex(TIME_LABEL); + try{ + freqCol = getColumnIndex(FREQ_LABEL); + } + catch(DataStructureException dse){ + // set daily freq - do nothing and cross fingers + } + for (int i = 0; i < rows; i++) + { + String time = (String) getValueAt(i, timeCol); + if(freqCol != -1){ + freq = (String) getValueAt(i, freqCol); + } + + if(freq.equalsIgnoreCase("M")){ + result[i] = YearMonth.parse(time).atEndOfMonth().toString(); + } + else if(freq.equalsIgnoreCase("Q")){ + result[i] = time.replace("Q1", "03-31").replace("Q2", "06-30").replace("Q3", "09-30").replace("Q4", "12-31"); + } + else if(freq.equalsIgnoreCase("A")){ + result[i] = Year.parse(time).atMonth(12).atEndOfMonth().toString(); + } + else if(freq.equalsIgnoreCase("H")){ + result[i] = ((String) getValueAt(i, timeCol)).replace("S1", "06-30").replace("S2", "12-31"); + } + else if(freq.equalsIgnoreCase("W")){ + result[i] = WeekConverter.convert((String) getValueAt(i, timeCol)); + } + else{ + result[i] = ((String) getValueAt(i, timeCol)); + } + } + return (result); + } + /** * @return A flattened array containing all observations values for all series in this dataset. * @throws DataStructureException If any error occurs diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/api/PortableTimeSeries.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/api/PortableTimeSeries.java index fdf064f3..93fbda2e 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/api/PortableTimeSeries.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/api/PortableTimeSeries.java @@ -20,8 +20,6 @@ */ package it.bancaditalia.oss.sdmx.api; -import static java.util.stream.Collectors.joining; - import java.io.Serializable; import java.util.AbstractList; import java.util.AbstractMap; @@ -284,30 +282,6 @@ public String getAttribute(String code) return getAttributesMap().get(code); } - /** - * Set the series' attributes names and values. Any previous attribute, if defined, will be cleared. - * - * @param attributes A non-null map containing attribute bindings. - */ - @Deprecated - public void setAttributes(Map attributes) - { - getAttributesMap().clear(); - getAttributesMap().putAll(attributes); - } - - /** - * Adds or update an attribute value. - * - * @param key The name of series' attribute. Must be non-null. - * @param value The value of the attribute. - */ - @Deprecated - public void addAttribute(String key, String value) - { - this.getAttributesMap().put(key, value); - } - /** * @return a map of codes for each defined dimension, with dimensions as keys and codes as values. */ @@ -624,6 +598,7 @@ public String toString() { buffer.append((first ? "" : ", ") + attrName + "="); buffer.append(getObsLevelAttributes(attrName)); + buffer.append("\n"); first = false; } @@ -655,6 +630,17 @@ public String getAttributeValue(String code) return getAttribute(code); } + /** + * Add an attribute to this time series. + * + * @deprecated Use {@link #getAttributesMap()} instead. + */ + @Deprecated + public void addAttribute(String code, String value) + { + attributes.put(code, value); + } + /** * Get a String[] in the format "key=value" for each defined attribute in this {@link PortableTimeSeries}. * @@ -685,18 +671,6 @@ public void setAttributes(List attributes) this.getAttributesMap().put(pair.split("=")[0], pair.split("=")[1]); } - /** - * Sets an attribute for this series. - * - * @param attribute a string in the format "key=value" representing the attribute to set. - * @deprecated Use {@link #getAttributesMap()}.{@link Map#put(Object, Object) put(String, String)} instead. - */ - @Deprecated - public void addAttribute(String attribute) - { - addAttribute(attribute.split("=")[0], attribute.split("=")[1]); - } - /** * Get a list of Strings in the format "key=value" for each defined dimension in this {@link PortableTimeSeries}. * @@ -743,18 +717,6 @@ public String[] getDimensionsArray() return result; } - /** - * Sets an dimension for this series. - * - * @param dimension a string in the format "key=value" representing the dimension to set. - * @deprecated Use {@link #getDimensionsMap()}.{@link Map#put(Object, Object) put(String, String)} instead. - */ - @Deprecated - public void addDimension(String dimension) - { - addDimension(dimension.split("=")[0], dimension.split("=")[1]); - } - /** * Gets a list of statuses for each observation in this {@link PortableTimeSeries}. * diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/Provider.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/Provider.java index fe89b661..661c6399 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/Provider.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/Provider.java @@ -21,22 +21,14 @@ package it.bancaditalia.oss.sdmx.client; import java.net.URI; -import java.security.KeyManagementException; -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; import java.util.Comparator; import java.util.HashMap; import java.util.Map; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSocketFactory; -import javax.net.ssl.TrustManagerFactory; - import it.bancaditalia.oss.sdmx.api.DataFlowStructure; import it.bancaditalia.oss.sdmx.api.Dataflow; import it.bancaditalia.oss.sdmx.api.SDMXReference; +import it.bancaditalia.oss.sdmx.api.SDMXVersion; import it.bancaditalia.oss.sdmx.exceptions.SdmxException; /** @@ -44,26 +36,24 @@ * @author Valentino Pinna * */ -public class Provider { - private String name; +public class Provider +{ + private final String name; + private final URI endpoint; + private final SDMXVersion sdmxVersion; + private final boolean needsURLEncoding; + private final boolean supportsCompression; private String description; - private URI endpoint; - private String sdmxVersion; private boolean needsCredentials; - private boolean needsURLEncoding; - private boolean supportsCompression; private boolean full = false; - private boolean isCustom = false; // key: flow id (full) --> flow - private Map flows; + private Map flows; // key: dsd id (full) --> structure private Map dsdNameToStructureCache = null; - private SSLSocketFactory sslSocketFactory; - public Provider(String name, URI endpoint, KeyStore trustStore, boolean needsCredentials, - boolean needsURLEncoding, boolean supportsCompression, String description, - boolean isCustom, String sdmxVersion) throws SdmxException { + public Provider(String name, URI endpoint, boolean needsCredentials, boolean needsURLEncoding, boolean supportsCompression, String description, SDMXVersion sdmxVersion) throws SdmxException + { this.name = name; this.endpoint = endpoint; this.description = description; @@ -72,150 +62,108 @@ public Provider(String name, URI endpoint, KeyStore trustStore, boolean needsCre this.needsCredentials = needsCredentials; this.needsURLEncoding = needsURLEncoding; this.supportsCompression = supportsCompression; - this.isCustom = isCustom; this.sdmxVersion = sdmxVersion; - - try { - if (trustStore != null) - { - TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); - tmf.init(trustStore); - - SSLContext context = SSLContext.getInstance("TLS"); - context.init(null, tmf.getTrustManagers(), new SecureRandom()); - - this.sslSocketFactory = context.getSocketFactory(); - } - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } catch (KeyStoreException e) { - e.printStackTrace(); - } catch (KeyManagementException e) { - e.printStackTrace(); - } - } - - public String getName() { - return name; } - public void setName(String name) { - this.name = name; + public String getName() + { + return name; } - public URI getEndpoint() { + public URI getEndpoint() + { return endpoint; } - public void setEndpoint(URI endpoint) { - this.endpoint = endpoint; - } - - public void setFlows(Map flows) { + public void setFlows(Map flows) + { this.flows = flows; } - public void setFlow(Dataflow flow) { - /* BUG: flow is inserted using just the id, but this.flows is set up using the - * full identifier, this creates duplicates inside this.flows. */ - //this.flows.put(flow.getId(), flow); + public void setFlow(Dataflow flow) + { + /* + * BUG: flow is inserted using just the id, but this.flows is set up using the + * full identifier, this creates duplicates inside this.flows. + */ + // this.flows.put(flow.getId(), flow); this.flows.put(flow.getFullIdentifier(), flow); } - - public Dataflow getFlow(String dataflow) { - if (flows.containsKey(dataflow)) { + public Dataflow getFlow(String dataflow) + { + if (flows.containsKey(dataflow)) return flows.get(dataflow); - } else { - // it could be because we got the simple flow id (e.g. from getTimSeries). - // We try to handle it matching the id (if any) and returning the first available agency and the latest version - return flows.values() - .stream() - .filter(df -> df.getId().equals(dataflow)) - .max(Comparator.comparing(Dataflow::getVersion)) - .orElse(null); - } - } - - public Map getFlows() { + + // it could be because we got the simple flow id (e.g. from getTimSeries). + // We try to handle it matching the id (if any) and returning the first + // available agency and the latest version + return flows.values().stream().filter(df -> df.getId().equals(dataflow)).max(Comparator.comparing(Dataflow::getVersion)).orElse(null); + } + + public Map getFlows() + { return flows; } - public SDMXReference getDSDIdentifier(String dataflow) { - SDMXReference dsdid = null; + public SDMXReference getDSDIdentifier(String dataflow) + { Dataflow df = getFlow(dataflow); - if(df != null){ - dsdid = df.getDsdIdentifier(); - } - return dsdid; + return df != null ? df.getDsdIdentifier() : null; } - public DataFlowStructure getDSD(String dsdID) { + public DataFlowStructure getDSD(String dsdID) + { return dsdNameToStructureCache.get(dsdID); } - public void setDSD(String dsdID, DataFlowStructure dsd) { + public void setDSD(String dsdID, DataFlowStructure dsd) + { this.dsdNameToStructureCache.put(dsdID, dsd); } - public String getDescription() { + public String getDescription() + { return description; } - public void setDescription(String description) { + public void setDescription(String description) + { this.description = description; } - public boolean isNeedsCredentials() { + public boolean isNeedsCredentials() + { return needsCredentials; } - public void setNeedsCredentials(boolean needsCredentials) { + public void setNeedsCredentials(boolean needsCredentials) + { this.needsCredentials = needsCredentials; } - public void setFull(boolean full) { + public void setFull(boolean full) + { this.full = full; } - public boolean isFull() { + public boolean isFull() + { return full; } - public boolean isNeedsURLEncoding() { + public boolean isNeedsURLEncoding() + { return needsURLEncoding; } - public void setNeedsURLEncoding(boolean needsURLEncoding) { - this.needsURLEncoding = needsURLEncoding; - } - - public boolean isSupportsCompression() { + public boolean isSupportsCompression() + { return supportsCompression; } - public void setSupportsCompression(boolean supportsCompression) { - this.supportsCompression = supportsCompression; - } - - public void setCustom(boolean isCustom) { - this.isCustom = isCustom; - } - - public boolean isCustom() { - return isCustom; - } - - public SSLSocketFactory getSSLSocketFactory() { - return sslSocketFactory; - } - - public String getSdmxVersion() { + public SDMXVersion getSdmxVersion() + { return sdmxVersion; } - - public void setSdmxVersion(String sdmxVersion) { - this.sdmxVersion = sdmxVersion; - } - } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/RestSdmx30Client.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/RestSdmx30Client.java index 2ca07800..b3954473 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/RestSdmx30Client.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/RestSdmx30Client.java @@ -20,19 +20,7 @@ */ package it.bancaditalia.oss.sdmx.client; -import java.net.URI; -import java.net.URL; -import java.util.List; -import java.util.Map; -import java.util.logging.Level; - -import javax.net.ssl.SSLSocketFactory; - -import it.bancaditalia.oss.sdmx.api.DataFlowStructure; -import it.bancaditalia.oss.sdmx.api.Dataflow; -import it.bancaditalia.oss.sdmx.api.Dimension; -import it.bancaditalia.oss.sdmx.api.Message; -import it.bancaditalia.oss.sdmx.api.PortableTimeSeries; +import it.bancaditalia.oss.sdmx.api.*; import it.bancaditalia.oss.sdmx.event.DataFooterMessageEvent; import it.bancaditalia.oss.sdmx.event.RestSdmxEvent; import it.bancaditalia.oss.sdmx.exceptions.SdmxException; @@ -42,6 +30,15 @@ import it.bancaditalia.oss.sdmx.parser.v30.AvailabilityParser; import it.bancaditalia.oss.sdmx.parser.v30.Sdmx30Queries; import it.bancaditalia.oss.sdmx.parser.v30.SeriesCountParser; +import it.bancaditalia.oss.sdmx.util.QueryRunner; + +import java.net.URL; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; + +import static it.bancaditalia.oss.sdmx.api.SDMXVersion.V3; +import static it.bancaditalia.oss.sdmx.util.QueryRunner.runQuery; /** * @author Attilio Mattiocco @@ -50,51 +47,50 @@ public class RestSdmx30Client extends RestSdmxClient { - protected final String LATEST_VERSION = "+"; - - public RestSdmx30Client(String name, URI endpoint, SSLSocketFactory sslSocketFactory, boolean needsCredentials, boolean needsURLEncoding, - boolean supportsCompression) - { - super(name, endpoint, sslSocketFactory, needsCredentials, needsURLEncoding, supportsCompression); - this.sdmxVersion = SDMXClientFactory.SDMX_V3; - this.latestKeyword = this.LATEST_VERSION; - } - - public RestSdmx30Client(String name, URI endpoint, boolean needsCredentials, boolean needsURLEncoding, boolean supportsCompression) + public RestSdmx30Client(Provider provider) { - this(name, endpoint, null, needsCredentials, needsURLEncoding, supportsCompression); - this.sdmxVersion = SDMXClientFactory.SDMX_V3; - this.latestKeyword = this.LATEST_VERSION; + super(provider); + this.sdmxVersion = V3; + this.LATEST_VERSION = "+"; + this.ALL_KEYWORD = "*"; } @Override public List> getTimeSeries(Dataflow dataflow, DataFlowStructure dsd, String tsKey, String startTime, String endTime, boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException { - return getTimeSeries(dataflow, dsd, tsKey, null, startTime, endTime, serieskeysonly, updatedAfter, includeHistory); + // old V2 calls can be mapped to V3 ones + return getTimeSeries(dataflow, dsd, tsKey, null, startTime, endTime, serieskeysonly ? "none" : "all", serieskeysonly ? "none" : "all", updatedAfter, includeHistory); } @Override public List> getTimeSeries(Dataflow dataflow, DataFlowStructure dsd, String tsKey, String filter, String startTime, String endTime, - boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException { - return postProcess(getData(dataflow, dsd, tsKey, filter, startTime, endTime, serieskeysonly, updatedAfter, includeHistory)); + String attributes, String measures, String updatedAfter, boolean includeHistory) throws SdmxException { + return postProcess(getData(dataflow, dsd, tsKey, filter, startTime, endTime, attributes, measures, updatedAfter, includeHistory)); } @Override public Map> getAvailableCubeRegion(Dataflow dataflow, String filter, String mode) throws SdmxException { URL query = buildAvailabilityQuery(dataflow, filter, mode); - return runQuery(new AvailabilityParser(), query, null, null); + return runQuery(new AvailabilityParser(), query, handleHttpHeaders("application/vnd.sdmx.structure+xml;version=2.1")); } @Override - public Integer getAvailableTimeSeriesNumber(Dataflow dataflow, String filter) throws SdmxException { - URL query = buildAvailabilityQueryByKey(dataflow, filter, "exact"); - return runQuery(new SeriesCountParser(), query, null, null); + public Map getAvailableTimeSeriesNumber(Dataflow dataflow, String filter) throws SdmxException { + URL query = buildAvailabilityQuery(dataflow, filter, "exact"); + return runQuery(new SeriesCountParser(), query, handleHttpHeaders("application/vnd.sdmx.structure+xml;version=2.1")); + } + + @Override + public String buildDataURL(Dataflow dataflow, String resource, String startTime, String endTime, boolean seriesKeyOnly, String updatedAfter, + boolean includeHistory) throws SdmxException + { + return buildDataQuery(dataflow, null, resource, startTime, endTime, null, null, updatedAfter, includeHistory).toString(); } protected DataParsingResult getData(Dataflow dataflow, DataFlowStructure dsd, String tsKey, String filter, String startTime, String endTime, - boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException + String attributes, String measures, String updatedAfter, boolean includeHistory) throws SdmxException { if(tsKey != null && !tsKey.isEmpty()){ if(tsKey.contains("+")){ @@ -112,23 +108,23 @@ protected DataParsingResult getData(Dataflow dataflow, DataFlowStructure dsd, St } } - URL query = buildDataQuery(dataflow, tsKey, filter, startTime, endTime, serieskeysonly, updatedAfter, includeHistory); + URL query = buildDataQuery(dataflow, tsKey, filter, startTime, endTime, attributes, measures, updatedAfter, includeHistory); String dumpName = "data_" + dataflow.getId() + "_" + filter; //.replaceAll("\\p{Punct}", "_"); - DataParsingResult ts = runQuery(new CompactDataParser(dsd, dataflow, !serieskeysonly), query, - "application/vnd.sdmx.structurespecificdata+xml;version=2.1", dumpName); + DataParsingResult ts = runQuery(new CompactDataParser(dsd, dataflow, !("none".equals(attributes) && "none".equals(measures))), query, + getName(), dumpName, handleHttpHeaders("application/vnd.sdmx.structurespecificdata+xml;version=2.1")); Message msg = ts.getMessage(); if (msg != null) { LOGGER.log(Level.INFO, "The sdmx call returned messages in the footer:\n {0}", msg); RestSdmxEvent event = new DataFooterMessageEvent(query, msg); - dataFooterMessageEventListener.onSdmxEvent(event); + QueryRunner.getDataFooterMessageEventListener().onSdmxEvent(event); } return ts; } private String mapSDMX2KeytoSDMX3FIlter(String tsKey, DataFlowStructure dsd) throws SdmxInvalidParameterException { String filter = ""; - Dimension[] dims = (Dimension[]) dsd.getDimensions().toArray(); + Dimension[] dims = dsd.getDimensions().toArray(new Dimension[0]); String delims = "[.]"; String[] tokens = tsKey.split(delims); if(tokens.length > dims.length) @@ -142,42 +138,43 @@ private String mapSDMX2KeytoSDMX3FIlter(String tsKey, DataFlowStructure dsd) thr } protected URL buildDataQuery(Dataflow dataflow, String tsKey, String filter, String startTime, String endTime, - boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException + String attributes, String measures, String updatedAfter, boolean includeHistory) throws SdmxException { - if (endpoint != null && dataflow != null) + if (provider.getEndpoint() != null && dataflow != null) return Sdmx30Queries - .createDataQuery(endpoint, dataflow.getFullIdentifier(), tsKey, filter, startTime, endTime, serieskeysonly, updatedAfter, includeHistory) + .createDataQuery(provider.getEndpoint(), dataflow.getFullIdentifier(), tsKey, filter, startTime, endTime, + attributes, measures, updatedAfter, includeHistory) .buildQuery(); else - throw new RuntimeException("Invalid query parameters: dataflow=" + dataflow + " endpoint=" + endpoint); + throw new RuntimeException("Invalid query parameters: dataflow=" + dataflow + " endpoint=" + provider.getEndpoint()); } protected URL buildDSDQuery(String dsd, String agency, String version, boolean full) throws SdmxException { - if (endpoint != null && agency != null && !agency.isEmpty() && dsd != null && !dsd.isEmpty()) - return Sdmx30Queries.createStructureQuery(endpoint, dsd, agency, version, full).buildQuery(); + if (provider.getEndpoint() != null && agency != null && !agency.isEmpty() && dsd != null && !dsd.isEmpty()) + return Sdmx30Queries.createStructureQuery(provider.getEndpoint(), dsd, agency, version, full).buildQuery(); else - throw new RuntimeException("Invalid query parameters: agency=" + agency + " dsd=" + dsd + " endpoint=" + endpoint); + throw new RuntimeException("Invalid query parameters: agency=" + agency + " dsd=" + dsd + " endpoint=" + provider.getEndpoint()); } protected URL buildFlowQuery(String dataflow, String agency, String version) throws SdmxException { - return Sdmx30Queries.createDataflowQuery(endpoint, dataflow, agency, version).buildQuery(); + return Sdmx30Queries.createDataflowQuery(provider.getEndpoint(), dataflow, agency, version).buildQuery(); } protected URL buildCodelistQuery(String codeList, String agency, String version) throws SdmxException { - return Sdmx30Queries.createCodelistQuery(endpoint, codeList, agency, version).buildQuery(); + return Sdmx30Queries.createCodelistQuery(provider.getEndpoint(), codeList, agency, version).buildQuery(); } protected URL buildAvailabilityQuery(Dataflow dataflow, String filter, String mode) throws SdmxException { - return Sdmx30Queries.createAvailabilityQuery(endpoint, dataflow.getFullIdentifier(), filter, mode).buildQuery(); + return Sdmx30Queries.createAvailabilityQuery(provider.getEndpoint(), dataflow.getFullIdentifier(), filter, mode).buildQuery(); } protected URL buildAvailabilityQueryByKey(Dataflow dataflow, String filter, String mode) throws SdmxException { - return Sdmx30Queries.createAvailabilityQueryByKey(endpoint, dataflow.getFullIdentifier(), filter, mode).buildQuery(); + return Sdmx30Queries.createAvailabilityQueryByKey(provider.getEndpoint(), dataflow.getFullIdentifier(), filter, mode).buildQuery(); } } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/RestSdmxClient.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/RestSdmxClient.java index 0a56ee98..c13b0a88 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/RestSdmxClient.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/RestSdmxClient.java @@ -20,71 +20,27 @@ */ package it.bancaditalia.oss.sdmx.client; -import static it.bancaditalia.oss.sdmx.util.Configuration.getLanguages; -import static java.lang.String.format; -import static java.util.stream.Collectors.joining; +import it.bancaditalia.oss.sdmx.api.*; +import it.bancaditalia.oss.sdmx.event.DataFooterMessageEvent; +import it.bancaditalia.oss.sdmx.event.RestSdmxEvent; +import it.bancaditalia.oss.sdmx.exceptions.SdmxException; +import it.bancaditalia.oss.sdmx.exceptions.SdmxInvalidParameterException; +import it.bancaditalia.oss.sdmx.exceptions.SdmxXmlContentException; +import it.bancaditalia.oss.sdmx.parser.v21.*; +import it.bancaditalia.oss.sdmx.util.Configuration; +import it.bancaditalia.oss.sdmx.util.QueryRunner; -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.Proxy; -import java.net.ProxySelector; -import java.net.URI; -import java.net.URISyntaxException; import java.net.URL; -import java.net.URLConnection; -import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.zip.GZIPInputStream; -import java.util.zip.InflaterInputStream; -import java.util.zip.ZipInputStream; - -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLSocketFactory; -import javax.swing.LayoutFocusTraversalPolicy; -import javax.xml.stream.XMLEventReader; -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLStreamException; -import it.bancaditalia.oss.sdmx.api.Codelist; -import it.bancaditalia.oss.sdmx.api.DataFlowStructure; -import it.bancaditalia.oss.sdmx.api.Dataflow; -import it.bancaditalia.oss.sdmx.api.GenericSDMXClient; -import it.bancaditalia.oss.sdmx.api.SDMXReference; -import it.bancaditalia.oss.sdmx.api.Message; -import it.bancaditalia.oss.sdmx.api.PortableTimeSeries; -import it.bancaditalia.oss.sdmx.event.DataFooterMessageEvent; -import it.bancaditalia.oss.sdmx.event.OpenEvent; -import it.bancaditalia.oss.sdmx.event.RedirectionEvent; -import it.bancaditalia.oss.sdmx.event.RestSdmxEvent; -import it.bancaditalia.oss.sdmx.event.RestSdmxEventListener; -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; -import it.bancaditalia.oss.sdmx.exceptions.SdmxExceptionFactory; -import it.bancaditalia.oss.sdmx.exceptions.SdmxIOException; -import it.bancaditalia.oss.sdmx.exceptions.SdmxInvalidParameterException; -import it.bancaditalia.oss.sdmx.exceptions.SdmxRedirectionException; -import it.bancaditalia.oss.sdmx.exceptions.SdmxXmlContentException; -import it.bancaditalia.oss.sdmx.parser.v21.CodelistParser; -import it.bancaditalia.oss.sdmx.parser.v21.CompactDataParser; -import it.bancaditalia.oss.sdmx.parser.v21.DataParsingResult; -import it.bancaditalia.oss.sdmx.parser.v21.DataStructureParser; -import it.bancaditalia.oss.sdmx.parser.v21.DataflowParser; -import it.bancaditalia.oss.sdmx.parser.v21.Sdmx21Queries; -import it.bancaditalia.oss.sdmx.util.Configuration; +import static it.bancaditalia.oss.sdmx.api.SDMXVersion.V2; +import static it.bancaditalia.oss.sdmx.util.QueryRunner.runQuery; +import static java.util.stream.Collectors.joining; /** * @author Attilio Mattiocco @@ -92,110 +48,31 @@ */ public class RestSdmxClient implements GenericSDMXClient { - private static final String SOURCE_CLASS = RestSdmxClient.class.getSimpleName(); protected static final Logger LOGGER = Configuration.getSdmxLogger(); - protected String sdmxVersion = SDMXClientFactory.SDMX_V2; - protected String name; - protected final boolean needsURLEncoding; - protected final boolean supportsCompression; + protected SDMXVersion sdmxVersion = V2; - protected ProxySelector proxySelector; - protected SSLSocketFactory sslSocketFactory; - protected HostnameVerifier hostnameVerifier; - protected final boolean dotStat = false; - protected /* final */ URI endpoint; protected boolean needsCredentials = false; protected boolean containsCredentials = false; protected String user = null; protected String pw = null; - protected int readTimeout; - protected int connectTimeout; - protected RestSdmxEventListener dataFooterMessageEventListener = RestSdmxEventListener.NO_OP_LISTENER; - protected RestSdmxEventListener redirectionEventListener = RestSdmxEventListener.NO_OP_LISTENER; - protected RestSdmxEventListener openEventListener = RestSdmxEventListener.NO_OP_LISTENER; - protected int maxRedirects = 20; - protected final String LATEST_VERSION = "latest"; - protected final String ALL_AGENCIES = "all"; - protected String latestKeyword = LATEST_VERSION; - - public RestSdmxClient(String name, URI endpoint, SSLSocketFactory sslSocketFactory, boolean needsCredentials, boolean needsURLEncoding, boolean supportsCompression) - { - this.endpoint = endpoint; - this.name = name; - this.needsCredentials = needsCredentials; - this.needsURLEncoding = needsURLEncoding; - this.supportsCompression = supportsCompression; - this.proxySelector = null; - this.sslSocketFactory = sslSocketFactory; - this.hostnameVerifier = null; - readTimeout = Configuration.getReadTimeout(getClass().getSimpleName()); - connectTimeout = Configuration.getConnectTimeout(getClass().getSimpleName()); -// languages = LanguageRange.parse(Configuration.getLang()); - } - - public RestSdmxClient(String name, URI endpoint, boolean needsCredentials, boolean needsURLEncoding, boolean supportsCompression) - { - this(name, endpoint, null, needsCredentials, needsURLEncoding, supportsCompression); - } - - public void setProxySelector(ProxySelector proxySelector) - { - this.proxySelector = proxySelector; - } - - public void setSslSocketFactory(SSLSocketFactory sslSocketFactory) - { - this.sslSocketFactory = sslSocketFactory; - } - - public void setHostnameVerifier(HostnameVerifier hostnameVerifier) - { - this.hostnameVerifier = hostnameVerifier; - } - - public void setReadTimeout(int timeout) - { - this.readTimeout = timeout; - } - - public void setConnectTimeout(int timeout) - { - this.connectTimeout = timeout; - } - -// public void setLanguages(List languages) -// { -// this.languages = languages; -// } - - public void setDataFooterMessageEventListener(RestSdmxEventListener eventListener) - { - this.dataFooterMessageEventListener = eventListener; - } - - public void setRedirectionEventListener(RestSdmxEventListener eventListener) - { - this.redirectionEventListener = eventListener; - } - - public void setOpenEventListener(RestSdmxEventListener eventListener) - { - this.openEventListener = eventListener; - } + protected final Provider provider; + protected String LATEST_VERSION = "latest"; + protected String ALL_KEYWORD = "all"; - public void setMaxRedirects(int maxRedirects) + public RestSdmxClient(Provider provider) { - this.maxRedirects = maxRedirects; + this.provider = provider; + this.needsCredentials = provider.isNeedsCredentials(); } @Override public Map getDataflows() throws SdmxException { Map result = null; - URL query = buildFlowQuery(ALL_AGENCIES, "all", latestKeyword); - List flows = runQuery(new DataflowParser(), query, null, "dataflow_all"); + URL query = buildFlowQuery(ALL_KEYWORD, ALL_KEYWORD, LATEST_VERSION); + List flows = runQuery(new DataflowParser(), query, "dataflow_all", getName(), handleHttpHeaders("application/vnd.sdmx.structure+xml;version=2.1")); if (flows.size() > 0) { result = new HashMap<>(); @@ -203,9 +80,8 @@ public Map getDataflows() throws SdmxException result.put(dataflow.getFullIdentifier(), dataflow); } else - { throw new SdmxXmlContentException("The query returned zero dataflows"); - } + return result; } @@ -213,10 +89,10 @@ public Map getDataflows() throws SdmxException public Dataflow getDataflow(String dataflow, String agency, String version) throws SdmxException { Dataflow result = null; - if(agency == null) agency = ALL_AGENCIES; - if(version == null) version = this.latestKeyword; + if(agency == null) agency = ALL_KEYWORD; + if(version == null) version = this.LATEST_VERSION; URL query = buildFlowQuery(dataflow, agency, version); - List flows = runQuery(new DataflowParser(), query, null, "dataflow_" + dataflow); + List flows = runQuery(new DataflowParser(), query, getName(), "dataflow_" + dataflow, handleHttpHeaders("application/vnd.sdmx.structure+xml;version=2.1")); if (flows.size() >= 1) result = flows.get(0); else @@ -233,7 +109,7 @@ public DataFlowStructure getDataFlowStructure(SDMXReference dsd, boolean full) t else { URL query = buildDSDQuery(dsd.getId(), dsd.getAgency(), dsd.getVersion(), full); - return runQuery(new DataStructureParser(), query, null, "datastructure_" + dsd.getId()).get(0); + return runQuery(new DataStructureParser(), query, getName(), "datastructure_" + dsd.getId(), handleHttpHeaders("application/vnd.sdmx.structure+xml;version=2.1")).get(0); } } @@ -241,7 +117,7 @@ public DataFlowStructure getDataFlowStructure(SDMXReference dsd, boolean full) t public Codelist getCodes(String codeList, String agency, String version) throws SdmxException { URL query = buildCodelistQuery(codeList, agency, version); - return runQuery(new CodelistParser(), query, null, "codelist_" + codeList); + return runQuery(new CodelistParser(), query, getName(), "codelist_" + codeList, handleHttpHeaders("application/vnd.sdmx.structure+xml;version=2.1")); } @Override @@ -255,11 +131,8 @@ public List> getTimeSeries(Dataflow dataflow, DataFlo @Override public List> getTimeSeries(Dataflow dataflow, DataFlowStructure dsd, String resource, String filter, String startTime, String endTime, - boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException { - if(filter != null && !filter.isEmpty()) - throw new SdmxInvalidParameterException("This method can only be called on SDMX V3 providers."); - else - return getTimeSeries(dataflow, dsd, resource, startTime, endTime, serieskeysonly, updatedAfter, includeHistory); + String attributes, String measures, String updatedAfter, boolean includeHistory) throws SdmxException { + throw new SdmxInvalidParameterException("This method can only be called on SDMX V3 providers."); } @Override @@ -268,7 +141,7 @@ public Map> getAvailableCubeRegion(Dataflow dataflow, Strin } @Override - public Integer getAvailableTimeSeriesNumber(Dataflow dataflow, String filter) throws SdmxException { + public Map getAvailableTimeSeriesNumber(Dataflow dataflow, String filter) throws SdmxException { throw new SdmxInvalidParameterException("This method can only be called on SDMX V3 providers."); } @@ -278,13 +151,14 @@ protected DataParsingResult getData(Dataflow dataflow, DataFlowStructure dsd, St URL query = buildDataQuery(dataflow, resource, startTime, endTime, serieskeysonly, updatedAfter, includeHistory); String dumpName = "data_" + dataflow.getId() + "_" + resource; //.replaceAll("\\p{Punct}", "_"); DataParsingResult ts = runQuery(new CompactDataParser(dsd, dataflow, !serieskeysonly), query, - "application/vnd.sdmx.structurespecificdata+xml;version=2.1", dumpName); + getName(), dumpName, handleHttpHeaders("application/vnd.sdmx.structurespecificdata+xml;version=2.1")); + Message msg = ts.getMessage(); if (msg != null) { LOGGER.log(Level.INFO, "The sdmx call returned messages in the footer:\n {0}", msg); RestSdmxEvent event = new DataFooterMessageEvent(query, msg); - dataFooterMessageEventListener.onSdmxEvent(event); + QueryRunner.getDataFooterMessageEventListener().onSdmxEvent(event); } return ts; } @@ -304,36 +178,15 @@ public void setCredentials(String user, String pw) this.containsCredentials = true; } - @Override - public URI getEndpoint() - { - return endpoint; - } - - @Override - public void setEndpoint(URI endpoint) - { - this.endpoint = endpoint; - } - @Override public String getName() { - return name; - } - - @Override - public void setName(String name) - { - this.name = name; - } - - public String getSdmxVersion() { - return sdmxVersion; + return provider.getName(); } - public void setSdmxVersion(String sdmxVersion) { - this.sdmxVersion = sdmxVersion; + public String getSdmxVersion() + { + return sdmxVersion.toString(); } @Override @@ -343,307 +196,32 @@ public String buildDataURL(Dataflow dataflow, String resource, String startTime, return buildDataQuery(dataflow, resource, startTime, endTime, seriesKeyOnly, updatedAfter, includeHistory).toString(); } - /** - * Returns a reader over the result of an http query. - * - * @param query a non-null query - * @param acceptHeader a nullable accept header - * @return a non-null reader - * - * @throws SdmxException - */ - protected final T runQuery(Parser parser, URL query, String acceptHeader, String dumpName) throws SdmxException - { - final String sourceMethod = "runQuery"; - LOGGER.entering(SOURCE_CLASS, sourceMethod); - - URLConnection conn = null; - URL url = null; - LOGGER.log(Level.INFO, "Contacting web service with query: {0}", query); - - try - { - int code; - url = query; - URL originalURL = url; - - Proxy proxy = (proxySelector != null ? proxySelector : ProxySelector.getDefault()).select(url.toURI()).get(0); - LOGGER.fine("Using proxy: " + proxy); - - openEventListener.onSdmxEvent(new OpenEvent(url, acceptHeader, getLanguages(), proxy)); - - int redirects = 0; - do - { - conn = url.openConnection(proxy); - - if (conn instanceof HttpsURLConnection && sslSocketFactory != null) - { - LOGGER.fine("Using custom SSLSocketFactory for provider " + name); - ((HttpsURLConnection) conn).setSSLSocketFactory(sslSocketFactory); - } - - if (conn instanceof HttpsURLConnection && hostnameVerifier != null) - { - LOGGER.fine("Using custom HostnameVerifier for provider " + name); - ((HttpsURLConnection) conn).setHostnameVerifier(hostnameVerifier); - } - - conn.setReadTimeout(readTimeout); - conn.setConnectTimeout(connectTimeout); - - if (conn instanceof HttpURLConnection) - { - ((HttpURLConnection) conn).setRequestMethod("GET"); - ((HttpURLConnection) conn).setInstanceFollowRedirects(false); - handleHttpHeaders((HttpURLConnection) conn, acceptHeader); - } - - code = conn instanceof HttpURLConnection ? ((HttpURLConnection) conn).getResponseCode() : HttpURLConnection.HTTP_OK; - if (code == HttpURLConnection.HTTP_PROXY_AUTH) - { - LOGGER.fine("Error with proxy. Second attempt after forcing acces to http website in first place."); - URI uritest= new URI("http://google.com"); - URL urltest = uritest.toURL(); - conn = urltest.openConnection(proxy); - ((HttpURLConnection) conn).setRequestMethod("GET"); - code = conn instanceof HttpURLConnection ? ((HttpURLConnection) conn).getResponseCode() : HttpURLConnection.HTTP_OK; - conn = url.openConnection(proxy); - ((HttpURLConnection) conn).setRequestMethod("GET"); - code = conn instanceof HttpURLConnection ? ((HttpURLConnection) conn).getResponseCode() : HttpURLConnection.HTTP_OK; - - } - if (isRedirection(code)) - { - URL redirection = getRedirectionURL(conn, code); -// if (conn instanceof HttpURLConnection) -// ((HttpURLConnection) conn).disconnect(); - if (isDowngradingProtocolOnRedirect(originalURL, redirection)) { - throw new SdmxRedirectionException("Downgrading protocol on redirect from '" + originalURL + "' to '" + redirection + "'"); - } - LOGGER.log(Level.INFO, "Redirecting to: {0}", redirection); - RestSdmxEvent event = new RedirectionEvent(url, redirection); - redirectionEventListener.onSdmxEvent(event); - url = redirection; - redirects++; - } - } while (isRedirection(code) && !(isMaxRedirectionReached(redirects))); - - if (isMaxRedirectionReached(redirects)) { - throw new SdmxRedirectionException("Max redirection reached"); - } - - if (code == HttpURLConnection.HTTP_OK) - { - LOGGER.fine("Connection opened. Code: " + code); - InputStream stream = conn.getInputStream(); - String encoding = conn.getContentEncoding() == null ? "" : conn.getContentEncoding(); - if (encoding.equalsIgnoreCase("gzip")) - stream = new GZIPInputStream(stream); - else if (encoding.equalsIgnoreCase("deflate")) - stream = new InflaterInputStream(stream); - else if (conn.getContentType() != null && conn.getContentType().contains("application/octet-stream")) - { - stream = new ZipInputStream(stream); - ((ZipInputStream) stream).getNextEntry(); - } - - if (Configuration.isDumpXml() && dumpName != null) // skip providers < sdmx v2.1 - { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - byte[] buf = new byte[4096]; - int i; - while ((i = stream.read(buf, 0, 4096)) > 0) - baos.write(buf, 0, i); - baos.close(); -// String resource = URLDecoder.decode(url.getPath(), StandardCharsets.UTF_8.name()).replaceAll(endpoint.getPath() + "/?", "") -// .replaceFirst("/$", "").replaceAll("\\p{Punct}", "_") + ".xml"; - System.err.println(Configuration.getDumpPrefix()); - File dumpfilename = new File(Configuration.getDumpPrefix() + File.separator + name, dumpName + ".xml"); - if (!dumpfilename.getParentFile().exists() && !dumpfilename.getParentFile().mkdirs()) { - LOGGER.warning("Error creating path to dump file: " + dumpfilename); - } - else{ - LOGGER.info("Dumping xml to file " + dumpfilename.getAbsolutePath()); - FileOutputStream dumpfile = new FileOutputStream(dumpfilename); - dumpfile.write(baos.toByteArray()); - dumpfile.close(); - stream = new ByteArrayInputStream(baos.toByteArray()); - } - } - - try (Reader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) - { - XMLInputFactory inputFactory = XMLInputFactory.newFactory(); - preventXXE(inputFactory); - BufferedReader br = skipBOM(reader); - // InputStream in = new ByteArrayInputStream(xmlBuffer); - XMLEventReader eventReader = inputFactory.createXMLEventReader(br); - - return parser.parse(eventReader, getLanguages()); - } - } - else - { - InputStream is = ((HttpURLConnection)conn).getErrorStream(); - if(is != null){ - String msg = new BufferedReader(new InputStreamReader(is)).readLine(); - LOGGER.severe(msg); - } - SdmxException ex = SdmxExceptionFactory.createRestException(code, null, null); - if (conn instanceof HttpURLConnection) - ((HttpURLConnection) conn).disconnect(); - throw ex; - } - } - catch (IOException e) - { - LOGGER.severe("Exception. Class: " + e.getClass().getName() + " - Message: " + e.getMessage()); - LOGGER.log(Level.FINER, "Exception: ", e); - throw SdmxExceptionFactory.wrap(e); - } - catch (XMLStreamException e) - { - LOGGER.severe("Exception caught parsing results from call to provider " + name); - LOGGER.log(Level.FINER, "Exception: ", e); - throw SdmxExceptionFactory.wrap(e); - } - catch (URISyntaxException e) - { - LOGGER.severe("Exception caught parsing results from call to provider " + name); - LOGGER.log(Level.FINER, "Exception: ", e); - throw SdmxExceptionFactory.wrap(e); - } - finally - { - if (conn != null && conn instanceof HttpURLConnection) - ((HttpURLConnection) conn).disconnect(); - } - } - - protected void handleHttpHeaders(HttpURLConnection conn, String acceptHeader) - { - String lList = Configuration.getLanguages().stream() - .map(lr -> format(Locale.US, "%s;q=%.1f", lr.getRange(), lr.getWeight())) - .collect(joining(",")); - conn.addRequestProperty("Accept-Language", lList); - if (containsCredentials) - { - LOGGER.fine("Setting http authorization"); - // https://stackoverflow.com/questions/1968416/how-to-do-http-authentication-in-android/1968873#1968873 - //String auth = Base64.encodeToString((user + ":" + pw).getBytes(), Base64.NO_WRAP); - String auth = java.util.Base64.getEncoder().encodeToString((user + ":" + pw).getBytes()); - conn.setRequestProperty("Authorization", "Basic " + auth); - } - if (supportsCompression) - { - conn.addRequestProperty("Accept-Encoding", "gzip,deflate"); - } - if (acceptHeader != null && !"".equals(acceptHeader)) - conn.setRequestProperty("Accept", acceptHeader); - else - conn.setRequestProperty("Accept", "*/*"); - } - protected URL buildDataQuery(Dataflow dataflow, String resource, String startTime, String endTime, boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException { - if (endpoint != null && dataflow != null && resource != null && !resource.isEmpty()) + if (provider.getEndpoint() != null && dataflow != null && resource != null && !resource.isEmpty()) return Sdmx21Queries - .createDataQuery(endpoint, dataflow.getFullIdentifier(), resource, startTime, endTime, serieskeysonly, updatedAfter, includeHistory, null) + .createDataQuery(provider.getEndpoint(), dataflow.getFullIdentifier(), resource, startTime, endTime, serieskeysonly, updatedAfter, includeHistory, null) .buildSdmx21Query(); else - throw new SdmxInvalidParameterException("Invalid query parameters: dataflow=" + dataflow + " resource=" + resource + " endpoint=" + endpoint); + throw new SdmxInvalidParameterException("Invalid query parameters: dataflow=" + dataflow + " resource=" + resource + " endpoint=" + provider.getEndpoint()); } protected URL buildDSDQuery(String dsd, String agency, String version, boolean full) throws SdmxException { - if (endpoint != null && agency != null && !agency.isEmpty() && dsd != null && !dsd.isEmpty()) - return Sdmx21Queries.createStructureQuery(endpoint, dsd, agency, version, full).buildSdmx21Query(); + if (provider.getEndpoint() != null && agency != null && !agency.isEmpty() && dsd != null && !dsd.isEmpty()) + return Sdmx21Queries.createStructureQuery(provider.getEndpoint(), dsd, agency, version, full).buildSdmx21Query(); else - throw new RuntimeException("Invalid query parameters: agency=" + agency + " dsd=" + dsd + " endpoint=" + endpoint); + throw new RuntimeException("Invalid query parameters: agency=" + agency + " dsd=" + dsd + " endpoint=" + provider.getEndpoint()); } protected URL buildFlowQuery(String dataflow, String agency, String version) throws SdmxException { - return Sdmx21Queries.createDataflowQuery(endpoint, dataflow, agency, version).buildSdmx21Query(); + return Sdmx21Queries.createDataflowQuery(provider.getEndpoint(), dataflow, agency, version).buildSdmx21Query(); } protected URL buildCodelistQuery(String codeList, String agency, String version) throws SdmxException { - return Sdmx21Queries.createCodelistQuery(endpoint, codeList, agency, version).buildSdmx21Query(); - } - - private static boolean isRedirection(int code) - { - return (code >= HttpURLConnection.HTTP_MULT_CHOICE && code <= HttpURLConnection.HTTP_SEE_OTHER) - || code == 307; // TEMPORARY REDIRECT - } - - private static URL getRedirectionURL(URLConnection conn, int code) throws SdmxIOException - { - String location = conn.getHeaderField("Location"); - if (location == null || location.isEmpty()) - { - throw new SdmxIOException("The endpoint returned redirect code: " + code + ", but the location was empty.", null); - } - try - { - return new URL(location); - } - catch (MalformedURLException ex) - { - throw new SdmxIOException("The endpoint returned redirect code: " + code + ", but the location was malformed: '" + location + "'.", null); - } - } - - // some 2.0 providers are apparently adding a BOM - public BufferedReader skipBOM(Reader xmlBuffer) throws SdmxException - { - BufferedReader br = new BufferedReader(xmlBuffer) { - @Override - public void close() throws IOException - { - LOGGER.fine("GenericDataParser::skipBOM: closing stream."); - super.close(); - } - }; - try - { - // java uses Unicode big endian - char[] cbuf = new char[1]; - // TODO: Source of problems here - br.mark(1); - br.read(cbuf, 0, 1); - LOGGER.fine(String.format("0x%2s", Integer.toHexString(cbuf[0]))); - if ((byte) cbuf[0] == (byte) 0xfeff) - { - LOGGER.fine("BOM found and skipped"); - } - else - { - // TODO: Source of problems here - LOGGER.fine("GenericDataParser::skipBOM: Resetting stream."); - br.reset(); - } - } - catch (IOException e) - { - throw SdmxExceptionFactory.wrap(e); - } - return br; - } - - // https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#XMLInputFactory_.28a_StAX_parser.29 - private static void preventXXE(XMLInputFactory factory) - { - if (factory.isPropertySupported(XMLInputFactory.SUPPORT_DTD)) - { - factory.setProperty(XMLInputFactory.SUPPORT_DTD, false); - } - if (factory.isPropertySupported(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES)) - { - factory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false); - } + return Sdmx21Queries.createCodelistQuery(provider.getEndpoint(), codeList, agency, version).buildSdmx21Query(); } /** @@ -656,20 +234,32 @@ protected List> postProcess(DataParsingResult result) { return result; } - - private boolean isMaxRedirectionReached(int redirects) { - return redirects > maxRedirects; - } - - /** - * https://en.wikipedia.org/wiki/Downgrade_attack - * - * @param oldUrl - * @param newUrl - * @return - */ - private static boolean isDowngradingProtocolOnRedirect(URL oldUrl, URL newUrl) { - return "https".equalsIgnoreCase(oldUrl.getProtocol()) - && !"https".equalsIgnoreCase(newUrl.getProtocol()); + + public Map handleHttpHeaders(String acceptHeader) + { + Map headers = new HashMap<>(); + String lList = Configuration.getLanguages().stream() + .map(lr -> String.format(Locale.US, "%s;q=%.1f", lr.getRange(), lr.getWeight())) + .collect(joining(",")); + + headers.put("Accept-Language", lList); + if (containsCredentials) + { + LOGGER.fine("Setting http authorization"); + // https://stackoverflow.com/questions/1968416/how-to-do-http-authentication-in-android/1968873#1968873 + //String auth = Base64.encodeToString((user + ":" + pw).getBytes(), Base64.NO_WRAP); + String auth = java.util.Base64.getEncoder().encodeToString((user + ":" + pw).getBytes()); + headers.put("Authorization", "Basic " + auth); + } + + if (provider.isSupportsCompression()) + headers.put("Accept-Encoding", "gzip,deflate"); + + if (acceptHeader != null && !"".equals(acceptHeader)) + headers.put("Accept", acceptHeader); + else + headers.put("Accept", "*/*"); + headers.put("user-agent", "RJSDMX"); + return headers; } } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/SASClientHandler.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/SASClientHandler.java index 3c1f1ffc..19857474 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/SASClientHandler.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/SASClientHandler.java @@ -349,7 +349,7 @@ public static int makeGetTimeSeries(String provider, String tsKey, String startT obsmetadata = null; try { - List> result = SdmxClientHandler.getTimeSeries(provider, null, tsKey, null, startTime, endTime, false, null, false); + List> result = SdmxClientHandler.getTimeSeries(provider, tsKey, startTime, endTime, false, null, false); if (!result.isEmpty()) { // check size of full result as a table diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/SDMXClientFactory.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/SDMXClientFactory.java index c753492f..1db66973 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/SDMXClientFactory.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/SDMXClientFactory.java @@ -20,61 +20,47 @@ */ package it.bancaditalia.oss.sdmx.client; +import static it.bancaditalia.oss.sdmx.api.SDMXVersion.V2; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; import java.net.ProxySelector; import java.net.URI; import java.net.URISyntaxException; -import java.security.GeneralSecurityException; -import java.security.KeyStore; import java.util.NavigableMap; import java.util.TreeMap; import java.util.logging.Level; import java.util.logging.Logger; import it.bancaditalia.oss.sdmx.api.GenericSDMXClient; +import it.bancaditalia.oss.sdmx.api.SDMXVersion; import it.bancaditalia.oss.sdmx.exceptions.SdmxException; -import it.bancaditalia.oss.sdmx.exceptions.SdmxExceptionFactory; import it.bancaditalia.oss.sdmx.exceptions.SdmxInvalidParameterException; import it.bancaditalia.oss.sdmx.exceptions.SdmxUnknownProviderException; import it.bancaditalia.oss.sdmx.util.Configuration; import it.bancaditalia.oss.sdmx.util.SdmxProxySelector; /** - *

Java Factory class for creating the Sdmx Clients. + *

+ * Java Factory class for creating the Sdmx Clients. * * @author Attilio Mattiocco * */ -public class SDMXClientFactory { +public class SDMXClientFactory +{ - private static final String ECB_PROVIDER = "https://sdw-wsrest.ecb.europa.eu/service"; - private static final String ISTAT_PROVIDER_POP = "http://sdmx.istat.it/WS_CENSPOP/rest"; - private static final String ISTAT_RI_PROVIDER = "https://esploradati.istat.it/SDMXWS/rest"; - private static final String ISTAT_PROVIDER_AGR = "http://sdmx.istat.it/WS_CENSAGR/rest"; - private static final String ISTAT_PROVIDER_IND = "http://sdmx.istat.it/WS_CIS/rest"; - private static final String INSEE_PROVIDER = "https://bdm.insee.fr/series/sdmx"; - private static final String UNDATA_PROVIDER = "http://data.un.org/WS/rest"; - private static final String WITS_PROVIDER = "http://wits.worldbank.org/API/V1/SDMX/V21/rest"; - private static final String ILO_PROVIDER = "https://www.ilo.org/sdmx/rest"; - private static final String ABS_PROVIDER = "https://api.data.abs.gov.au"; - private static final String UNICEF_PROVIDER = "https://sdmx.data.unicef.org/ws/public/sdmxapi/rest"; - private static final String BIS_PROVIDER = "https://stats.bis.org/api/v1"; - public static final String SDMX_V2 = "SDMX_V2"; // 2.0 or 2.1 - public static final String SDMX_V3 = "SDMX_V3"; //new 3.0 - //read the configuration file - static { + // read the configuration file + static + { providers = new TreeMap<>(); logger = Configuration.getSdmxLogger(); - try { - initBuiltInProviders(); + try + { initExternalProviders(); - } catch (SdmxException e) { + } + catch (SdmxException e) + { e.printStackTrace(); } } @@ -83,279 +69,151 @@ public class SDMXClientFactory { protected static Logger logger; private static NavigableMap providers; - - /** - * Initialize the internal sdmx providers - * @throws SdmxException - * - */ - private static void initBuiltInProviders() throws SdmxException{ - addBuiltInProvider("ECB", ECB_PROVIDER, false, false, true, "European Central Bank", false, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("ISTAT_RI", ISTAT_RI_PROVIDER, false, false, false, "Italian National Institute of Statistics", false, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("ISTAT_CENSUS_POP", ISTAT_PROVIDER_POP, false, false, false, "ISTAT - Population and housing census 2011", false, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("ISTAT_CENSUS_AGR", ISTAT_PROVIDER_AGR, false, false, false, "ISTAT - Agricultural census 2010", false, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("ISTAT_CENSUS_IND", ISTAT_PROVIDER_IND, false, false, false, "ISTAT - Industry and services census 2011", false, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("INSEE", INSEE_PROVIDER, false, false, true, "National Institute of Statistics and Economic Studies", false, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("UNDATA", UNDATA_PROVIDER, false, false, false, "Data access system to UN databases", false, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("WITS", WITS_PROVIDER, false, false, false, "World Integrated Trade Solutions", false, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("ILO", ILO_PROVIDER, false, false, false, "International Labour Organization", false, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("ABS", ABS_PROVIDER, false, false, false, "Australian Bureau of Statistics - SDMX 2.1", false, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("UNICEF", UNICEF_PROVIDER, false, false, true, "UNICEF", false, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("BIS_PUBLIC", BIS_PROVIDER, false, false, true, "Bank for International Settlements", false, SDMXClientFactory.SDMX_V2); - - //add internal providers - addBuiltInProvider("ISTAT", null, false, false, false, "Italian National Institute of Statistics ", true, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("OECD", null, false, false, false, "The Organisation for Economic Co-operation and Development", true, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("StatsEE", null, false, false, false, "Statistics Estonia (BETA)", true, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("OECD_RESTR", null, true, false, false, "The Organisation for Economic Co-operation and Development, RESTRICTED ACCESS", true, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("IMF2", null, false, false, false, "New International Monetary Fund endpoint", true, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("NBB", null, false, false, false, "National Bank Belgium", true, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("WB", null, false, false, false, "World Bank - World Development Indicators", true, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("INEGI", null, false, false, false, "Instituto Nacional de Estadistica y Geografia", true, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("EUROSTAT", null, false, false, false, "Eurostat", true, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("EUROSTAT_COMEXT", null, false, false, false, "Eurostat - COMEXT", true, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("EUROSTAT_GROW", null, false, false, false, "Eurostat - DG GROW", true, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("EUROSTAT_COMP", null, false, false, false, "Eurostat - DG COMP", true, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("EUROSTAT_EMPL", null, false, false, false, "Eurostat - DG EMPL", true, SDMXClientFactory.SDMX_V2); - addBuiltInProvider("BBK", null, false, false, false, "Deutsche Bundesbank", true, SDMXClientFactory.SDMX_V2); - } - /** - * Initialize the sdmx providers from the configuration file - * @throws SdmxException - */ - private static void initExternalProviders() throws SdmxException{ - //external providers set in the configuration file - String external = Configuration.getExternalProviders(); - if(external != null && !external.isEmpty()){ - String[] ids = external.trim().split("\\s*,\\s*"); - for (int i = 0; i < ids.length; i++) { - addExternalProvider(ids[i]); - } - } - } - - /** - * General method for creating an SdmxClient. - * - * @param name The name of the provider to create. - * @param endpoint the {@link URI} of the provider to create. - * @param needsCredentials true if the provider needs authentication. - * @param needsURLEncoding true if the provider needs the URL to be encoded. - * @param supportsCompression true if the provider supports HTTP compression features. - * @param description The description of the provider - * @param isCustom true if the provider has an implementing class in the package it.bancaditalia.oss.sdmx.client.custom - * @param sdmxVersion the major version of the SDMX standard of this provider (SDMX_V2 or SDMX_V3) + * Initialize the sdmx providers from the configuration file * - * @throws SdmxException if there is an error creating the provider. + * @throws SdmxException */ - public static void addProvider(String name, URI endpoint, boolean needsCredentials, - boolean needsURLEncoding, boolean supportsCompression, String description, - boolean isCustom, String sdmxVersion) throws SdmxException{ - Provider p = new Provider(name, endpoint, null, needsCredentials, needsURLEncoding, supportsCompression, description, isCustom, sdmxVersion); - providers.put(name, p); + private static void initExternalProviders() throws SdmxException + { + // external providers set in the configuration file + String external = Configuration.getExternalProviders(); + if (external != null && !external.isEmpty()) + { + String[] ids = external.trim().split("\\s*,\\s*"); + for (int i = 0; i < ids.length; i++) + addExternalProvider(ids[i]); + } } /** - * General method for creating an SdmxClient. - * - * @param name The name of the provider to create. - * @param endpoint the {@link URI} of the provider to create. - * @param needsCredentials true if the provider needs authentication. - * @param needsURLEncoding true if the provider needs the URL to be encoded. - * @param supportsCompression true if the provider supports HTTP compression features. - * @param description The description of the provider - * @param isCustom true if the provider has an implementing class in the package it.bancaditalia.oss.sdmx.client.custom + * General method for creating an SdmxClient. + * + * @param name The name of the provider to create. + * @param endpoint the {@link URI} of the provider to create. + * @param needsCredentials true if the provider needs authentication. + * @param needsURLEncoding true if the provider needs the URL to be encoded. + * @param supportsCompression true if the provider supports HTTP compression + * features. + * @param description The description of the provider * - * @throws SdmxException if there is an error creating the provider. + * @throws SdmxException if there is an error creating the provider. */ - public static void addProvider(String name, URI endpoint, boolean needsCredentials, - boolean needsURLEncoding, boolean supportsCompression, String description, - boolean isCustom) throws SdmxException{ - Provider p = new Provider(name, endpoint, null, needsCredentials, needsURLEncoding, supportsCompression, description, isCustom, SDMX_V2); - providers.put(name, p); + public static void addProvider(String name, URI endpoint, boolean needsCredentials, boolean needsURLEncoding, boolean supportsCompression, String description) throws SdmxException + { + addProvider(name, endpoint, needsCredentials, needsURLEncoding, supportsCompression, description, V2); } /** - * General method for creating an SdmxClient. - * - * @param name The name of the provider to create. - * @param endpoint the {@link URI} of the provider to create. - * @param trustStore A truststore to use to connect to this provider. - * @param needsCredentials true if the provider needs authentication. - * @param needsURLEncoding true if the provider needs the URL to be encoded. - * @param supportsCompression true if the provider supports HTTP compression features. - * @param description The description of the provider - * @param isCustom true if the provider has an implementing class in the package it.bancaditalia.oss.sdmx.client.custom - * @param sdmxVersion the major version of the SDMX standard of this provider (SDMX_V2 or SDMX_V3) - * - * @throws SdmxException if there is an error creating the provider. - */ - public static void addProvider(String name, URI endpoint, KeyStore trustStore, boolean needsCredentials, - boolean needsURLEncoding, boolean supportsCompression, String description, - boolean isCustom, String sdmxVersion) throws SdmxException{ - Provider p = new Provider(name, endpoint, trustStore, needsCredentials, needsURLEncoding, supportsCompression, description, isCustom, sdmxVersion); - providers.put(name, p); - } - - /** * General method for creating an SdmxClient. * - * @param name The name of the provider to create. - * @param endpoint the {@link URI} of the provider to create. - * @param trustStore A truststore to use to connect to this provider. - * @param needsCredentials true if the provider needs authentication. - * @param needsURLEncoding true if the provider needs the URL to be encoded. - * @param supportsCompression true if the provider supports HTTP compression features. - * @param description The description of the provider - * @param isCustom true if the provider has an implementing class in the package it.bancaditalia.oss.sdmx.client.custom + * @param name The name of the provider to create. + * @param endpoint the {@link URI} of the provider to create. + * @param needsCredentials true if the provider needs authentication. + * @param needsURLEncoding true if the provider needs the URL to be encoded. + * @param supportsCompression true if the provider supports HTTP compression + * features. + * @param description The description of the provider + * @param sdmxVersion the major version of the SDMX standard of this + * provider (SDMX_V2 or SDMX_V3) * - * @throws SdmxException if there is an error creating the provider. + * @throws SdmxException if there is an error creating the provider. */ - public static void addProvider(String name, URI endpoint, KeyStore trustStore, boolean needsCredentials, - boolean needsURLEncoding, boolean supportsCompression, String description, - boolean isCustom) throws SdmxException{ - Provider p = new Provider(name, endpoint, trustStore, needsCredentials, needsURLEncoding, supportsCompression, description, isCustom, SDMX_V2); + public static void addProvider(String name, URI endpoint, boolean needsCredentials, boolean needsURLEncoding, boolean supportsCompression, String description, SDMXVersion sdmxVersion) throws SdmxException + { + Provider p = new Provider(name, endpoint, needsCredentials, needsURLEncoding, supportsCompression, description, sdmxVersion); providers.put(name, p); } /** - * Add a builtin provider and check whether the default values need to be overwritten with values defined in the configuration file. - * @throws SdmxException - */ - private static void addBuiltInProvider(final String name, final String endpoint, final Boolean needsCredentials, - final Boolean needsURLEncoding, final Boolean supportsCompression, final String description, - boolean isCustom, String sdmxVersion) throws SdmxException { - try { - final String providerName = Configuration.getConfiguration().getProperty("providers." + name + ".name", name); - final String providerEndpoint = Configuration.getConfiguration().getProperty("providers." + name + ".endpoint", endpoint); - final URI providerURL = null != providerEndpoint ? new URI(providerEndpoint) : null; - final boolean providerNeedsCredentials = Boolean.parseBoolean(Configuration.getConfiguration().getProperty("providers." + name + ".needsCredentials", needsCredentials.toString())); - final boolean providerNeedsURLEncoding = Boolean.parseBoolean(Configuration.getConfiguration().getProperty("providers." + name + ".needsURLEncoding", needsURLEncoding.toString())); - final boolean providerSupportsCompression = Boolean.parseBoolean(Configuration.getConfiguration().getProperty("providers." + name + ".supportsCompression", supportsCompression.toString())); - final String providerDescription = Configuration.getConfiguration().getProperty("providers." + name + ".description", description); - final String providerSdmxVersion = Configuration.getConfiguration().getProperty("providers." + name + ".sdmxversion", sdmxVersion.toString()); - addProvider(providerName, providerURL, null, providerNeedsCredentials, providerNeedsURLEncoding, providerSupportsCompression, providerDescription, isCustom, providerSdmxVersion); - } catch (URISyntaxException e) { - logger.log(Level.SEVERE, "Exception. Class: {0} .Message: {1}", new Object[]{e.getClass().getName(), e.getMessage()}); - logger.log(Level.FINER, "", e); + * Add a external provider and check whether the default values need to be + * overwritten with values defined in the configuration file. + * + * @throws SdmxException + */ + private static void addExternalProvider(final String id) throws SdmxException + { + try + { + final String providerName = Configuration.getProperty("providers." + id + ".name", id); + final String providerEndpoint = Configuration.getProperty("providers." + id + ".endpoint", (String) null); + if (providerEndpoint != null && !providerEndpoint.isEmpty()) + { + URI providerURL = new URI(providerEndpoint); + boolean providerNeedsCredentials = Configuration.getProperty("providers." + id + ".needsCredentials", false); + boolean providerNeedsURLEncoding = Configuration.getProperty("providers." + id + ".needsURLEncoding", false); + boolean providerSupportsCompression = Configuration.getProperty("providers." + id + ".supportsCompression", false); + String providerDescription = Configuration.getProperty("providers." + id + ".description", id); + SDMXVersion providerSdmxVersion = Configuration.getProperty("providers." + id + ".sdmxversion", V2); + addProvider(providerName, providerURL, providerNeedsCredentials, providerNeedsURLEncoding, providerSupportsCompression, providerDescription, providerSdmxVersion); + } + else + { + logger.warning("No URL has been configured for the external provider: '" + id + "'. It will be skipped."); + return; + } } - } - - /** - * Add a external provider and check whether the default values need to be overwritten with values defined in the configuration file. - * @throws SdmxException - */ - private static void addExternalProvider(final String id) throws SdmxException { - try { - final String providerName = Configuration.getConfiguration().getProperty("providers." + id + ".name", id); - final String providerEndpoint = Configuration.getConfiguration().getProperty("providers." + id + ".endpoint"); - if(providerEndpoint != null && !providerEndpoint.isEmpty()){ - final URI providerURL = new URI(providerEndpoint); - final boolean provdiderNeedsCredentials = Boolean.parseBoolean(Configuration.getConfiguration().getProperty("providers." + id + ".needsCredentials", "false")); - final boolean providerNeedsURLEncoding = Boolean.parseBoolean(Configuration.getConfiguration().getProperty("providers." + id + ".needsURLEncoding", "false")); - final boolean providerSupportsCompression = Boolean.parseBoolean(Configuration.getConfiguration().getProperty("providers." + id + ".supportsCompression", "false")); - final String providerDescription = Configuration.getConfiguration().getProperty("providers." + id + ".description", id); - final String providerSdmxVersion = Configuration.getConfiguration().getProperty("providers." + id + ".sdmxversion", SDMXClientFactory.SDMX_V2); - - String trustStoreLocation = Configuration.getConfiguration().getProperty("providers." + id + ".trustStore", ""); - KeyStore providerTrustStore = null; - if (!"".equals(trustStoreLocation)) - try { - InputStream trustStoreFile = new FileInputStream(new File(trustStoreLocation)); - providerTrustStore = KeyStore.getInstance(KeyStore.getDefaultType()); - providerTrustStore.load(trustStoreFile, "changeit".toCharArray()); - } catch (FileNotFoundException e) { - logger.warning("Cannot open trust store at " + trustStoreLocation); - } catch (GeneralSecurityException e) { - e.printStackTrace(); - } catch (IOException e) { - throw SdmxExceptionFactory.wrap(e); - } finally { - providerTrustStore = null; - } - - addProvider(providerName, providerURL, providerTrustStore, provdiderNeedsCredentials, providerNeedsURLEncoding, providerSupportsCompression, providerDescription, false, providerSdmxVersion); - } - else{ - logger.warning("No URL has been configured for the external provider: '" + id + "'. It will be skipped."); - return; - } - } catch (URISyntaxException e) { - logger.log(Level.SEVERE, "Exception. Class: {0} .Message: {1}", new Object[]{e.getClass().getName(), e.getMessage()}); - logger.log(Level.FINER, "", e); + catch (URISyntaxException e) + { + logger.log(Level.SEVERE, "Exception. Class: {0} .Message: {1}", new Object[] { e.getClass().getName(), e.getMessage() }); + logger.log(Level.FINER, "", e); } - } + } /** - * General method for creating an SdmxClient. - * - * @param providerName A non-null provider identification short name. + * General method for creating an SdmxClient. + * + * @param providerName A non-null provider identification short name. * @return The client. * @throws SdmxException if there is an error creating the client. */ - public static GenericSDMXClient createClient(String providerName) throws SdmxException { + public static GenericSDMXClient createClient(String providerName) throws SdmxException + { final String sourceMethod = "createClient"; logger.entering(sourceClass, sourceMethod); logger.fine("Create an SDMX client for '" + providerName + "'"); GenericSDMXClient client = null; Provider provider = providers.get(providerName); - if(provider == null){ + if (provider == null) throw new SdmxInvalidParameterException("The provider '" + providerName + "' is not available in this configuration."); - } - String hostname = null; - if(provider != null && !provider.isCustom()) + try { - hostname = provider.getEndpoint().getHost(); - if(provider.getEndpoint().getScheme().toLowerCase().startsWith("http")){ - if(provider.getSdmxVersion().trim().equalsIgnoreCase(SDMXClientFactory.SDMX_V2)){ - client = new RestSdmxClient(provider.getName(), provider.getEndpoint(), provider.getSSLSocketFactory(), provider.isNeedsCredentials(), provider.isNeedsURLEncoding(), provider.isSupportsCompression()); - } - else if(provider.getSdmxVersion().trim().equalsIgnoreCase(SDMXClientFactory.SDMX_V3)){ - client = new RestSdmx30Client(provider.getName(), provider.getEndpoint(), provider.getSSLSocketFactory(), provider.isNeedsCredentials(), provider.isNeedsURLEncoding(), provider.isSupportsCompression()); - } - else{ - throw new SdmxInvalidParameterException("The sdmx version '" + provider.getSdmxVersion() + "' is not supported."); + // Try to find a custom provider if an appropriate class exists + Class clazz = Class.forName("it.bancaditalia.oss.sdmx.client.custom." + providerName).asSubclass(GenericSDMXClient.class); + client = clazz.getConstructor(Provider.class).newInstance(provider); + } + catch (ClassNotFoundException e) + { + // No custom provider found, instantiate the generic SDMX client + if (provider.getEndpoint().getScheme().toLowerCase().startsWith("http")) + switch (provider.getSdmxVersion()) + { + case V2: client = new RestSdmxClient(provider); break; + case V3: client = new RestSdmx30Client(provider); break; + default: throw new SdmxInvalidParameterException("Unsupported SDMX REST API version: " + provider.getSdmxVersion()); } - } - else - { + else throw new SdmxInvalidParameterException("The protocol '" + provider.getEndpoint().getScheme() + "' is not supported."); - } } - else { - ///legacy 2.0 - try { - Class clazz = Class.forName("it.bancaditalia.oss.sdmx.client.custom." + providerName); - client = (GenericSDMXClient)clazz.newInstance(); - // apply customizations eventually added by user in configuration file - // for now only endpoint can be overridden - if (provider.getEndpoint() != null) - client.setEndpoint(provider.getEndpoint()); - - if (client.getEndpoint() != null) - hostname = client.getEndpoint().getHost(); - - client.setName(providerName); - } - catch (ClassNotFoundException e) { - logger.severe("The provider '" + providerName + "' is not available in this configuration."); - throw new SdmxUnknownProviderException(providerName, e); - } catch (IllegalAccessException e) { - logger.severe("The provider implementation it.bancaditalia.oss.sdmx.client.custom." + providerName + " does not define a default constructor."); - throw new SdmxUnknownProviderException(providerName, e); - } catch (InstantiationException e) { - logger.severe("Could not instantiate provider implementation it.bancaditalia.oss.sdmx.client.custom." + providerName); - throw new SdmxUnknownProviderException(providerName, e); - } + catch (NoSuchMethodException | IllegalAccessException e) + { + logger.severe("The provider implementation it.bancaditalia.oss.sdmx.client.custom." + providerName + " does not define a default constructor."); + throw new SdmxUnknownProviderException(providerName, e); + } + catch (InstantiationException | InvocationTargetException e) + { + logger.severe("Could not instantiate provider implementation it.bancaditalia.oss.sdmx.client.custom." + providerName); + throw new SdmxUnknownProviderException(providerName, e); } + + String hostname = provider.getEndpoint().getHost(); // now set default proxy if necessary - ProxySelector ps = ProxySelector.getDefault(); + ProxySelector ps = ProxySelector.getDefault(); if (hostname != null && ps != null && ps instanceof SdmxProxySelector) - ((SdmxProxySelector)ps).addToDefaultProxy(hostname); + ((SdmxProxySelector) ps).addToDefaultProxy(hostname); logger.exiting(sourceClass, sourceMethod); return client; @@ -363,9 +221,12 @@ else if(provider.getSdmxVersion().trim().equalsIgnoreCase(SDMXClientFactory.SDMX /** * Get the list of all available SDMX Providers - * @return A map of providers with keys as names and {@link Provider} instances as values. + * + * @return A map of providers with keys as names and {@link Provider} instances + * as values. */ - public static NavigableMap getProviders() { - return providers; - } + public static NavigableMap getProviders() + { + return providers; + } } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/SdmxClientHandler.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/SdmxClientHandler.java index 5f4b931b..57c1c461 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/SdmxClientHandler.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/SdmxClientHandler.java @@ -20,40 +20,22 @@ */ package it.bancaditalia.oss.sdmx.client; +import it.bancaditalia.oss.sdmx.api.*; +import it.bancaditalia.oss.sdmx.client.custom.RestSdmx20Client; +import it.bancaditalia.oss.sdmx.exceptions.*; +import it.bancaditalia.oss.sdmx.util.Configuration; +import it.bancaditalia.oss.sdmx.util.LoginDialog; + +import javax.swing.*; import java.io.File; import java.net.URI; import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; -import java.util.SortedMap; -import java.util.TreeMap; import java.util.logging.Logger; import java.util.stream.Collectors; -import javax.swing.JFrame; - -import it.bancaditalia.oss.sdmx.api.Codelist; -import it.bancaditalia.oss.sdmx.api.DataFlowStructure; -import it.bancaditalia.oss.sdmx.api.Dataflow; -import it.bancaditalia.oss.sdmx.api.Dimension; -import it.bancaditalia.oss.sdmx.api.GenericSDMXClient; -import it.bancaditalia.oss.sdmx.api.SDMXReference; -import it.bancaditalia.oss.sdmx.api.PortableDataSet; -import it.bancaditalia.oss.sdmx.api.PortableTimeSeries; -import it.bancaditalia.oss.sdmx.api.SdmxAttribute; -import it.bancaditalia.oss.sdmx.client.custom.RestSdmx20Client; -import it.bancaditalia.oss.sdmx.exceptions.DataStructureException; -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; -import it.bancaditalia.oss.sdmx.exceptions.SdmxInvalidParameterException; -import it.bancaditalia.oss.sdmx.exceptions.SdmxUnknownProviderException; -import it.bancaditalia.oss.sdmx.exceptions.SdmxXmlContentException; -import it.bancaditalia.oss.sdmx.util.Configuration; -import it.bancaditalia.oss.sdmx.util.LoginDialog; +import static it.bancaditalia.oss.sdmx.api.SDMXVersion.V2; /** *

@@ -118,44 +100,7 @@ public static void addLocalProvider(String provider, String endpoint, String des "The enpoint of the provider has to be an existing local directory"); } - SDMXClientFactory.addProvider(provider, epFile.toURI(), null, false, false, false, description, false); - } - - /** - * Adds a local provider - * - * @param provider a non-null, non-empty provider identification short name. - * @param endpoint a non-null provider-defined endpoint url for queries - * @param needsCredentials true if the provider needs authentication - * @param needsURLEncoding true if the url must be encoded - * @param supportsCompression true if the provider supports message compression - * @param description an optional natural language description of the provider - * - * @throws SdmxException - */ - public static void addProvider(String provider, String endpoint, boolean needsCredentials, boolean needsURLEncoding, - boolean supportsCompression, String description) throws SdmxException - { - - if (provider == null || provider.trim().isEmpty()) - { - LOGGER.severe("The name of the provider cannot be null"); - throw new SdmxInvalidParameterException("The name of the provider cannot be null"); - } - if (endpoint == null) - { - LOGGER.severe("The enpoint of the provider cannot be null"); - throw new SdmxInvalidParameterException("The endpoint of the provider cannot be null"); - } - try - { - SDMXClientFactory.addProvider(provider, new URI(endpoint), null, needsCredentials, needsURLEncoding, - supportsCompression, description, false); - } - catch (URISyntaxException e) - { - throw new SdmxInvalidParameterException(e.getMessage()); - } + SDMXClientFactory.addProvider(provider, epFile.toURI(), false, false, false, description, V2); } /** @@ -172,7 +117,7 @@ public static void addProvider(String provider, String endpoint, boolean needsCr * @throws SdmxException */ public static void addProvider(String provider, String endpoint, boolean needsCredentials, boolean needsURLEncoding, - boolean supportsCompression, String description, String sdmxVersion) throws SdmxException + boolean supportsCompression, String description, SDMXVersion sdmxVersion) throws SdmxException { if (provider == null || provider.trim().isEmpty()) @@ -187,8 +132,7 @@ public static void addProvider(String provider, String endpoint, boolean needsCr } try { - SDMXClientFactory.addProvider(provider, new URI(endpoint), null, needsCredentials, needsURLEncoding, - supportsCompression, description, false, sdmxVersion); + SDMXClientFactory.addProvider(provider, new URI(endpoint), needsCredentials, needsURLEncoding, supportsCompression, description, sdmxVersion); } catch (URISyntaxException e) { @@ -359,7 +303,7 @@ public static Map> filterCodes(String provider, Stri } - public static Integer getSeriesCount(String provider, String dataflow, String filter) throws SdmxException + public static Map getSeriesCount(String provider, String dataflow, String filter) throws SdmxException { if (provider == null || provider.trim().isEmpty()) { @@ -483,50 +427,66 @@ public static Map getFlowObjects(String provider, String patte return filterFlows(flows, pattern); } - public static PortableDataSet getTimeSeriesTable(String provider, String dataflow, String tsKey, String filter, + public static PortableDataSet getTimeSeriesTable(String provider, String tsKey, String startTime, String endTime, boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException, DataStructureException { - return new PortableDataSet<>(getTimeSeries(provider, dataflow, tsKey, filter, startTime, endTime, serieskeysonly, updatedAfter, includeHistory)); + return new PortableDataSet<>(getTimeSeries(provider, tsKey, startTime, endTime, serieskeysonly, updatedAfter, includeHistory)); } - //shortcut for v2 API - public static List> getTimeSeries(String provider, String tsKey, String startTime, String endTime) throws SdmxException + public static PortableDataSet getTimeSeriesTable2(String provider, String dataflow, String tsKey, String filter, + String startTime, String endTime, + String attributes, String measures, String updatedAfter, boolean includeHistory) + throws SdmxException, DataStructureException { - return getTimeSeries(provider, null, tsKey, null, startTime, endTime, false, null, false); + + PortableDataSet ds = new PortableDataSet<>(getTimeSeries2(provider, dataflow, tsKey, filter, startTime, endTime, attributes, measures, updatedAfter, includeHistory)); + ds.setDataflow(getFlow(provider, dataflow).getFullIdentifier()); + return(ds); } - //full featured, valid for v2 and v3 - public static List> getTimeSeries(String provider, String dataflow, String tsKey, String filter, + //valid for sdmx v2 + public static List> getTimeSeries(String provider, String tsKey, String startTime, String endTime, boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException { + + List> result = new ArrayList<>(); //SDMX 2.0 did not provide a way to specify multiple series keys + for (String keyId : tsKey.trim().split("\\s*;\\s*")) + result.addAll(getSingleTimeSeries(provider, keyId, startTime, endTime, + serieskeysonly, updatedAfter, includeHistory)); + return (result); + } + + //valid for sdmx v3 + public static List> getTimeSeries2(String provider, String dataflow, String tsKey, String filter, + String startTime, String endTime, + String attributes, String measures, String updatedAfter, boolean includeHistory) throws SdmxException + { if (provider == null || provider.trim().isEmpty()) { LOGGER.severe("The name of the provider cannot be null"); throw new SdmxInvalidParameterException("The name of the provider cannot be null"); } - if ((tsKey == null || tsKey.trim().isEmpty()) && (dataflow == null || dataflow.trim().isEmpty())) + if (dataflow == null || dataflow.trim().isEmpty()) { - LOGGER.severe("Either the ts key or the dataflow must have valid values"); - throw new SdmxInvalidParameterException("Either the ts key or the dataflow must have valid values"); + LOGGER.severe("The dataflow must have valid values"); + throw new SdmxInvalidParameterException("The dataflow must have valid values"); } - List> result = new ArrayList<>(); //SDMX 2.0 did not provide a way to specify multiple series keys - if(tsKey != null && !tsKey.isEmpty()){ - for (String keyId : tsKey.trim().split("\\s*;\\s*")) - result.addAll(getSingleTimeSeries(provider, dataflow, keyId, filter, startTime, endTime, - serieskeysonly, updatedAfter, includeHistory)); - } - else{ - result = getSingleTimeSeries(provider, dataflow, null, filter, startTime, endTime, - serieskeysonly, updatedAfter, includeHistory); - } + Dataflow df = getFlow(provider, dataflow); + DataFlowStructure dsd = getDataFlowStructure(provider, dataflow); + + List> result = getClient(provider).getTimeSeries(df, dsd, tsKey, filter, startTime, endTime, + attributes, measures, updatedAfter, includeHistory); + if (result == null || result.size() == 0) + throw new SdmxXmlContentException( + "The query: key=" + tsKey + " and filter=" + filter + " did not match any time series on the provider for dataflow: " + dataflow); return (result); } - private static List> getSingleTimeSeries(String provider, String dataflow, String tsKey, String filter, + private static List> getSingleTimeSeries(String provider, String tsKey, String startTime, String endTime, boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException { @@ -535,30 +495,28 @@ private static List> getSingleTimeSeries(String provi LOGGER.severe("The name of the provider cannot be null"); throw new SdmxInvalidParameterException("The name of the provider cannot be null"); } - if ((tsKey == null || tsKey.trim().isEmpty()) && (dataflow == null || dataflow.trim().isEmpty())) + if (tsKey == null || tsKey.trim().isEmpty()) { - LOGGER.severe("Either the ts key or the dataflow must have valid values"); - throw new SdmxInvalidParameterException("Either the ts key or the dataflow must have valid values"); + LOGGER.severe("The ts key must have valid values"); + throw new SdmxInvalidParameterException("The ts key must have valid values"); } List> result = null; - if(dataflow == null || dataflow.isEmpty()){ - String[] tokens = extractFlowAndResource(tsKey); - dataflow = tokens[0]; - tsKey = tokens[1]; - } + String[] tokens = extractFlowAndResource(tsKey); + String dataflow = tokens[0]; + tsKey = tokens[1]; Dataflow df = getFlow(provider, dataflow); DataFlowStructure dsd = getDataFlowStructure(provider, dataflow); - result = getClient(provider).getTimeSeries(df, dsd, tsKey, filter, startTime, endTime, serieskeysonly, updatedAfter, includeHistory); + result = getClient(provider).getTimeSeries(df, dsd, tsKey, startTime, endTime, serieskeysonly, updatedAfter, includeHistory); if (result == null || result.size() == 0) throw new SdmxXmlContentException( - "The query: key=" +tsKey + " and filter="+ filter + " did not match any time series on the provider for dataflow: " + dataflow); + "The query: key=" + tsKey + " did not match any time series on the provider for dataflow: " + dataflow); return result; } - public static String getDataURL(String provider, String tsKey, String start, String end, boolean seriesKeysOnly, + public static String getDataURL(String provider, String dataflow, String resource, String start, String end, boolean seriesKeysOnly, String updatedAfter, boolean includeHistory) throws SdmxException { if (provider == null || provider.trim().isEmpty()) @@ -566,17 +524,18 @@ public static String getDataURL(String provider, String tsKey, String start, Str LOGGER.severe("The name of the provider cannot be null"); throw new SdmxInvalidParameterException("The name of the provider cannot be null"); } - if (tsKey == null || tsKey.trim().isEmpty()) + if (dataflow == null || dataflow.trim().isEmpty()) { - LOGGER.severe("The tsKey cannot be null"); - throw new SdmxInvalidParameterException("The tsKey cannot be null"); + LOGGER.severe("The dataflow cannot be null"); + throw new SdmxInvalidParameterException("The dataflow cannot be null"); + } + if (resource == null || resource.trim().isEmpty()) + { + LOGGER.severe("The query cannot be null"); + throw new SdmxInvalidParameterException("The query cannot be null"); } - String[] tokens = extractFlowAndResource(tsKey); - String dataflow = tokens[0]; - String resource = tokens[1]; Dataflow df = getFlow(provider, dataflow); - String result = getClient(provider).buildDataURL(df, resource, start, end, seriesKeysOnly, updatedAfter, includeHistory); return (result); @@ -626,7 +585,7 @@ public static String dumpTimeSeriesList(List> ts) return result.toString(); } - public static String dumpTimeSeries(String provider, String dataflow, String id, String filter, String startTime, String endTime) + public static String dumpTimeSeries(String provider, String id, String startTime, String endTime) throws SdmxException, DataStructureException { if (provider == null || provider.trim().isEmpty()) @@ -647,13 +606,13 @@ public static String dumpTimeSeries(String provider, String dataflow, String id, if (!Configuration.isTable()) { // Do it as a list of time series - List> ts = getTimeSeries(provider, dataflow, id, filter, startTime, endTime, false, null, false); + List> ts = getTimeSeries(provider, id, startTime, endTime, false, null, false); result = dumpTimeSeriesList(ts); } else { // do it as a table - result = getTimeSeriesTable(provider, dataflow, id, filter, startTime, endTime, false, null, false).toString(); + result = getTimeSeriesTable(provider, id, startTime, endTime, false, null, false).toString(); } return result; } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/BBK.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/BBK.java index 7af2a44e..c8c57b6d 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/BBK.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/BBK.java @@ -20,8 +20,9 @@ */ package it.bancaditalia.oss.sdmx.client.custom; +import static it.bancaditalia.oss.sdmx.util.QueryRunner.runQuery; + import java.net.MalformedURLException; -import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.logging.Level; @@ -29,6 +30,7 @@ import it.bancaditalia.oss.sdmx.api.DataFlowStructure; import it.bancaditalia.oss.sdmx.api.Dataflow; import it.bancaditalia.oss.sdmx.api.Message; +import it.bancaditalia.oss.sdmx.client.Provider; import it.bancaditalia.oss.sdmx.client.RestSdmxClient; import it.bancaditalia.oss.sdmx.client.SdmxClientHandler; import it.bancaditalia.oss.sdmx.event.DataFooterMessageEvent; @@ -37,66 +39,80 @@ import it.bancaditalia.oss.sdmx.exceptions.SdmxInvalidParameterException; import it.bancaditalia.oss.sdmx.parser.v21.DataParsingResult; import it.bancaditalia.oss.sdmx.parser.v21.GenericDataParser; +import it.bancaditalia.oss.sdmx.util.QueryRunner; /** * @author Attilio Mattiocco * */ -public class BBK extends RestSdmxClient{ - private static final String BBK_PROVIDER = "https://api.statistiken.bundesbank.de/rest"; - - public BBK() throws URISyntaxException { - super("Eurostat", new URI(BBK_PROVIDER), false, false, false); +public class BBK extends RestSdmxClient +{ + public BBK(Provider p) throws URISyntaxException + { + super(p); } @Override - protected URL buildFlowQuery(String dataflow, String agency, String version) throws SdmxException{ - try { - return new URL(endpoint + "/metadata/dataflow/BBK" + (dataflow.equalsIgnoreCase("all") ? "" : ("/" + dataflow))); - } catch (MalformedURLException e) { - throw new SdmxInvalidParameterException("Invalid query parameters: dataflow: " + dataflow + ", endpoint=" + endpoint); + protected URL buildFlowQuery(String dataflow, String agency, String version) throws SdmxException + { + try + { + return new URL(provider.getEndpoint() + "/metadata/dataflow/BBK" + (dataflow.equalsIgnoreCase("all") ? "" : ("/" + dataflow))); + } + catch (MalformedURLException e) + { + throw new SdmxInvalidParameterException("Invalid query parameters: dataflow: " + dataflow + ", endpoint=" + provider.getEndpoint()); } } @Override - protected URL buildDSDQuery(String dsd, String agency, String version, boolean full) throws SdmxException { - try { - return new URL(endpoint + "/metadata/datastructure/BBK" + (dsd.equalsIgnoreCase("all") ? "" : ("/" + dsd)) + "?references=children"); - } catch (MalformedURLException e) { - throw new SdmxInvalidParameterException("Invalid query parameters: dsd: " + dsd + ", endpoint=" + endpoint); + protected URL buildDSDQuery(String dsd, String agency, String version, boolean full) throws SdmxException + { + try + { + return new URL(provider.getEndpoint() + "/metadata/datastructure/BBK" + (dsd.equalsIgnoreCase("all") ? "" : ("/" + dsd)) + "?references=children"); + } + catch (MalformedURLException e) + { + throw new SdmxInvalidParameterException("Invalid query parameters: dsd: " + dsd + ", endpoint=" + provider.getEndpoint()); } } - + @Override protected URL buildCodelistQuery(String codeList, String agency, String version) throws SdmxException { - try { - return new URL(endpoint + "/metadata/codelist/BBK" + (codeList.equalsIgnoreCase("all") ? "" : ("/" + codeList))); - } catch (MalformedURLException e) { - throw new SdmxInvalidParameterException("Invalid query parameters: codelist: " + codeList + ", endpoint=" + endpoint); + try + { + return new URL(provider.getEndpoint() + "/metadata/codelist/BBK" + (codeList.equalsIgnoreCase("all") ? "" : ("/" + codeList))); + } + catch (MalformedURLException e) + { + throw new SdmxInvalidParameterException("Invalid query parameters: codelist: " + codeList + ", endpoint=" + provider.getEndpoint()); } } - + @Override - protected DataParsingResult getData(Dataflow dataflow, DataFlowStructure dsd, String resource, String startTime, String endTime, boolean serieskeysonly, - String updatedAfter, boolean includeHistory) throws SdmxException + protected DataParsingResult getData(Dataflow dataflow, DataFlowStructure dsd, String resource, String startTime, String endTime, boolean serieskeysonly, String updatedAfter, + boolean includeHistory) throws SdmxException { URL query = buildDataQuery(new Dataflow(dataflow.getId(), null, null, null), resource, startTime, endTime, false, null, false); - DataParsingResult ts = runQuery(new GenericDataParser(dsd, dataflow, !serieskeysonly), query, - "application/xml", null); + DataParsingResult ts = runQuery(new GenericDataParser(dsd, dataflow, !serieskeysonly), query, handleHttpHeaders("application/xml")); Message msg = ts.getMessage(); if (msg != null) { LOGGER.log(Level.INFO, "The sdmx call returned messages in the footer:\n {0}", msg); RestSdmxEvent event = new DataFooterMessageEvent(query, msg); - dataFooterMessageEventListener.onSdmxEvent(event); + QueryRunner.getDataFooterMessageEventListener().onSdmxEvent(event); } return ts; } - - public static void main(String[] args) throws SdmxException { + + public static void main(String[] args) throws SdmxException + { System.err.println(SdmxClientHandler.getDataFlowStructure("BBK", "BBAI3")); - //System.err.println(SdmxClientHandler.getCodes("BBK", "BBAI3", "BBK_STD_FREQ")); - //System.err.println(SdmxClientHandler.getTimeSeries("BBK", "BBAI3/Q............", null,null)); + // System.err.println(SdmxClientHandler.getCodes("BBK", "BBAI3", + // "BBK_STD_FREQ")); + // System.err.println(SdmxClientHandler.getTimeSeries("BBK", + // "BBAI3/Q............", null,null)); } } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/DotStat.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/DotStat.java index 82df16b9..f857c68f 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/DotStat.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/DotStat.java @@ -20,8 +20,9 @@ */ package it.bancaditalia.oss.sdmx.client.custom; +import static it.bancaditalia.oss.sdmx.util.QueryRunner.runQuery; + import java.net.MalformedURLException; -import java.net.URI; import java.net.URL; import java.util.HashMap; import java.util.Iterator; @@ -31,8 +32,10 @@ import it.bancaditalia.oss.sdmx.api.DataFlowStructure; import it.bancaditalia.oss.sdmx.api.Dataflow; +import it.bancaditalia.oss.sdmx.client.Provider; import it.bancaditalia.oss.sdmx.exceptions.SdmxException; import it.bancaditalia.oss.sdmx.exceptions.SdmxExceptionFactory; +import it.bancaditalia.oss.sdmx.exceptions.SdmxInvalidParameterException; import it.bancaditalia.oss.sdmx.exceptions.SdmxXmlContentException; import it.bancaditalia.oss.sdmx.parser.v20.DataStructureParser; import it.bancaditalia.oss.sdmx.parser.v21.Sdmx21Queries; @@ -43,24 +46,28 @@ * @author Attilio Mattiocco * */ -public abstract class DotStat extends RestSdmx20Client { - +public abstract class DotStat extends RestSdmx20Client +{ + protected static Logger logger = Configuration.getSdmxLogger(); - - public DotStat(String name, URI endpoint, boolean needsCredentials, String format) { - super(name, endpoint, needsCredentials, null, format); - } - public DotStat(String name, URI endpoint, boolean needsCredentials) { - super(name, endpoint, needsCredentials, null, "compact_v2"); + + public DotStat(Provider p, String format) + { + super(p, null, format); } + public DotStat(Provider p) + { + this(p, "compact_v2"); + } @Override - public Dataflow getDataflow(String dataflow, String agency, String version) throws SdmxException { + public Dataflow getDataflow(String dataflow, String agency, String version) throws SdmxException + { // OECD (and .Stat infrastructure) does not handle flows. We simulate it - URL query = buildFlowQuery(dataflow, ALL_AGENCIES, LATEST_VERSION ); - List dsds = runQuery(new DataStructureParser(), query, null, null); - if(dsds.size() > 0) + URL query = buildFlowQuery(dataflow, ALL_KEYWORD, LATEST_VERSION); + List dsds = runQuery(new DataStructureParser(), query, null); + if (dsds.size() > 0) { DataFlowStructure dsd = dsds.get(0); Dataflow result = new Dataflow(dsd, dsd.getName()); @@ -72,65 +79,66 @@ public Dataflow getDataflow(String dataflow, String agency, String version) thro } @Override - public Map getDataflows() throws SdmxException { + public Map getDataflows() throws SdmxException + { // OECD (and .Stat infrastructure) does not handle flows. We simulate it - URL query = buildFlowQuery("ALL", ALL_AGENCIES, LATEST_VERSION ); - List dsds = runQuery(new DataStructureParser(), query, null, null); - if(dsds.size() > 0) + URL query = buildFlowQuery("ALL", ALL_KEYWORD, LATEST_VERSION); + List dsds = runQuery(new DataStructureParser(), query, null); + if (dsds.size() > 0) { Map result = new HashMap<>(); - for (Iterator iterator = dsds.iterator(); iterator.hasNext();) + for (Iterator iterator = dsds.iterator(); iterator.hasNext();) { DataFlowStructure dsd = (DataFlowStructure) iterator.next(); Dataflow df = new Dataflow(dsd, dsd.getName()); df.setDsdIdentifier(dsd); result.put(dsd.getId(), df); } - + return result; } else throw new SdmxXmlContentException("The query returned zero dataflows"); } - + @Override - protected URL buildFlowQuery(String flow, String agency, String version) throws SdmxException{ - return(buildDSDQuery(flow, agency, version, false)); + protected URL buildFlowQuery(String flow, String agency, String version) throws SdmxException + { + return (buildDSDQuery(flow, agency, version, false)); } - @Override - protected URL buildDSDQuery(String dsd, String agency, String version, boolean full) throws SdmxException{ - if( endpoint!=null && dsd!=null && !dsd.isEmpty()){ - try { - return new RestQueryBuilder(endpoint).addPath("GetDataStructure").addPath(dsd).build(); - } catch (MalformedURLException e) { + protected URL buildDSDQuery(String dsd, String agency, String version, boolean full) throws SdmxException + { + if (provider.getEndpoint() != null && dsd != null && !dsd.isEmpty()) + { + try + { + return new RestQueryBuilder(provider.getEndpoint()).addPath("GetDataStructure").addPath(dsd).build(); + } + catch (MalformedURLException e) + { throw SdmxExceptionFactory.wrap(e); } } - else{ - throw new RuntimeException("Invalid query parameters: dsd=" + dsd + " endpoint=" + endpoint); - } + else + throw new SdmxInvalidParameterException("Invalid query parameters: dsd=" + dsd + " endpoint=" + provider.getEndpoint()); } @Override - protected URL buildDataQuery(Dataflow dataflow, String resource, - String startTime, String endTime, - boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException{ - if( endpoint!=null && - dataflow!=null && - resource!=null && !resource.isEmpty()){ - + protected URL buildDataQuery(Dataflow dataflow, String resource, String startTime, String endTime, boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException + { + if (provider.getEndpoint() != null && dataflow != null && resource != null && !resource.isEmpty()) + { + // for OECD use the simple DF id - Sdmx21Queries query = (Sdmx21Queries) new Sdmx21Queries(endpoint).addPath("GetData").addPath(dataflow.getId()).addPath(resource); - - //query=query+"?"; - //query += "&format=compact_v2"; - return query.addParams(startTime, endTime, - serieskeysonly, updatedAfter, includeHistory, format).buildSdmx21Query(); - } - else{ - throw new RuntimeException("Invalid query parameters: dataflow=" + dataflow + " resource=" + resource + " endpoint=" + endpoint); + Sdmx21Queries query = (Sdmx21Queries) new Sdmx21Queries(provider.getEndpoint()).addPath("GetData").addPath(dataflow.getId()).addPath(resource); + + // query=query+"?"; + // query += "&format=compact_v2"; + return query.addParams(startTime, endTime, serieskeysonly, updatedAfter, includeHistory, format).buildSdmx21Query(); } + else + throw new SdmxInvalidParameterException("Invalid query parameters: dataflow=" + dataflow + " resource=" + resource + " endpoint=" + provider.getEndpoint()); } } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT.java deleted file mode 100644 index 66162758..00000000 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT.java +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client.custom; - -import static java.net.HttpURLConnection.HTTP_ENTITY_TOO_LARGE; - -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.List; - -import it.bancaditalia.oss.sdmx.api.DataFlowStructure; -import it.bancaditalia.oss.sdmx.api.Dataflow; -import it.bancaditalia.oss.sdmx.api.Message; -import it.bancaditalia.oss.sdmx.api.PortableTimeSeries; -import it.bancaditalia.oss.sdmx.client.Parser; -import it.bancaditalia.oss.sdmx.client.RestSdmxClient; -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; -import it.bancaditalia.oss.sdmx.exceptions.SdmxResponseException; -import it.bancaditalia.oss.sdmx.exceptions.SdmxXmlContentException; -import it.bancaditalia.oss.sdmx.parser.v21.CompactDataParser; -import it.bancaditalia.oss.sdmx.parser.v21.DataParsingResult; -import it.bancaditalia.oss.sdmx.util.Configuration; - -/** - * @author Attilio Mattiocco - * - */ -public class EUROSTAT extends RestSdmxClient -{ - private static final String EUROSTAT_PROVIDER = "https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1"; - private static final String ASYNC_DELIVERY_CODE = String.valueOf(HTTP_ENTITY_TOO_LARGE); - - private int sleepTime = 6000; - private int retries = Integer.parseInt(Configuration.getLateResponseRetries(10)); - - - public EUROSTAT() throws URISyntaxException - { - super("Eurostat", new URI(EUROSTAT_PROVIDER), false, false, false); - } - - @Override - public List> getTimeSeries(Dataflow dataflow, DataFlowStructure dsd, String resource, String startTime, - String endTime, boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException - { - DataParsingResult ts = getData(dataflow, dsd, resource, startTime, endTime, serieskeysonly, updatedAfter, includeHistory); - if(ts == null || ts.size() == 0) - { - Message msg = ts.getMessage(); - - if(isAsyncDelivery(msg)) - { - String url = msg.getUrl(); - Parser parser = new CompactDataParser(dsd, dataflow, !serieskeysonly); - - for(int i = 1; i <= retries; i++) - { - LOGGER.info("Trying late retrieval with URL: " + url + ". Attempt n: " + i); - try - { - Thread.sleep(sleepTime); - } - catch (InterruptedException e1) - { - Thread.currentThread().interrupt(); - } - - try - { - String dumpName = "data_" + dataflow.getId() + "_" + resource; //.replaceAll("\\p{Punct}", "_"); - return postProcess(runQuery(parser, new URL(msg.getUrl()), null, dumpName)); - } - catch (MalformedURLException | SdmxResponseException e) - { - LOGGER.info("Late retrieval attempt " + i + " failed with exception " + e.getClass().getSimpleName() + ": " + e.getMessage()); - } - } - } - } - else - return postProcess(ts); - - throw new SdmxXmlContentException("Late retrieval failed."); - } - - // http://ec.europa.eu/eurostat/en/web/sdmx-web-services/a-few-useful-points - private static boolean isAsyncDelivery(Message msg) - { - return msg != null && ASYNC_DELIVERY_CODE.equals(msg.getCode()) && msg.getUrl() != null; - } -} diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT_COMEXT.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT_COMEXT.java deleted file mode 100644 index 4836f25b..00000000 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT_COMEXT.java +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client.custom; - -import java.net.URI; -import java.net.URISyntaxException; - -import it.bancaditalia.oss.sdmx.client.RestSdmxClient; - -/** - * @author Attilio Mattiocco - * - */ -public class EUROSTAT_COMEXT extends RestSdmxClient{ - private static final String EUROSTAT_COMEXT_PROVIDER = "https://ec.europa.eu/eurostat/api/comext/dissemination/sdmx/2.1"; - - public EUROSTAT_COMEXT() throws URISyntaxException { - super("Eurostat", new URI(EUROSTAT_COMEXT_PROVIDER), false, false, false); - } -} diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT_COMP.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT_COMP.java deleted file mode 100644 index fbd7ac5b..00000000 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT_COMP.java +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client.custom; - -import java.net.URI; -import java.net.URISyntaxException; - -import it.bancaditalia.oss.sdmx.client.RestSdmxClient; - -/** - * @author Attilio Mattiocco - * - */ -public class EUROSTAT_COMP extends RestSdmxClient{ - private static final String EUROSTAT_COMP_PROVIDER = "https://webgate.ec.europa.eu/comp/redisstat/api/dissemination/sdmx/2.1"; - - public EUROSTAT_COMP() throws URISyntaxException { - super("Eurostat", new URI(EUROSTAT_COMP_PROVIDER), false, false, false); - } -} diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT_EMPL.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT_EMPL.java deleted file mode 100644 index 434849cf..00000000 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT_EMPL.java +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client.custom; - -import java.net.URI; -import java.net.URISyntaxException; - -import it.bancaditalia.oss.sdmx.client.RestSdmxClient; - -/** - * @author Attilio Mattiocco - * - */ -public class EUROSTAT_EMPL extends RestSdmxClient{ - private static final String EUROSTAT_EMPL_PROVIDER = "https://webgate.ec.europa.eu/empl/redisstat/api/dissemination/sdmx/2.1"; - - public EUROSTAT_EMPL() throws URISyntaxException { - super("Eurostat", new URI(EUROSTAT_EMPL_PROVIDER), false, false, false); - } -} diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/IMF2.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/IMF2.java index aeb8e459..6a5c490f 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/IMF2.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/IMF2.java @@ -21,14 +21,15 @@ package it.bancaditalia.oss.sdmx.client.custom; import java.net.MalformedURLException; -import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.logging.Logger; import it.bancaditalia.oss.sdmx.api.Dataflow; +import it.bancaditalia.oss.sdmx.client.Provider; import it.bancaditalia.oss.sdmx.exceptions.SdmxException; import it.bancaditalia.oss.sdmx.exceptions.SdmxExceptionFactory; +import it.bancaditalia.oss.sdmx.exceptions.SdmxInvalidParameterException; import it.bancaditalia.oss.sdmx.parser.v21.Sdmx21Queries; import it.bancaditalia.oss.sdmx.util.Configuration; import it.bancaditalia.oss.sdmx.util.RestQueryBuilder; @@ -37,59 +38,72 @@ * @author Attilio Mattiocco * */ -public class IMF2 extends RestSdmx20Client{ - +public class IMF2 extends RestSdmx20Client +{ + protected static Logger logger = Configuration.getSdmxLogger(); - - public IMF2() throws URISyntaxException { - super("IMF2", new URI("http://dataservices.imf.org/REST/SDMX_XML.svc"), false, "", null); + + public IMF2(Provider p) throws URISyntaxException + { + super(p, "", null); } - + @Override - protected URL buildFlowQuery(String flow, String agency, String version) throws SdmxException{ - if( endpoint!=null){ - try { - return new RestQueryBuilder(endpoint).addPath("Dataflow").build(); - } catch (MalformedURLException e) { + protected URL buildFlowQuery(String flow, String agency, String version) throws SdmxException + { + if (provider.getEndpoint() != null) + { + try + { + return new RestQueryBuilder(provider.getEndpoint()).addPath("Dataflow").build(); + } + catch (MalformedURLException e) + { throw SdmxExceptionFactory.wrap(e); } // if(flow != null && !flow.isEmpty() && !flow.equalsIgnoreCase("ALL")){ // query += "/" + flow; // } } - else{ - throw new RuntimeException("Invalid query parameters: endpoint=" + endpoint); + else + { + throw new SdmxInvalidParameterException("Invalid query parameters: endpoint=" + provider.getEndpoint()); } } - + @Override - protected URL buildDSDQuery(String dsd, String agency, String version, boolean full) throws SdmxException{ - if( endpoint!=null && dsd!=null && !dsd.isEmpty()){ - - try { - return new RestQueryBuilder(endpoint).addPath("DataStructure").addPath(dsd).build(); - } catch (MalformedURLException e) { + protected URL buildDSDQuery(String dsd, String agency, String version, boolean full) throws SdmxException + { + if (provider.getEndpoint() != null && dsd != null && !dsd.isEmpty()) + { + + try + { + return new RestQueryBuilder(provider.getEndpoint()).addPath("DataStructure").addPath(dsd).build(); + } + catch (MalformedURLException e) + { throw SdmxExceptionFactory.wrap(e); } } - else{ - throw new RuntimeException("Invalid query parameters: dsd=" + dsd + " endpoint=" + endpoint); + else + { + throw new SdmxInvalidParameterException("Invalid query parameters: dsd=" + dsd + " endpoint=" + provider.getEndpoint()); } } - + @Override - protected URL buildDataQuery(Dataflow dataflow, String resource, - String startTime, String endTime, - boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException{ - if( endpoint!=null && - dataflow!=null && - resource!=null && !resource.isEmpty()){ - - return ((Sdmx21Queries) new Sdmx21Queries(endpoint).addPath("CompactData").addPath(dataflow.getDsdIdentifier().getId()).addPath(resource)).addParams(startTime, endTime, - serieskeysonly, updatedAfter, includeHistory, format).buildSdmx21Query(); + protected URL buildDataQuery(Dataflow dataflow, String resource, String startTime, String endTime, boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException + { + if (provider.getEndpoint() != null && dataflow != null && resource != null && !resource.isEmpty()) + { + + return ((Sdmx21Queries) new Sdmx21Queries(provider.getEndpoint()).addPath("CompactData").addPath(dataflow.getDsdIdentifier().getId()).addPath(resource)) + .addParams(startTime, endTime, serieskeysonly, updatedAfter, includeHistory, format).buildSdmx21Query(); } - else{ - throw new RuntimeException("Invalid query parameters: dataflow=" + dataflow + " resource=" + resource + " endpoint=" + endpoint); + else + { + throw new RuntimeException("Invalid query parameters: dataflow=" + dataflow + " resource=" + resource + " endpoint=" + provider.getEndpoint()); } } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/INEGI.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/INEGI.java index aa92c6c4..6d8246e6 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/INEGI.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/INEGI.java @@ -20,27 +20,51 @@ */ package it.bancaditalia.oss.sdmx.client.custom; -import java.net.URI; +import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; import it.bancaditalia.oss.sdmx.api.Dataflow; +import it.bancaditalia.oss.sdmx.client.Provider; import it.bancaditalia.oss.sdmx.client.RestSdmxClient; import it.bancaditalia.oss.sdmx.exceptions.SdmxException; +import it.bancaditalia.oss.sdmx.exceptions.SdmxExceptionFactory; +import it.bancaditalia.oss.sdmx.exceptions.SdmxInvalidParameterException; +import it.bancaditalia.oss.sdmx.util.RestQueryBuilder; /** * @author Attilio Mattiocco * */ -public class INEGI extends RestSdmxClient{ - public INEGI() throws URISyntaxException { - super("INEGI", new URI("http://sdmx.snieg.mx/service/Rest"), false, false, true); +public class INEGI extends RestSdmxClient +{ + public INEGI(Provider p) throws URISyntaxException + { + super(p); } @Override - protected URL buildDataQuery(Dataflow dataflow, String resource, String startTime, String endTime, - boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException { + protected URL buildDataQuery(Dataflow dataflow, String resource, String startTime, String endTime, boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException + { // TODO Auto-generated method stub return super.buildDataQuery(dataflow, resource + "/", startTime, endTime, serieskeysonly, updatedAfter, includeHistory); } + + @Override + protected URL buildDSDQuery(String dsd, String agency, String version, boolean full) throws SdmxException + { + if (provider.getEndpoint() != null && dsd != null && !dsd.isEmpty()) + { + try + { + return new RestQueryBuilder(provider.getEndpoint()).addPath("DataStructure").addPath(agency).addPath(dsd).addPath(version).build(); + } + catch (MalformedURLException e) + { + throw SdmxExceptionFactory.wrap(e); + } + } + else + throw new SdmxInvalidParameterException("Invalid query parameters: dsd=" + dsd + " endpoint=" + provider.getEndpoint()); + } } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/ISTAT.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/ISTAT.java index 69ff7122..ba0b273f 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/ISTAT.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/ISTAT.java @@ -1,28 +1,27 @@ package it.bancaditalia.oss.sdmx.client.custom; -import java.net.URI; import java.net.URISyntaxException; import java.util.Collections; import java.util.List; import it.bancaditalia.oss.sdmx.api.PortableTimeSeries; +import it.bancaditalia.oss.sdmx.client.Provider; import it.bancaditalia.oss.sdmx.client.RestSdmxClient; import it.bancaditalia.oss.sdmx.parser.v21.DataParsingResult; public class ISTAT extends RestSdmxClient { - - public ISTAT() throws URISyntaxException + public ISTAT(Provider p) throws URISyntaxException { - super("ISTAT", new URI("http://sdmx.istat.it/SDMXWS/rest"), false, false, false); + super(p); } @Override protected List> postProcess(DataParsingResult result) { - for (PortableTimeSeries ts: result) + for (PortableTimeSeries ts : result) Collections.sort(ts); - + return result; } } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/NBB.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/NBB.java index fd1712f6..d54fda24 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/NBB.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/NBB.java @@ -20,27 +20,28 @@ */ package it.bancaditalia.oss.sdmx.client.custom; -import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import it.bancaditalia.oss.sdmx.api.Dataflow; +import it.bancaditalia.oss.sdmx.client.Provider; import it.bancaditalia.oss.sdmx.exceptions.SdmxException; /** * @author Attilio Mattiocco * */ -public class NBB extends DotStat{ - - public NBB() throws URISyntaxException { - super("NBB", new URI("https://stat.nbb.be/RestSDMX/sdmx.ashx"), false); +public class NBB extends DotStat +{ + + public NBB(Provider p) throws URISyntaxException + { + super(p); } - + @Override - protected URL buildDataQuery(Dataflow dataflow, String resource, - String startTime, String endTime, boolean serieskeysonly, - String updatedAfter, boolean includeHistory) throws SdmxException{ + protected URL buildDataQuery(Dataflow dataflow, String resource, String startTime, String endTime, boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException + { return super.buildDataQuery(dataflow, resource + "/all", startTime, endTime, serieskeysonly, null, false); } } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/OECD.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/OECD.java index 5b285196..228f57aa 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/OECD.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/OECD.java @@ -20,16 +20,19 @@ */ package it.bancaditalia.oss.sdmx.client.custom; -import java.net.URI; import java.net.URISyntaxException; +import it.bancaditalia.oss.sdmx.client.Provider; + /** * @author Attilio Mattiocco * */ -public class OECD extends DotStat{ - - public OECD() throws URISyntaxException { - super("OECD", new URI("https://stats.oecd.org/restsdmx/sdmx.ashx"), false); +public class OECD extends DotStat +{ + + public OECD(Provider p) throws URISyntaxException + { + super(p); } } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/OECD_RESTR.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/OECD_RESTR.java index 484ddf14..b866e656 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/OECD_RESTR.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/OECD_RESTR.java @@ -20,16 +20,18 @@ */ package it.bancaditalia.oss.sdmx.client.custom; -import java.net.URI; import java.net.URISyntaxException; +import it.bancaditalia.oss.sdmx.client.Provider; + /** * @author Attilio Mattiocco * */ -public class OECD_RESTR extends DotStat{ - - public OECD_RESTR() throws URISyntaxException { - super("OECD_RESTR", new URI("https://stats.oecd.org/restsdmx/sdmx.ashx/"), true); +public class OECD_RESTR extends DotStat +{ + public OECD_RESTR(Provider p) throws URISyntaxException + { + super(p); } } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/RestSdmx20Client.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/RestSdmx20Client.java index 4dda097e..36dcdcd3 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/RestSdmx20Client.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/RestSdmx20Client.java @@ -20,9 +20,9 @@ */ package it.bancaditalia.oss.sdmx.client.custom; -import java.net.URI; +import static it.bancaditalia.oss.sdmx.util.QueryRunner.runQuery; + import java.net.URL; -import java.security.InvalidParameterException; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -32,6 +32,7 @@ import it.bancaditalia.oss.sdmx.api.DataFlowStructure; import it.bancaditalia.oss.sdmx.api.Dataflow; import it.bancaditalia.oss.sdmx.api.SDMXReference; +import it.bancaditalia.oss.sdmx.client.Provider; import it.bancaditalia.oss.sdmx.client.RestSdmxClient; import it.bancaditalia.oss.sdmx.exceptions.SdmxException; import it.bancaditalia.oss.sdmx.exceptions.SdmxInvalidParameterException; @@ -48,9 +49,9 @@ public abstract class RestSdmx20Client extends RestSdmxClient private String acceptHdr = null; protected String format = "compact_v2"; - public RestSdmx20Client(String name, URI endpoint, boolean needsCredentials, String acceptHdr, String format) + public RestSdmx20Client(Provider p, String acceptHdr, String format) { - super(name, endpoint, needsCredentials, false, false); + super(p); this.acceptHdr = acceptHdr; this.format = format; } @@ -60,7 +61,7 @@ public Map getDataflows() throws SdmxException { URL query = buildFlowQuery("ALL", null, null); - List dfs = runQuery(new DataflowParser(), query, null, null); + List dfs = runQuery(new DataflowParser(), query, null); if (dfs.size() > 0) { Map result = new HashMap<>(); @@ -79,7 +80,7 @@ public Map getDataflows() throws SdmxException public Dataflow getDataflow(String dataflow, String agency, String version) throws SdmxException { URL query = buildFlowQuery(dataflow, agency, version); - List flows = runQuery(new DataflowParser(), query, null, null); + List flows = runQuery(new DataflowParser(), query, null); if (flows.size() >= 1) for (Dataflow item : flows) if (item.getId().equalsIgnoreCase(dataflow)) @@ -94,10 +95,10 @@ public DataFlowStructure getDataFlowStructure(SDMXReference dsd, boolean full) t if (dsd != null) { URL query = buildDSDQuery(dsd.getId(), dsd.getAgency(), dsd.getVersion(), full); - return runQuery(new DataStructureParser(), query, null, null).get(0); + return runQuery(new DataStructureParser(), query, null).get(0); } else - throw new InvalidParameterException("Null dsd in input"); + throw new SdmxInvalidParameterException("Null dsd in input"); } @Override @@ -113,23 +114,23 @@ protected DataParsingResult getData(Dataflow dataflow, DataFlowStructure dsd, St URL query = buildDataQuery(dataflow, resource, startTime, endTime, serieskeysonly, updatedAfter, includeHistory); // 20/09/2017: GenericDataParser deleted return runQuery(/* format != null ? */new CompactDataParser(dsd, dataflow, !serieskeysonly) - /* : new GenericDataParser(dsd, dataflow, !serieskeysonly) */, query, acceptHdr, null); + /* : new GenericDataParser(dsd, dataflow, !serieskeysonly) */, query, handleHttpHeaders(acceptHdr)); } @Override protected URL buildDataQuery(Dataflow dataflow, String resource, String startTime, String endTime, boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException { - if (endpoint != null && dataflow != null && resource != null && !resource.isEmpty()) + if (provider.getEndpoint() != null && dataflow != null && resource != null && !resource.isEmpty()) { return Sdmx21Queries - .createDataQuery(endpoint, dataflow.getFullIdentifier(), resource, startTime, endTime, serieskeysonly, updatedAfter, includeHistory, format) + .createDataQuery(provider.getEndpoint(), dataflow.getFullIdentifier(), resource, startTime, endTime, serieskeysonly, updatedAfter, includeHistory, format) .buildSdmx21Query(); } else { - throw new RuntimeException("Invalid query parameters: dataflow=" + dataflow + " resource=" + resource + " endpoint=" + endpoint); + throw new SdmxInvalidParameterException("Invalid query parameters: dataflow=" + dataflow + " resource=" + resource + " endpoint=" + provider.getEndpoint()); } } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/StatsEE.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/StatsEE.java deleted file mode 100644 index c2d223c1..00000000 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/StatsEE.java +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client.custom; - -import java.net.URI; -import java.net.URISyntaxException; - -/** - * @author Attilio Mattiocco - * - */ -public class StatsEE extends DotStat{ - - public StatsEE() throws URISyntaxException { - super("StatsEE", new URI("http://andmebaas.stat.ee/restsdmx/sdmx.ashx"), false); - } -} diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT_GROW.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/UIS.java similarity index 57% rename from JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT_GROW.java rename to JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/UIS.java index 7b3ce16c..2ab348bc 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/EUROSTAT_GROW.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/UIS.java @@ -20,20 +20,28 @@ */ package it.bancaditalia.oss.sdmx.client.custom; -import java.net.URI; import java.net.URISyntaxException; +import java.net.URL; -import it.bancaditalia.oss.sdmx.client.RestSdmxClient; +import it.bancaditalia.oss.sdmx.api.Dataflow; +import it.bancaditalia.oss.sdmx.client.Provider; +import it.bancaditalia.oss.sdmx.exceptions.SdmxException; /** * @author Attilio Mattiocco * */ -public class EUROSTAT_GROW extends RestSdmxClient{ - private static final String EUROSTAT_GROW_PROVIDER = "https://webgate.ec.europa.eu/grow/redisstat/api/dissemination/sdmx/2.1"; +public class UIS extends DotStat +{ + public UIS(Provider p) throws URISyntaxException + { + super(p); + } - public EUROSTAT_GROW() throws URISyntaxException { - super("Eurostat", new URI(EUROSTAT_GROW_PROVIDER), false, false, false); + @Override + protected URL buildDataQuery(Dataflow dataflow, String resource, String startTime, String endTime, boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException + { + return super.buildDataQuery(dataflow, resource + "/all", startTime, endTime, serieskeysonly, null, false); } } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/WB.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/WB.java index ec7e9afe..08e2ad31 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/WB.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/client/custom/WB.java @@ -21,11 +21,11 @@ package it.bancaditalia.oss.sdmx.client.custom; import java.net.MalformedURLException; -import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import it.bancaditalia.oss.sdmx.api.Dataflow; +import it.bancaditalia.oss.sdmx.client.Provider; import it.bancaditalia.oss.sdmx.client.RestSdmxClient; import it.bancaditalia.oss.sdmx.exceptions.SdmxException; import it.bancaditalia.oss.sdmx.exceptions.SdmxExceptionFactory; @@ -35,35 +35,44 @@ * @author Attilio Mattiocco * */ -public class WB extends RestSdmxClient{ - public WB() throws URISyntaxException { - super("WB", new URI("https://api.worldbank.org/v2/sdmx/rest"), false, false, true); +public class WB extends RestSdmxClient +{ + public WB(Provider p) throws URISyntaxException + { + super(p); } @Override - protected URL buildDataQuery(Dataflow dataflow, String resource, String startTime, String endTime, - boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException { - // TODO Auto-generated method stub + protected URL buildDataQuery(Dataflow dataflow, String resource, String startTime, String endTime, boolean serieskeysonly, String updatedAfter, boolean includeHistory) throws SdmxException + { return super.buildDataQuery(dataflow, resource + "/", startTime, endTime, serieskeysonly, updatedAfter, includeHistory); } - + @Override - protected URL buildFlowQuery(String flow, String agency, String version) throws SdmxException{ - try { - return Sdmx21Queries.createDataflowQuery(endpoint, flow, agency, version+"/").build(); - } catch (MalformedURLException e) { + protected URL buildFlowQuery(String flow, String agency, String version) throws SdmxException + { + try + { + return Sdmx21Queries.createDataflowQuery(provider.getEndpoint(), flow, agency, version + "/").build(); + } + catch (MalformedURLException e) + { throw SdmxExceptionFactory.wrap(e); } - + } - + @Override - protected URL buildDSDQuery(String dsd, String agency, String version, boolean full) throws SdmxException { - try { - return Sdmx21Queries.createStructureQuery(endpoint, dsd, agency, version+"/", true).build(); - } catch (MalformedURLException e) { + protected URL buildDSDQuery(String dsd, String agency, String version, boolean full) throws SdmxException + { + try + { + return Sdmx21Queries.createStructureQuery(provider.getEndpoint(), dsd, agency, version + "/", true).build(); + } + catch (MalformedURLException e) + { throw SdmxExceptionFactory.wrap(e); } } - + } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/CheckboxListTableModel.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/CheckboxListTableModel.java index 0a0c0847..919b2f8a 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/CheckboxListTableModel.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/CheckboxListTableModel.java @@ -1,5 +1,6 @@ package it.bancaditalia.oss.sdmx.helper; +import javax.swing.table.AbstractTableModel; import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -7,15 +8,13 @@ import java.util.Map.Entry; import java.util.logging.Logger; -import javax.swing.table.AbstractTableModel; - public final class CheckboxListTableModel extends AbstractTableModel { private static final long serialVersionUID = 1L; @SuppressWarnings("unused") private static final Logger LOGGER = Logger.getLogger(CheckboxListTableModel.class.getName()); - private Object items[][] = new Object[0][]; + private Object[][] items = new Object[0][]; public void setItems(Map itemMap) { @@ -53,6 +52,15 @@ public Collection getCheckedCodes() return codes; } + public void updateCheckedCodes(Collection codes) + { + for (int i = 0; i < items.length; i++) + // 1 => key column + if (codes.contains(((String) items[i][1]))) + // 0 => checkbox column + items[i][0] = new Boolean(true); + } + public int getCheckedCodesCount() { int c = 0; diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/HelperHandler.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/HelperHandler.java index 0b304a59..bbea381e 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/HelperHandler.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/HelperHandler.java @@ -43,7 +43,7 @@ public class HelperHandler extends Handler { - public static final String LOG_FORMAT = "%1$s [%2$s:%3$s] %4$s%5$s%n"; + public static final String LOG_FORMAT = "⏰ %1$s [%2$s:%3$s] %4$s%5$s%n"; private static final Formatter FORMATTER = new Formatter() { diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/NewProviderDialog.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/NewProviderDialog.java index a48e7b77..2b221c92 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/NewProviderDialog.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/NewProviderDialog.java @@ -1,7 +1,5 @@ package it.bancaditalia.oss.sdmx.helper; -import static it.bancaditalia.oss.sdmx.client.SDMXClientFactory.SDMX_V2; -import static it.bancaditalia.oss.sdmx.client.SDMXClientFactory.SDMX_V3; import static java.awt.Dialog.ModalityType.APPLICATION_MODAL; import static java.awt.GridBagConstraints.HORIZONTAL; import static javax.swing.JOptionPane.CANCEL_OPTION; @@ -30,6 +28,8 @@ import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; +import it.bancaditalia.oss.sdmx.api.SDMXVersion; + public class NewProviderDialog extends JDialog { /** @@ -37,36 +37,11 @@ public class NewProviderDialog extends JDialog { */ private static final long serialVersionUID = 1L; - private enum SdmxVersion - { - V2(SDMX_V2, "SDMX Version 2.x"), V3(SDMX_V3, "SDMX Version 3.x"); - - private final String val; - private final String desc; - - SdmxVersion(String val, String desc) - { - this.val = val; - this.desc = desc; - } - - public String getVal() - { - return val; - } - - @Override - public String toString() - { - return desc; - } - } - private int result = CANCEL_OPTION; private String name = null; private String description = null; private String URL = null; - private SdmxVersion sdmxVersion; + private SDMXVersion sdmxVersion; public NewProviderDialog() { @@ -154,8 +129,8 @@ public NewProviderDialog() gbc_lblVersion.gridy = 3; contentPanel.add(lblVersion, gbc_lblVersion); - final JComboBox cmbVersion = new JComboBox<>(); - cmbVersion.setModel(new DefaultComboBoxModel<>(SdmxVersion.values())); + final JComboBox cmbVersion = new JComboBox<>(); + cmbVersion.setModel(new DefaultComboBoxModel<>(SDMXVersion.values())); lblURL.setLabelFor(cmbVersion); GridBagConstraints gbc_cmbVersion = new GridBagConstraints(); gbc_cmbVersion.fill = GridBagConstraints.HORIZONTAL; @@ -190,7 +165,7 @@ public NewProviderDialog() name = txtName.getText(); description = txtDescription.getText(); URL = txtURL.getText(); - sdmxVersion = (SdmxVersion) cmbVersion.getSelectedItem(); + sdmxVersion = (SDMXVersion) cmbVersion.getSelectedItem(); result = JOptionPane.OK_OPTION; dispose(); }); @@ -222,7 +197,8 @@ public String getDescription() { public String getURL() { return URL; } - public String getSdmxVersion() { - return sdmxVersion.getVal(); + public SDMXVersion getSdmxVersion() + { + return sdmxVersion; } } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/ResultsFrame.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/ResultsFrame.java index f6b0c0cd..72ea44d3 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/ResultsFrame.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/ResultsFrame.java @@ -33,7 +33,7 @@ class ResultsFrame extends JFrame private final Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); - public ResultsFrame(final String provider, final List> result) throws HeadlessException + public ResultsFrame(final String provider, String dataflow, final List> result) throws HeadlessException { setDefaultCloseOperation(DISPOSE_ON_CLOSE); setSize(800, 600); @@ -77,11 +77,11 @@ public void mouseClicked(MouseEvent event) { if (SwingUtilities.isRightMouseButton(event)) { - JPopupMenu popupMenu = createPopupMenu(provider, tsTable, row); + JPopupMenu popupMenu = createPopupMenu(provider, dataflow, tsTable, row); popupMenu.show(tsTable, event.getX(), event.getY()); } else if (column == 0 && SwingUtilities.isLeftMouseButton(event) && event.getClickCount() >= 2) - new SeriesViewer(provider, tsTable.getValueAt(row, 0).toString()).setVisible(true); + new SeriesViewer(provider, tsTable.getValueAt(row, 0).toString()).setVisible(true); } catch (SdmxException e) { @@ -121,7 +121,7 @@ private boolean isSameFreqSelectedSeries(JTable tsTable, int defRow) } - private JPopupMenu createPopupMenu(final String provider, final JTable tsTable, int defRow) + private JPopupMenu createPopupMenu(final String provider, String dataflow, final JTable tsTable, int defRow) { final String names[] = getSelectedSeries(tsTable, defRow); boolean sameFreq = isSameFreqSelectedSeries(tsTable, defRow); @@ -175,7 +175,7 @@ public void run() { try { - new SeriesViewer(provider, names).setVisible(true); + new SeriesViewer(provider, dataflow, names).setVisible(true); } catch (Exception e1) { diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/SDMXHelper.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/SDMXHelper.java index 9e9983bc..44765a41 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/SDMXHelper.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/SDMXHelper.java @@ -1,30 +1,30 @@ package it.bancaditalia.oss.sdmx.helper; -import static it.bancaditalia.oss.sdmx.client.SdmxClientHandler.getCodes; -import static it.bancaditalia.oss.sdmx.client.SdmxClientHandler.getFlow; -import static it.bancaditalia.oss.sdmx.client.SdmxClientHandler.getTimeSeries; -import static java.lang.Integer.MAX_VALUE; -import static java.lang.String.format; -import static java.lang.String.join; -import static java.util.Collections.singletonList; -import static java.util.Locale.forLanguageTag; -import static java.util.ResourceBundle.getBundle; -import static java.util.logging.Level.FINE; -import static java.util.logging.Level.FINEST; -import static java.util.logging.Level.INFO; -import static java.util.logging.Level.SEVERE; -import static java.util.logging.Level.WARNING; -import static java.util.stream.Collectors.joining; -import static javax.swing.JOptionPane.ERROR_MESSAGE; -import static javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER; -import static javax.swing.SortOrder.ASCENDING; +import it.bancaditalia.oss.sdmx.api.Dataflow; +import it.bancaditalia.oss.sdmx.api.Dimension; +import it.bancaditalia.oss.sdmx.api.PortableTimeSeries; +import it.bancaditalia.oss.sdmx.api.SDMXVersion; +import it.bancaditalia.oss.sdmx.client.Provider; +import it.bancaditalia.oss.sdmx.client.SDMXClientFactory; +import it.bancaditalia.oss.sdmx.client.SdmxClientHandler; +import it.bancaditalia.oss.sdmx.exceptions.SdmxException; +import it.bancaditalia.oss.sdmx.exceptions.SdmxResponseException; +import it.bancaditalia.oss.sdmx.util.Configuration; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Desktop; -import java.awt.Font; -import java.awt.Image; +import javax.imageio.ImageIO; +import javax.swing.*; +import javax.swing.RowSorter.SortKey; +import javax.swing.border.CompoundBorder; +import javax.swing.border.EmptyBorder; +import javax.swing.border.EtchedBorder; +import javax.swing.border.TitledBorder; +import javax.swing.event.*; +import javax.swing.table.DefaultTableColumnModel; +import javax.swing.table.TableColumn; +import javax.swing.table.TableRowSorter; +import javax.swing.text.AttributeSet; +import javax.swing.text.DefaultEditorKit; +import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -32,77 +32,29 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.AbstractMap.SimpleEntry; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; import java.util.List; -import java.util.Locale; +import java.util.*; import java.util.Locale.LanguageRange; import java.util.Map.Entry; -import java.util.ResourceBundle; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; -import javax.imageio.ImageIO; -import javax.swing.AbstractButton; -import javax.swing.Action; -import javax.swing.Box; -import javax.swing.BoxLayout; -import javax.swing.ButtonGroup; -import javax.swing.ButtonModel; -import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JMenuItem; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JRadioButton; -import javax.swing.JRadioButtonMenuItem; -import javax.swing.JScrollPane; -import javax.swing.JSeparator; -import javax.swing.JSplitPane; -import javax.swing.JTable; -import javax.swing.JTextField; -import javax.swing.JTextPane; -import javax.swing.ListSelectionModel; -import javax.swing.RowFilter; -import javax.swing.RowSorter; -import javax.swing.RowSorter.SortKey; -import javax.swing.SortOrder; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.ToolTipManager; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; -import javax.swing.border.CompoundBorder; -import javax.swing.border.EmptyBorder; -import javax.swing.border.EtchedBorder; -import javax.swing.border.TitledBorder; -import javax.swing.event.CellEditorListener; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ListSelectionEvent; -import javax.swing.table.DefaultTableColumnModel; -import javax.swing.table.TableColumn; -import javax.swing.table.TableRowSorter; -import javax.swing.text.AttributeSet; -import javax.swing.text.DefaultEditorKit; - -import it.bancaditalia.oss.sdmx.api.Dataflow; -import it.bancaditalia.oss.sdmx.api.Dimension; -import it.bancaditalia.oss.sdmx.api.PortableTimeSeries; -import it.bancaditalia.oss.sdmx.client.Provider; -import it.bancaditalia.oss.sdmx.client.SDMXClientFactory; -import it.bancaditalia.oss.sdmx.client.SdmxClientHandler; -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; -import it.bancaditalia.oss.sdmx.exceptions.SdmxResponseException; -import it.bancaditalia.oss.sdmx.util.Configuration; +import static it.bancaditalia.oss.sdmx.api.SDMXVersion.V3; +import static it.bancaditalia.oss.sdmx.client.SdmxClientHandler.*; +import static java.lang.Integer.MAX_VALUE; +import static java.lang.String.format; +import static java.lang.String.join; +import static java.util.Collections.singletonList; +import static java.util.Locale.forLanguageTag; +import static java.util.ResourceBundle.getBundle; +import static java.util.logging.Level.*; +import static java.util.stream.Collectors.joining; +import static javax.swing.JOptionPane.ERROR_MESSAGE; +import static javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER; +import static javax.swing.SortOrder.ASCENDING; public class SDMXHelper extends JFrame { @@ -217,7 +169,104 @@ public class SDMXHelper extends JFrame }; private String noResultsMessage; private String resultsCountMessage; - + + /** + if this variable is false, the updateSeriesCounts() does nothing, it must be set to false when clearing the tlbCodes + to avoid uneccessary newtork call by the listener function. + Apparently Swing doesn't allow to disable listener call temporarily unless you save the Listener Object somewhere + and disable it by passing the Listener object by reference, which is incompatible to the current way we organize our table. + setting a global kill switch is the only way to achieve this behaviour, the listener function must be aware of this + variable and if set to false not execute the code. + so everytime we modify and/or clear tlbCodes in a V3 provider we need to disable the listener so that updateSeriesCounts() + does not call the webservice to update the seriesCount and the ObsCount for each code that we are clearing. + */ + private boolean isCodelistSortersMapTablesListenerActive; + + class SeriesCountPanel extends JPanel { + + private JLabel seriesCountLabel; + private JTextField seriesCount; + private JLabel obsCountLabel; + private JTextField obsCount; + + public SeriesCountPanel(int seriesCount, int obsCount) { + this.seriesCountLabel = new JLabel(); + this.seriesCount = new JTextField(Integer.toString(seriesCount)); + this.seriesCount.setEditable(false); + this.seriesCount.setMinimumSize(new java.awt.Dimension(100, 33)); + this.obsCountLabel = new JLabel(); + this.obsCount = new JTextField(Integer.toString(obsCount)); + this.obsCount.setEditable(false); + this.obsCount.setMinimumSize(new java.awt.Dimension(100, 33)); + add(seriesCountLabel); + add(this.seriesCount); + add(obsCountLabel); + add(this.obsCount); + + } + + public void updateCounts(int seriesCount, int obsCount) { + this.seriesCount.setText(Integer.toString(seriesCount)); + this.seriesCount.setCaretPosition(0); + this.obsCount.setText(Integer.toString(obsCount)); + this.obsCount.setCaretPosition(0); + if (seriesCount <= 0) { + hideSeriesCount(); + } else { + showSeriesCount(); + } + if (obsCount <= 0) { + hideObsCount(); + } else { + showObsCount(); + } + + } + + public void updateBundle(ResourceBundle b) { + this.seriesCountLabel.setText(b.getString("SDMXHelper.105")); + this.obsCountLabel.setText(b.getString("SDMXHelper.106")); + } + + public void hidePanel() { + this.seriesCount.setVisible(false); + this.seriesCountLabel.setVisible(false); + this.obsCount.setVisible(false); + this.obsCountLabel.setVisible(false); + this.setVisible(false); + } + + public void showPanel() { + this.seriesCount.setVisible(true); + this.seriesCountLabel.setVisible(true); + this.obsCount.setVisible(true); + this.obsCountLabel.setVisible(true); + this.setVisible(true); + } + + public void hideSeriesCount() { + this.seriesCountLabel.setVisible(false); + this.seriesCount.setVisible(false); + } + + public void showSeriesCount() { + this.seriesCountLabel.setVisible(true); + this.seriesCount.setVisible(true); + } + + public void hideObsCount() { + this.obsCountLabel.setVisible(false); + this.obsCount.setVisible(false); + } + + public void showObsCount() { + this.obsCountLabel.setVisible(true); + this.obsCount.setVisible(true); + } + + } + + private SeriesCountPanel seriesCountPanel; /** * Launch the application. */ @@ -261,11 +310,6 @@ public static void start(final boolean exitOnClose, String lockedProvider) new SDMXHelper(exitOnClose, lockedProvider); } - public String getCurrentProvider() - { - return selectedProviderGroup.getSelection().getActionCommand(); - } - /** * Create the frame. */ @@ -299,7 +343,7 @@ public SDMXHelper(boolean exitOnClose, String lockedProvider) try { if (selectedProviderGroup.getSelection() != null) - new ToolCommandsFrame(tfSdmxQuery.getText(), + new ToolCommandsFrame(getSelectedDataflow(), tfSdmxQuery.getText(), selectedProviderGroup.getSelection().getActionCommand()); } catch (SdmxException ex) @@ -316,9 +360,9 @@ public SDMXHelper(boolean exitOnClose, String lockedProvider) { String name = newProviderDialog.getName(); String description = newProviderDialog.getDescription(); - String sdmxVersion = newProviderDialog.getSdmxVersion(); + SDMXVersion sdmxVersion = newProviderDialog.getSdmxVersion(); URI endpoint = new URI(newProviderDialog.getURL()); - SDMXClientFactory.addProvider(name, endpoint, false, false, true, description, false, sdmxVersion); + SDMXClientFactory.addProvider(name, endpoint, false, false, true, description, sdmxVersion); mnProviders.removeAll(); providersSetup(mnProviders); } @@ -493,6 +537,18 @@ else if (rdSearchDescFlow.isSelected()) tfDataflowFilter.getDocument().addDocumentListener(flowListener); dataflowFilterPanel.add(tfDataflowFilter); + Box myDimensionBox = Box.createHorizontalBox(); + myDimensionBox.setPreferredSize(new java.awt.Dimension(100, 200)); + myDimensionBox.setMinimumSize(new java.awt.Dimension(100, 200)); + myDimensionBox.setMaximumSize(new java.awt.Dimension(100, 200)); + + this.seriesCountPanel = new SeriesCountPanel(0,0); + seriesCountPanel.setMinimumSize(new java.awt.Dimension(100, 25)); + seriesCountPanel.setMaximumSize(new java.awt.Dimension(MAX_VALUE, 25)); + seriesCountPanel.setPreferredSize(new java.awt.Dimension(400, 25)); + seriesCountPanel.hidePanel(); + + JSplitPane horizontalSplitPane = new JSplitPane(); horizontalSplitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT); controlsPane.setRightComponent(horizontalSplitPane); @@ -505,6 +561,7 @@ else if (rdSearchDescFlow.isSelected()) new CompoundBorder(brdDimensionsPanel, new EmptyBorder(10, 10, 10, 10)))); dimensionsPanel.setLayout(new BoxLayout(dimensionsPanel, BoxLayout.Y_AXIS)); + Box dimensionFilterBox = Box.createHorizontalBox(); dimensionFilterBox.setPreferredSize(new java.awt.Dimension(10, 25)); dimensionFilterBox.setMinimumSize(new java.awt.Dimension(10, 25)); @@ -524,6 +581,14 @@ else if (rdSearchDescFlow.isSelected()) dimensionsScrollPane.setMinimumSize(new java.awt.Dimension(200, 23)); dimensionsPanel.add(dimensionsScrollPane); + Box obsCountBox = Box.createHorizontalBox(); + dimensionFilterBox.setPreferredSize(new java.awt.Dimension(10, 25)); + dimensionFilterBox.setMinimumSize(new java.awt.Dimension(10, 25)); + dimensionFilterBox.setMaximumSize(new java.awt.Dimension(32768, 25)); + obsCountBox.add(seriesCountPanel); + dimensionsPanel.add(obsCountBox); + + JPanel codesPanel = new JPanel(); codesPanel.setSize(new java.awt.Dimension(10, 150)); horizontalSplitPane.setRightComponent(codesPanel); @@ -719,7 +784,7 @@ public void editingCanceled(ChangeEvent e) flowOptionsPane.setMinimumSize(new java.awt.Dimension(10, 25)); flowOptionsPane.setMaximumSize(new java.awt.Dimension(32768, 25)); dataflowsPanel.add(flowOptionsPane); - + cbRegexSearchFlow.addActionListener(e -> { cbCaseSearchFlow.setEnabled(false); flowListener.filter(); @@ -779,8 +844,13 @@ public void editingCanceled(ChangeEvent e) btnClearSelectedDimension.addActionListener(e -> { if (getSelectedDataflow() != null) { + isCodelistSortersMapTablesListenerActive = false; ((CheckboxListTableModel) tblCodes.getModel()).uncheckAll(); updateCodelistCount(); + isCodelistSortersMapTablesListenerActive = true; + if (V3 == SDMXClientFactory.getProviders().get(getSelectedProvider()).getSdmxVersion()) { + updateSeriesCounts(getSelectedDataflow(), new ArrayList<>()); + } } }); btnClearSelectedDimension.setMaximumSize(new java.awt.Dimension(151, 32768)); @@ -837,6 +907,7 @@ public void mouseClicked(MouseEvent e) JScrollPane loggingPane = new JScrollPane(noWrapPanel); loggingPane.setBorder(new EmptyBorder(0, 0, 0, 0)); + final JSplitPane mainSplitPane = new JSplitPane(); mainSplitPane.setBorder(null); mainSplitPane.setOrientation(JSplitPane.VERTICAL_SPLIT); @@ -929,6 +1000,7 @@ private void updateBundle(ResourceBundle b) tblDimensions.getColumnModel().getColumn(2).setHeaderValue(b.getString("SDMXHelper.12")); //$NON-NLS-1$ noResultsMessage = b.getString("SDMXHelper.89"); //$NON-NLS-1$ resultsCountMessage = b.getString("SDMXHelper.91"); //$NON-NLS-1$ + seriesCountPanel.updateBundle(b); } private void flowSelListener(ListSelectionEvent e) @@ -958,26 +1030,35 @@ private void dimSelListener(ListSelectionEvent e) AtomicBoolean interrupted = new AtomicBoolean(false); new ProgressViewer<>(this, interrupted, () -> - SDMXClientFactory.getProviders().get(provider).getSdmxVersion().equals(SDMXClientFactory.SDMX_V3) ? + V3 == SDMXClientFactory.getProviders().get(provider).getSdmxVersion() ? SdmxClientHandler.filterCodes(provider, selectedDataflow, createAvailabilityFilter()).get(selectedDimension) : getCodes(provider, selectedDataflow, selectedDimension) , codes -> { - CheckboxListTableModel model = null; - if(!codelistSortersMap.containsKey(selectedDimension)){ - model = new CheckboxListTableModel(); - model.addTableModelListener(event -> tfSdmxQuery.setText(createQuery(selectedDataflow, dimsTableModel.getSource()))); - if (SDMXClientFactory.SDMX_V3.equals(SDMXClientFactory.getProviders().get(provider).getSdmxVersion())) - model.addTableModelListener(event -> formatQueryButton(selectedDataflow, dimsTableModel.getSource())); - } - else - model = codelistSortersMap.get(selectedDimension).getModel(); - + // Create new checkbox for codes given the selectedDimension + // the new checkbox is stored in codelistSorterMap using the String selectedDimension as key. + // If the checkbox is already present, the selected codes are updated and set to true + CheckboxListTableModel model = new CheckboxListTableModel(); + model.addTableModelListener(event -> { + tfSdmxQuery.setText(createQuery(dimsTableModel.getSource())); + }); model.setItems(codes); - + if (codelistSortersMap.get(selectedDimension) != null) { + Collection checkedCodes = codelistSortersMap.get(selectedDimension).getModel().getCheckedCodes(); + model.updateCheckedCodes(checkedCodes); + } TableRowSorter> sorter = new TableRowSorter<>(model); codelistSortersMap.put(selectedDimension, sorter); + if (V3 == SDMXClientFactory.getProviders().get(provider).getSdmxVersion()) { + TableModelListener listener = new TableModelListener() { + @Override + public void tableChanged(TableModelEvent e) { + updateSeriesCounts(selectedDataflow, dimsTableModel.getSource()); + } + }; + model.addTableModelListener(listener); + } }, ex -> { interrupted.set(true); @@ -987,6 +1068,8 @@ private void dimSelListener(ListSelectionEvent e) ).start(); SwingUtilities.invokeLater(() -> { + // Here the codelist checkbox get switched, it detects when the selectedDimension get changed + // and from codelistSorterMap get the previously instantiated checkbox and display it. if (!interrupted.get()) { TableRowSorter> sorter = codelistSortersMap.get(selectedDimension); @@ -1018,16 +1101,20 @@ private void updateCodelistCount() private void updateDataflow(final String dataflowID) { // reset clean state for tblCodes before + isCodelistSortersMapTablesListenerActive = false; codelistSortersMap.clear(); ((CheckboxListTableModel) tblCodes.getModel()).clear(); + seriesCountPanel.updateCounts(0, 0); dimsTableModel.clear(); - + String formatted = (String) btnCheckQuery.getClientProperty("FORMAT"); //$NON-NLS-1$ + btnCheckQuery.setText(String.format(formatted, "")); //$NON-NLS-1$ //$NON-NLS-2$ // if this is not a provider switch + isCodelistSortersMapTablesListenerActive = true; new ProgressViewer<>(this, new AtomicBoolean(false), () -> SdmxClientHandler.getDimensions(selectedProviderGroup.getSelection().getActionCommand(), dataflowID), dims -> { dimsTableModel.setItems(dims, item -> new String[] { item.getId(), item.getName() }); - tfSdmxQuery.setText(createQuery(dataflowID, dims)); + tfSdmxQuery.setText(createQuery(dims)); }, ex -> { LOGGER.severe("Exception. Class: " + ex.getClass().getName() + " .Message: " + ex.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ @@ -1038,9 +1125,8 @@ private void updateDataflow(final String dataflowID) private void displayQueryResults() { String query = tfSdmxQuery.getText(); - ButtonModel providerMenu = selectedProviderGroup.getSelection(); String selectedDataflow = getSelectedDataflow(); - String selectedProvider = providerMenu.getActionCommand(); + String selectedProvider = getSelectedProvider(); AtomicBoolean isCancelled = new AtomicBoolean(false); if (selectedDataflow != null && query != null && !query.isEmpty()) @@ -1049,7 +1135,13 @@ private void displayQueryResults() try { Dataflow dataflow = getFlow(selectedProvider, selectedDataflow); - List> names = getTimeSeries(selectedProvider, null, query, null, null, null, true, null, false); + List> names = null; + if (V3 == SDMXClientFactory.getProviders().get(selectedProvider).getSdmxVersion()) { + names = getTimeSeries2(selectedProvider, dataflow.getId(), null, query, null, null, "none", "none", null, false); + } + else{ + names = getTimeSeries(selectedProvider, dataflow.getId() + "/" + query, null, null, true, null, false); + } return new SimpleEntry<>(dataflow, names); } catch (SdmxResponseException e) @@ -1069,7 +1161,7 @@ private void displayQueryResults() List> result = entry.getValue(); // Open a new window to browse query results - final JFrame wnd = new ResultsFrame(getCurrentProvider(), result); + final JFrame wnd = new ResultsFrame(getSelectedProvider(), df.getId(), result); wnd.setTitle(String.format(resultsCountMessage, result.size(), df.getDescription())); //$NON-NLS-1$ //$NON-NLS-2$ wnd.setVisible(true); @@ -1087,7 +1179,7 @@ private void providersSetup(final JMenu providersMenu) for (final Entry providerEntry : SDMXClientFactory.getProviders().entrySet()) { final String provider = providerEntry.getKey(); - final String sdmxVersion = providerEntry.getValue().getSdmxVersion(); + final SDMXVersion sdmxVersion = providerEntry.getValue().getSdmxVersion(); final JRadioButtonMenuItem menuItem = new JRadioButtonMenuItem( "[" + sdmxVersion + "] " + provider + ": " + providerEntry.getValue().getDescription()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ menuItem.setActionCommand(provider); @@ -1099,10 +1191,18 @@ private void providersSetup(final JMenu providersMenu) updateSource(provider); btnCheckQuery.setEnabled(false); btnPrintQuery.setEnabled(false); + String formatted = (String) btnCheckQuery.getClientProperty("FORMAT"); //$NON-NLS-1$ + btnCheckQuery.setText(String.format(formatted, "")); //$NON-NLS-1$ //$NON-NLS-2$ tfSdmxQuery.setText(""); //$NON-NLS-1$ tfDataflowFilter.setText(""); //$NON-NLS-1$ lblQuery.setText(lblQuery.getText().split(":")[0] + ": " + provider); //$NON-NLS-1$ //$NON-NLS-2$ - } + if (V3 == SDMXClientFactory.getProviders().get(provider).getSdmxVersion()) { + seriesCountPanel.showPanel(); + } else { + seriesCountPanel.hidePanel(); + } + + } catch (Exception ex) { ex.printStackTrace(); @@ -1125,13 +1225,17 @@ private void updateSource(final String provider) flows -> { if (!isCancelled.get()) { + isCodelistSortersMapTablesListenerActive = false; codelistSortersMap.clear(); - tblCodes.setModel(new CheckboxListTableModel()); //$NON-NLS-1$ //$NON-NLS-2$ + tblCodes.setRowSorter(null); + tblCodes.setModel(new CheckboxListTableModel());//$NON-NLS-1$ //$NON-NLS-2$ dimsTableModel.clear(); dataflowsTableModel.setItems(flows); TableRowSorter rowSorter = new TableRowSorter<>(dataflowsTableModel); rowSorter.setSortKeys(singletonList(new RowSorter.SortKey(0, SortOrder.ASCENDING))); - tblDataflows.setRowSorter(rowSorter); + tblDataflows.setRowSorter(rowSorter); + seriesCountPanel.updateCounts(0, 0); + isCodelistSortersMapTablesListenerActive = true; } }, ex -> { @@ -1140,26 +1244,38 @@ private void updateSource(final String provider) }).start(); } - private String createQuery(String dataflow, List dims) - { - return dataflow + "/" + createFilter(dims); - } - - private String createFilter(List dims) + private String createQuery(List dims) { - return dims.stream() - .map(Dimension::getId) - .map(id -> codelistSortersMap.containsKey(id) ? join("+", codelistSortersMap.get(id).getModel().getCheckedCodes()) : "") - .collect(joining(".")); + String result = ""; + try { + if (V3 == SDMXClientFactory.getProviders().get(getSelectedProvider()).getSdmxVersion()) { + result = createAvailabilityFilter(); + } + else{ + result = dims.stream() + .map(Dimension::getId) + .map(id -> codelistSortersMap.containsKey(id) ? join("+", codelistSortersMap.get(id).getModel().getCheckedCodes()) : "") + .collect(joining(".")); + } + } catch (SdmxException ex) { + LOGGER.severe("Exception. Class: " + ex.getClass().getName() + " .Message: " + ex.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ + LOGGER.log(Level.FINER, "", ex); //$NON-NLS-1$ + } + return result; } - private void formatQueryButton(String dataflow, List dims) + private void updateSeriesCounts(String dataflow, List dims) { + if (!isCodelistSortersMapTablesListenerActive) { + return; + } try { - int count = SdmxClientHandler.getSeriesCount(selectedProviderGroup.getSelection().getActionCommand(), dataflow, createFilter(dims)); - String formatted = (String) btnCheckQuery.getClientProperty("FORMAT"); //$NON-NLS-1$ - btnCheckQuery.setText(String.format(formatted, count <= 0 ? "" : ": " + count)); //$NON-NLS-1$ //$NON-NLS-2$ + Map countMap = SdmxClientHandler.getSeriesCount(getSelectedProvider(), dataflow, createQuery(dims)); + int series_count = countMap.getOrDefault("series_count", 0); + int obs_count = countMap.getOrDefault("obs_count", 0); + seriesCountPanel.updateCounts(series_count, obs_count); + } catch (SdmxException e) { @@ -1169,7 +1285,7 @@ private void formatQueryButton(String dataflow, List dims) private String createAvailabilityFilter() throws SdmxException { - List dims = SdmxClientHandler.getDimensions(getCurrentProvider(), getSelectedDataflow()); + List dims = SdmxClientHandler.getDimensions(getSelectedProvider(), getSelectedDataflow()); return dims.stream() .map(Dimension::getId) .filter(codelistSortersMap::containsKey) @@ -1186,6 +1302,12 @@ private String getSelectedDataflow() : null; } + private String getSelectedProvider() + { + ButtonModel providerMenu = selectedProviderGroup.getSelection(); + return(providerMenu.getActionCommand()); + } + private String getSelectedDimension() { int rowSelected = tblDimensions.getSelectedRow(); diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/SeriesViewer.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/SeriesViewer.java index 695df6ab..6d8fabab 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/SeriesViewer.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/SeriesViewer.java @@ -1,5 +1,6 @@ package it.bancaditalia.oss.sdmx.helper; +import static it.bancaditalia.oss.sdmx.api.SDMXVersion.V3; import static it.bancaditalia.oss.sdmx.helper.SDMXHelper.ICON_MAX; import static it.bancaditalia.oss.sdmx.helper.SDMXHelper.ICON_MIN; import static java.awt.Image.SCALE_SMOOTH; @@ -42,6 +43,7 @@ import it.bancaditalia.oss.sdmx.api.BaseObservation; import it.bancaditalia.oss.sdmx.api.PortableTimeSeries; +import it.bancaditalia.oss.sdmx.client.SDMXClientFactory; import it.bancaditalia.oss.sdmx.client.SdmxClientHandler; import it.bancaditalia.oss.sdmx.exceptions.SdmxException; @@ -123,7 +125,7 @@ else if (value.equals(maxes.get(time))) /** * @wbp.parser.constructor */ - public SeriesViewer(String provider, String[] nameArray) throws SdmxException, IOException + public SeriesViewer(String provider, String dataflow, String[] nameArray) throws SdmxException, IOException { super("Tabulate series"); setDefaultCloseOperation(DISPOSE_ON_CLOSE); @@ -157,7 +159,12 @@ public void stateChanged(ChangeEvent e) { Set names = new HashSet<>(Arrays.asList(nameArray)); List> series = new ArrayList<>(); for (String name: names) - series.addAll(SdmxClientHandler.getTimeSeries(provider, null, name, null, null, null, false, null, false)); + if (V3 == SDMXClientFactory.getProviders().get(provider).getSdmxVersion()) { + series.addAll(SdmxClientHandler.getTimeSeries2(provider, dataflow, name, null, null, null, "all", "none", null, false)); + } + else{ + series.addAll(SdmxClientHandler.getTimeSeries(provider, dataflow + "/" + name, null, null, false, null, false)); + } if (series.size() < names.size()) throw new IllegalStateException("Couldn't download all series"); @@ -212,8 +219,8 @@ public void stateChanged(ChangeEvent e) { public SeriesViewer(String provider, String singleSeriesName) throws SdmxException { super(singleSeriesName); - - List> list = SdmxClientHandler.getTimeSeries(provider, null, singleSeriesName, null, null, null, false, null, false); + List> list = null; + list = SdmxClientHandler.getTimeSeries(provider, singleSeriesName, null, null, false, null, false); if (list.size() != 1) throw new IllegalStateException("Query must return exactly one time series"); diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/ToolCommandsFrame.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/ToolCommandsFrame.java index f94dd7d8..3735ed6f 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/ToolCommandsFrame.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/helper/ToolCommandsFrame.java @@ -5,6 +5,7 @@ import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; @@ -21,6 +22,7 @@ import java.awt.event.InputEvent; import java.awt.event.KeyEvent; +import javax.swing.Box; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; @@ -35,11 +37,11 @@ import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; +import it.bancaditalia.oss.sdmx.api.SDMXVersion; +import it.bancaditalia.oss.sdmx.client.SDMXClientFactory; import it.bancaditalia.oss.sdmx.client.SdmxClientHandler; import it.bancaditalia.oss.sdmx.exceptions.SdmxException; import it.bancaditalia.oss.sdmx.exceptions.SdmxInvalidParameterException; -import java.awt.Component; -import javax.swing.Box; class ToolCommandsFrame extends JFrame { /** @@ -54,12 +56,14 @@ class ToolCommandsFrame extends JFrame { private final JTextField urlText; private final JLabel lblNewLabel; - public ToolCommandsFrame(String query, String provider) throws SdmxException + public ToolCommandsFrame(String dataflow, String queryString, String provider) throws SdmxException { setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setExtendedState(Frame.MAXIMIZED_HORIZ); - if (query == null || query.isEmpty()) - throw new SdmxInvalidParameterException("The sdmx query is not valid yet: '" + query + "'"); + if (queryString == null || queryString.isEmpty()) + throw new SdmxInvalidParameterException("The sdmx query is not valid yet: '" + queryString + "'"); + if (dataflow == null || dataflow.isEmpty()) + throw new SdmxInvalidParameterException("The dataflow is not selected yet"); setResizable(false); setSize(800, 340); @@ -101,7 +105,10 @@ public ToolCommandsFrame(String query, String provider) throws SdmxException gbc_rCommandLabel.gridx = 0; panel.add(rCommandLabel, gbc_rCommandLabel); - rCommandText = new JTextField("result <- getTimeSeries('" + provider + "', '" + query + "');"); + if(SDMXVersion.V2 == SDMXClientFactory.getProviders().get(provider).getSdmxVersion()) + rCommandText = new JTextField("result <- getTimeSeries(provider='" + provider + "', id='" + queryString + "');"); + else + rCommandText = new JTextField("result <- getTimeSeries2(provider='" + provider + "', dataflow='" + dataflow + "', filter='" + queryString + "');"); rCommandLabel.setLabelFor(rCommandText); GridBagConstraints gbc_rCommandText = new GridBagConstraints(); gbc_rCommandText.fill = GridBagConstraints.BOTH; @@ -121,7 +128,10 @@ public ToolCommandsFrame(String query, String provider) throws SdmxException gbc_matlabCommandLabel.gridy = 1; panel.add(matlabCommandLabel, gbc_matlabCommandLabel); - matlabCommandText = new JTextField("result = sdmx.getTimeSeries('" + provider + "', '" + query + "');"); + if(SDMXVersion.V2 == SDMXClientFactory.getProviders().get(provider).getSdmxVersion()) + matlabCommandText = new JTextField("result = getTimeSeries('" + provider + "', '" + queryString + "');"); + else + matlabCommandText = new JTextField("result = getTimeSeriesTable2('" + provider + "', '" + dataflow + "', '', '" + queryString + "');"); matlabCommandLabel.setLabelFor(matlabCommandText); GridBagConstraints gbc_matlabCommandText = new GridBagConstraints(); gbc_matlabCommandText.fill = GridBagConstraints.BOTH; @@ -141,7 +151,10 @@ public ToolCommandsFrame(String query, String provider) throws SdmxException gbc_sasCommandLabel.gridy = 2; panel.add(sasCommandLabel, gbc_sasCommandLabel); - sasCommandText = new JTextField("%gettimeseries(provider=\"" + provider + "\", tsKey=\"" + query + "\", metadata=1);"); + if(SDMXVersion.V2 == SDMXClientFactory.getProviders().get(provider).getSdmxVersion()) + sasCommandText = new JTextField("%gettimeseries(provider=\"" + provider + "\", tsKey=\"" + queryString + "\", metadata=1);"); + else + sasCommandText = new JTextField("NOT AVAILABLE"); sasCommandLabel.setLabelFor(sasCommandText); GridBagConstraints gbc_sasCommandText = new GridBagConstraints(); gbc_sasCommandText.fill = GridBagConstraints.BOTH; @@ -161,7 +174,10 @@ public ToolCommandsFrame(String query, String provider) throws SdmxException gbc_stataCommandLabel.gridy = 3; panel.add(stataCommandLabel, gbc_stataCommandLabel); - stataCommandText = new JTextField("getTimeSeries " + provider + " " + query + " \"\" \"\" 0 0"); + if(SDMXVersion.V2 == SDMXClientFactory.getProviders().get(provider).getSdmxVersion()) + stataCommandText = new JTextField("getTimeSeries " + provider + " " + queryString + " \"\" \"\" 0 0"); + else + stataCommandText = new JTextField("NOT AVAILABLE"); stataCommandLabel.setLabelFor(stataCommandText); GridBagConstraints gbc_stataCommandText = new GridBagConstraints(); gbc_stataCommandText.insets = new Insets(0, 0, 5, 0); @@ -181,7 +197,10 @@ public ToolCommandsFrame(String query, String provider) throws SdmxException gbc_urlLabel.gridy = 4; panel.add(urlLabel, gbc_urlLabel); - urlText = new JTextField(SdmxClientHandler.getDataURL(provider, query, null, null, false, null, false)); + if(SDMXVersion.V2 == SDMXClientFactory.getProviders().get(provider).getSdmxVersion()) + urlText = new JTextField(SdmxClientHandler.getDataURL(provider, dataflow, queryString, null, null, false, null, false)); + else + urlText = new JTextField(SdmxClientHandler.getDataURL(provider, dataflow, queryString, null, null, false, null, false)); urlLabel.setLabelFor(urlText); GridBagConstraints gbc_urlText = new GridBagConstraints(); gbc_urlText.fill = GridBagConstraints.BOTH; diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v20/DataflowParser.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v20/DataflowParser.java index e7ac267b..6ff7d01f 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v20/DataflowParser.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v20/DataflowParser.java @@ -29,7 +29,6 @@ import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.Attribute; -import javax.xml.stream.events.EndElement; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v21/CodelistParser.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v21/CodelistParser.java index 0c063315..0edcb22a 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v21/CodelistParser.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v21/CodelistParser.java @@ -48,7 +48,6 @@ */ public class CodelistParser implements Parser { - private static final String sourceClass = CodelistParser.class.getSimpleName(); protected static Logger logger = Configuration.getSdmxLogger(); // valid in V.2.1 diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v21/DataflowParser.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v21/DataflowParser.java index a19ad3c5..5d246c65 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v21/DataflowParser.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v21/DataflowParser.java @@ -29,7 +29,6 @@ import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.Attribute; -import javax.xml.stream.events.EndElement; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; @@ -50,6 +49,7 @@ public class DataflowParser implements Parser> { private static final String ID = "id"; private static final String AGENCY = "agencyID"; private static final String VERSION = "version"; + private static final String EXTERNAL = "isExternalReference"; private static final String NAME = "Name"; private static final String REF = "Ref"; @@ -63,7 +63,7 @@ public List parse(XMLEventReader eventReader, List lang while (eventReader.hasNext()) { XMLEvent event = eventReader.nextEvent(); logger.finest(event.toString()); - + if (event.isStartElement()) { StartElement startElement = event.asStartElement(); @@ -71,15 +71,21 @@ public List parse(XMLEventReader eventReader, List lang { currentName = new LocalizedText(languages); String id = null, agency = null, version = null; + boolean isExternalReference = false; for (Attribute attr: (Iterable) startElement::getAttributes) switch (attr.getName().toString()) { case ID: id = attr.getValue(); break; case AGENCY: agency = attr.getValue(); break; case VERSION: version = attr.getValue(); break; + case EXTERNAL: isExternalReference = attr.getValue().equalsIgnoreCase("true"); break; } - - df = new Dataflow(id, agency, version, currentName); + //TODO: check what to do with these cases + if(isExternalReference){ + logger.fine("Dataflow: " + agency + "," + id + "," + version + " has an externa reference"); + continue; + } + df = new Dataflow(id, agency, version, currentName); } if (startElement.getName().getLocalPart() == (NAME)) currentName.setText(startElement, eventReader); @@ -97,8 +103,9 @@ public List parse(XMLEventReader eventReader, List lang df.setDsdIdentifier(new SDMXReference(id, agency, version)); } } - else if (event.isEndElement() && DATAFLOW.equals(event.asEndElement().getName().getLocalPart())) + else if (event.isEndElement() && DATAFLOW.equals(event.asEndElement().getName().getLocalPart())){ dfList.add(df); + } } return dfList; diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v30/AvailabilityParser.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v30/AvailabilityParser.java index 9b80794a..ce6a91e9 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v30/AvailabilityParser.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v30/AvailabilityParser.java @@ -99,14 +99,15 @@ else if (value.equals(startElement.getName().getLocalPart())) { String eventName = event.asEndElement().getName().getLocalPart(); if (keyval.equals(eventName)) - if (dimension != null) - { - if(codes.size() > 0){ - logger.finer("Got dimension " + dimension); - dimensions.put(dimension, codes); - } - else{ - throw new SdmxInvalidParameterException("The selection identifies an empty cube region"); + if (dimension != null) { + if(!dimension.equals("TIME_PERIOD")){ //TODO handle time period when available + if(codes.size() > 0){ + logger.finer("Got dimension " + dimension); + dimensions.put(dimension, codes); + } + else{ + throw new SdmxInvalidParameterException("The selection identifies an empty cube region"); + } } } else diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v30/Sdmx30Queries.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v30/Sdmx30Queries.java index ae4eb027..35c1ad26 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v30/Sdmx30Queries.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v30/Sdmx30Queries.java @@ -39,11 +39,11 @@ public Sdmx30Queries(URI entryPoint) { super(entryPoint); } - public static Sdmx30Queries createDataQuery(URI endpoint, String dataflow, String tskey, String filter, String start, String end, boolean serieskeysonly, + public static Sdmx30Queries createDataQuery(URI endpoint, String dataflow, String tskey, String filter, String start, String end, String attributes, String measures, String updatedAfter, boolean includeHistory) throws SdmxInvalidParameterException { if (endpoint != null && dataflow != null && !dataflow.isEmpty()){ - Sdmx30Queries query = (Sdmx30Queries) new Sdmx30Queries(endpoint).addParams(filter, start, end, serieskeysonly, updatedAfter, includeHistory, null).addPath("data") + Sdmx30Queries query = (Sdmx30Queries) new Sdmx30Queries(endpoint).addParams(filter, start, end, attributes, measures, updatedAfter, includeHistory, null).addPath("data") .addPath("dataflow").addPath(dataflow.replace(",", "/")); if(tskey != null && !tskey.isEmpty()) query.addPath(tskey); return query; @@ -55,7 +55,7 @@ public static Sdmx30Queries createDataQuery(URI endpoint, String dataflow, Strin public static Sdmx30Queries createAvailabilityQuery(URI endpoint, String dataflow, String filter, String mode) throws SdmxInvalidParameterException { if (endpoint != null && dataflow != null && !dataflow.isEmpty()) - return (Sdmx30Queries) new Sdmx30Queries(endpoint).addParams(filter, null, null, false, null, false, mode).addPath("availability") + return (Sdmx30Queries) new Sdmx30Queries(endpoint).addParams(filter, null, null, null, null, null, false, mode).addPath("availability") .addPath("dataflow").addPath(dataflow.replace(",", "/")); else throw new SdmxInvalidParameterException("Invalid query parameters: dataflow=" + dataflow + " filter=" + filter + " endpoint=" + endpoint); @@ -64,7 +64,7 @@ public static Sdmx30Queries createAvailabilityQuery(URI endpoint, String dataflo public static Sdmx30Queries createAvailabilityQueryByKey(URI endpoint, String dataflow, String key, String mode) throws SdmxInvalidParameterException { if (endpoint != null && dataflow != null && !dataflow.isEmpty()) - return (Sdmx30Queries) new Sdmx30Queries(endpoint).addParams(null, null, null, false, null, false, mode).addPath("availability") + return (Sdmx30Queries) new Sdmx30Queries(endpoint).addParams(null, null, null, null, null, null, false, mode).addPath("availability") .addPath("dataflow").addPath(dataflow.replace(",", "/")).addPath(key); else throw new SdmxInvalidParameterException("Invalid query parameters: dataflow=" + dataflow + " filter=" + key + " endpoint=" + endpoint); @@ -77,7 +77,9 @@ public static Sdmx30Queries createStructureQuery(URI endpoint, String dsd, Strin public static Sdmx30Queries createStructureQuery(URI endpoint, String dsd, String agency, String version, boolean full) throws SdmxInvalidParameterException { if (endpoint != null && agency != null && !agency.isEmpty() && dsd != null && !dsd.isEmpty()) { - Sdmx30Queries query = (Sdmx30Queries) new Sdmx30Queries(endpoint).addPath("structure").addPath("datastructure").addPath(agency).addPath(dsd).addParam("format", "sdmx-2.1"); + Sdmx30Queries query = (Sdmx30Queries) new Sdmx30Queries(endpoint).addPath("structure").addPath("datastructure").addPath(agency).addPath(dsd) + //.addParam("format", "sdmx-2.1") + ; if (version != null && !version.isEmpty()) { query.addPath(version); } @@ -92,7 +94,9 @@ public static Sdmx30Queries createStructureQuery(URI endpoint, String dsd, Strin public static Sdmx30Queries createDataflowQuery(URI endpoint, String dataflow, String agency, String version) throws SdmxInvalidParameterException { if (endpoint != null || dataflow != null) - return ((Sdmx30Queries) new Sdmx30Queries(endpoint).addPath("structure").addPath("dataflow").addParam("format", "sdmx-2.1")).addResourceId(agency, dataflow, version); + return ((Sdmx30Queries) new Sdmx30Queries(endpoint).addPath("structure").addPath("dataflow") + //.addParam("format", "sdmx-2.1") + ).addResourceId(agency, dataflow, version); else throw new SdmxInvalidParameterException("Invalid query parameters: dataflow: " + dataflow + ", endpoint=" + endpoint); } @@ -118,16 +122,25 @@ public Sdmx30Queries addResourceId(String agencyId, String resourceId, String ve return this; } - public Sdmx30Queries addParams(String filter, String start, String end, boolean serieskeysonly, + public Sdmx30Queries addParams(String filter, String start, String end, String attributes, String measures, String updatedAfter, boolean includeHistory, String mode) { if (filter != null && !filter.isEmpty()) addFilter(filter); - if (start != null && !start.isEmpty()) - addParam("startPeriod", start); - if (end != null && !end.isEmpty()) - addParam("endPeriod", end); - if (serieskeysonly) - addParam("detail", "serieskeysonly"); +// if (start != null && !start.isEmpty()) +// addParam("startPeriod", start); +// if (end != null && !end.isEmpty()) +// addParam("endPeriod", end); + if((start != null && !start.isEmpty()) || (end != null && !end.isEmpty())){ + String startFilter = (start != null && !start.isEmpty()) ? "ge:" + start : ""; + String endFilter = (end != null && !end.isEmpty()) ? "le:" + end : ""; + String sep = (!startFilter.isEmpty() && !endFilter.isEmpty()) ? "+" : ""; + String timeFilter = startFilter + sep + endFilter; + addParam("c[TIME_PERIOD]=", timeFilter); + } + if (attributes != null) + addParam("attributes", attributes); + if (measures != null) + addParam("measures", measures); if (includeHistory) addParam("includeHistory", "true"); if (updatedAfter != null && !updatedAfter.isEmpty()) diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v30/SeriesCountParser.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v30/SeriesCountParser.java index d7ead55f..88d48378 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v30/SeriesCountParser.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/parser/v30/SeriesCountParser.java @@ -20,44 +20,48 @@ */ package it.bancaditalia.oss.sdmx.parser.v30; -import java.util.Iterator; -import java.util.List; -import java.util.Locale.LanguageRange; -import java.util.logging.Logger; +import it.bancaditalia.oss.sdmx.client.Parser; +import it.bancaditalia.oss.sdmx.exceptions.SdmxException; +import it.bancaditalia.oss.sdmx.util.Configuration; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.Attribute; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; - -import it.bancaditalia.oss.sdmx.client.Parser; -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; -import it.bancaditalia.oss.sdmx.util.Configuration; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale.LanguageRange; +import java.util.Map; +import java.util.logging.Logger; /** * @author Attilio Mattiocco * */ -public class SeriesCountParser implements Parser +public class SeriesCountParser implements Parser> { private static final String sourceClass = SeriesCountParser.class.getSimpleName(); protected static Logger logger = Configuration.getSdmxLogger(); // valid in V.3.0 static final String ANNOTATION = "Annotation"; + + static final String ANNOTATIONS = "Annotations"; static final String ID = "id"; static final String ANNOTATION_TITLE = "AnnotationTitle"; - static final String SERIES_COUNT = "series_count"; + static final String SERIES_COUNT = "series_count"; // TODO, change output to differentiate + static final String OBS_COUNT = "obs_count"; @Override - public Integer parse(XMLEventReader eventReader, List languages) + public Map parse(XMLEventReader eventReader, List languages) throws XMLStreamException, SdmxException { final String sourceMethod = "parse"; logger.entering(sourceClass, sourceMethod); - - boolean isTSNumber = false; + Map result = new HashMap<>(); + String currentKey = null; while (eventReader.hasNext()) { XMLEvent event = eventReader.nextEvent(); @@ -67,21 +71,23 @@ public Integer parse(XMLEventReader eventReader, List languages) StartElement startElement = event.asStartElement(); if (ANNOTATION.equals(startElement.getName().getLocalPart())) { + @SuppressWarnings("unchecked") Iterator attributes = startElement.getAttributes(); while (attributes.hasNext()) { Attribute attr = attributes.next(); - if (ID.equals(attr.getName().getLocalPart()) && attr.getValue().equals(SERIES_COUNT)) - isTSNumber=true; + if (ID.equals(attr.getName().getLocalPart()) && + (attr.getValue().equals(SERIES_COUNT) || attr.getValue().equals(OBS_COUNT))) + currentKey = attr.getValue(); } + } else if (ANNOTATION_TITLE.equals(startElement.getName().getLocalPart()) && currentKey != null) { + result.put(currentKey, Integer.parseInt(eventReader.getElementText())); } - else if (ANNOTATION_TITLE.equals(startElement.getName().getLocalPart()) && isTSNumber) - return Integer.parseInt(eventReader.getElementText()); - + } else if (event.isEndElement() && event.asEndElement().getName().getLocalPart().equals(ANNOTATIONS)) { + return result; } } - - return null; + return result; } } diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/Configuration.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/Configuration.java index b544d206..f4c25322 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/Configuration.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/Configuration.java @@ -76,7 +76,7 @@ public class Configuration protected static final String PROXY_AUTH_BASIC = "basic"; protected static final String PROXY_AUTH_KERBEROS = "Kerberos"; - protected static final String JAVA_SECURITY_KERBEROS_PROP = "java.security.krb5.conf"; + protected static final String JAVA_SECURITY_KERBEROS_PROP = "java.security.krb5.conf"; protected static final String JAVA_SECURITY_AUTH_LOGIN_CONFIG_PROP = "java.security.auth.login.config"; protected static final String HTTP_AUTH_PREF_PROP = "http.auth.preference"; protected static final String SSL_DISABLE_CERT_CHECK_PROP = "ssl.disable.cert.check"; @@ -99,7 +99,7 @@ public class Configuration private static final String TABLE_DUMP_PROP = "table.dump"; private static final String READ_TIMEOUT_PROP = "read.timeout"; private static final String CONNECT_TIMEOUT_PROP = "connect.timeout"; - private static final String UIS_API_KEY_PROP = "uis.api.key"; + private static final String UIS_API_KEY_PROP = "uis.api.key"; private static final String SDMX_CODES_POLICY = "handle.sdmx.codes"; private static final String REVERSE_DUMP_DEFAULT = "FALSE"; private static final String TABLE_DUMP_DEFAULT = "FALSE"; @@ -112,7 +112,7 @@ public class Configuration private static final String CONFIGURATION_FILE_NAME = "configuration.properties"; private static final Properties props = new Properties(); - private static boolean inited = false; + private static boolean inited = false; protected static List SDMX_LANG = LanguageRange.parse("en"); static @@ -141,7 +141,7 @@ protected static void setSdmxLogger() SDMX_LOGGER.addHandler(handler); } - } + } public static Logger getSdmxLogger() { @@ -149,7 +149,7 @@ public static Logger getSdmxLogger() } @Deprecated - public static Properties getConfiguration() + public static Properties getConfiguration() { return props; } @@ -170,7 +170,7 @@ public static String getExternalProviders() } public static int getReadTimeout() - { + { return getProperty(READ_TIMEOUT_PROP, SDMX_DEFAULT_TIMEOUT); } @@ -219,7 +219,7 @@ private static void init() // normal configuration steps: // 1 init LOGGER // Init internal providers - // 2 search configuration in this order: system property, local, global, + // 2 search configuration in this order: system property, local, global, // Configuration class // 3 if none is found, apply defaults: no proxy and INFO Logger setSdmxLogger(); @@ -510,7 +510,7 @@ private static void configureProxy(Properties props) if (login != null) { - login = login.trim(); + login = login.trim(); System.setProperty(JAVA_SECURITY_AUTH_LOGIN_CONFIG_PROP, login); logger.finer(JAVA_SECURITY_AUTH_LOGIN_CONFIG_PROP + " = " + login); } @@ -521,7 +521,7 @@ private static void configureProxy(Properties props) if (conf != null) { - conf = conf.trim(); + conf = conf.trim(); System.setProperty(JAVA_SECURITY_KERBEROS_PROP, conf); logger.finer(JAVA_SECURITY_KERBEROS_PROP + " = " + conf); } @@ -531,7 +531,7 @@ private static void configureProxy(Properties props) logger.warning(JAVA_SECURITY_KERBEROS_PROP + " = " + conf); } - } + } else if (proxyAuth.equalsIgnoreCase(PROXY_AUTH_BASIC)) { String username = props.getProperty(HTTP_AUTH_USER_PROP); @@ -601,7 +601,7 @@ public static String getUISApiKey() public static int getMaxRedirects() { return getProperty(SDMX_MAX_REDIRECTS, 20); - } + } private static String logException(Throwable t) { @@ -644,12 +644,12 @@ public static boolean isDumpXml() public static String getProperty(String name, String def) { return props.getProperty(name, def); - } + } protected static void setProperty(String name, String value) { props.setProperty(name, value); - } + } public static int getProperty(String name, int def) { diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/GetTimeSeries.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/GetTimeSeries.java index 9c0153a1..6e7c2340 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/GetTimeSeries.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/GetTimeSeries.java @@ -33,7 +33,6 @@ */ public class GetTimeSeries { - @SuppressWarnings("resource") public static void main(String[] args) throws IOException{ if(args.length < 2 || args.length > 6 || args.length == 5){ System.err.println("usage: GetTimeSeries [start] [end] [username password]"); @@ -66,7 +65,7 @@ public static void main(String[] args) throws IOException{ } } try { - String result = SdmxClientHandler.dumpTimeSeries(provider, null, query, null, start, end); + String result = SdmxClientHandler.dumpTimeSeries(provider, query, start, end); System.out.println(result); } catch (Exception e) { System.err.println(e.toString()); diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/SdmxLogHandler.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/SdmxLogHandler.java index 286d33df..90d03ea1 100644 --- a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/SdmxLogHandler.java +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/SdmxLogHandler.java @@ -51,6 +51,7 @@ public String format(LogRecord record) return String.format(LOG_FORMAT, new Date(record.getMillis()), record.getLevel().getName(), source, message, throwable); } } + public SdmxLogHandler() { super(); diff --git a/JAVA/src/main/resources/it/bancaditalia/oss/sdmx/helper/bundles/HelperResources.properties b/JAVA/src/main/resources/it/bancaditalia/oss/sdmx/helper/bundles/HelperResources.properties index 6695653d..fa16ee87 100644 --- a/JAVA/src/main/resources/it/bancaditalia/oss/sdmx/helper/bundles/HelperResources.properties +++ b/JAVA/src/main/resources/it/bancaditalia/oss/sdmx/helper/bundles/HelperResources.properties @@ -59,3 +59,5 @@ SDMXHelper.90=SDMX Helper SDMXHelper.91=%d results - %s SDMXHelper.103=Code ID SDMXHelper.104=Code Description +SDMXHelper.105=Series Count: +SDMXHelper.106=Observation Count: diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/ABSClientTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/ABSClientTest.java deleted file mode 100644 index 2133821c..00000000 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/ABSClientTest.java +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client; - -import it.bancaditalia.oss.sdmx.client.SdmxClientHandler; -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; - - - -public class ABSClientTest { - public static void main(String[] args) throws SdmxException{ -// System.err.println(SdmxClientHandler.getFlows("ABS", null)); -// System.err.println(SdmxClientHandler.getDSDIdentifier("ABS", "ABS_NRP9_ASGS")); -// System.err.println(SdmxClientHandler.getDimensions("ABS", "ABS_NRP9_ASGS")); -// System.err.println(SdmxClientHandler.getDataFlowStructure("ABS", "ABS_NRP9_ASGS")); -// System.err.println(SdmxClientHandler.getCodes("ABS", "ABS_NRP9_ASGS", "FREQUENCY")); - System.err.println(SdmxClientHandler.getTimeSeries("ABS", "ATSI_BIRTHS_SUMM/1+4...A", "2000", "2010")); - - - } -} diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/BBKClientTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/BBKClientTest.java deleted file mode 100644 index a080a700..00000000 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/BBKClientTest.java +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client; - -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; - - - -public class BBKClientTest { - public static void main(String[] args) throws SdmxException{ -// System.err.println(SdmxClientHandler.getFlows("BBK", null)); - System.err.println(SdmxClientHandler.getFlow("BBK", "BBASV")); -// System.err.println(SdmxClientHandler.getDSDIdentifier("BBK", "BBASV")); -// System.err.println(SdmxClientHandler.getDimensions("BBK", "BBASV")); -// System.err.println(SdmxClientHandler.getDataFlowStructure("BBK", "BBASV")); -// System.err.println(SdmxClientHandler.getCodes("BBK", "BBASV", "BBK_ACS2_REF_AREA")); -// System.err.println(SdmxClientHandler.getTimeSeries("UIS", "DEM_ECO.DEC.LCU_USD._Z._Z.AF", null, null)); - - } -} diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/ECBClientTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/ECBClientTest.java index f26a419a..12dae094 100644 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/ECBClientTest.java +++ b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/ECBClientTest.java @@ -20,20 +20,18 @@ */ package it.bancaditalia.oss.sdmx.client; -import java.util.Map; - -import it.bancaditalia.oss.sdmx.client.SdmxClientHandler; +import it.bancaditalia.oss.sdmx.exceptions.DataStructureException; import it.bancaditalia.oss.sdmx.exceptions.SdmxException; public class ECBClientTest { - public static void main(String[] args) throws SdmxException{ + public static void main(String[] args) throws SdmxException, DataStructureException{ // System.err.println(SdmxClientHandler.getFlows("ECB", "Exchange*")); // // System.err.println(SdmxClientHandler.getDSDIdentifier("ECB", "MOBILE_EXR")); // -// System.err.println(SdmxClientHandler.getDataFlowStructure("ECB", "EXR")); +// System.out.println(SdmxClientHandler.getDataFlowStructure("ECB", "EXR")); // System.err.println(SdmxClientHandler.getDimensions("ECB", "EXR")); // System.err.println(SdmxClientHandler.getTimeSeries("ECB", "EXR.Q|M|W.USD.EUR.SP00.A", null, null)); // System.err.println(SdmxClientHandler.getTimeSeriesRevisions("ECB", "EXR.M.USD.EUR.SP00.A", null, null, "2015-01-01", true)); @@ -41,6 +39,7 @@ public static void main(String[] args) throws SdmxException{ // System.err.println(SdmxClientHandler.getFlows("ECB", "ICPF")); // System.err.println(SdmxClientHandler.getDimensions("ECB", "ICPF")); // System.err.println(SdmxClientHandler.getCodes("ECB", "ICPF", "FREQ")); -// SdmxClientHandler.getTimeSeries("ECB", "EXR.M.USD.EUR.SP00.A", null, null); + System.err.println(SdmxClientHandler.getTimeSeriesTable("ECB", "EXR.M.USD.EUR.SP00.A", null, null, false, null, false)); +// SdmxClientHandler.getTimeSeries2("DEMO_SDMXV3", "EXR", "A..EUR.SP00.A", "c[FREQ]=A&c[CURRENCY]=USD&c[CURRENCY_DENOMINATOR]=EUR&c[EXR_TYPE]=SP00&c[EXR_SUFFIX]=A", null, null, "none", "none", null, false); } } diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/EstatClientTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/EstatClientTest.java deleted file mode 100644 index fcb15680..00000000 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/EstatClientTest.java +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client; - -import it.bancaditalia.oss.sdmx.client.SdmxClientHandler; -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; - - - -public class EstatClientTest { - public static void main(String[] args) throws SdmxException{ - //System.err.println(SdmxClientHandler.getCodes("EUROSTAT", "aact_ali01", "FREQ")); -// System.err.println(SdmxClientHandler.getDataFlowStructure("EUROSTAT", "DS-008573")); - // System.err.println(SdmxClientHandler.getTimeSeries("EUROSTAT","prc_hicp_midx/..CP00.EU", null, null)); -// System.err.println(SdmxClientHandler.getDimensions("EUROSTAT", "DS-016890")); - System.err.println(SdmxClientHandler.getTimeSeries("EUROSTAT","DS-016890/.DE.FR.87019039.2.VALUE_IN_EUROS.", null, null)); -// System.err.println(SdmxClientHandler.getFlows("EUROSTAT", null)); - - } -} diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/FileTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/FileTest.java deleted file mode 100644 index e63ebee0..00000000 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/FileTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package it.bancaditalia.oss.sdmx.client; - -import java.io.File; - -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; -import it.bancaditalia.oss.sdmx.util.Configuration; - -public class FileTest { - public static void main(String[] args) throws SdmxException { - String directory = "FileProviderTestFiles"; - File f = new File(directory); - f.mkdir(); - Configuration.setDumpPrefix(directory); - SdmxClientHandler.getTimeSeries("ECB", "EXR.M.USD.EUR.SP00.A", null, null); - - SdmxClientHandler.addLocalProvider("TEST", "FileProviderTestFiles", "my test"); - System.err.println(SdmxClientHandler.getDimensions("TEST", "EXR")); - System.err.println(SdmxClientHandler.getDataFlowStructure("TEST", "EXR")); - System.err.println(SdmxClientHandler.getTimeSeries("TEST", "EXR.M.USD.EUR.SP00.A", null, null)); - } -} diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/ILOClientTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/ILOClientTest.java deleted file mode 100644 index 9c302d52..00000000 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/ILOClientTest.java +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client; - -import it.bancaditalia.oss.sdmx.client.SdmxClientHandler; -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; - - - -public class ILOClientTest { - public static void main(String[] args) throws SdmxException{ -// System.err.println(SdmxClientHandler.getFlows("ILO", null)); -// System.err.println(SdmxClientHandler.getDSDIdentifier("ILO", "DF_YI_ALL_EMP_TEMP_SEX_AGE_NB")); -// System.err.println(SdmxClientHandler.getDataFlowStructure("ILO", "DF_YI_ALL_EMP_TEMP_SEX_AGE_NB")); -// System.err.println(SdmxClientHandler.getDimensions("ILO", "DF_YI_ALL_EMP_TEMP_SEX_AGE_NB")); -// System.err.println(SdmxClientHandler.getCodes("ILO", "DF_YI_ALL_EMP_TEMP_SEX_AGE_NB", "COUNTRY")); - System.err.println(SdmxClientHandler.getTimeSeries("ILO", "DF_YI_ALL_EMP_TEMP_SEX_AGE_NB/YI.MEX.A....", null, null)); -// System.err.println(SdmxClientHandler.getDimensions("ILO", "DF_YI_ALL_EMP_TEMP_SEX_AGE_NB")); - } -} diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/IMFClientTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/IMFClientTest.java deleted file mode 100644 index 139564b6..00000000 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/IMFClientTest.java +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client; - -import it.bancaditalia.oss.sdmx.client.SdmxClientHandler; -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; - - - -public class IMFClientTest { - public static void main(String[] args) throws SdmxException{ - System.err.println(SdmxClientHandler.getDSDIdentifier("IMF", "PGI")); - System.err.println(SdmxClientHandler.getDimensions("IMF", "PGI")); - System.err.println(SdmxClientHandler.getDataFlowStructure("IMF", "PGI")); - System.err.println(SdmxClientHandler.getCodes("IMF", "PGI", "REF_AREA")); - System.err.println(SdmxClientHandler.getTimeSeries("IMF", "PGI.US....", "1980", "2010")); - - } -} diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/INSEEClientTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/INSEEClientTest.java deleted file mode 100644 index aeabe3c5..00000000 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/INSEEClientTest.java +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client; - -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; - - - -public class INSEEClientTest { - public static void main(String[] args) throws SdmxException{ - //System.err.println(SdmxClientHandler.getTimeSeries("INSEE", "BALANCE-PAIEMENTS/M.BALANCE_DES_PAIEMENTS.CREDITS.205.VALEUR_ABSOLUE.FE.EUROS.BRUT.SO", null, null)); - System.err.println(SdmxClientHandler.getFlow("INSEE", "BALANCE-PAIEMENTS")); - } -} diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/InegiClientTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/InegiClientTest.java deleted file mode 100644 index 9b4d0839..00000000 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/InegiClientTest.java +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client; - -import it.bancaditalia.oss.sdmx.client.SdmxClientHandler; -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; - - - -public class InegiClientTest { - public static void main(String[] args) throws SdmxException{ -// System.err.println(SdmxClientHandler.getFlows("INEGI", null)); -// System.err.println(SdmxClientHandler.getDSDIdentifier("INEGI", "DF_STEI")); -// System.err.println(SdmxClientHandler.getDimensions("INEGI", "DF_STEI")); - System.err.println(SdmxClientHandler.getDataFlowStructure("INEGI", "DF_STEI")); -// System.err.println(SdmxClientHandler.getCodes("INEGI", "DF_STEI", "FREQ")); - System.err.println(SdmxClientHandler.getTimeSeries("INEGI", "DF_STEI/..C1161+C1162+C5004.....", "1980", "2010")); - - } -} diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/IstatClientTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/IstatClientTest.java deleted file mode 100644 index 3cab6cc4..00000000 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/IstatClientTest.java +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client; - -import it.bancaditalia.oss.sdmx.client.SdmxClientHandler; -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; - - - -public class IstatClientTest { - public static void main(String[] args) throws SdmxException{ -// System.err.println(SdmxClientHandler.getFlows("ISTAT", null)); -// System.err.println(SdmxClientHandler.getDSDIdentifier("ISTAT", "144_125")); -// System.err.println(SdmxClientHandler.getDataFlowStructure("ISTAT", "144_125")); -// System.err.println(SdmxClientHandler.getDimensions("ISTAT", "144_125")); - System.err.println(SdmxClientHandler.getTimeSeries("ISTAT", "169_745/M.00ST.IT.4.55", null, null)); - - } -} diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/NBBClientTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/NBBClientTest.java deleted file mode 100644 index 39ef86c7..00000000 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/NBBClientTest.java +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client; - -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; - - - -public class NBBClientTest { - public static void main(String[] args) throws SdmxException{ - SdmxClientHandler.setPreferredLanguage("fr"); - System.err.println(SdmxClientHandler.getFlows("NBB", null)); - - } -} diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/OecdClientTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/OecdClientTest.java deleted file mode 100644 index 3e242c60..00000000 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/OecdClientTest.java +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client; - -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; - - - -public class OecdClientTest { - public static void main(String[] args) throws SdmxException{ -// System.err.println(SdmxClientHandler.getFlows("OECD", null)); -// System.err.println(SdmxClientHandler.getDSDIdentifier("OECD", "QNA")); -// System.err.println(SdmxClientHandler.getDimensions("OECD", "QNA")); - System.err.println(SdmxClientHandler.getDataFlowStructure("OECD", "QNA")); -// System.err.println(SdmxClientHandler.getTimeSeries("OECD", "QNA.ITA.B1_GE.CARSA.Q", "2000", "2010")); - //System.err.println(SdmxClientHandler.getTimeSeries("OECD", "KEI.*.*.*.*", "2000", "2010")); - System.err.println(SdmxClientHandler.getTimeSeries("OECD", "G20_PRICES.CAN.CPALTT01.IXOB.M", "2000", "2010")); - -// System.err.println(SdmxClientHandler.getCodes("OECD", "QNA", "SUBJECT")); - } -} diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/SASHandlerTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/SASHandlerTest.java index cefa0cbe..accb6ad4 100644 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/SASHandlerTest.java +++ b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/SASHandlerTest.java @@ -21,7 +21,6 @@ package it.bancaditalia.oss.sdmx.client; -import it.bancaditalia.oss.sdmx.client.SASClientHandler; import it.bancaditalia.oss.sdmx.exceptions.SdmxException; public class SASHandlerTest { diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/UNDATAClientTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/UNDATAClientTest.java deleted file mode 100644 index 8f948b84..00000000 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/UNDATAClientTest.java +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client; - -import it.bancaditalia.oss.sdmx.client.SdmxClientHandler; -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; - - - -public class UNDATAClientTest { - public static void main(String[] args) throws SdmxException{ - System.err.println(SdmxClientHandler.getFlows("UNDATA", null)); - System.err.println(SdmxClientHandler.getFlow("UNDATA", "DF_UNDATA_COUNTRYDATA")); - System.err.println(SdmxClientHandler.getDSDIdentifier("UNDATA", "DF_UNData_UNFCC")); - System.err.println(SdmxClientHandler.getDimensions("UNDATA", "DF_UNData_UNFCC")); - System.err.println(SdmxClientHandler.getDataFlowStructure("UNDATA", "DF_UNData_UNFCC")); - System.err.println(SdmxClientHandler.getCodes("UNDATA", "DF_UNDATA_COUNTRYDATA", "LOCATION")); - System.err.println(SdmxClientHandler.getTimeSeries("UNDATA", "DF_UNDATA_COUNTRYDATA/...U....", "2010", "2015")); - - } -} diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/WBClientTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/WBClientTest.java deleted file mode 100644 index b3eae66d..00000000 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/WBClientTest.java +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client; - -import it.bancaditalia.oss.sdmx.client.SdmxClientHandler; -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; - - - -public class WBClientTest { - public static void main(String[] args) throws SdmxException{ -// System.err.println(SdmxClientHandler.getFlows("WB", null)); -// System.err.println(SdmxClientHandler.getFlow("WB", "WDI")); -// System.err.println(SdmxClientHandler.getDSDIdentifier("WB", "WDI")); -// System.err.println(SdmxClientHandler.getDimensions("WB", "WDI")); -// System.err.println(SdmxClientHandler.getDataFlowStructure("WB", "WDI")); -// System.err.println(SdmxClientHandler.getCodes("WB", "WDI", "REF_AREA")); - System.err.println(SdmxClientHandler.getTimeSeries("WB", "WDI.usa.sp_pop_totl", "2003", "2005")); - - } -} diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/WITSClientTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/WITSClientTest.java deleted file mode 100644 index 5c058e7b..00000000 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/client/WITSClientTest.java +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright 2010,2014 Bank Of Italy -* -* Licensed under the EUPL, Version 1.1 or - as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: -* -* -* http://ec.europa.eu/idabc/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. -*/ -package it.bancaditalia.oss.sdmx.client; - -import it.bancaditalia.oss.sdmx.client.SdmxClientHandler; -import it.bancaditalia.oss.sdmx.exceptions.SdmxException; - - - -public class WITSClientTest { - public static void main(String[] args) throws SdmxException{ -// System.err.println(SdmxClientHandler.getFlows("WITS", null)); -// System.err.println(SdmxClientHandler.getDimensions("WITS", "DF_WITS_Tariff_TRAINS")); - System.err.println(SdmxClientHandler.getDSDIdentifier("WITS", "DF_WITS_Tariff_TRAINS")); - System.err.println(SdmxClientHandler.getDataFlowStructure("WITS", "DF_WITS_Tariff_TRAINS")); -// System.err.println(SdmxClientHandler.getTimeSeries("WITS", "EXR.Q|M|W.USD.EUR.SP00.A", null, null)); - - } -} diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/CodesIT.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/CodesIT.java index 3e815a29..fee559a3 100644 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/CodesIT.java +++ b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/CodesIT.java @@ -28,15 +28,18 @@ public static Collection data() { "ABS", "ATSI_BIRTHS_SUMM", 0, new String[][] { { "19", "Births where only mother Aboriginal or Torres Strait Islander" } } }, { "ECB", "EXR", 0, new String[][] { { "D", "Daily" } } }, + { "DEMO_SDMXV3", "EXR", 0, new String[][] { { "D", "Daily" } } }, { "WITS", "DF_WITS_Tariff_TRAINS", 0, new String[][] {} }, { "UNDATA", "DF_UNDATA_COUNTRYDATA", 0, new String[][] { { "3A", "Three-year average" } } }, - { "ISTAT", "144_125", 0, new String[][] { { "D", "giornaliero" } } }, - { "ISTAT_RI", "163_24", 0, new String[][] { { "D", "giornaliero" } } }, + { "ISTAT", "144_125", 0, new String[][] { { "D", "daily" } } }, + { "ISTAT_RI", "163_24", 0, new String[][] { { "D", "daily" } } }, { "INSEE", "CNA-2010-CONSO-SI", 0, new String[][] { { "T", "Quarterly" } } }, { "ILO", "DF_EMP_TEMP_SEX_AGE_NB", 0, new String[][] { { "ABW", "Aruba" } } }, { "EUROSTAT", "prc_hicp_midx", 0, new String[][] { { "D", "Daily" } } }, { "IMF2", "DS-WHDREO", 0, new String[][] { { "D", "Daily" } } }, { "OECD", "QNA", 0, new String[][] { { "G-7", "G7" } } }, + { "OECD_NEW", "DSD_NAMAIN1@DF_QNA_EXPENDITURE_CAPITA", 0, new String[][] { { "Q", "Quarterly" } } }, + { "OECD_SDMXV3", "DSD_NAMAIN1@DF_QNA_EXPENDITURE_CAPITA", 0, new String[][] { { "Q", "Quarterly" } } }, { "BBK", "BBASV", 0, new String[][] { { "A", "Annual" } } }, { "WB", "WDI", 1, new String[][] { { "SM_POP_NETM", "Net migration" } } } }; diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/DataflowsIT.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/DataflowsIT.java index 570c59d0..e103e91f 100644 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/DataflowsIT.java +++ b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/DataflowsIT.java @@ -26,6 +26,7 @@ public static Collection data() { { { "ABS", null, "ATSI_BIRTHS_SUMM", "Aboriginal and Torres Strait Islander births and confinements, summary, by state" }, { "ECB", "*Exchange*", "EXR", "Exchange Rates" }, + { "DEMO_SDMXV3", "*Exchange*", "EXR", "Exchange Rates" }, { "EUROSTAT", "PRC_HICP_MIDX", "PRC_HICP_MIDX", "HICP - monthly data (index)" }, { "ILO", "*DF_EMP_TEMP_SEX_AGE_NB*", "DF_EMP_TEMP_SEX_AGE_NB", "Employment by sex and age" }, { "IMF2", "DS-WHDREO", "DS-WHDREO", "Western Hemisphere Regional Economic Outlook (WHDREO)" }, @@ -34,8 +35,10 @@ public static Collection data() { { "WB", "WDI", "WDI", "World Development Indicators" }, { "UNDATA", null, "DF_UNDATA_COUNTRYDATA", "SDMX-CountryData" }, { "OECD", "AEO", "AEO", "African Economic Outlook" }, - { "ISTAT_RI", null, "163_24", "Principali aggregati trimestrali di Contabilit Nazionale" }, - { "ISTAT", null, "144_125", "Nic - annuali sino al 2010" }, + { "OECD_NEW", "*DF_QNA_EXPENDITURE_CAPITA","DSD_NAMAIN1@DF_QNA_EXPENDITURE_CAPITA","Quarterly GDP per capita" }, + { "OECD_SDMXV3", "*DF_QNA_EXPENDITURE_CAPITA","DSD_NAMAIN1@DF_QNA_EXPENDITURE_CAPITA","Quarterly GDP per capita" }, + { "ISTAT_RI", null, "163_24", "National Accounts quarterly main aggregates" }, + { "ISTAT", null, "144_125", "Nic - annual data until 2010" }, { "BBK", null, "BBASV", "Deutsche Bundesbank, Statistics on Insurance Corporations (Solvency I + II)" } }, 0); } diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/DimensionsIT.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/DimensionsIT.java index 865ff5f6..5b4ddcb1 100644 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/DimensionsIT.java +++ b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/DimensionsIT.java @@ -25,18 +25,21 @@ public class DimensionsIT public static Collection data() { return FilterProvidersToTest.filter(new Object[][] { - { "ABS", "ATSI_BIRTHS_SUMM", 0, "MEASURE", "ABS/CL_BIRTHS_MEASURE/1.0.0" }, + { "ABS", "ATSI_BIRTHS_SUMM", 0, "MEASURE", "ABS/CL_BIRTHS_MEASURE/1.0.0" }, { "ECB", "EXR", 0, "FREQ", "ECB/CL_FREQ/1.0", }, + { "DEMO_SDMXV3", "EXR", 0, "FREQ", "ECB/CL_FREQ/1.0", }, { "WITS", "DF_WITS_Tariff_TRAINS", 0, "FREQ", "WBG_WITS/CL_FREQ_WITS/1.0", }, { "UNDATA", "DF_UNDATA_COUNTRYDATA", 0, "FREQ", "IAEG/CL_FREQ_MDG/1.0", }, { "ISTAT", "144_125", 0, "FREQ", "IT1/CL_FREQ/1.0", }, - { "ISTAT_RI", "144_125", 0, "FREQ", "IT1/CL_FREQ/1.0", }, + { "ISTAT_RI", "101_1015", 0, "FREQ", "IT1/CL_FREQ/1.0", }, { "INSEE", "CNA-2010-CONSO-SI", 0, "FREQ", "FR1/CL_PERIODICITE/1.0", }, { "INEGI", "DF_STEI", 0, "REF_AREA", "SDMX/CL_AREA/1.0", }, { "ILO", "DF_EMP_TEMP_SEX_AGE_NB", 0, "REF_AREA", "ILO/CL_AREA/1.0", }, - { "EUROSTAT", "prc_hicp_midx", 0, "FREQ", "ESTAT/CL_FREQ/1.0", }, + { "EUROSTAT", "prc_hicp_midx", 0, "freq", "ESTAT/FREQ/3.2", }, { "IMF2", "DS-WHDREO", 0, "FREQ", "IMF/CL_FREQ", }, { "OECD", "QNA", 0, "LOCATION", "OECD/CL_QNA_LOCATION", }, + { "OECD_NEW", "DSD_NAMAIN1@DF_QNA_EXPENDITURE_CAPITA",0, "FREQ", "SDMX/CL_FREQ/2.1", }, + { "OECD_SDMXV3", "DSD_NAMAIN1@DF_QNA_EXPENDITURE_CAPITA",0, "FREQ", "SDMX/CL_FREQ/2.1", }, { "WB", "WDI", 1, "SERIES", "WB/CL_SERIES_WDI/1.0", }, { "BBK", "BBASV", 0, "BBK_STD_FREQ", "BBK/CL_BBK_STD_FREQ/1.0", } }, 0); diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/FilterProvidersToTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/FilterProvidersToTest.java index 07cb1bc6..d8c33eee 100644 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/FilterProvidersToTest.java +++ b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/FilterProvidersToTest.java @@ -11,15 +11,18 @@ public class FilterProvidersToTest { private static final Set keepProviders = new HashSet<>(Arrays.asList(new String[] { -// "ABS", +// "ABS", //glitching "ECB", + "DEMO_SDMXV3", "EUROSTAT", "ILO", "INSEE", - "IMF2", +// "IMF2", // has rate limit "ISTAT", "ISTAT_RI", "OECD", + "OECD_NEW", + "OECD_SDMXV3", "UNDATA", "WITS", "BBK" diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/SDMXReferenceIT.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/SDMXReferenceIT.java index a39403de..4afa22a1 100644 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/SDMXReferenceIT.java +++ b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/SDMXReferenceIT.java @@ -24,13 +24,16 @@ public static Collection data() { { { "ABS", "QBIS", "ABS", "QBIS" }, { "ECB", "EXR", "ECB", "ECB_EXR1" }, + { "DEMO_SDMXV3", "EXR", "ECB", "ECB_EXR1" }, { "WITS", "DF_WITS_Tariff_TRAINS", "WBG_WITS", "TARIFF_TRAINS" }, { "WB", "WDI", null, "WDI" }, { "UNDATA", "DF_UNDATA_COUNTRYDATA", "UNSD", "CountryData" }, { "OECD", "QNA", null, "QNA" }, + { "OECD_NEW", "DSD_NAMAIN1@DF_QNA_EXPENDITURE_CAPITA","OECD.SDD.NAD", "DSD_NAMAIN1" }, + { "OECD_SDMXV3", "DSD_NAMAIN1@DF_QNA_EXPENDITURE_CAPITA","OECD.SDD.NAD", "DSD_NAMAIN1" }, { "NBB", "AFCSURV", null, "AFCSURV" }, { "ISTAT", "144_125", null, "DCSP_NICDUE" }, - { "ISTAT_RI", "163_24", null, "DCCN_QNA" }, + { "ISTAT_RI", "163_24", null, "DCCN_QNA" }, { "INSEE", "CNA-2010-CONSO-SI", "FR1", "CNA-2010-CONSO-SI" }, { "IMF2", "DS-WHDREO", null, "WHDREO" }, { "ILO", "DF_EMP_TEMP_SEX_AGE_NB", "ILO", "EMP_TEMP_SEX_AGE_NB" }, diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/TimeSeriesFromIDsIT.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/TimeSeriesFromIDsIT.java index faf2d8f6..27208b19 100644 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/TimeSeriesFromIDsIT.java +++ b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/it/TimeSeriesFromIDsIT.java @@ -28,6 +28,7 @@ public static Collection data() { { "WB", "WDI.A.SP_POP_TOTL.USA", "2000", "2010", 0, null, "WDI.A.SP_POP_TOTL.USA" }, { "UNDATA", "DF_UNDATA_COUNTRYDATA/A...U....", "2010", "2015", 172, null, null }, { "ABS", "ATSI_BIRTHS_SUMM/1...A", "2000", "2010", 16, null, null }, + { "DEMO_SDMXV3", "EXR/.GBP...", null, null, 8, null, null }, { "ECB", "EXR/.GBP+USD...", null, null, 16, null, null }, { "ECB", "EXR.*.USD|GBP.EUR.SP00.A", "2000", "2010", 10, null, null }, { "ECB", "EXR.A.USD.EUR.SP00.A;EXR.M.USD.EUR.SP00.A", "2000", "2010", 2, null, null }, @@ -37,6 +38,8 @@ public static Collection data() { { "ISTAT_RI", "163_24/Q.........2022M11", null, null, 0, null, "163_24.Q.IT.B1G_B_W2_S1._T.Z.Z.L_2015.N.B.2022M11" }, { "ISTAT", "115_362/M....", null, null, 0, null, "115_362.M.F.N.IT.CONS_PROD" }, { "OECD", "QNA.ITA.B1_GE.CARSA.Q", "2000", "2010", 0, "2000-Q1", "QNA.ITA.B1_GE.CARSA.Q" }, + { "OECD_NEW", "DSD_NAMAIN1@DF_QNA_EXPENDITURE_CAPITA.Q.Y.ISR.S1.S1.B1GQ_POP._Z._Z._Z.USD_PPP_PS.V.LA.T0102", "2000", "2010", 0, "2000-Q1", "DSD_NAMAIN1@DF_QNA_EXPENDITURE_CAPITA.Q.Y.ISR.S1.S1.B1GQ_POP._Z._Z._Z.USD_PPP_PS.V.LA.T0102" }, + { "OECD_SDMXV3","DSD_NAMAIN1@DF_QNA_EXPENDITURE_CAPITA.Q.Y.ISR.S1.S1.B1GQ_POP._Z._Z._Z.USD_PPP_PS.V.LA.T0102", "2000", "2010", 0, "2000-Q1", "DSD_NAMAIN1@DF_QNA_EXPENDITURE_CAPITA.Q.Y.ISR.S1.S1.B1GQ_POP._Z._Z._Z.USD_PPP_PS.V.LA.T0102" }, { "EUROSTAT", "PRC_HICP_MIDX/..CP00.EU+DE+FR", "2000", "2013-08", 0, "2000-01", "PRC_HICP_MIDX.M.I05.CP00.DE" }, { "BBK", "BBASV/Q.DE.M.KV.A10.T.1.AT.S1._T.EUR", "2017-Q1", "2017-Q4", 0, "2017-Q1", "BBASV.Q.DE.M.KV.A10.T.1.AT.S1._T.EUR" } }, 0); @@ -52,7 +55,7 @@ public static Collection data() { @Test public void timeSeriesFromID() throws SdmxException { - List> res = SdmxClientHandler.getTimeSeries(provider, query, start, end); + List> res = SdmxClientHandler.getTimeSeries(provider, query, start, end, false, null, false); assertNotNull("Null time series result", res); if (expectedCount == 0) assertTrue("No time series returned", res.size() > 0); diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/ut/AllTests.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/ut/AllTests.java index bffd3565..03fd97d7 100644 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/ut/AllTests.java +++ b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/ut/AllTests.java @@ -24,17 +24,20 @@ import it.bancaditalia.oss.sdmx.it.SDMXReferenceIT; import it.bancaditalia.oss.sdmx.it.DataflowsIT; +import it.bancaditalia.oss.sdmx.it.DimensionsIT; import it.bancaditalia.oss.sdmx.it.CodesIT; import it.bancaditalia.oss.sdmx.it.TimeSeriesFromIDsIT; @RunWith(Suite.class) @Suite.SuiteClasses( { SdmxInterfaceTest.class, + DimensionsIT.class, CodesIT.class, SDMXReferenceIT.class, ProxyTest.class, RestQueryBuilderTest.class, DataflowsIT.class, - TimeSeriesFromIDsIT.class + TimeSeriesFromIDsIT.class, + TimeSeriesFromFiltersTest.class }) public class AllTests { } diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/ut/SdmxInterfaceTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/ut/SdmxInterfaceTest.java index f8671b53..e24ee23c 100644 --- a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/ut/SdmxInterfaceTest.java +++ b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/ut/SdmxInterfaceTest.java @@ -21,6 +21,7 @@ package it.bancaditalia.oss.sdmx.ut; +import static it.bancaditalia.oss.sdmx.api.SDMXVersion.V2; import static org.junit.Assert.assertNotNull; import java.net.MalformedURLException; @@ -38,8 +39,7 @@ public class SdmxInterfaceTest @Test public void testGetAddProvider() throws SdmxException, MalformedURLException { - SdmxClientHandler.addProvider("TEST", "http://sdw-wsrest.ecb.europa.eu/service", false, false, false, - "test provider"); + SdmxClientHandler.addProvider("TEST", "http://sdw-wsrest.ecb.europa.eu/service", false, false, false, "test provider", V2); GenericSDMXClient a = SDMXClientFactory.createClient("TEST"); assertNotNull("Add Provider failed", a); } @@ -206,40 +206,40 @@ public void testGetCodesFail8() throws SdmxException @Test(expected = SdmxException.class) public void testGetTimeSeriesFail1() throws SdmxException { - SdmxClientHandler.getTimeSeries(null, "EXR.A.GBP+USD.EUR.SP00.A", null, null); + SdmxClientHandler.getTimeSeries(null, "EXR.A.GBP+USD.EUR.SP00.A", null, null, false, null, false); } @Test(expected = SdmxException.class) public void testGetTimeSeriesFail2() throws SdmxException { - SdmxClientHandler.getTimeSeries("", "EXR.A.GBP+USD.EUR.SP00.A", null, null); + SdmxClientHandler.getTimeSeries("", "EXR.A.GBP+USD.EUR.SP00.A", null, null, false, null, false); } @Test(expected = SdmxException.class) public void testGetTimeSeriesFail3() throws SdmxException { - SdmxClientHandler.getTimeSeries("DUMMY", "EXR.A.USD.EUR.SP00.A", null, null); + SdmxClientHandler.getTimeSeries("DUMMY", "EXR.A.USD.EUR.SP00.A", null, null, false, null, false); } @Test(expected = SdmxException.class) public void testGetTimeSeriesFail4() throws SdmxException { - //dataflow cannot be in series key and in dataflo argument - SdmxClientHandler.getTimeSeries("ECB", "EXR", "EXR.A.USD.EUR.SP00.A", null, null, null, false, null, false); + //dataflow cannot be in series key and in dataflow argument + SdmxClientHandler.getTimeSeries2("ECB", "EXR", "EXR.A.USD.EUR.SP00.A", null, null, null, "all", "all", null, false); } @Test(expected = SdmxException.class) public void testGetTimeSeriesFail5() throws SdmxException { //dataflow must be present if series key is not specified at all - SdmxClientHandler.getTimeSeries("ECB", null, null, "c[FREQ]=A", null, null, false, null, false); + SdmxClientHandler.getTimeSeries2("ECB", null, null, "c[FREQ]=A", null, null, "all", "all", null, false); } @Test(expected = SdmxException.class) public void testGetTimeSeriesFail6() throws SdmxException { //dataflow must be present as argument or in series key - no results here - SdmxClientHandler.getTimeSeries("ECB", null, "A.USD.EUR.SP00.A", "c[FREQ]=A", null, null, false, null, false); + SdmxClientHandler.getTimeSeries2("ECB", null, "A.USD.EUR.SP00.A", "c[FREQ]=A", null, null, "all", "all", null, false); } /* TODO: Move to IT tests diff --git a/JAVA/stata_src/it/bancaditalia/oss/sdmx/client/StataClientHandler.java b/JAVA/stata_src/it/bancaditalia/oss/sdmx/client/StataClientHandler.java index 2a6aa530..a2f6c3d9 100644 --- a/JAVA/stata_src/it/bancaditalia/oss/sdmx/client/StataClientHandler.java +++ b/JAVA/stata_src/it/bancaditalia/oss/sdmx/client/StataClientHandler.java @@ -21,6 +21,9 @@ package it.bancaditalia.oss.sdmx.client; +import static it.bancaditalia.oss.sdmx.api.SDMXVersion.V2; +import static it.bancaditalia.oss.sdmx.api.SDMXVersion.V3; + import java.util.List; import java.util.Map.Entry; import java.util.logging.Level; @@ -31,6 +34,7 @@ import it.bancaditalia.oss.sdmx.api.BaseObservation; import it.bancaditalia.oss.sdmx.api.PortableTimeSeries; +import it.bancaditalia.oss.sdmx.api.SDMXVersion; import it.bancaditalia.oss.sdmx.helper.SDMXHelper; import it.bancaditalia.oss.sdmx.util.Configuration; @@ -111,7 +115,7 @@ else if (meta.equalsIgnoreCase("2")) try { int dataLength = 0; - tslist = SdmxClientHandler.getTimeSeries(provider, null, tsKey, null, start, end, false, null, false); + tslist = SdmxClientHandler.getTimeSeries(provider, tsKey, start, end, false, null, false); if (tslist == null) { SFIToolkit.displayln("The query did not complete correctly. Check java traces for details."); @@ -292,6 +296,7 @@ public static int addProvider(String[] args) boolean needsURLEncoding = false; boolean supportsCompression = false; String description = ""; + SDMXVersion sdmxVersion = V2; if (args.length >= 3 && !args[2].isEmpty()) { @@ -309,11 +314,14 @@ public static int addProvider(String[] args) { description = args[5]; } + if (args.length >= 7 && !args[6].isEmpty()) + { + sdmxVersion = args[5] == "V2" ? V2 : V3; + } try { - SdmxClientHandler.addProvider(name, endpoint, needsCredentials, needsURLEncoding, supportsCompression, - description); + SdmxClientHandler.addProvider(name, endpoint, needsCredentials, needsURLEncoding, supportsCompression, description, sdmxVersion); } catch (Exception e) { From ac9dac38961c5253554a0ad529d8d193564be5bd Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 14:39:13 +0100 Subject: [PATCH 66/82] removing old files --- .../it/bancaditalia/oss/sdmx/helper/Thumbs.db | Bin 13824 -> 0 bytes JAVA/src/site/site.xml | 22 ------------------ 2 files changed, 22 deletions(-) delete mode 100644 JAVA/src/main/resources/it/bancaditalia/oss/sdmx/helper/Thumbs.db delete mode 100644 JAVA/src/site/site.xml diff --git a/JAVA/src/main/resources/it/bancaditalia/oss/sdmx/helper/Thumbs.db b/JAVA/src/main/resources/it/bancaditalia/oss/sdmx/helper/Thumbs.db deleted file mode 100644 index 9af35f1360bdc1d0b01da416d900ec4290000181..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13824 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 R{ - - - - - - - - - - - - - - - - - - - - From 209e58e07c2bb1ae7728f2ad4eff1e49a3eed36f Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 14:40:37 +0100 Subject: [PATCH 67/82] removing old files --- JAVA/src/site/markdown | 1 - 1 file changed, 1 deletion(-) delete mode 160000 JAVA/src/site/markdown diff --git a/JAVA/src/site/markdown b/JAVA/src/site/markdown deleted file mode 160000 index 682f5f90..00000000 --- a/JAVA/src/site/markdown +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 682f5f90b2484ab88d948cdbaebed821849c6e6c From d95d621f5ff5302a32264b9bd8cafb4fc8d174c1 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 14:55:37 +0100 Subject: [PATCH 68/82] added smdxversion file to repo --- .../main/java/it/bancaditalia/oss/sdmx/api/SDMXVersion.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 JAVA/src/main/java/it/bancaditalia/oss/sdmx/api/SDMXVersion.java diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/api/SDMXVersion.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/api/SDMXVersion.java new file mode 100644 index 00000000..ab0c6b26 --- /dev/null +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/api/SDMXVersion.java @@ -0,0 +1,6 @@ +package it.bancaditalia.oss.sdmx.api; + +public enum SDMXVersion +{ + V2, V3; +} From db9ff5a4f043c8d8b059fa6aa8f94b9e47f92e4c Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 14:56:36 +0100 Subject: [PATCH 69/82] added missing utils --- .../oss/sdmx/util/QueryRunner.java | 358 ++++++++++++++++++ .../oss/sdmx/util/TeeInputStream.java | 37 ++ 2 files changed, 395 insertions(+) create mode 100644 JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/QueryRunner.java create mode 100644 JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/TeeInputStream.java diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/QueryRunner.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/QueryRunner.java new file mode 100644 index 00000000..30f42f88 --- /dev/null +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/QueryRunner.java @@ -0,0 +1,358 @@ +package it.bancaditalia.oss.sdmx.util; + +import static it.bancaditalia.oss.sdmx.event.RestSdmxEventListener.NO_OP_LISTENER; +import static it.bancaditalia.oss.sdmx.util.Configuration.getLanguages; +import static java.lang.System.lineSeparator; +import static java.util.stream.Collectors.joining; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.Proxy; +import java.net.ProxySelector; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLConnection; +import java.nio.charset.StandardCharsets; +import java.nio.file.Paths; +import java.util.Map; +import java.util.Map.Entry; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.zip.GZIPInputStream; +import java.util.zip.InflaterInputStream; +import java.util.zip.ZipInputStream; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; + +import it.bancaditalia.oss.sdmx.client.Parser; +import it.bancaditalia.oss.sdmx.event.OpenEvent; +import it.bancaditalia.oss.sdmx.event.RedirectionEvent; +import it.bancaditalia.oss.sdmx.event.RestSdmxEvent; +import it.bancaditalia.oss.sdmx.event.RestSdmxEventListener; +import it.bancaditalia.oss.sdmx.exceptions.SdmxException; +import it.bancaditalia.oss.sdmx.exceptions.SdmxExceptionFactory; +import it.bancaditalia.oss.sdmx.exceptions.SdmxIOException; +import it.bancaditalia.oss.sdmx.exceptions.SdmxRedirectionException; + +public class QueryRunner +{ + private static final String SOURCE_CLASS = QueryRunner.class.getSimpleName(); + private static final Logger LOGGER = Configuration.getSdmxLogger(); + + private static ProxySelector proxySelector = null; + private static HostnameVerifier hostnameVerifier = null; + private static RestSdmxEventListener dataFooterMessageEventListener = NO_OP_LISTENER; + private static RestSdmxEventListener redirectionEventListener = NO_OP_LISTENER; + private static RestSdmxEventListener openEventListener = NO_OP_LISTENER; + + public static T runQuery(Parser parser, URL query, Map headers) throws SdmxException + { + return runQuery(parser, query, null, null, headers); + } + /** + * Returns a reader over the result of an http query. + * + * @param parser a non-null parser used to get the result from the xml file + * @param query a non-null url to query + * @param headers a non-null map containing headers to use in the REST call + * @return The result of the parsing + * + * @throws SdmxException + */ + public static T runQuery(Parser parser, URL query, String provider, String dumpName, Map headers) throws SdmxException + { + final String sourceMethod = "runQuery"; + LOGGER.entering(SOURCE_CLASS, sourceMethod); + + URLConnection conn = null; + URL url = null; + LOGGER.log(Level.INFO, "Contacting web service with query: {0}", query); + + try + { + int code; + url = query; + URL originalURL = url; + + Proxy proxy = (proxySelector != null ? proxySelector : ProxySelector.getDefault()).select(url.toURI()).get(0); + LOGGER.fine("Using proxy: " + proxy); + + openEventListener.onSdmxEvent(new OpenEvent(url, headers != null ? headers.get("Accept") : "*/*", getLanguages(), proxy)); + + int redirects = 0; + do + { + conn = url.openConnection(proxy); + + if (conn instanceof HttpsURLConnection && hostnameVerifier != null) + { + LOGGER.fine("Using custom HostnameVerifier"); + ((HttpsURLConnection) conn).setHostnameVerifier(hostnameVerifier); + } + + conn.setConnectTimeout(Configuration.getConnectTimeout()); + conn.setReadTimeout(Configuration.getReadTimeout()); + + if (conn instanceof HttpURLConnection) + { + ((HttpURLConnection) conn).setRequestMethod("GET"); + ((HttpURLConnection) conn).setInstanceFollowRedirects(false); + if (headers != null) + for (Entry e: headers.entrySet()) + conn.addRequestProperty(e.getKey(), e.getValue()); + } + + code = conn instanceof HttpURLConnection ? ((HttpURLConnection) conn).getResponseCode() : HttpURLConnection.HTTP_OK; + + // note on PR #227 + // in some cases in https the proxy will not let the connect pass unless a previous call has been done in http. + // this is probably caused by the basic auth being disabled in the java env and it can be fixed + // re-allowing it (-Djdk.http.auth.tunneling.disabledSchemes=) + + if (isRedirection(code)) + { + URL redirection = getRedirectionURL(conn, code); +// if (conn instanceof HttpURLConnection) +// ((HttpURLConnection) conn).disconnect(); + if (isDowngradingProtocolOnRedirect(originalURL, redirection)) + { + throw new SdmxRedirectionException("Downgrading protocol on redirect from '" + originalURL + "' to '" + redirection + "'"); + } + LOGGER.log(Level.INFO, "Redirecting to: {0}", redirection); + RestSdmxEvent event = new RedirectionEvent(url, redirection); + redirectionEventListener.onSdmxEvent(event); + url = redirection; + redirects++; + } + } while (isRedirection(code) && !(isMaxRedirectionReached(redirects))); + + if (isMaxRedirectionReached(redirects)) + { + throw new SdmxRedirectionException("Max redirection reached"); + } + + if (code == HttpURLConnection.HTTP_OK) + { + LOGGER.fine("Connection opened. Code: " + code); + InputStream stream = conn.getInputStream(); + String encoding = conn.getContentEncoding() == null ? "" : conn.getContentEncoding(); + if (encoding.equalsIgnoreCase("gzip")) + stream = new GZIPInputStream(stream); + else if (encoding.equalsIgnoreCase("deflate")) + stream = new InflaterInputStream(stream); + else if (conn.getContentType() != null && conn.getContentType().contains("application/octet-stream")) + { + stream = new ZipInputStream(stream); + ((ZipInputStream) stream).getNextEntry(); + } + + if (Configuration.isDumpXml() && dumpName != null) // skip providers < sdmx v2.1 + { +// String resource = URLDecoder.decode(url.getPath(), StandardCharsets.UTF_8.name()).replaceAll(endpoint.getPath() + "/?", "") +// .replaceFirst("/$", "").replaceAll("\\p{Punct}", "_") + ".xml"; + System.err.println(Configuration.getDumpPrefix()); + File dumpfilename = Paths.get(Configuration.getDumpPrefix(), provider, dumpName + ".xml").toFile(); + if (dumpfilename.getParentFile().exists() || dumpfilename.getParentFile().mkdirs()) + { + LOGGER.info("Dumping xml to file " + dumpfilename.getAbsolutePath()); + stream = new TeeInputStream(stream, dumpfilename); + } + else + LOGGER.warning("Error creating path to dump file: " + dumpfilename); + } + + try (Reader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) + { + XMLInputFactory inputFactory = XMLInputFactory.newFactory(); + preventXXE(inputFactory); + BufferedReader br = skipBOM(reader); + // InputStream in = new ByteArrayInputStream(xmlBuffer); + XMLEventReader eventReader = inputFactory.createXMLEventReader(br); + + return parser.parse(eventReader, getLanguages()); + } + } + else + { + InputStream stream = ((HttpURLConnection) conn).getErrorStream(); + String encoding = conn.getContentEncoding() == null ? "" : conn.getContentEncoding(); + if (encoding.equalsIgnoreCase("gzip")) + stream = new GZIPInputStream(stream); + else if (encoding.equalsIgnoreCase("deflate")) + stream = new InflaterInputStream(stream); + String msg = new BufferedReader(new InputStreamReader(stream)).lines().collect(joining(lineSeparator())); + LOGGER.severe(msg); + SdmxException ex = SdmxExceptionFactory.createRestException(code, null, null); + if (conn instanceof HttpURLConnection) + ((HttpURLConnection) conn).disconnect(); + throw ex; + } + } + catch (IOException e) + { + LOGGER.severe("Exception. Class: " + e.getClass().getName() + " - Message: " + e.getMessage()); + LOGGER.log(Level.FINER, "Exception: ", e); + throw SdmxExceptionFactory.wrap(e); + } + catch (XMLStreamException | URISyntaxException e) + { + LOGGER.severe("Exception caught parsing query results: " + e.getClass().getSimpleName() + ": " + e.getMessage()); + LOGGER.log(Level.FINER, "Exception: ", e); + throw SdmxExceptionFactory.wrap(e); + } + finally + { + if (conn != null && conn instanceof HttpURLConnection) + ((HttpURLConnection) conn).disconnect(); + } + } + + private static boolean isRedirection(int code) + { + return (code >= HttpURLConnection.HTTP_MULT_CHOICE && code <= HttpURLConnection.HTTP_SEE_OTHER) || code == 307; // TEMPORARY REDIRECT + } + + private static URL getRedirectionURL(URLConnection conn, int code) throws SdmxIOException + { + String location = conn.getHeaderField("Location"); + if (location == null || location.isEmpty()) + { + throw new SdmxIOException("The endpoint returned redirect code: " + code + ", but the location was empty.", null); + } + try + { + return new URL(location); + } + catch (MalformedURLException ex) + { + throw new SdmxIOException("The endpoint returned redirect code: " + code + ", but the location was malformed: '" + location + "'.", null); + } + } + + // https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#XMLInputFactory_.28a_StAX_parser.29 + private static void preventXXE(XMLInputFactory factory) + { + if (factory.isPropertySupported(XMLInputFactory.SUPPORT_DTD)) + { + factory.setProperty(XMLInputFactory.SUPPORT_DTD, false); + } + if (factory.isPropertySupported(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES)) + { + factory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false); + } + } + + private static boolean isMaxRedirectionReached(int redirects) + { + return redirects > Configuration.getMaxRedirects(); + } + + /** + * https://en.wikipedia.org/wiki/Downgrade_attack + * + * @param oldUrl + * @param newUrl + * @return + */ + private static boolean isDowngradingProtocolOnRedirect(URL oldUrl, URL newUrl) + { + return "https".equalsIgnoreCase(oldUrl.getProtocol()) && !"https".equalsIgnoreCase(newUrl.getProtocol()); + } + + // some 2.0 providers are apparently adding a BOM + private static BufferedReader skipBOM(Reader xmlBuffer) throws SdmxException + { + BufferedReader br = new BufferedReader(xmlBuffer) { + @Override + public void close() throws IOException + { + LOGGER.fine("GenericDataParser::skipBOM: closing stream."); + super.close(); + } + }; + try + { + // java uses Unicode big endian + char[] cbuf = new char[1]; + // TODO: Source of problems here + br.mark(1); + br.read(cbuf, 0, 1); + LOGGER.fine(String.format("0x%2s", Integer.toHexString(cbuf[0]))); + if ((byte) cbuf[0] == (byte) 0xfeff) + { + LOGGER.fine("BOM found and skipped"); + } + else + { + // TODO: Source of problems here + LOGGER.fine("GenericDataParser::skipBOM: Resetting stream."); + br.reset(); + } + } + catch (IOException e) + { + throw SdmxExceptionFactory.wrap(e); + } + return br; + } + + public static ProxySelector getProxySelector() + { + return proxySelector; + } + + public static void setProxySelector(ProxySelector proxySelector) + { + QueryRunner.proxySelector = proxySelector; + } + + public static HostnameVerifier getHostnameVerifier() + { + return hostnameVerifier; + } + + public static void setHostnameVerifier(HostnameVerifier hostnameVerifier) + { + QueryRunner.hostnameVerifier = hostnameVerifier; + } + + public static RestSdmxEventListener getDataFooterMessageEventListener() + { + return dataFooterMessageEventListener; + } + + public static void setDataFooterMessageEventListener(RestSdmxEventListener dataFooterMessageEventListener) + { + QueryRunner.dataFooterMessageEventListener = dataFooterMessageEventListener; + } + + public static RestSdmxEventListener getRedirectionEventListener() + { + return redirectionEventListener; + } + + public static void setRedirectionEventListener(RestSdmxEventListener redirectionEventListener) + { + QueryRunner.redirectionEventListener = redirectionEventListener; + } + + public static RestSdmxEventListener getOpenEventListener() + { + return openEventListener; + } + + public static void setOpenEventListener(RestSdmxEventListener openEventListener) + { + QueryRunner.openEventListener = openEventListener; + } +} diff --git a/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/TeeInputStream.java b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/TeeInputStream.java new file mode 100644 index 00000000..cf70b112 --- /dev/null +++ b/JAVA/src/main/java/it/bancaditalia/oss/sdmx/util/TeeInputStream.java @@ -0,0 +1,37 @@ +package it.bancaditalia.oss.sdmx.util; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +public class TeeInputStream extends InputStream +{ + private final InputStream source; + private final OutputStream teed; + + public TeeInputStream(InputStream source, File tee) throws FileNotFoundException + { + this.source = source; + this.teed = new FileOutputStream(tee); + } + + @Override + public void close() throws IOException + { + source.close(); + } + + @Override + public int read() throws IOException + { + int c = source.read(); + if (c >= 0) + teed.write(c); + if (c == '\n') + teed.flush(); + return c; + } +} From 71c2707e96cf360aabbbe0201568b1160e7e1896 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 14:58:24 +0100 Subject: [PATCH 70/82] added missing test --- .../sdmx/ut/TimeSeriesFromFiltersTest.java | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 JAVA/src/test/java/it/bancaditalia/oss/sdmx/ut/TimeSeriesFromFiltersTest.java diff --git a/JAVA/src/test/java/it/bancaditalia/oss/sdmx/ut/TimeSeriesFromFiltersTest.java b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/ut/TimeSeriesFromFiltersTest.java new file mode 100644 index 00000000..96936542 --- /dev/null +++ b/JAVA/src/test/java/it/bancaditalia/oss/sdmx/ut/TimeSeriesFromFiltersTest.java @@ -0,0 +1,61 @@ +/* Copyright 2023,2023 Bank Of Italy +* +* Licensed under the EUPL, Version 1.1 or - as soon they +* will be approved by the European Commission - subsequent +* versions of the EUPL (the "Licence"); +* You may not use this work except in compliance with the +* Licence. +* You may obtain a copy of the Licence at: +* +* +* http://ec.europa.eu/idabc/eupl +* +* Unless required by applicable law or agreed to in +* writing, software distributed under the Licence is +* distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +* express or implied. +* See the Licence for the specific language governing +* permissions and limitations under the Licence. +*/ +package it.bancaditalia.oss.sdmx.ut; + +import static org.junit.Assert.assertEquals; + +import java.util.List; + +import org.junit.Test; + +import it.bancaditalia.oss.sdmx.api.PortableTimeSeries; +import it.bancaditalia.oss.sdmx.client.SdmxClientHandler; +import it.bancaditalia.oss.sdmx.exceptions.SdmxException; + +public class TimeSeriesFromFiltersTest +{ + @Test + public void testKeysAndFilters() throws SdmxException + { + //A.GBP+USD.EUR.SP00.A and A.USD.EUR.SP00.A + List> result = SdmxClientHandler.getTimeSeries2("DEMO_SDMXV3", "EXR", "A.GBP+USD.EUR.SP00.A", null, null, null, "all", "all", null, false); + assertEquals(2, result.size()); + //A.GBP+USD.EUR.SP00.A and A.USD.EUR.SP00.A with filter + result = SdmxClientHandler.getTimeSeries2("DEMO_SDMXV3", "EXR", null, "c[FREQ]=A&c[CURRENCY]=USD,GBP&c[EXR_SUFFIX]=A", null, null, "all", "all", null, false); + assertEquals(2, result.size()); + //.USD.EUR.SP00.A + result = SdmxClientHandler.getTimeSeries2("DEMO_SDMXV3", "EXR", ".USD.EUR.SP00.A", null, null, null, "all", "all", null, false); + assertEquals(5, result.size()); + //.USD.EUR.SP00.A with filter + result = SdmxClientHandler.getTimeSeries2("DEMO_SDMXV3", "EXR", null, "c[CURRENCY]=USD&c[CURRENCY_DENOMINATOR]=EUR&c[EXR_TYPE]=SP00&c[EXR_SUFFIX]=A", null, null, "all", "all", null, false); + assertEquals(5, result.size()); + //mix key and filter + result = SdmxClientHandler.getTimeSeries2("DEMO_SDMXV3", "EXR", "A..EUR.SP00.A", "c[FREQ]=A&c[CURRENCY]=USD&c[CURRENCY_DENOMINATOR]=EUR&c[EXR_TYPE]=SP00&c[EXR_SUFFIX]=A", null, null, "all", "all", null, false); + assertEquals(1, result.size()); + //mix key and filter + time + result = SdmxClientHandler.getTimeSeries2("DEMO_SDMXV3", "EXR", "A..EUR.SP00.A", "c[FREQ]=A&c[CURRENCY]=USD&c[CURRENCY_DENOMINATOR]=EUR&c[EXR_TYPE]=SP00&c[EXR_SUFFIX]=A", "2001", "2010", "all", "all", null, false); + assertEquals(1, result.size()); + assertEquals(10, result.get(0).size()); + //mix key and filter + serieskeysonly + result = SdmxClientHandler.getTimeSeries2("DEMO_SDMXV3", "EXR", "A..EUR.SP00.A", "c[FREQ]=A&c[CURRENCY]=USD&c[CURRENCY_DENOMINATOR]=EUR&c[EXR_TYPE]=SP00&c[EXR_SUFFIX]=A", null, null, "none", "none", null, false); + assertEquals(1, result.size()); + } +} \ No newline at end of file From 2b9d6a029538386962e94ccac3ed4d4b499264ec Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 15:02:45 +0100 Subject: [PATCH 71/82] modified yml --- .github/workflows/ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 161a8ad7..f66367fb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,7 +31,9 @@ jobs: # Build project according to SDMX instructions - name: Build JAR - run: cd JAVA && mvn package + run: | + cd JAVA && \ + mvn package # Keep JAR file to use in MATLAB - name: Archive MATLAB JAR for next job From 431acf0fc95d8b97f292b8a29aef6003e877e58d Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 15:57:40 +0100 Subject: [PATCH 72/82] skipped tests for JAVA --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f66367fb..1eb4a978 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,7 +33,7 @@ jobs: - name: Build JAR run: | cd JAVA && \ - mvn package + mvn clean package -Dmaven.test.skip.exec # Keep JAR file to use in MATLAB - name: Archive MATLAB JAR for next job From b19bfffd4b16d5b427c75792daf90e4e8eca8fd9 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 16:00:13 +0100 Subject: [PATCH 73/82] JAR is on java folder only --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1eb4a978..703bcd68 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,7 +40,7 @@ jobs: uses: actions/upload-artifact@v3 with: name: SDMX - path: MATLAB/lib/SDMX.jar + path: JAVA/dist/lib/SDMX.jar if-no-files-found: error retention-days: 1 From 81d2f3526a52bbf4852336de59d52e7a5d9796a3 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 16:03:36 +0100 Subject: [PATCH 74/82] Changed path SDMX JAR --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 703bcd68..a514403b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,7 +40,7 @@ jobs: uses: actions/upload-artifact@v3 with: name: SDMX - path: JAVA/dist/lib/SDMX.jar + path: JAVA/target/SDMX-3.1.0.jar if-no-files-found: error retention-days: 1 From 08cc2adba2ada315ebe5ad38a3025ab57652fc4d Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 16:12:19 +0100 Subject: [PATCH 75/82] updated sdmx jar version --- MATLAB/buildfile.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MATLAB/buildfile.m b/MATLAB/buildfile.m index b04705c8..a7e354ee 100644 --- a/MATLAB/buildfile.m +++ b/MATLAB/buildfile.m @@ -57,7 +57,7 @@ function archiveTask(~) AuthorName = 'Attilio Mattiocco', ... Summary = 'Provides functions to retrieve data and metadata from providers that disseminate data by means of SDMX web services.', ... Description = description, ... - ToolboxJavaPath = "tbx/lib/SDMX.jar", ... + ToolboxJavaPath = "tbx/lib/SDMX-3.1.0.jar", ... ToolboxGettingStartedGuide = 'tbx/doc/GettingStarted.mlx', ... OutputFile = 'releases/SDMX.mltbx', ... MinimumMatlabRelease = 'R2023a'); From 97393eb5c8cd24fa2f5e26bafe0ebc2201748554 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 21:22:47 +0100 Subject: [PATCH 76/82] jar name was not correctly picked --- MATLAB/tbx/sdmx/+sdmx/addProvider.m | 16 +++++++++++++--- MATLAB/tbx/sdmx/+sdmx/getTimeSeries.m | 2 +- MATLAB/tbx/sdmx/+sdmx/getTimeSeriesRevisions.m | 2 +- MATLAB/tbx/sdmx/+sdmx/getTimeSeriesTable.m | 2 +- MATLAB/tbx/sdmx/+sdmx/initClasspath.m | 2 +- 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/MATLAB/tbx/sdmx/+sdmx/addProvider.m b/MATLAB/tbx/sdmx/+sdmx/addProvider.m index 41fc6395..e7a238c1 100644 --- a/MATLAB/tbx/sdmx/+sdmx/addProvider.m +++ b/MATLAB/tbx/sdmx/+sdmx/addProvider.m @@ -1,4 +1,4 @@ -function addProvider(name, endpoint, needsCredentials, needsURLEncoding, supportsCompression, description) +function addProvider(name, endpoint, needsCredentials, needsURLEncoding, supportsCompression, description, sdmxVersion) % Add a new provider to the internal registry. The provider has to be % fully compliant with the SDMX 2.1 specifications % @@ -12,7 +12,8 @@ function addProvider(name, endpoint, needsCredentials, needsURLEncoding, support % needsURLEncoding: set this to true if the provider needs URL encoding % supportsCompression: set this to true if the provider supports stream compression % description: a text description for the provider - % + % sdmxVersion: the sdmx rest api version of the provider (V2 or V3) + % % ############################################################################################# % Copyright 2010,2014 Bank Of Italy % @@ -50,6 +51,15 @@ function addProvider(name, endpoint, needsCredentials, needsURLEncoding, support 'description: a brief text description of the provider\n' ... ])); end + if nargin < 7 + sdmxVersion = it.bancaditalia.oss.sdmx.api.SDMXVersion.V2; + else + if(strcmp(sdmxVersion, 'V2')) + sdmxVersion = it.bancaditalia.oss.sdmx.api.SDMXVersion.V2; + else + sdmxVersion = it.bancaditalia.oss.sdmx.api.SDMXVersion.V3; + end + end if nargin < 6 description = ''; end @@ -65,7 +75,7 @@ function addProvider(name, endpoint, needsCredentials, needsURLEncoding, support %try java code try - it.bancaditalia.oss.sdmx.client.SdmxClientHandler.addProvider(name, endpoint, needsCredentials, needsURLEncoding, supportsCompression, description); + it.bancaditalia.oss.sdmx.client.SdmxClientHandler.addProvider(name, endpoint, needsCredentials, needsURLEncoding, supportsCompression, description, sdmxVersion); catch mexp error('SDMX addProvider() error:\n %s', mexp.message); end diff --git a/MATLAB/tbx/sdmx/+sdmx/getTimeSeries.m b/MATLAB/tbx/sdmx/+sdmx/getTimeSeries.m index e2ec4960..781ad286 100644 --- a/MATLAB/tbx/sdmx/+sdmx/getTimeSeries.m +++ b/MATLAB/tbx/sdmx/+sdmx/getTimeSeries.m @@ -59,7 +59,7 @@ %try java code try - result = it.bancaditalia.oss.sdmx.client.SdmxClientHandler.getTimeSeries(provider, '', id, '', startTime, endTime, false, '', false); + result = it.bancaditalia.oss.sdmx.client.SdmxClientHandler.getTimeSeries(provider, id, startTime, endTime, false, '', false); catch mexp error('SDMX getTimeSeries() error:\n %s', mexp.message); end diff --git a/MATLAB/tbx/sdmx/+sdmx/getTimeSeriesRevisions.m b/MATLAB/tbx/sdmx/+sdmx/getTimeSeriesRevisions.m index b855d533..f529e046 100644 --- a/MATLAB/tbx/sdmx/+sdmx/getTimeSeriesRevisions.m +++ b/MATLAB/tbx/sdmx/+sdmx/getTimeSeriesRevisions.m @@ -72,7 +72,7 @@ %try java code try - result = it.bancaditalia.oss.sdmx.client.SdmxClientHandler.getTimeSeriesTable(provider, '', id, '', startTime, endTime, false, updatedAfter, includeHistory); + result = it.bancaditalia.oss.sdmx.client.SdmxClientHandler.getTimeSeriesTable(provider, id, startTime, endTime, false, updatedAfter, includeHistory); catch mexp error('SDMX getTimeSeries() error:\n %s', mexp.message); end diff --git a/MATLAB/tbx/sdmx/+sdmx/getTimeSeriesTable.m b/MATLAB/tbx/sdmx/+sdmx/getTimeSeriesTable.m index 0ceaebd8..bd589c3d 100644 --- a/MATLAB/tbx/sdmx/+sdmx/getTimeSeriesTable.m +++ b/MATLAB/tbx/sdmx/+sdmx/getTimeSeriesTable.m @@ -60,7 +60,7 @@ %try java code try - result = it.bancaditalia.oss.sdmx.client.SdmxClientHandler.getTimeSeriesTable(provider, '', id, '', startTime, endTime, false, '', false); + result = it.bancaditalia.oss.sdmx.client.SdmxClientHandler.getTimeSeriesTable(provider, id, startTime, endTime, false, '', false); catch mexp error('SDMX getTimeSeries() error:\n %s', mexp.message); end diff --git a/MATLAB/tbx/sdmx/+sdmx/initClasspath.m b/MATLAB/tbx/sdmx/+sdmx/initClasspath.m index 9bc67ac7..57dd80a2 100644 --- a/MATLAB/tbx/sdmx/+sdmx/initClasspath.m +++ b/MATLAB/tbx/sdmx/+sdmx/initClasspath.m @@ -24,7 +24,7 @@ function initClasspath() if jarLoaded ~= 8 mFilesLoaded = exist('sdmxroot.m', 'file'); if mFilesLoaded == 2 - javaaddpath(fullfile(sdmxroot, '/lib/SDMX.jar')); + javaaddpath(dir(fullfile(sdmxroot, '/lib/SDMX*.jar'))); else error('Error: the m-files of the MatSDMX toolbox cannot be found in the MATLAB path'); end From 53cf6aedf3635688933b1849fd142778dd9c22b7 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 21:27:42 +0100 Subject: [PATCH 77/82] all tests pass locally --- MATLAB/tbx/sdmx/+sdmx/initClasspath.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MATLAB/tbx/sdmx/+sdmx/initClasspath.m b/MATLAB/tbx/sdmx/+sdmx/initClasspath.m index 57dd80a2..9396f394 100644 --- a/MATLAB/tbx/sdmx/+sdmx/initClasspath.m +++ b/MATLAB/tbx/sdmx/+sdmx/initClasspath.m @@ -24,7 +24,8 @@ function initClasspath() if jarLoaded ~= 8 mFilesLoaded = exist('sdmxroot.m', 'file'); if mFilesLoaded == 2 - javaaddpath(dir(fullfile(sdmxroot, '/lib/SDMX*.jar'))); + jar = dir(fullfile(sdmxroot, '/lib/SDMX*.jar')); + javaaddpath(fullfile(jar.folder, jar.name)); else error('Error: the m-files of the MatSDMX toolbox cannot be found in the MATLAB path'); end From f13922b479e5176606ad19cfd8caf27343135f31 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 21:36:50 +0100 Subject: [PATCH 78/82] all tests pass locally --- MATLAB/tbx/sdmx/+sdmx/initClasspath.m | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/MATLAB/tbx/sdmx/+sdmx/initClasspath.m b/MATLAB/tbx/sdmx/+sdmx/initClasspath.m index 9396f394..90c98503 100644 --- a/MATLAB/tbx/sdmx/+sdmx/initClasspath.m +++ b/MATLAB/tbx/sdmx/+sdmx/initClasspath.m @@ -20,11 +20,12 @@ % function initClasspath() - jarLoaded = exist('it.bancaditalia.oss.sdmx.helper.SDMXHelper', 'class'); + jarLoaded = exist('it.bancaditalia.oss.sdmx.helper.SDMXHelper', 'class') if jarLoaded ~= 8 mFilesLoaded = exist('sdmxroot.m', 'file'); if mFilesLoaded == 2 - jar = dir(fullfile(sdmxroot, '/lib/SDMX*.jar')); + jar = dir(fullfile(sdmxroot, '/lib/SDMX*.jar')) + version -java javaaddpath(fullfile(jar.folder, jar.name)); else error('Error: the m-files of the MatSDMX toolbox cannot be found in the MATLAB path'); From 01812838d6aa547fabdd188cf6213dd5f3a1b207 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 21:46:13 +0100 Subject: [PATCH 79/82] all tests pass locally --- MATLAB/tbx/sdmx/+sdmx/initClasspath.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MATLAB/tbx/sdmx/+sdmx/initClasspath.m b/MATLAB/tbx/sdmx/+sdmx/initClasspath.m index 90c98503..18368ffe 100644 --- a/MATLAB/tbx/sdmx/+sdmx/initClasspath.m +++ b/MATLAB/tbx/sdmx/+sdmx/initClasspath.m @@ -20,11 +20,11 @@ % function initClasspath() - jarLoaded = exist('it.bancaditalia.oss.sdmx.helper.SDMXHelper', 'class') + jarLoaded = exist('it.bancaditalia.oss.sdmx.helper.SDMXHelper', 'class') %#ok if jarLoaded ~= 8 mFilesLoaded = exist('sdmxroot.m', 'file'); if mFilesLoaded == 2 - jar = dir(fullfile(sdmxroot, '/lib/SDMX*.jar')) + jar = dir(fullfile(sdmxroot, '/lib/SDMX*.jar')) %#ok version -java javaaddpath(fullfile(jar.folder, jar.name)); else From a9b00c70b68562ef2754522b8a2f92ce2242374d Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 21:52:26 +0100 Subject: [PATCH 80/82] checked javaclasspath --- MATLAB/tbx/sdmx/+sdmx/initClasspath.m | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/MATLAB/tbx/sdmx/+sdmx/initClasspath.m b/MATLAB/tbx/sdmx/+sdmx/initClasspath.m index 18368ffe..9396f394 100644 --- a/MATLAB/tbx/sdmx/+sdmx/initClasspath.m +++ b/MATLAB/tbx/sdmx/+sdmx/initClasspath.m @@ -20,12 +20,11 @@ % function initClasspath() - jarLoaded = exist('it.bancaditalia.oss.sdmx.helper.SDMXHelper', 'class') %#ok + jarLoaded = exist('it.bancaditalia.oss.sdmx.helper.SDMXHelper', 'class'); if jarLoaded ~= 8 mFilesLoaded = exist('sdmxroot.m', 'file'); if mFilesLoaded == 2 - jar = dir(fullfile(sdmxroot, '/lib/SDMX*.jar')) %#ok - version -java + jar = dir(fullfile(sdmxroot, '/lib/SDMX*.jar')); javaaddpath(fullfile(jar.folder, jar.name)); else error('Error: the m-files of the MatSDMX toolbox cannot be found in the MATLAB path'); From 807f94235c7e34740544d1ada75e8ab21c75a262 Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 21:54:28 +0100 Subject: [PATCH 81/82] flusing jpath --- MATLAB/tbx/sdmx/+sdmx/getFlows.m | 1 + 1 file changed, 1 insertion(+) diff --git a/MATLAB/tbx/sdmx/+sdmx/getFlows.m b/MATLAB/tbx/sdmx/+sdmx/getFlows.m index 0ebbd153..d2312b41 100644 --- a/MATLAB/tbx/sdmx/+sdmx/getFlows.m +++ b/MATLAB/tbx/sdmx/+sdmx/getFlows.m @@ -32,6 +32,7 @@ % sdmx.initClasspath; + javaclasspath -dynamic if nargin == 0 error(sprintf(['\nUsage: getFlows(provider, pattern)\n\n' ... From 9c2e4e866cb799510de99cfbfa67808170c9476e Mon Sep 17 00:00:00 2001 From: Edu Benet Cerda Date: Tue, 9 Apr 2024 22:00:30 +0100 Subject: [PATCH 82/82] undo --- MATLAB/tbx/sdmx/+sdmx/getFlows.m | 1 - 1 file changed, 1 deletion(-) diff --git a/MATLAB/tbx/sdmx/+sdmx/getFlows.m b/MATLAB/tbx/sdmx/+sdmx/getFlows.m index d2312b41..0ebbd153 100644 --- a/MATLAB/tbx/sdmx/+sdmx/getFlows.m +++ b/MATLAB/tbx/sdmx/+sdmx/getFlows.m @@ -32,7 +32,6 @@ % sdmx.initClasspath; - javaclasspath -dynamic if nargin == 0 error(sprintf(['\nUsage: getFlows(provider, pattern)\n\n' ...