From f268de21a3018cbc0a89db8fcb79dcd9e5db1f88 Mon Sep 17 00:00:00 2001 From: Mihajlo Medjedovic Date: Thu, 13 Jul 2023 13:44:05 +0200 Subject: [PATCH] init --- .git-hooks/commit-msg | 18 + .git-hooks/pre-commit | 11 + .gitea/workflows/build.yaml | 38 + .gitea/workflows/development-test.yaml | 172 + .gitea/workflows/release.yaml | 50 + .gitignore | 19 + .npmrc | 1 + .prettierrc.json | 8 + .releaserc | 22 + .vscode/settings.json | 18 + .woodpecker.yml | 9 + CHANGELOG.md | 1965 + CONTRIBUTING.md | 66 + LICENCE.md | 27 + README.md | 0 client/.dockerignore | 14 + client/.editorconfig | 16 + client/.eslintrc.json | 46 + client/.hintrc | 5 + client/.vscode/.editorconfig | 9 + client/.vscode/launch.json | 15 + client/.vscode/settings.json | 6 + client/Dockerfile | 13 + client/Dockerfile.dev | 8 + client/angular.json | 169 + client/cypress.config.ts | 28 + client/cypress.env.example.json | 4 + client/cypress/fixtures/example.json | 5 + .../cypress/fixtures/excels/15mb_excel.xlsx | Bin 0 -> 15279267 bytes client/cypress/fixtures/excels/5mb_excel.xlsx | Bin 0 -> 5124300 bytes .../fixtures/excels/7th_tab_excel.xlsx | Bin 0 -> 51899 bytes .../MPE_DATADICTIONARY_composite_keys.xlsx | Bin 0 -> 9026 bytes .../MPE_DATADICTIONARY_merged_cells.xlsx | Bin 0 -> 11245 bytes .../MPE_DATADICTIONARY_missing_row.xlsx | Bin 0 -> 11939 bytes .../excels/blank_column_with_header.xlsx | Bin 0 -> 35911 bytes .../fixtures/excels/blank_columns_excel.xlsx | Bin 0 -> 41541 bytes .../excels/duplicate_column_excel.xlsx | Bin 0 -> 50102 bytes .../fixtures/excels/duplicate_row_excel.xlsx | Bin 0 -> 48571 bytes .../fixtures/excels/extra_column_excel.xlsx | Bin 0 -> 48454 bytes .../fixtures/excels/formulas_excel.bak | Bin 0 -> 6510 bytes .../fixtures/excels/formulas_excel.xlsx | Bin 0 -> 6806 bytes .../excels/missing_columns_excel.xlsx | Bin 0 -> 43618 bytes .../fixtures/excels/mixed_content_excel.xlsx | Bin 0 -> 48465 bytes .../fixtures/excels/nodata_rows_excel.xlsx | Bin 0 -> 14517 bytes .../fixtures/excels/regular_excel.xlsx | Bin 0 -> 40524 bytes .../fixtures/excels/regular_excel_macro.xlsm | Bin 0 -> 49048 bytes .../excels/regular_excel_with_delete.bak | Bin 0 -> 23941 bytes .../excels/regular_excel_with_delete.xlsx | Bin 0 -> 23828 bytes .../fixtures/excels/regular_excel_xls.xls | Bin 0 -> 117760 bytes ...surrounded_data_all_cells_empty_excel.xlsx | Bin 0 -> 73107 bytes .../surrounded_data_empty_cells_excel.xlsx | Bin 0 -> 48926 bytes .../excels/surrounded_data_excel.xlsx | Bin 0 -> 48945 bytes .../MPE_DATADICTIONARY_duplicate_keys.xlsx | Bin 0 -> 9164 bytes client/cypress/integration/download.tests.ts | 255 + client/cypress/integration/editor.tests.ts | 257 + client/cypress/integration/excel.tests.ts | 539 + client/cypress/integration/filtering.tests.ts | 383 + client/cypress/integration/licensing.tests.ts | 731 + client/cypress/integration/liveness.tests.ts | 157 + client/cypress/integration/metanav.tests.ts | 61 + client/cypress/integration/viewbox.tests.ts | 629 + client/cypress/plugins/cy-ts-preprocessor.js | 31 + client/cypress/plugins/index.js | 58 + client/cypress/support/commands.ts | 213 + client/cypress/support/index.js | 23 + client/cypress/tsconfig.json | 10 + client/cypress/util/deleteDownloadFolder.ts | 4 + client/cypress/util/helper-functions.ts | 32 + client/cypress/webpack.config.js | 23 + client/karma.conf.js | 45 + client/libraries/ngx-json-viewer-3.2.1.tgz | Bin 0 -> 14488 bytes client/licenseChecker.js | 28 + client/nginx/default.conf | 8 + client/package-lock.json | 31118 ++++++++++++++++ client/package.json | 128 + client/run-cypress-tests.sh | 7 + client/src/app/_globals.ts | 118 + client/src/app/actions/actions.component.html | 40 + client/src/app/actions/actions.component.scss | 0 client/src/app/actions/actions.component.ts | 50 + client/src/app/app-shared.module.ts | 27 + client/src/app/app.component.html | 299 + client/src/app/app.component.scss | 461 + client/src/app/app.component.ts | 279 + client/src/app/app.d.ts | 5 + client/src/app/app.module.ts | 90 + client/src/app/app.routing.ts | 70 + .../approve-details.component.html | 588 + .../approve-details.component.scss | 179 + .../approve-details.component.ts | 407 + client/src/app/approve/approve.component.html | 123 + client/src/app/approve/approve.component.scss | 41 + client/src/app/approve/approve.component.ts | 129 + client/src/app/deploy/deploy.component.html | 100 + client/src/app/deploy/deploy.component.scss | 50 + client/src/app/deploy/deploy.component.ts | 128 + .../automatic/automatic.component.html | 169 + .../automatic/automatic.component.scss | 61 + .../sections/automatic/automatic.component.ts | 185 + .../sections/manual/manual.component.html | 247 + .../sections/manual/manual.component.scss | 4 + .../sections/manual/manual.component.ts | 291 + .../sasjs-configurator.component.html | 76 + .../sasjs-configurator.component.scss | 23 + .../sasjs-configurator.component.ts | 136 + .../src/app/directives/directives.module.ts | 23 + .../app/directives/drag-ndrop.directive.ts | 60 + .../src/app/directives/file-drop.directive.ts | 66 + .../app/directives/file-select.directive.ts | 39 + client/src/app/directives/ng-var.directive.ts | 36 + client/src/app/editor/RowValidation.ts | 7 + .../edit-record/edit-record.component.html | 339 + .../edit-record/edit-record.component.scss | 241 + .../edit-record/edit-record.component.ts | 242 + .../upload-stater.component.html | 8 + .../upload-stater.component.scss | 8 + .../upload-stater/upload-stater.component.ts | 77 + .../src/app/editor/editor-routing.module.ts | 18 + client/src/app/editor/editor.component.html | 836 + client/src/app/editor/editor.component.scss | 223 + client/src/app/editor/editor.component.ts | 3335 ++ client/src/app/editor/editor.module.ts | 43 + .../src/app/editor/models/EditRecordModal.ts | 6 + .../src/app/editor/models/cellValidation.ts | 19 + client/src/app/editor/models/column.ts | 36 + .../models/dynamicExtendedCellValidation.ts | 9 + .../models/edit-record/edit-record-events.ts | 9 + .../models/editor-restrictions.model.ts | 8 + client/src/app/editor/table.ts | 71 + client/src/app/editor/utils/date.utils.ts | 23 + client/src/app/editor/utils/grid.utils.ts | 32 + .../src/app/editor/utils/renderers.utils.ts | 46 + client/src/app/editor/utils/types.utils.ts | 15 + client/src/app/free-tier.config.ts | 36 + client/src/app/group/group.component.html | 143 + client/src/app/group/group.component.scss | 52 + client/src/app/group/group.component.ts | 215 + client/src/app/history/history.component.html | 167 + client/src/app/history/history.component.scss | 37 + client/src/app/history/history.component.ts | 162 + client/src/app/home/home.component.html | 135 + client/src/app/home/home.component.scss | 32 + client/src/app/home/home.component.ts | 199 + client/src/app/home/home.module.ts | 22 + client/src/app/index.ts | 3 + client/src/app/interfaces.ts | 6 + .../app/licensing/licensing.component.html | 149 + .../app/licensing/licensing.component.scss | 52 + .../src/app/licensing/licensing.component.ts | 172 + client/src/app/lineage/lineage.component.html | 410 + client/src/app/lineage/lineage.component.scss | 79 + client/src/app/lineage/lineage.component.ts | 892 + .../src/app/metadata/metadata.component.html | 220 + .../src/app/metadata/metadata.component.scss | 67 + client/src/app/metadata/metadata.component.ts | 384 + client/src/app/models/CellValidationSource.ts | 9 + client/src/app/models/DcAdapterSettings.ts | 7 + client/src/app/models/FileUploader.class.ts | 7 + client/src/app/models/FilterQuery.ts | 21 + client/src/app/models/HotTable.interface.ts | 8 + client/src/app/models/InfoModal.ts | 14 + client/src/app/models/LicenceState.ts | 40 + client/src/app/models/LicenseKeyData.ts | 9 + .../src/app/models/RequestWrapperOptions.ts | 4 + client/src/app/models/SheetInfo.ts | 10 + client/src/app/models/TableData.ts | 55 + .../app/models/sas/auditors-postdata.model.ts | 136 + .../app/models/sas/common/BaseSASResponse.ts | 19 + .../src/app/models/sas/common/DateFormat.ts | 6 + client/src/app/models/sas/common/Libinfo.ts | 11 + .../app/models/sas/editors-getdata.model.ts | 71 + .../app/models/sas/public-getcolvals.model.ts | 30 + .../app/models/sas/public-getgroups.model.ts | 11 + .../models/sas/public-refreshlibinfo.model.ts | 6 + .../models/sas/public-startupservice.model.ts | 17 + .../app/models/sas/public-viewlibs.model.ts | 12 + .../app/models/sas/public-viewtables.model.ts | 7 + .../app/models/sas/validate-filter.model.ts | 11 + .../sasjs-api/SASjsApiDriveFileTree.model.ts | 11 + .../SASjsApiDriveFolderContents.model.ts | 4 + .../sasjs-api/SASjsApiServerInfo.model.ts | 7 + .../app/not-found/not-found.component.html | 3 + .../app/not-found/not-found.component.scss | 0 .../src/app/not-found/not-found.component.ts | 15 + client/src/app/pipes/convert-size.pipe.ts | 14 + .../src/app/pipes/date-time-formatter.pipe.ts | 32 + client/src/app/pipes/linkinze.pipe.ts | 30 + client/src/app/pipes/ms-to-date.pipe.ts | 52 + client/src/app/pipes/pipes.module.ts | 38 + .../src/app/pipes/pk-space-separate.pipe.ts | 10 + client/src/app/pipes/prettyjson.pipe.ts | 10 + client/src/app/pipes/seconds-parser.pipe.ts | 38 + .../src/app/pipes/thousand-separator.pipe.ts | 22 + client/src/app/pipes/to-number.pipe.ts | 10 + .../app/query/models/QueryDateTime.model.ts | 6 + client/src/app/query/query.component.html | 512 + client/src/app/query/query.component.scss | 283 + client/src/app/query/query.component.ts | 1068 + client/src/app/query/query.module.ts | 23 + client/src/app/role/role.component.html | 129 + client/src/app/role/role.component.scss | 51 + client/src/app/role/role.component.ts | 149 + .../approve-route.component.html | 1 + .../approve-route.component.scss | 0 .../approve-route/approve-route.component.ts | 15 + .../edit-route/edit-route.component.html | 1 + .../edit-route/edit-route.component.scss | 0 .../routes/edit-route/edit-route.component.ts | 12 + .../history-route.component.html | 1 + .../history-route.component.scss | 0 .../history-route/history-route.component.ts | 12 + client/src/app/routes/licensing.guard.ts | 55 + .../usernav-route.component.html | 1 + .../usernav-route.component.scss | 0 .../usernav-route/usernav-route.component.ts | 15 + .../view-route/view-route.component.html | 1 + .../view-route/view-route.component.scss | 0 .../routes/view-route/view-route.component.ts | 17 + client/src/app/services/app-store.service.ts | 21 + client/src/app/services/app.service.ts | 175 + client/src/app/services/deploy.service.ts | 47 + client/src/app/services/event.service.ts | 119 + client/src/app/services/helper.service.ts | 302 + client/src/app/services/index.ts | 10 + client/src/app/services/licence.service.ts | 649 + client/src/app/services/logger.service.ts | 48 + client/src/app/services/sas-store.service.ts | 755 + client/src/app/services/sas-viya.service.ts | 100 + client/src/app/services/sas.service.ts | 495 + client/src/app/services/sasjs.service.ts | 89 + .../abort-modal/info-modal.component.html | 69 + .../abort-modal/info-modal.component.scss | 43 + .../abort-modal/info-modal.component.ts | 77 + client/src/app/shared/alerts/alert.ts | 20 + .../app/shared/alerts/alerts.component.html | 15 + .../app/shared/alerts/alerts.component.scss | 3 + .../src/app/shared/alerts/alerts.component.ts | 34 + .../src/app/shared/alerts/alerts.service.ts | 11 + .../autocomplete/autocomplete.component.html | 52 + .../autocomplete/autocomplete.component.scss | 53 + .../autocomplete/autocomplete.component.ts | 306 + .../autocomplete/autocomplete.module.ts | 12 + .../contact-link/contact-link.component.html | 6 + .../contact-link/contact-link.component.scss | 3 + .../contact-link/contact-link.component.ts | 14 + .../dataset-info/dataset-info.component.html | 43 + .../dataset-info/dataset-info.component.scss | 16 + .../dataset-info/dataset-info.component.ts | 63 + .../models/dsmeta-groupped.model.ts | 6 + .../app/shared/dc-tree/dc-tree.component.html | 161 + .../app/shared/dc-tree/dc-tree.component.scss | 17 + .../app/shared/dc-tree/dc-tree.component.ts | 226 + .../src/app/shared/dc-tree/dc-tree.module.ts | 19 + .../dc-tree/models/LibraryClickEmitter.ts | 7 + .../dc-tree/models/TableClickEmitter.ts | 8 + .../app/shared/dc-validator/dc-validator.ts | 461 + .../shared/dc-validator/models/col.model.ts | 12 + .../models/dc-validation.model.ts | 21 + .../dc-validator/models/dq-rules.model.ts | 16 + .../dc-validator/tests/dc-validator.spec.ts | 486 + .../dc-validator/tests/dqValidation.spec.ts | 128 + .../tests/getHotDataSchema.spec.ts | 11 + .../dc-validator/tests/mergeSpecRules.spec.ts | 48 + .../dc-validator/tests/parseColType.spec.ts | 23 + .../dc-validator/utils/getDqDataCols.ts | 11 + .../dc-validator/utils/getHotDataSchema.ts | 29 + .../dc-validator/utils/mergeColsRules.ts | 34 + .../shared/dc-validator/utils/parseColType.ts | 16 + .../dc-validator/validations/dq-validation.ts | 71 + .../validations/hot-custom-validators.ts | 24 + .../loading-indicator.component.html | 45 + .../loading-indicator.component.scss | 51 + .../loading-indicator.component.ts | 23 + .../src/app/shared/login/login.component.html | 49 + .../src/app/shared/login/login.component.scss | 127 + .../src/app/shared/login/login.component.ts | 86 + .../requests-modal.component.html | 221 + .../requests-modal.component.scss | 83 + .../requests-modal.component.ts | 172 + client/src/app/shared/service.interface.ts | 5 + client/src/app/shared/shared.module.ts | 48 + .../app/shared/sidebar/sidebar.component.html | 123 + .../app/shared/sidebar/sidebar.component.scss | 79 + .../app/shared/sidebar/sidebar.component.ts | 119 + .../soft-select/soft-select.component.html | 57 + .../soft-select/soft-select.component.scss | 31 + .../soft-select/soft-select.component.ts | 88 + .../src/app/shared/terms/terms.component.html | 36 + .../src/app/shared/terms/terms.component.scss | 29 + .../src/app/shared/terms/terms.component.ts | 89 + .../user-nav-dropdown.component.html | 121 + .../user-nav-dropdown.component.scss | 157 + .../user-nav-dropdown.component.ts | 90 + client/src/app/shared/user.interface.ts | 4 + client/src/app/shared/user.service.ts | 20 + .../models/viewbox-hot-table.model.ts | 10 + .../viewboxes/models/viewbox-table.model.ts | 7 + .../shared/viewboxes/models/viewbox.model.ts | 21 + .../shared/viewboxes/viewboxes.component.html | 452 + .../shared/viewboxes/viewboxes.component.scss | 287 + .../shared/viewboxes/viewboxes.component.ts | 1304 + .../app/shared/viewboxes/viewboxes.module.ts | 29 + client/src/app/stage/stage.component.html | 113 + client/src/app/stage/stage.component.scss | 15 + client/src/app/stage/stage.component.ts | 164 + client/src/app/stage/stage.module.ts | 19 + .../app/submitter/submitter.component.html | 116 + .../app/submitter/submitter.component.scss | 15 + .../src/app/submitter/submitter.component.ts | 127 + .../src/app/system/models/app-info.model.ts | 5 + .../system/models/environment-info.model.ts | 14 + client/src/app/system/system.component.html | 248 + client/src/app/system/system.component.scss | 41 + client/src/app/system/system.component.ts | 107 + client/src/app/user/user.component.html | 209 + client/src/app/user/user.component.scss | 57 + client/src/app/user/user.component.ts | 285 + .../src/app/viewer/viewer-routing.module.ts | 61 + client/src/app/viewer/viewer.component.html | 656 + client/src/app/viewer/viewer.component.scss | 175 + client/src/app/viewer/viewer.component.ts | 1078 + client/src/app/viewer/viewer.module.ts | 34 + .../models/collection-details.model.ts | 11 + .../models/collection.model.ts | 11 + .../viya-api-explorer/models/link.model.ts | 13 + .../models/viya-apis.models.ts | 1 + .../viya-api-explorer.component.html | 198 + .../viya-api-explorer.component.scss | 44 + .../viya-api-explorer.component.ts | 207 + client/src/assets/a_pompadour_font.zip | Bin 0 -> 45324 bytes client/src/assets/base64-images.txt | 5 + client/src/assets/datacontroller.svg | 17 + client/src/assets/dc-logo.svg | 15 + client/src/assets/favicon.ico | Bin 0 -> 72097 bytes client/src/environments/_eula.ts | 31 + client/src/environments/environment.prod.ts | 4 + client/src/environments/environment.ts | 9 + client/src/eula.ts | 30 + client/src/formatToParts.polyfill.js | 526 + client/src/images/caret.svg | 7 + client/src/images/datacontroller.svg | 17 + client/src/images/dc-logo.svg | 15 + client/src/images/favicon.ico | Bin 0 -> 72097 bytes client/src/images/spinner.svg | 23 + client/src/index.html | 63 + client/src/locale-data.json | 1803 + client/src/main.ts | 5 + client/src/polyfills.ts | 79 + client/src/styles.scss | 1079 + client/src/types/crypto-js/index.d.ts | 2 + client/src/types/save-svg-as-png/index.d.ts | 1 + client/src/typings.d.ts | 0 client/src/version.ts | 43 + client/tsconfig.app.json | 21 + client/tsconfig.json | 50 + client/tsconfig.spec.json | 17 + client/typedoc.json | 12 + licence-non-commercial-datacontroller.md | 52 + package-lock.json | 16453 ++++++++ package.json | 27 + sas/.sasjslint | 15 + sas/deploy/contextConfigCreate.json | 11 + sas/deploy/contextConfigCreateProduction.json | 11 + sas/deploy/contextConfigEdit.json | 6 + sas/deploy/contextConfigEditProduction.json | 6 + sas/deploy/makeData4GL.json | 8 + sas/deploy/makeDataSas9.json | 8 + sas/deploy/makeDataServer.json | 8 + sas/deploy/makeDataV4.json | 8 + sas/deploy/makeDataViya.json | 8 + sas/deploy/requestConfig.json | 3 + sas/deploy/requestData.json | 8 + sas/deploy/requestDataProduction.json | 8 + sas/mocks/sas9/sasjs/sasjsconfig.json | 16 + .../sasjs/services/approvers/getapprovals.js | 28 + .../sasjs/services/approvers/gethistory.js | 38 + .../sasjs/services/approvers/rejection.js | 37 + .../sasjs/services/auditors/getstagetable.js | 28 + .../sas9/sasjs/services/auditors/postdata.js | 143 + .../sas9/sasjs/services/editors/getdata.js | 521 + .../services/editors/getdynamiccolvals.js | 2510 ++ .../sas9/sasjs/services/editors/getsubmits.js | 28 + .../sas9/sasjs/services/editors/loadfile.js | 32 + .../sas9/sasjs/services/editors/stagedata.js | 32 + .../lineage/backup/fetchcollineage.js | 57 + .../lineage/backup/fetchtablelineage.js | 45 + .../sasjs/services/lineage/fetchcollineage.js | 57 + .../sasjs/services/lineage/fetchlineage.js | 73 + .../services/lineage/fetchtablelineage.js | 121 + .../sasjs/services/lineage/getmetacols.js | 82 + .../sasjs/services/lineage/getmetatables.js | 41 + .../sasjs/services/metanav/metadetails.js | 100 + .../sasjs/services/metanav/metaobjects.js | 31 + .../sas9/sasjs/services/metanav/metarepos.js | 35 + .../sas9/sasjs/services/metanav/metatypes.js | 382 + .../sasjs/services/public/getchangeinfo.js | 47 + .../sas9/sasjs/services/public/getcolvals.js | 138 + .../sas9/sasjs/services/public/getgroups.js | 162 + .../sasjs/services/public/refreshlibinfo.js | 39 + .../sasjs/services/public/startupservice.js | 102 + .../sasjs/services/public/validatefilter.js | 32 + .../sas9/sasjs/services/public/viewdata.js | 3064 ++ .../sas9/sasjs/services/public/viewlibs.js | 135 + .../sas9/sasjs/services/public/viewtables.js | 127 + .../services/usernav/usergroupsbymember.js | 365 + .../sasjs/services/usernav/usermembers.js | 125 + .../services/usernav/usermembersbygroup.js | 55 + .../services/usernav/usermembersbyrole.js | 46 + .../sas9/sasjs/services/usernav/userroles.js | 257 + sas/mocks/sasjs/.sasjslint | 13 + sas/mocks/sasjs/mock-storage/licence.json | 4 + sas/mocks/sasjs/sasjsconfig.json | 35 + sas/mocks/sasjs/services/admin/dummy.js | 1 + sas/mocks/sasjs/services/admin/registerkey.js | 39 + .../sasjs/services/approvers/getapprovals.js | 29 + .../sasjs/services/approvers/gethistory.js | 39 + .../sasjs/services/approvers/rejection.js | 38 + .../sasjs/services/auditors/getstagetable.js | 29 + sas/mocks/sasjs/services/auditors/postdata.js | 110 + sas/mocks/sasjs/services/editors/getdata.js | 982 + .../services/editors/getdynamiccolvals.js | 3092 ++ .../sasjs/services/editors/getsubmits.js | 29 + sas/mocks/sasjs/services/editors/loadfile.js | 33 + sas/mocks/sasjs/services/editors/stagedata.js | 76 + .../sasjs/services/lineage/fetchlineage.js | 73 + .../services/lineage/fetchtablelineage.js | 46 + .../sasjs/services/lineage/getmetacols.js | 83 + .../sasjs/services/lineage/getmetatables.js | 42 + .../sasjs/services/metanav/metadetails.js | 101 + .../sasjs/services/metanav/metaobjects.js | 32 + sas/mocks/sasjs/services/metanav/metarepos.js | 36 + sas/mocks/sasjs/services/metanav/metatypes.js | 383 + .../sasjs/services/public/getchangeinfo.js | 29 + sas/mocks/sasjs/services/public/getcolvals.js | 449 + sas/mocks/sasjs/services/public/getddl.js | 27 + sas/mocks/sasjs/services/public/getgroups.js | 30 + sas/mocks/sasjs/services/public/getrawdata.js | 530 + .../sasjs/services/public/refreshlibinfo.js | 39 + .../sasjs/services/public/startupservice.js | 107 + .../sasjs/services/public/validatefilter.js | 66 + sas/mocks/sasjs/services/public/viewdata.js | 3065 ++ sas/mocks/sasjs/services/public/viewlibs.js | 34 + sas/mocks/sasjs/services/public/viewtables.js | 35 + .../services/usernav/usergroupsbymember.js | 29 + .../sasjs/services/usernav/usermembers.js | 30 + .../services/usernav/usermembersbygroup.js | 30 + .../services/usernav/usermembersbyrole.js | 47 + sas/mocks/sasjs/services/usernav/userroles.js | 258 + sas/package-lock.json | 3203 ++ sas/package.json | 33 + sas/sasjs/.sasjslint | 13 + sas/sasjs/binaryfiles/dcsquare.png | Bin 0 -> 34509 bytes sas/sasjs/db/datactrl/mpe_audit.ddl | 32 + sas/sasjs/db/datactrl/mpe_config.ddl | 20 + .../db/datactrl/mpe_datacatalog_libs.ddl | 23 + .../db/datactrl/mpe_datacatalog_tabs.ddl | 24 + .../db/datactrl/mpe_datacatalog_vars.ddl | 27 + sas/sasjs/db/datactrl/mpe_datadictionary.ddl | 69 + sas/sasjs/db/datactrl/mpe_dataloads.ddl | 26 + sas/sasjs/db/datactrl/mpe_datastatus_libs.ddl | 18 + sas/sasjs/db/datactrl/mpe_datastatus_tabs.ddl | 21 + sas/sasjs/db/datactrl/mpe_excel_config.ddl | 19 + sas/sasjs/db/datactrl/mpe_filteranytable.ddl | 18 + sas/sasjs/db/datactrl/mpe_filtersource.ddl | 22 + sas/sasjs/db/datactrl/mpe_groups.ddl | 17 + sas/sasjs/db/datactrl/mpe_lineage_cols.ddl | 34 + sas/sasjs/db/datactrl/mpe_lineage_tabs.ddl | 31 + sas/sasjs/db/datactrl/mpe_loads.ddl | 22 + sas/sasjs/db/datactrl/mpe_lockanytable.ddl | 23 + sas/sasjs/db/datactrl/mpe_maxkeyvalues.ddl | 22 + sas/sasjs/db/datactrl/mpe_review.ddl | 22 + sas/sasjs/db/datactrl/mpe_security.ddl | 22 + sas/sasjs/db/datactrl/mpe_selectbox.ddl | 118 + sas/sasjs/db/datactrl/mpe_signoffs.ddl | 22 + sas/sasjs/db/datactrl/mpe_submit.ddl | 29 + sas/sasjs/db/datactrl/mpe_tables.ddl | 120 + sas/sasjs/db/datactrl/mpe_users.ddl | 17 + sas/sasjs/db/datactrl/mpe_validations.ddl | 74 + sas/sasjs/db/datactrl/mpe_x_test.ddl | 24 + sas/sasjs/db/dcdemo/dim_product.ddl | 42 + .../db/migrations/20200121_mpe_groups.sas | 26 + .../db/migrations/20200131_mpe_security.sas | 25 + .../db/migrations/20200208_mpe_config.sas | 21 + .../db/migrations/20200224_mpe_requests.sas | 18 + .../db/migrations/20200227_mpe_selectbox.sas | 44 + .../db/migrations/20200319_dd_validations.sas | 32 + .../db/migrations/20200428_datacatalog.sas | 74 + .../db/migrations/20200529_lineagetabs.sas | 36 + .../20200605v38_mpe_datadictionary.sas | 13 + .../db/migrations/20201003_mpe_users.sas | 14 + .../db/migrations/20210211_mpe_review.sas | 16 + .../db/migrations/20210410_v3.12_release.sas | 447 + .../db/migrations/20210802_v3.13_release.sas | 31 + .../db/migrations/20211215_v4.0_release.sas | 98 + .../db/migrations/20220615_v5.0_release.sas | 69 + sas/sasjs/doxy/Doxyfile | 41 + sas/sasjs/doxy/DoxygenLayout.xml | 111 + sas/sasjs/doxy/README.md | 11 + sas/sasjs/doxy/data_controller.png | Bin 0 -> 34509 bytes sas/sasjs/doxy/favicon.ico | Bin 0 -> 72097 bytes sas/sasjs/doxy/main.dox | 124 + sas/sasjs/doxy/new_footer.html | 32 + sas/sasjs/doxy/new_header.html | 90 + sas/sasjs/doxy/new_stylesheet.css | 4 + sas/sasjs/macros/bitemporal_closeouts.sas | 204 + sas/sasjs/macros/bitemporal_dataloader.sas | 1447 + .../macros/bitemporal_dataloader.test.1.sas | 87 + .../macros/bitemporal_dataloader.test.2.sas | 1536 + .../macros/bitemporal_dataloader.test.3.sas | 76 + .../macros/bitemporal_dataloader.test.4.sas | 91 + sas/sasjs/macros/mpe_accesscheck.sas | 89 + sas/sasjs/macros/mpe_alerts.sas | 175 + sas/sasjs/macros/mpe_columnlevelsecurity.sas | 141 + sas/sasjs/macros/mpe_filtermaster.sas | 262 + sas/sasjs/macros/mpe_filtermaster.test.1.sas | 115 + sas/sasjs/macros/mpe_filtermaster.test.sas | 144 + sas/sasjs/macros/mpe_getgroups.sas | 39 + sas/sasjs/macros/mpe_getlabels.sas | 38 + sas/sasjs/macros/mpe_getvars.sas | 27 + sas/sasjs/macros/mpe_loader.sas | 590 + sas/sasjs/macros/mpe_loadfail.sas | 44 + sas/sasjs/macros/mpe_makedata.sas | 1801 + sas/sasjs/macros/mpe_makedatamodel.sas | 598 + sas/sasjs/macros/mpe_makesampledata.sas | 362 + sas/sasjs/macros/mpe_refreshlibs.sas | 129 + sas/sasjs/macros/mpe_refreshtables.sas | 336 + sas/sasjs/macros/mpe_runhook.sas | 57 + sas/sasjs/macros/mpe_targetloader.sas | 221 + sas/sasjs/macros/mpe_validatefilter.sas | 136 + sas/sasjs/macros/mpeinit.sas | 113 + sas/sasjs/macros/mpeinit2.sas | 40 + sas/sasjs/macros/mpeterm.sas | 50 + sas/sasjs/macros/removecolsfromwork.sas | 37 + sas/sasjs/sasjsconfig.json | 494 + sas/sasjs/services/admin/exportconfig.sas | 159 + sas/sasjs/services/admin/exportdb.sas | 66 + sas/sasjs/services/admin/refreshcatalog.sas | 26 + sas/sasjs/services/admin/refreshlibs.sas | 20 + sas/sasjs/services/admin/registerkey.sas | 91 + sas/sasjs/services/approvers/getapprovals.sas | 89 + .../services/approvers/getapprovals.test.sas | 26 + sas/sasjs/services/approvers/gethistory.sas | 156 + .../services/approvers/gethistory.test.sas | 36 + sas/sasjs/services/approvers/rejection.sas | 141 + sas/sasjs/services/auditors/getauditfile.sas | 86 + sas/sasjs/services/auditors/getdiffs.sas | 55 + sas/sasjs/services/auditors/getstagetable.sas | 35 + sas/sasjs/services/auditors/postdata.sas | 710 + .../services/auditors/postdata.test.1.sas | 103 + .../services/auditors/postdata.test.2.sas | 76 + sas/sasjs/services/editors/getdata.sas | 770 + sas/sasjs/services/editors/getdata.test.sas | 188 + .../services/editors/getdynamiccolvals.sas | 192 + .../editors/getdynamiccolvals.test.1.sas | 105 + .../editors/getdynamiccolvals.test.2.sas | 64 + sas/sasjs/services/editors/getlog.sas | 74 + sas/sasjs/services/editors/getsubmits.sas | 50 + sas/sasjs/services/editors/loadfile.sas | 305 + sas/sasjs/services/editors/stagedata.sas | 277 + .../services/editors/stagedata.test.1.sas | 61 + .../services/editors/stagedata.test.2.sas | 50 + .../mpe_column_level_security_postedit.sas | 45 + .../hooks/mpe_row_level_security_postedit.sas | 70 + .../services/hooks/mpe_tables_postedit.sas | 89 + .../hooks/mpe_validations_postedit.sas | 72 + sas/sasjs/services/public/getchangeinfo.sas | 57 + sas/sasjs/services/public/getcols.sas | 62 + sas/sasjs/services/public/getcolvals.sas | 183 + .../services/public/getcolvals.test.1.sas | 37 + .../services/public/getcolvals.test.2.sas | 56 + .../services/public/getcolvals.test.3.sas | 53 + sas/sasjs/services/public/getcolvals.test.sas | 38 + sas/sasjs/services/public/getddl.sas | 55 + sas/sasjs/services/public/getddl.test.sas | 81 + sas/sasjs/services/public/getgroups.sas | 30 + sas/sasjs/services/public/getgroups.test.sas | 33 + sas/sasjs/services/public/getrawdata.sas | 175 + sas/sasjs/services/public/getrawdata.test.sas | 78 + sas/sasjs/services/public/refreshlibinfo.sas | 85 + .../services/public/refreshlibinfo.test.sas | 40 + sas/sasjs/services/public/registeruser.sas | 64 + .../services/public/registeruser.test.sas | 45 + sas/sasjs/services/public/startupservice.sas | 138 + .../services/public/startupservice.test.sas | 28 + sas/sasjs/services/public/validatefilter.sas | 67 + .../services/public/validatefilter.test.sas | 78 + sas/sasjs/services/public/viewdata.sas | 364 + sas/sasjs/services/public/viewdata.test.1.sas | 89 + sas/sasjs/services/public/viewdata.test.2.sas | 37 + sas/sasjs/services/public/viewlibarray.sas | 148 + sas/sasjs/services/public/viewlibs.sas | 142 + sas/sasjs/services/public/viewlibs.test.sas | 35 + sas/sasjs/services/public/viewtables.sas | 183 + sas/sasjs/services/public/viewtables.test.sas | 71 + .../services/validations/columns_in_libds.sas | 108 + .../services/validations/libraries_all.sas | 64 + .../validations/libraries_editable.sas | 57 + .../validations/mpe_alerts.alert_lib.sas | 108 + .../services/validations/mpe_tables.dsn.sas | 135 + .../validations/mpe_x_test.some_num.sas | 35 + sas/sasjs/services/validations/sas_groups.sas | 61 + sas/sasjs/services/validations/tables_all.sas | 97 + .../services/validations/tables_editable.sas | 70 + .../targets/sas9/macros_meta/dc_assignlib.sas | 71 + .../sas9/macros_meta/dc_createdataset.sas | 18 + .../sas9/macros_meta/dc_getgroupmembers.sas | 21 + .../targets/sas9/macros_meta/dc_getgroups.sas | 47 + .../targets/sas9/macros_meta/dc_getlibs.sas | 47 + .../targets/sas9/macros_meta/dc_getroles.sas | 47 + .../sas9/macros_meta/dc_getservicecode.sas | 21 + .../sas9/macros_meta/dc_getsettings.sas | 64 + .../sas9/macros_meta/dc_gettableid.sas | 31 + .../sas9/macros_meta/dc_getusergroups.sas | 21 + .../targets/sas9/macros_meta/dc_getusers.sas | 47 + .../sas9/macros_meta/dc_refreshcatalog.sas | 80 + .../targets/sas9/macros_meta/meta_mapper.sas | 412 + .../sas9/services_meta/admin/configurator.sas | 226 + .../sas9/services_meta/admin/makedata.sas | 248 + .../sas9/services_meta/admin/makelib.sas | 165 + .../admin/refreshtablelineage.sas | 203 + .../services_meta/lineage/fetchcollineage.sas | 349 + .../lineage/fetchtablelineage.sas | 261 + .../services_meta/lineage/getmetacols.sas | 43 + .../services_meta/lineage/getmetatables.sas | 43 + .../services_meta/metanav/metadetails.sas | 32 + .../services_meta/metanav/metaobjects.sas | 31 + .../sas9/services_meta/metanav/metarepos.sas | 27 + .../sas9/services_meta/metanav/metatypes.sas | 20 + .../usernav/usergroupsbymember.sas | 107 + .../services_meta/usernav/usermembers.sas | 24 + .../usernav/usermembersbygroup.sas | 56 + .../usernav/usermembersbyrole.sas | 60 + .../sas9/services_meta/usernav/userroles.sas | 20 + .../server/macros_server/dc_assignlib.sas | 22 + .../server/macros_server/dc_createdataset.sas | 20 + .../macros_server/dc_getgroupmembers.sas | 22 + .../server/macros_server/dc_getgroups.sas | 34 + .../server/macros_server/dc_getlibs.sas | 26 + .../macros_server/dc_getservicecode.sas | 19 + .../server/macros_server/dc_getsettings.sas | 35 + .../server/macros_server/dc_gettableid.sas | 24 + .../server/macros_server/dc_getusergroups.sas | 29 + .../server/macros_server/dc_getusers.sas | 28 + .../macros_server/dc_refreshcatalog.sas | 40 + .../services_server/admin/configurator.sas | 241 + .../server/services_server/admin/makedata.sas | 166 + .../usernav/usergroupsbymember.sas | 51 + .../services_server/usernav/usermembers.sas | 34 + .../usernav/usermembersbygroup.sas | 43 + .../targets/viya/macros_viya/dc_assignlib.sas | 22 + .../viya/macros_viya/dc_createdataset.sas | 20 + .../viya/macros_viya/dc_getgroupmembers.sas | 23 + .../targets/viya/macros_viya/dc_getgroups.sas | 24 + .../targets/viya/macros_viya/dc_getlibs.sas | 27 + .../viya/macros_viya/dc_getservicecode.sas | 24 + .../viya/macros_viya/dc_getsettings.sas | 55 + .../viya/macros_viya/dc_gettableid.sas | 24 + .../viya/macros_viya/dc_getusergroups.sas | 25 + .../targets/viya/macros_viya/dc_getusers.sas | 22 + .../viya/macros_viya/dc_refreshcatalog.sas | 37 + .../viya/services_viya/admin/makedata.sas | 183 + .../viya/services_viya/public/tokenauth.sas | 36 + .../services_viya/public/tokenrefresh.sas | 37 + .../viya_users/usergroupsbymember.sas | 25 + .../services_viya/viya_users/usermembers.sas | 24 + .../viya_users/usermembersbygroup.sas | 31 + sas/sasjs/tests/testinit.sas | 69 + sas/sasjs/tests/testsetup.sas | 208 + sas/sasjs/tests/testterm.sas | 11 + sas/sasjs/utils/buildinitsas9.sas | 16 + sas/sasjs/utils/buildinitviya.sas | 7 + sas/sasjs/utils/buildtermsas9.sas | 190 + sas/sasjs/utils/buildtermviya.sas | 51 + sas/sasjs/utils/delete_metafolder.sh | 46 + sas/sasjs/utils/deploysas9sh.sh | 100 + sas/sasjs/utils/export_spk.sh | 44 + sas/sasjs/utils/favicon.ico | Bin 0 -> 72097 bytes sas/sasjs/utils/serviceinitsas9.sas | 23 + sas/sasjs/utils/serviceinitserver.sas | 14 + sas/sasjs/utils/serviceinitviya.sas | 25 + sas/sasjs/utils/serviceterm.sas | 12 + sas/sasjs/utils/viyadeploy.sh | 17 + 682 files changed, 135708 insertions(+) create mode 100755 .git-hooks/commit-msg create mode 100755 .git-hooks/pre-commit create mode 100644 .gitea/workflows/build.yaml create mode 100644 .gitea/workflows/development-test.yaml create mode 100644 .gitea/workflows/release.yaml create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .prettierrc.json create mode 100644 .releaserc create mode 100644 .vscode/settings.json create mode 100644 .woodpecker.yml create mode 100644 CHANGELOG.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENCE.md create mode 100644 README.md create mode 100644 client/.dockerignore create mode 100644 client/.editorconfig create mode 100644 client/.eslintrc.json create mode 100644 client/.hintrc create mode 100644 client/.vscode/.editorconfig create mode 100644 client/.vscode/launch.json create mode 100644 client/.vscode/settings.json create mode 100644 client/Dockerfile create mode 100644 client/Dockerfile.dev create mode 100644 client/angular.json create mode 100644 client/cypress.config.ts create mode 100644 client/cypress.env.example.json create mode 100644 client/cypress/fixtures/example.json create mode 100644 client/cypress/fixtures/excels/15mb_excel.xlsx create mode 100644 client/cypress/fixtures/excels/5mb_excel.xlsx create mode 100644 client/cypress/fixtures/excels/7th_tab_excel.xlsx create mode 100644 client/cypress/fixtures/excels/MPE_DATADICTIONARY_composite_keys.xlsx create mode 100644 client/cypress/fixtures/excels/MPE_DATADICTIONARY_merged_cells.xlsx create mode 100644 client/cypress/fixtures/excels/MPE_DATADICTIONARY_missing_row.xlsx create mode 100644 client/cypress/fixtures/excels/blank_column_with_header.xlsx create mode 100644 client/cypress/fixtures/excels/blank_columns_excel.xlsx create mode 100644 client/cypress/fixtures/excels/duplicate_column_excel.xlsx create mode 100644 client/cypress/fixtures/excels/duplicate_row_excel.xlsx create mode 100644 client/cypress/fixtures/excels/extra_column_excel.xlsx create mode 100644 client/cypress/fixtures/excels/formulas_excel.bak create mode 100644 client/cypress/fixtures/excels/formulas_excel.xlsx create mode 100644 client/cypress/fixtures/excels/missing_columns_excel.xlsx create mode 100644 client/cypress/fixtures/excels/mixed_content_excel.xlsx create mode 100644 client/cypress/fixtures/excels/nodata_rows_excel.xlsx create mode 100644 client/cypress/fixtures/excels/regular_excel.xlsx create mode 100644 client/cypress/fixtures/excels/regular_excel_macro.xlsm create mode 100644 client/cypress/fixtures/excels/regular_excel_with_delete.bak create mode 100644 client/cypress/fixtures/excels/regular_excel_with_delete.xlsx create mode 100644 client/cypress/fixtures/excels/regular_excel_xls.xls create mode 100644 client/cypress/fixtures/excels/surrounded_data_all_cells_empty_excel.xlsx create mode 100644 client/cypress/fixtures/excels/surrounded_data_empty_cells_excel.xlsx create mode 100644 client/cypress/fixtures/excels/surrounded_data_excel.xlsx create mode 100644 client/cypress/fixtures/excels_general/MPE_DATADICTIONARY_duplicate_keys.xlsx create mode 100644 client/cypress/integration/download.tests.ts create mode 100644 client/cypress/integration/editor.tests.ts create mode 100644 client/cypress/integration/excel.tests.ts create mode 100644 client/cypress/integration/filtering.tests.ts create mode 100644 client/cypress/integration/licensing.tests.ts create mode 100644 client/cypress/integration/liveness.tests.ts create mode 100644 client/cypress/integration/metanav.tests.ts create mode 100644 client/cypress/integration/viewbox.tests.ts create mode 100644 client/cypress/plugins/cy-ts-preprocessor.js create mode 100644 client/cypress/plugins/index.js create mode 100644 client/cypress/support/commands.ts create mode 100644 client/cypress/support/index.js create mode 100644 client/cypress/tsconfig.json create mode 100644 client/cypress/util/deleteDownloadFolder.ts create mode 100644 client/cypress/util/helper-functions.ts create mode 100644 client/cypress/webpack.config.js create mode 100644 client/karma.conf.js create mode 100644 client/libraries/ngx-json-viewer-3.2.1.tgz create mode 100644 client/licenseChecker.js create mode 100644 client/nginx/default.conf create mode 100644 client/package-lock.json create mode 100644 client/package.json create mode 100755 client/run-cypress-tests.sh create mode 100644 client/src/app/_globals.ts create mode 100644 client/src/app/actions/actions.component.html create mode 100644 client/src/app/actions/actions.component.scss create mode 100644 client/src/app/actions/actions.component.ts create mode 100644 client/src/app/app-shared.module.ts create mode 100644 client/src/app/app.component.html create mode 100644 client/src/app/app.component.scss create mode 100644 client/src/app/app.component.ts create mode 100644 client/src/app/app.d.ts create mode 100644 client/src/app/app.module.ts create mode 100644 client/src/app/app.routing.ts create mode 100644 client/src/app/approve-details/approve-details.component.html create mode 100644 client/src/app/approve-details/approve-details.component.scss create mode 100644 client/src/app/approve-details/approve-details.component.ts create mode 100644 client/src/app/approve/approve.component.html create mode 100644 client/src/app/approve/approve.component.scss create mode 100644 client/src/app/approve/approve.component.ts create mode 100644 client/src/app/deploy/deploy.component.html create mode 100644 client/src/app/deploy/deploy.component.scss create mode 100644 client/src/app/deploy/deploy.component.ts create mode 100644 client/src/app/deploy/sections/automatic/automatic.component.html create mode 100644 client/src/app/deploy/sections/automatic/automatic.component.scss create mode 100644 client/src/app/deploy/sections/automatic/automatic.component.ts create mode 100644 client/src/app/deploy/sections/manual/manual.component.html create mode 100644 client/src/app/deploy/sections/manual/manual.component.scss create mode 100644 client/src/app/deploy/sections/manual/manual.component.ts create mode 100644 client/src/app/deploy/sections/sasjs-configurator/sasjs-configurator.component.html create mode 100644 client/src/app/deploy/sections/sasjs-configurator/sasjs-configurator.component.scss create mode 100644 client/src/app/deploy/sections/sasjs-configurator/sasjs-configurator.component.ts create mode 100644 client/src/app/directives/directives.module.ts create mode 100644 client/src/app/directives/drag-ndrop.directive.ts create mode 100644 client/src/app/directives/file-drop.directive.ts create mode 100644 client/src/app/directives/file-select.directive.ts create mode 100644 client/src/app/directives/ng-var.directive.ts create mode 100644 client/src/app/editor/RowValidation.ts create mode 100644 client/src/app/editor/components/edit-record/edit-record.component.html create mode 100644 client/src/app/editor/components/edit-record/edit-record.component.scss create mode 100644 client/src/app/editor/components/edit-record/edit-record.component.ts create mode 100644 client/src/app/editor/components/upload-stater/upload-stater.component.html create mode 100644 client/src/app/editor/components/upload-stater/upload-stater.component.scss create mode 100644 client/src/app/editor/components/upload-stater/upload-stater.component.ts create mode 100644 client/src/app/editor/editor-routing.module.ts create mode 100644 client/src/app/editor/editor.component.html create mode 100644 client/src/app/editor/editor.component.scss create mode 100644 client/src/app/editor/editor.component.ts create mode 100644 client/src/app/editor/editor.module.ts create mode 100644 client/src/app/editor/models/EditRecordModal.ts create mode 100644 client/src/app/editor/models/cellValidation.ts create mode 100644 client/src/app/editor/models/column.ts create mode 100644 client/src/app/editor/models/dynamicExtendedCellValidation.ts create mode 100644 client/src/app/editor/models/edit-record/edit-record-events.ts create mode 100644 client/src/app/editor/models/editor-restrictions.model.ts create mode 100644 client/src/app/editor/table.ts create mode 100644 client/src/app/editor/utils/date.utils.ts create mode 100644 client/src/app/editor/utils/grid.utils.ts create mode 100644 client/src/app/editor/utils/renderers.utils.ts create mode 100644 client/src/app/editor/utils/types.utils.ts create mode 100644 client/src/app/free-tier.config.ts create mode 100644 client/src/app/group/group.component.html create mode 100644 client/src/app/group/group.component.scss create mode 100644 client/src/app/group/group.component.ts create mode 100644 client/src/app/history/history.component.html create mode 100644 client/src/app/history/history.component.scss create mode 100644 client/src/app/history/history.component.ts create mode 100644 client/src/app/home/home.component.html create mode 100644 client/src/app/home/home.component.scss create mode 100644 client/src/app/home/home.component.ts create mode 100644 client/src/app/home/home.module.ts create mode 100644 client/src/app/index.ts create mode 100644 client/src/app/interfaces.ts create mode 100644 client/src/app/licensing/licensing.component.html create mode 100644 client/src/app/licensing/licensing.component.scss create mode 100644 client/src/app/licensing/licensing.component.ts create mode 100644 client/src/app/lineage/lineage.component.html create mode 100644 client/src/app/lineage/lineage.component.scss create mode 100644 client/src/app/lineage/lineage.component.ts create mode 100644 client/src/app/metadata/metadata.component.html create mode 100644 client/src/app/metadata/metadata.component.scss create mode 100644 client/src/app/metadata/metadata.component.ts create mode 100644 client/src/app/models/CellValidationSource.ts create mode 100644 client/src/app/models/DcAdapterSettings.ts create mode 100644 client/src/app/models/FileUploader.class.ts create mode 100644 client/src/app/models/FilterQuery.ts create mode 100644 client/src/app/models/HotTable.interface.ts create mode 100644 client/src/app/models/InfoModal.ts create mode 100644 client/src/app/models/LicenceState.ts create mode 100644 client/src/app/models/LicenseKeyData.ts create mode 100644 client/src/app/models/RequestWrapperOptions.ts create mode 100644 client/src/app/models/SheetInfo.ts create mode 100644 client/src/app/models/TableData.ts create mode 100644 client/src/app/models/sas/auditors-postdata.model.ts create mode 100644 client/src/app/models/sas/common/BaseSASResponse.ts create mode 100644 client/src/app/models/sas/common/DateFormat.ts create mode 100644 client/src/app/models/sas/common/Libinfo.ts create mode 100644 client/src/app/models/sas/editors-getdata.model.ts create mode 100644 client/src/app/models/sas/public-getcolvals.model.ts create mode 100644 client/src/app/models/sas/public-getgroups.model.ts create mode 100644 client/src/app/models/sas/public-refreshlibinfo.model.ts create mode 100644 client/src/app/models/sas/public-startupservice.model.ts create mode 100644 client/src/app/models/sas/public-viewlibs.model.ts create mode 100644 client/src/app/models/sas/public-viewtables.model.ts create mode 100644 client/src/app/models/sas/validate-filter.model.ts create mode 100644 client/src/app/models/sasjs-api/SASjsApiDriveFileTree.model.ts create mode 100644 client/src/app/models/sasjs-api/SASjsApiDriveFolderContents.model.ts create mode 100644 client/src/app/models/sasjs-api/SASjsApiServerInfo.model.ts create mode 100644 client/src/app/not-found/not-found.component.html create mode 100644 client/src/app/not-found/not-found.component.scss create mode 100644 client/src/app/not-found/not-found.component.ts create mode 100644 client/src/app/pipes/convert-size.pipe.ts create mode 100644 client/src/app/pipes/date-time-formatter.pipe.ts create mode 100644 client/src/app/pipes/linkinze.pipe.ts create mode 100644 client/src/app/pipes/ms-to-date.pipe.ts create mode 100644 client/src/app/pipes/pipes.module.ts create mode 100644 client/src/app/pipes/pk-space-separate.pipe.ts create mode 100644 client/src/app/pipes/prettyjson.pipe.ts create mode 100644 client/src/app/pipes/seconds-parser.pipe.ts create mode 100644 client/src/app/pipes/thousand-separator.pipe.ts create mode 100644 client/src/app/pipes/to-number.pipe.ts create mode 100644 client/src/app/query/models/QueryDateTime.model.ts create mode 100644 client/src/app/query/query.component.html create mode 100644 client/src/app/query/query.component.scss create mode 100644 client/src/app/query/query.component.ts create mode 100644 client/src/app/query/query.module.ts create mode 100644 client/src/app/role/role.component.html create mode 100644 client/src/app/role/role.component.scss create mode 100644 client/src/app/role/role.component.ts create mode 100644 client/src/app/routes/approve-route/approve-route.component.html create mode 100644 client/src/app/routes/approve-route/approve-route.component.scss create mode 100644 client/src/app/routes/approve-route/approve-route.component.ts create mode 100644 client/src/app/routes/edit-route/edit-route.component.html create mode 100644 client/src/app/routes/edit-route/edit-route.component.scss create mode 100644 client/src/app/routes/edit-route/edit-route.component.ts create mode 100644 client/src/app/routes/history-route/history-route.component.html create mode 100644 client/src/app/routes/history-route/history-route.component.scss create mode 100644 client/src/app/routes/history-route/history-route.component.ts create mode 100644 client/src/app/routes/licensing.guard.ts create mode 100644 client/src/app/routes/usernav-route/usernav-route.component.html create mode 100644 client/src/app/routes/usernav-route/usernav-route.component.scss create mode 100644 client/src/app/routes/usernav-route/usernav-route.component.ts create mode 100644 client/src/app/routes/view-route/view-route.component.html create mode 100644 client/src/app/routes/view-route/view-route.component.scss create mode 100644 client/src/app/routes/view-route/view-route.component.ts create mode 100644 client/src/app/services/app-store.service.ts create mode 100644 client/src/app/services/app.service.ts create mode 100644 client/src/app/services/deploy.service.ts create mode 100644 client/src/app/services/event.service.ts create mode 100644 client/src/app/services/helper.service.ts create mode 100644 client/src/app/services/index.ts create mode 100644 client/src/app/services/licence.service.ts create mode 100644 client/src/app/services/logger.service.ts create mode 100644 client/src/app/services/sas-store.service.ts create mode 100644 client/src/app/services/sas-viya.service.ts create mode 100644 client/src/app/services/sas.service.ts create mode 100644 client/src/app/services/sasjs.service.ts create mode 100644 client/src/app/shared/abort-modal/info-modal.component.html create mode 100644 client/src/app/shared/abort-modal/info-modal.component.scss create mode 100644 client/src/app/shared/abort-modal/info-modal.component.ts create mode 100644 client/src/app/shared/alerts/alert.ts create mode 100644 client/src/app/shared/alerts/alerts.component.html create mode 100644 client/src/app/shared/alerts/alerts.component.scss create mode 100644 client/src/app/shared/alerts/alerts.component.ts create mode 100644 client/src/app/shared/alerts/alerts.service.ts create mode 100644 client/src/app/shared/autocomplete/autocomplete.component.html create mode 100644 client/src/app/shared/autocomplete/autocomplete.component.scss create mode 100644 client/src/app/shared/autocomplete/autocomplete.component.ts create mode 100644 client/src/app/shared/autocomplete/autocomplete.module.ts create mode 100644 client/src/app/shared/contact-link/contact-link.component.html create mode 100644 client/src/app/shared/contact-link/contact-link.component.scss create mode 100644 client/src/app/shared/contact-link/contact-link.component.ts create mode 100644 client/src/app/shared/dataset-info/dataset-info.component.html create mode 100644 client/src/app/shared/dataset-info/dataset-info.component.scss create mode 100644 client/src/app/shared/dataset-info/dataset-info.component.ts create mode 100644 client/src/app/shared/dataset-info/models/dsmeta-groupped.model.ts create mode 100644 client/src/app/shared/dc-tree/dc-tree.component.html create mode 100644 client/src/app/shared/dc-tree/dc-tree.component.scss create mode 100644 client/src/app/shared/dc-tree/dc-tree.component.ts create mode 100644 client/src/app/shared/dc-tree/dc-tree.module.ts create mode 100644 client/src/app/shared/dc-tree/models/LibraryClickEmitter.ts create mode 100644 client/src/app/shared/dc-tree/models/TableClickEmitter.ts create mode 100644 client/src/app/shared/dc-validator/dc-validator.ts create mode 100644 client/src/app/shared/dc-validator/models/col.model.ts create mode 100644 client/src/app/shared/dc-validator/models/dc-validation.model.ts create mode 100644 client/src/app/shared/dc-validator/models/dq-rules.model.ts create mode 100644 client/src/app/shared/dc-validator/tests/dc-validator.spec.ts create mode 100644 client/src/app/shared/dc-validator/tests/dqValidation.spec.ts create mode 100644 client/src/app/shared/dc-validator/tests/getHotDataSchema.spec.ts create mode 100644 client/src/app/shared/dc-validator/tests/mergeSpecRules.spec.ts create mode 100644 client/src/app/shared/dc-validator/tests/parseColType.spec.ts create mode 100644 client/src/app/shared/dc-validator/utils/getDqDataCols.ts create mode 100644 client/src/app/shared/dc-validator/utils/getHotDataSchema.ts create mode 100644 client/src/app/shared/dc-validator/utils/mergeColsRules.ts create mode 100644 client/src/app/shared/dc-validator/utils/parseColType.ts create mode 100644 client/src/app/shared/dc-validator/validations/dq-validation.ts create mode 100644 client/src/app/shared/dc-validator/validations/hot-custom-validators.ts create mode 100644 client/src/app/shared/loading-indicator/loading-indicator.component.html create mode 100644 client/src/app/shared/loading-indicator/loading-indicator.component.scss create mode 100644 client/src/app/shared/loading-indicator/loading-indicator.component.ts create mode 100644 client/src/app/shared/login/login.component.html create mode 100644 client/src/app/shared/login/login.component.scss create mode 100644 client/src/app/shared/login/login.component.ts create mode 100644 client/src/app/shared/requests-modal/requests-modal.component.html create mode 100644 client/src/app/shared/requests-modal/requests-modal.component.scss create mode 100644 client/src/app/shared/requests-modal/requests-modal.component.ts create mode 100644 client/src/app/shared/service.interface.ts create mode 100644 client/src/app/shared/shared.module.ts create mode 100644 client/src/app/shared/sidebar/sidebar.component.html create mode 100644 client/src/app/shared/sidebar/sidebar.component.scss create mode 100644 client/src/app/shared/sidebar/sidebar.component.ts create mode 100644 client/src/app/shared/soft-select/soft-select.component.html create mode 100644 client/src/app/shared/soft-select/soft-select.component.scss create mode 100644 client/src/app/shared/soft-select/soft-select.component.ts create mode 100644 client/src/app/shared/terms/terms.component.html create mode 100644 client/src/app/shared/terms/terms.component.scss create mode 100644 client/src/app/shared/terms/terms.component.ts create mode 100644 client/src/app/shared/user-nav-dropdown/user-nav-dropdown.component.html create mode 100644 client/src/app/shared/user-nav-dropdown/user-nav-dropdown.component.scss create mode 100644 client/src/app/shared/user-nav-dropdown/user-nav-dropdown.component.ts create mode 100644 client/src/app/shared/user.interface.ts create mode 100644 client/src/app/shared/user.service.ts create mode 100644 client/src/app/shared/viewboxes/models/viewbox-hot-table.model.ts create mode 100644 client/src/app/shared/viewboxes/models/viewbox-table.model.ts create mode 100644 client/src/app/shared/viewboxes/models/viewbox.model.ts create mode 100644 client/src/app/shared/viewboxes/viewboxes.component.html create mode 100644 client/src/app/shared/viewboxes/viewboxes.component.scss create mode 100644 client/src/app/shared/viewboxes/viewboxes.component.ts create mode 100644 client/src/app/shared/viewboxes/viewboxes.module.ts create mode 100644 client/src/app/stage/stage.component.html create mode 100644 client/src/app/stage/stage.component.scss create mode 100644 client/src/app/stage/stage.component.ts create mode 100644 client/src/app/stage/stage.module.ts create mode 100644 client/src/app/submitter/submitter.component.html create mode 100644 client/src/app/submitter/submitter.component.scss create mode 100644 client/src/app/submitter/submitter.component.ts create mode 100644 client/src/app/system/models/app-info.model.ts create mode 100644 client/src/app/system/models/environment-info.model.ts create mode 100644 client/src/app/system/system.component.html create mode 100644 client/src/app/system/system.component.scss create mode 100644 client/src/app/system/system.component.ts create mode 100644 client/src/app/user/user.component.html create mode 100644 client/src/app/user/user.component.scss create mode 100644 client/src/app/user/user.component.ts create mode 100644 client/src/app/viewer/viewer-routing.module.ts create mode 100644 client/src/app/viewer/viewer.component.html create mode 100644 client/src/app/viewer/viewer.component.scss create mode 100644 client/src/app/viewer/viewer.component.ts create mode 100644 client/src/app/viewer/viewer.module.ts create mode 100644 client/src/app/viya-api-explorer/models/collection-details.model.ts create mode 100644 client/src/app/viya-api-explorer/models/collection.model.ts create mode 100644 client/src/app/viya-api-explorer/models/link.model.ts create mode 100644 client/src/app/viya-api-explorer/models/viya-apis.models.ts create mode 100644 client/src/app/viya-api-explorer/viya-api-explorer.component.html create mode 100644 client/src/app/viya-api-explorer/viya-api-explorer.component.scss create mode 100644 client/src/app/viya-api-explorer/viya-api-explorer.component.ts create mode 100644 client/src/assets/a_pompadour_font.zip create mode 100644 client/src/assets/base64-images.txt create mode 100644 client/src/assets/datacontroller.svg create mode 100644 client/src/assets/dc-logo.svg create mode 100644 client/src/assets/favicon.ico create mode 100644 client/src/environments/_eula.ts create mode 100644 client/src/environments/environment.prod.ts create mode 100644 client/src/environments/environment.ts create mode 100644 client/src/eula.ts create mode 100644 client/src/formatToParts.polyfill.js create mode 100644 client/src/images/caret.svg create mode 100644 client/src/images/datacontroller.svg create mode 100644 client/src/images/dc-logo.svg create mode 100644 client/src/images/favicon.ico create mode 100644 client/src/images/spinner.svg create mode 100644 client/src/index.html create mode 100644 client/src/locale-data.json create mode 100644 client/src/main.ts create mode 100644 client/src/polyfills.ts create mode 100644 client/src/styles.scss create mode 100644 client/src/types/crypto-js/index.d.ts create mode 100644 client/src/types/save-svg-as-png/index.d.ts create mode 100644 client/src/typings.d.ts create mode 100644 client/src/version.ts create mode 100644 client/tsconfig.app.json create mode 100644 client/tsconfig.json create mode 100644 client/tsconfig.spec.json create mode 100644 client/typedoc.json create mode 100644 licence-non-commercial-datacontroller.md create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 sas/.sasjslint create mode 100644 sas/deploy/contextConfigCreate.json create mode 100644 sas/deploy/contextConfigCreateProduction.json create mode 100644 sas/deploy/contextConfigEdit.json create mode 100644 sas/deploy/contextConfigEditProduction.json create mode 100644 sas/deploy/makeData4GL.json create mode 100644 sas/deploy/makeDataSas9.json create mode 100644 sas/deploy/makeDataServer.json create mode 100644 sas/deploy/makeDataV4.json create mode 100644 sas/deploy/makeDataViya.json create mode 100644 sas/deploy/requestConfig.json create mode 100644 sas/deploy/requestData.json create mode 100644 sas/deploy/requestDataProduction.json create mode 100644 sas/mocks/sas9/sasjs/sasjsconfig.json create mode 100644 sas/mocks/sas9/sasjs/services/approvers/getapprovals.js create mode 100644 sas/mocks/sas9/sasjs/services/approvers/gethistory.js create mode 100644 sas/mocks/sas9/sasjs/services/approvers/rejection.js create mode 100644 sas/mocks/sas9/sasjs/services/auditors/getstagetable.js create mode 100644 sas/mocks/sas9/sasjs/services/auditors/postdata.js create mode 100644 sas/mocks/sas9/sasjs/services/editors/getdata.js create mode 100644 sas/mocks/sas9/sasjs/services/editors/getdynamiccolvals.js create mode 100644 sas/mocks/sas9/sasjs/services/editors/getsubmits.js create mode 100644 sas/mocks/sas9/sasjs/services/editors/loadfile.js create mode 100644 sas/mocks/sas9/sasjs/services/editors/stagedata.js create mode 100644 sas/mocks/sas9/sasjs/services/lineage/backup/fetchcollineage.js create mode 100644 sas/mocks/sas9/sasjs/services/lineage/backup/fetchtablelineage.js create mode 100644 sas/mocks/sas9/sasjs/services/lineage/fetchcollineage.js create mode 100644 sas/mocks/sas9/sasjs/services/lineage/fetchlineage.js create mode 100644 sas/mocks/sas9/sasjs/services/lineage/fetchtablelineage.js create mode 100644 sas/mocks/sas9/sasjs/services/lineage/getmetacols.js create mode 100644 sas/mocks/sas9/sasjs/services/lineage/getmetatables.js create mode 100644 sas/mocks/sas9/sasjs/services/metanav/metadetails.js create mode 100644 sas/mocks/sas9/sasjs/services/metanav/metaobjects.js create mode 100644 sas/mocks/sas9/sasjs/services/metanav/metarepos.js create mode 100644 sas/mocks/sas9/sasjs/services/metanav/metatypes.js create mode 100644 sas/mocks/sas9/sasjs/services/public/getchangeinfo.js create mode 100644 sas/mocks/sas9/sasjs/services/public/getcolvals.js create mode 100644 sas/mocks/sas9/sasjs/services/public/getgroups.js create mode 100644 sas/mocks/sas9/sasjs/services/public/refreshlibinfo.js create mode 100644 sas/mocks/sas9/sasjs/services/public/startupservice.js create mode 100644 sas/mocks/sas9/sasjs/services/public/validatefilter.js create mode 100644 sas/mocks/sas9/sasjs/services/public/viewdata.js create mode 100644 sas/mocks/sas9/sasjs/services/public/viewlibs.js create mode 100644 sas/mocks/sas9/sasjs/services/public/viewtables.js create mode 100644 sas/mocks/sas9/sasjs/services/usernav/usergroupsbymember.js create mode 100644 sas/mocks/sas9/sasjs/services/usernav/usermembers.js create mode 100644 sas/mocks/sas9/sasjs/services/usernav/usermembersbygroup.js create mode 100644 sas/mocks/sas9/sasjs/services/usernav/usermembersbyrole.js create mode 100644 sas/mocks/sas9/sasjs/services/usernav/userroles.js create mode 100644 sas/mocks/sasjs/.sasjslint create mode 100644 sas/mocks/sasjs/mock-storage/licence.json create mode 100644 sas/mocks/sasjs/sasjsconfig.json create mode 100644 sas/mocks/sasjs/services/admin/dummy.js create mode 100644 sas/mocks/sasjs/services/admin/registerkey.js create mode 100644 sas/mocks/sasjs/services/approvers/getapprovals.js create mode 100644 sas/mocks/sasjs/services/approvers/gethistory.js create mode 100644 sas/mocks/sasjs/services/approvers/rejection.js create mode 100644 sas/mocks/sasjs/services/auditors/getstagetable.js create mode 100644 sas/mocks/sasjs/services/auditors/postdata.js create mode 100644 sas/mocks/sasjs/services/editors/getdata.js create mode 100644 sas/mocks/sasjs/services/editors/getdynamiccolvals.js create mode 100644 sas/mocks/sasjs/services/editors/getsubmits.js create mode 100644 sas/mocks/sasjs/services/editors/loadfile.js create mode 100644 sas/mocks/sasjs/services/editors/stagedata.js create mode 100644 sas/mocks/sasjs/services/lineage/fetchlineage.js create mode 100644 sas/mocks/sasjs/services/lineage/fetchtablelineage.js create mode 100644 sas/mocks/sasjs/services/lineage/getmetacols.js create mode 100644 sas/mocks/sasjs/services/lineage/getmetatables.js create mode 100644 sas/mocks/sasjs/services/metanav/metadetails.js create mode 100644 sas/mocks/sasjs/services/metanav/metaobjects.js create mode 100644 sas/mocks/sasjs/services/metanav/metarepos.js create mode 100644 sas/mocks/sasjs/services/metanav/metatypes.js create mode 100644 sas/mocks/sasjs/services/public/getchangeinfo.js create mode 100644 sas/mocks/sasjs/services/public/getcolvals.js create mode 100644 sas/mocks/sasjs/services/public/getddl.js create mode 100644 sas/mocks/sasjs/services/public/getgroups.js create mode 100644 sas/mocks/sasjs/services/public/getrawdata.js create mode 100644 sas/mocks/sasjs/services/public/refreshlibinfo.js create mode 100644 sas/mocks/sasjs/services/public/startupservice.js create mode 100644 sas/mocks/sasjs/services/public/validatefilter.js create mode 100644 sas/mocks/sasjs/services/public/viewdata.js create mode 100644 sas/mocks/sasjs/services/public/viewlibs.js create mode 100644 sas/mocks/sasjs/services/public/viewtables.js create mode 100644 sas/mocks/sasjs/services/usernav/usergroupsbymember.js create mode 100644 sas/mocks/sasjs/services/usernav/usermembers.js create mode 100644 sas/mocks/sasjs/services/usernav/usermembersbygroup.js create mode 100644 sas/mocks/sasjs/services/usernav/usermembersbyrole.js create mode 100644 sas/mocks/sasjs/services/usernav/userroles.js create mode 100644 sas/package-lock.json create mode 100644 sas/package.json create mode 100644 sas/sasjs/.sasjslint create mode 100644 sas/sasjs/binaryfiles/dcsquare.png create mode 100644 sas/sasjs/db/datactrl/mpe_audit.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_config.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_datacatalog_libs.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_datacatalog_tabs.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_datacatalog_vars.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_datadictionary.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_dataloads.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_datastatus_libs.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_datastatus_tabs.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_excel_config.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_filteranytable.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_filtersource.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_groups.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_lineage_cols.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_lineage_tabs.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_loads.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_lockanytable.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_maxkeyvalues.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_review.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_security.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_selectbox.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_signoffs.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_submit.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_tables.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_users.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_validations.ddl create mode 100644 sas/sasjs/db/datactrl/mpe_x_test.ddl create mode 100644 sas/sasjs/db/dcdemo/dim_product.ddl create mode 100644 sas/sasjs/db/migrations/20200121_mpe_groups.sas create mode 100644 sas/sasjs/db/migrations/20200131_mpe_security.sas create mode 100644 sas/sasjs/db/migrations/20200208_mpe_config.sas create mode 100644 sas/sasjs/db/migrations/20200224_mpe_requests.sas create mode 100644 sas/sasjs/db/migrations/20200227_mpe_selectbox.sas create mode 100644 sas/sasjs/db/migrations/20200319_dd_validations.sas create mode 100644 sas/sasjs/db/migrations/20200428_datacatalog.sas create mode 100644 sas/sasjs/db/migrations/20200529_lineagetabs.sas create mode 100644 sas/sasjs/db/migrations/20200605v38_mpe_datadictionary.sas create mode 100644 sas/sasjs/db/migrations/20201003_mpe_users.sas create mode 100644 sas/sasjs/db/migrations/20210211_mpe_review.sas create mode 100644 sas/sasjs/db/migrations/20210410_v3.12_release.sas create mode 100644 sas/sasjs/db/migrations/20210802_v3.13_release.sas create mode 100644 sas/sasjs/db/migrations/20211215_v4.0_release.sas create mode 100644 sas/sasjs/db/migrations/20220615_v5.0_release.sas create mode 100644 sas/sasjs/doxy/Doxyfile create mode 100644 sas/sasjs/doxy/DoxygenLayout.xml create mode 100644 sas/sasjs/doxy/README.md create mode 100644 sas/sasjs/doxy/data_controller.png create mode 100644 sas/sasjs/doxy/favicon.ico create mode 100644 sas/sasjs/doxy/main.dox create mode 100644 sas/sasjs/doxy/new_footer.html create mode 100644 sas/sasjs/doxy/new_header.html create mode 100644 sas/sasjs/doxy/new_stylesheet.css create mode 100755 sas/sasjs/macros/bitemporal_closeouts.sas create mode 100755 sas/sasjs/macros/bitemporal_dataloader.sas create mode 100644 sas/sasjs/macros/bitemporal_dataloader.test.1.sas create mode 100755 sas/sasjs/macros/bitemporal_dataloader.test.2.sas create mode 100644 sas/sasjs/macros/bitemporal_dataloader.test.3.sas create mode 100644 sas/sasjs/macros/bitemporal_dataloader.test.4.sas create mode 100755 sas/sasjs/macros/mpe_accesscheck.sas create mode 100755 sas/sasjs/macros/mpe_alerts.sas create mode 100644 sas/sasjs/macros/mpe_columnlevelsecurity.sas create mode 100644 sas/sasjs/macros/mpe_filtermaster.sas create mode 100644 sas/sasjs/macros/mpe_filtermaster.test.1.sas create mode 100644 sas/sasjs/macros/mpe_filtermaster.test.sas create mode 100644 sas/sasjs/macros/mpe_getgroups.sas create mode 100644 sas/sasjs/macros/mpe_getlabels.sas create mode 100644 sas/sasjs/macros/mpe_getvars.sas create mode 100755 sas/sasjs/macros/mpe_loader.sas create mode 100755 sas/sasjs/macros/mpe_loadfail.sas create mode 100644 sas/sasjs/macros/mpe_makedata.sas create mode 100644 sas/sasjs/macros/mpe_makedatamodel.sas create mode 100644 sas/sasjs/macros/mpe_makesampledata.sas create mode 100644 sas/sasjs/macros/mpe_refreshlibs.sas create mode 100644 sas/sasjs/macros/mpe_refreshtables.sas create mode 100644 sas/sasjs/macros/mpe_runhook.sas create mode 100755 sas/sasjs/macros/mpe_targetloader.sas create mode 100644 sas/sasjs/macros/mpe_validatefilter.sas create mode 100755 sas/sasjs/macros/mpeinit.sas create mode 100644 sas/sasjs/macros/mpeinit2.sas create mode 100644 sas/sasjs/macros/mpeterm.sas create mode 100644 sas/sasjs/macros/removecolsfromwork.sas create mode 100644 sas/sasjs/sasjsconfig.json create mode 100644 sas/sasjs/services/admin/exportconfig.sas create mode 100644 sas/sasjs/services/admin/exportdb.sas create mode 100644 sas/sasjs/services/admin/refreshcatalog.sas create mode 100644 sas/sasjs/services/admin/refreshlibs.sas create mode 100644 sas/sasjs/services/admin/registerkey.sas create mode 100644 sas/sasjs/services/approvers/getapprovals.sas create mode 100644 sas/sasjs/services/approvers/getapprovals.test.sas create mode 100644 sas/sasjs/services/approvers/gethistory.sas create mode 100644 sas/sasjs/services/approvers/gethistory.test.sas create mode 100644 sas/sasjs/services/approvers/rejection.sas create mode 100644 sas/sasjs/services/auditors/getauditfile.sas create mode 100644 sas/sasjs/services/auditors/getdiffs.sas create mode 100644 sas/sasjs/services/auditors/getstagetable.sas create mode 100644 sas/sasjs/services/auditors/postdata.sas create mode 100644 sas/sasjs/services/auditors/postdata.test.1.sas create mode 100644 sas/sasjs/services/auditors/postdata.test.2.sas create mode 100755 sas/sasjs/services/editors/getdata.sas create mode 100644 sas/sasjs/services/editors/getdata.test.sas create mode 100644 sas/sasjs/services/editors/getdynamiccolvals.sas create mode 100644 sas/sasjs/services/editors/getdynamiccolvals.test.1.sas create mode 100644 sas/sasjs/services/editors/getdynamiccolvals.test.2.sas create mode 100644 sas/sasjs/services/editors/getlog.sas create mode 100644 sas/sasjs/services/editors/getsubmits.sas create mode 100644 sas/sasjs/services/editors/loadfile.sas create mode 100755 sas/sasjs/services/editors/stagedata.sas create mode 100644 sas/sasjs/services/editors/stagedata.test.1.sas create mode 100644 sas/sasjs/services/editors/stagedata.test.2.sas create mode 100644 sas/sasjs/services/hooks/mpe_column_level_security_postedit.sas create mode 100644 sas/sasjs/services/hooks/mpe_row_level_security_postedit.sas create mode 100644 sas/sasjs/services/hooks/mpe_tables_postedit.sas create mode 100644 sas/sasjs/services/hooks/mpe_validations_postedit.sas create mode 100644 sas/sasjs/services/public/getchangeinfo.sas create mode 100644 sas/sasjs/services/public/getcols.sas create mode 100644 sas/sasjs/services/public/getcolvals.sas create mode 100644 sas/sasjs/services/public/getcolvals.test.1.sas create mode 100644 sas/sasjs/services/public/getcolvals.test.2.sas create mode 100644 sas/sasjs/services/public/getcolvals.test.3.sas create mode 100644 sas/sasjs/services/public/getcolvals.test.sas create mode 100644 sas/sasjs/services/public/getddl.sas create mode 100644 sas/sasjs/services/public/getddl.test.sas create mode 100644 sas/sasjs/services/public/getgroups.sas create mode 100644 sas/sasjs/services/public/getgroups.test.sas create mode 100644 sas/sasjs/services/public/getrawdata.sas create mode 100644 sas/sasjs/services/public/getrawdata.test.sas create mode 100644 sas/sasjs/services/public/refreshlibinfo.sas create mode 100644 sas/sasjs/services/public/refreshlibinfo.test.sas create mode 100644 sas/sasjs/services/public/registeruser.sas create mode 100644 sas/sasjs/services/public/registeruser.test.sas create mode 100755 sas/sasjs/services/public/startupservice.sas create mode 100644 sas/sasjs/services/public/startupservice.test.sas create mode 100644 sas/sasjs/services/public/validatefilter.sas create mode 100644 sas/sasjs/services/public/validatefilter.test.sas create mode 100644 sas/sasjs/services/public/viewdata.sas create mode 100644 sas/sasjs/services/public/viewdata.test.1.sas create mode 100644 sas/sasjs/services/public/viewdata.test.2.sas create mode 100644 sas/sasjs/services/public/viewlibarray.sas create mode 100644 sas/sasjs/services/public/viewlibs.sas create mode 100644 sas/sasjs/services/public/viewlibs.test.sas create mode 100644 sas/sasjs/services/public/viewtables.sas create mode 100644 sas/sasjs/services/public/viewtables.test.sas create mode 100644 sas/sasjs/services/validations/columns_in_libds.sas create mode 100644 sas/sasjs/services/validations/libraries_all.sas create mode 100644 sas/sasjs/services/validations/libraries_editable.sas create mode 100644 sas/sasjs/services/validations/mpe_alerts.alert_lib.sas create mode 100644 sas/sasjs/services/validations/mpe_tables.dsn.sas create mode 100644 sas/sasjs/services/validations/mpe_x_test.some_num.sas create mode 100644 sas/sasjs/services/validations/sas_groups.sas create mode 100644 sas/sasjs/services/validations/tables_all.sas create mode 100644 sas/sasjs/services/validations/tables_editable.sas create mode 100644 sas/sasjs/targets/sas9/macros_meta/dc_assignlib.sas create mode 100644 sas/sasjs/targets/sas9/macros_meta/dc_createdataset.sas create mode 100644 sas/sasjs/targets/sas9/macros_meta/dc_getgroupmembers.sas create mode 100644 sas/sasjs/targets/sas9/macros_meta/dc_getgroups.sas create mode 100644 sas/sasjs/targets/sas9/macros_meta/dc_getlibs.sas create mode 100644 sas/sasjs/targets/sas9/macros_meta/dc_getroles.sas create mode 100644 sas/sasjs/targets/sas9/macros_meta/dc_getservicecode.sas create mode 100644 sas/sasjs/targets/sas9/macros_meta/dc_getsettings.sas create mode 100644 sas/sasjs/targets/sas9/macros_meta/dc_gettableid.sas create mode 100644 sas/sasjs/targets/sas9/macros_meta/dc_getusergroups.sas create mode 100644 sas/sasjs/targets/sas9/macros_meta/dc_getusers.sas create mode 100644 sas/sasjs/targets/sas9/macros_meta/dc_refreshcatalog.sas create mode 100644 sas/sasjs/targets/sas9/macros_meta/meta_mapper.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/admin/configurator.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/admin/makedata.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/admin/makelib.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/admin/refreshtablelineage.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/lineage/fetchcollineage.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/lineage/fetchtablelineage.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/lineage/getmetacols.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/lineage/getmetatables.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/metanav/metadetails.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/metanav/metaobjects.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/metanav/metarepos.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/metanav/metatypes.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/usernav/usergroupsbymember.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/usernav/usermembers.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/usernav/usermembersbygroup.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/usernav/usermembersbyrole.sas create mode 100644 sas/sasjs/targets/sas9/services_meta/usernav/userroles.sas create mode 100644 sas/sasjs/targets/server/macros_server/dc_assignlib.sas create mode 100644 sas/sasjs/targets/server/macros_server/dc_createdataset.sas create mode 100644 sas/sasjs/targets/server/macros_server/dc_getgroupmembers.sas create mode 100644 sas/sasjs/targets/server/macros_server/dc_getgroups.sas create mode 100644 sas/sasjs/targets/server/macros_server/dc_getlibs.sas create mode 100644 sas/sasjs/targets/server/macros_server/dc_getservicecode.sas create mode 100644 sas/sasjs/targets/server/macros_server/dc_getsettings.sas create mode 100644 sas/sasjs/targets/server/macros_server/dc_gettableid.sas create mode 100644 sas/sasjs/targets/server/macros_server/dc_getusergroups.sas create mode 100644 sas/sasjs/targets/server/macros_server/dc_getusers.sas create mode 100644 sas/sasjs/targets/server/macros_server/dc_refreshcatalog.sas create mode 100644 sas/sasjs/targets/server/services_server/admin/configurator.sas create mode 100644 sas/sasjs/targets/server/services_server/admin/makedata.sas create mode 100644 sas/sasjs/targets/server/services_server/usernav/usergroupsbymember.sas create mode 100644 sas/sasjs/targets/server/services_server/usernav/usermembers.sas create mode 100644 sas/sasjs/targets/server/services_server/usernav/usermembersbygroup.sas create mode 100644 sas/sasjs/targets/viya/macros_viya/dc_assignlib.sas create mode 100644 sas/sasjs/targets/viya/macros_viya/dc_createdataset.sas create mode 100644 sas/sasjs/targets/viya/macros_viya/dc_getgroupmembers.sas create mode 100644 sas/sasjs/targets/viya/macros_viya/dc_getgroups.sas create mode 100644 sas/sasjs/targets/viya/macros_viya/dc_getlibs.sas create mode 100644 sas/sasjs/targets/viya/macros_viya/dc_getservicecode.sas create mode 100644 sas/sasjs/targets/viya/macros_viya/dc_getsettings.sas create mode 100644 sas/sasjs/targets/viya/macros_viya/dc_gettableid.sas create mode 100644 sas/sasjs/targets/viya/macros_viya/dc_getusergroups.sas create mode 100644 sas/sasjs/targets/viya/macros_viya/dc_getusers.sas create mode 100644 sas/sasjs/targets/viya/macros_viya/dc_refreshcatalog.sas create mode 100644 sas/sasjs/targets/viya/services_viya/admin/makedata.sas create mode 100644 sas/sasjs/targets/viya/services_viya/public/tokenauth.sas create mode 100644 sas/sasjs/targets/viya/services_viya/public/tokenrefresh.sas create mode 100644 sas/sasjs/targets/viya/services_viya/viya_users/usergroupsbymember.sas create mode 100644 sas/sasjs/targets/viya/services_viya/viya_users/usermembers.sas create mode 100644 sas/sasjs/targets/viya/services_viya/viya_users/usermembersbygroup.sas create mode 100644 sas/sasjs/tests/testinit.sas create mode 100644 sas/sasjs/tests/testsetup.sas create mode 100644 sas/sasjs/tests/testterm.sas create mode 100644 sas/sasjs/utils/buildinitsas9.sas create mode 100644 sas/sasjs/utils/buildinitviya.sas create mode 100644 sas/sasjs/utils/buildtermsas9.sas create mode 100644 sas/sasjs/utils/buildtermviya.sas create mode 100755 sas/sasjs/utils/delete_metafolder.sh create mode 100755 sas/sasjs/utils/deploysas9sh.sh create mode 100755 sas/sasjs/utils/export_spk.sh create mode 100644 sas/sasjs/utils/favicon.ico create mode 100644 sas/sasjs/utils/serviceinitsas9.sas create mode 100644 sas/sasjs/utils/serviceinitserver.sas create mode 100644 sas/sasjs/utils/serviceinitviya.sas create mode 100644 sas/sasjs/utils/serviceterm.sas create mode 100755 sas/sasjs/utils/viyadeploy.sh diff --git a/.git-hooks/commit-msg b/.git-hooks/commit-msg new file mode 100755 index 0000000..d12ec2f --- /dev/null +++ b/.git-hooks/commit-msg @@ -0,0 +1,18 @@ +#!/bin/sh +RED="\033[1;31m" +GREEN="\033[1;32m" + +# Get the commit message (the parameter we're given is just the path to the +# temporary file which holds the message). +commit_message=$(cat "$1") + +if (echo "$commit_message" | grep -Eq "^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\([a-z0-9 \-]+\))?!?: .+$") then + echo "${GREEN} ✔ Commit message meets Conventional Commit standards" + exit 0 +fi + +echo "${RED}❌ Commit message does not meet the Conventional Commit standard!" +echo "An example of a valid message is:" +echo " feat(login): add the 'remember me' button" +echo "ℹ More details at: https://www.conventionalcommits.org/en/v1.0.0/#summary" +exit 1 \ No newline at end of file diff --git a/.git-hooks/pre-commit b/.git-hooks/pre-commit new file mode 100755 index 0000000..f617074 --- /dev/null +++ b/.git-hooks/pre-commit @@ -0,0 +1,11 @@ +#!/bin/sh + +# Avoid commits to the master branch +BRANCH=`git rev-parse --abbrev-ref HEAD` +REGEX="^(master|development)$" + +if [[ "$BRANCH" =~ $REGEX ]]; then + echo "You are on branch $BRANCH. Are you sure you want to commit to this branch?" + echo "If so, commit with -n to bypass the pre-commit hook." + exit 1 +fi diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml new file mode 100644 index 0000000..b41796b --- /dev/null +++ b/.gitea/workflows/build.yaml @@ -0,0 +1,38 @@ +name: Build +run-name: Building and testing DC +on: [pull_request] + +jobs: + Build-and-ng-test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + + - name: Write .npmrc file + run: echo "$NPMRC" > client/.npmrc + shell: bash + env: + NPMRC: ${{ secrets.NPMRC}} + + - run: apt-get update + - run: wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb + - run: apt install -y ./google-chrome*.deb; + - run: export CHROME_BIN=/usr/bin/google-chrome + - run: npm run lint:check + # Install dependencies~ + - run: npm ci --legacy-peer-deps + # Audit should fail and stop the CI if critical vulnerability found + - run: npm audit --audit-level=critical + - run: | + cd ./sas + npm audit --audit-level=critical + - run: | + cd ./client + npm audit --audit-level=critical + npm test -- --no-watch --no-progress --browsers=ChromeHeadlessCI + npm run postinstall + npm run build \ No newline at end of file diff --git a/.gitea/workflows/development-test.yaml b/.gitea/workflows/development-test.yaml new file mode 100644 index 0000000..9c41b17 --- /dev/null +++ b/.gitea/workflows/development-test.yaml @@ -0,0 +1,172 @@ +name: Test +run-name: Building and testing development branch +on: + push: + branches: + - development + +jobs: + Build-and-test-development: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + + - name: Write .npmrc file + run: echo "$NPMRC" > client/.npmrc + shell: bash + env: + NPMRC: ${{ secrets.NPMRC}} + + - run: apt-get update + - run: wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb + - run: apt install -y ./google-chrome*.deb; + - run: export CHROME_BIN=/usr/bin/google-chrome + - run: apt-get update -y + - run: apt-get -y install libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb + - run: apt -y install jq + # - run: 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' + # - run: eval $(ssh-agent -s) + # - run: echo "$ssh_key" | tr -d '\r' | ssh-add - + - name: Write cypress credentials + run: echo "$CYPRESS_CREDS" > ./client/cypress.env.json + shell: bash + env: + CYPRESS_CREDS: ${{ secrets.CYPRESS_CREDS }} + + # - run: mkdir -p ~/.ssh + # - run: chmod 700 ~/.ssh + - run: npm ci --legacy-peer-deps + # Install pm2 and prepare SASJS server + - run: npm i -g pm2 + - run: curl -L https://github.com/sasjs/server/releases/latest/download/linux.zip > linux.zip + - run: unzip linux.zip + - run: touch .env + - run: echo RUN_TIMES=js >> .env + - run: echo NODE_PATH=node >> .env + - run: echo CORS=enable >> .env + - run: echo WHITELIST=http://localhost:4200 >> .env + # - run: echo "SERVER_URL=$server_url" >> .env + # - run: echo "SERVER_TYPE=$server_type" >> .env + # - run: echo "CLIENT=$client_sasjs" >> .env + # - run: echo "ACCESS_TOKEN=$access_token_sasjs" >> .env + # - run: echo "REFRESH_TOKEN=$refresh_token_sasjs" >> .env + # - run: cat .env + - run: pm2 start api-linux --wait-ready + + - name: Deploy mocked services + run: | + cd ./sas/mocks/sasjs + npm install --legacy-peer-deps -g @sasjs/cli + npm install --legacy-peer-deps -g replace-in-files-cli + sasjs cbd -t server-ci + # sasjs request services/admin/makedata -t server-ci -d ./deploy/makeData4GL.json -c ./deploy/requestConfig.json -o ./output.json + + - name: Prepare frontend + run: | + cd ./client + # mv ./cypress.env.example.json ./cypress.env.json + # replace-in-files --regex='"username".*' --replacement='"username":"'$cypress_username_sasjs'",' ./cypress.env.json + # replace-in-files --regex='"password".*' --replacement='"password":"'$cypress_pwd_sasjs'" ' ./cypress.env.json + cat ./cypress.env.json + npm run postinstall + # Prepare index.html to SASJS local + replace-in-files --regex='serverUrl=".*?"' --replacement='serverUrl="http://localhost:5000"' ./src/index.html + replace-in-files --regex='appLoc=".*?"' --replacement='appLoc="/Public/app/devtest"' ./src/index.html + replace-in-files --regex='serverType=".*?"' --replacement='serverType="SASJS"' ./src/index.html + # Prepare and deploy SASJS version + # replace-in-files --regex='serverurl=".*?"' --replacement='serverUrl="http://localhost:5000"' ./dist/index.html + # replace-in-files --regex='apploc=".*?"' --replacement='appLoc="/30.SASApps/app/devtest"' ./dist/index.html + # replace-in-files --regex='servertype=".*?"' --replacement='serverType="SASJS"' ./dist/index.html + # scp -o stricthostkeychecking=no -r ./dist/* dcgitlab@sas.4gl.io:/var/www/html/dcviya/development/newadapter + replace-in-files --regex='"hosturl".*' --replacement='hosturl:"http://localhost:4200",' ./cypress.config.ts + # replace-in-files --regex='"appLocation".*' --replacement='appLocation:"/dcviya/development/newadapter",' ./cypress.config.ts + cat ./cypress.config.ts + # Start frontend and run cypress + npm start & npx wait-on http://localhost:4200 && ./run-cypress-tests.sh + + Build-and-test-development-latest-adapter: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + + - name: Write .npmrc file + run: echo "$NPMRC" > client/.npmrc + shell: bash + env: + NPMRC: ${{ secrets.NPMRC}} + + - run: apt-get update + - run: wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb + - run: apt install -y ./google-chrome*.deb; + - run: export CHROME_BIN=/usr/bin/google-chrome + - run: apt-get update -y + - run: apt-get -y install libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb + - run: apt -y install jq + # - run: 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' + # - run: eval $(ssh-agent -s) + # - run: echo "$ssh_key" | tr -d '\r' | ssh-add - + - name: Write cypress credentials + run: echo "$CYPRESS_CREDS" > ./client/cypress.env.json + shell: bash + env: + CYPRESS_CREDS: ${{ secrets.CYPRESS_CREDS }} + + # - run: mkdir -p ~/.ssh + # - run: chmod 700 ~/.ssh + - run: npm ci --legacy-peer-deps + # Install pm2 and prepare SASJS server + - run: npm i -g pm2 + - run: curl -L https://github.com/sasjs/server/releases/latest/download/linux.zip > linux.zip + - run: unzip linux.zip + - run: touch .env + - run: echo RUN_TIMES=js >> .env + - run: echo NODE_PATH=node >> .env + - run: echo CORS=enable >> .env + - run: echo WHITELIST=http://localhost:4200 >> .env + # - run: echo "SERVER_URL=$server_url" >> .env + # - run: echo "SERVER_TYPE=$server_type" >> .env + # - run: echo "CLIENT=$client_sasjs" >> .env + # - run: echo "ACCESS_TOKEN=$access_token_sasjs" >> .env + # - run: echo "REFRESH_TOKEN=$refresh_token_sasjs" >> .env + # - run: cat .env + - run: pm2 start api-linux --wait-ready + + - name: Deploy mocked services + run: | + cd ./sas/mocks/sasjs + npm install --legacy-peer-deps -g @sasjs/cli + npm install --legacy-peer-deps -g replace-in-files-cli + sasjs cbd -t server-ci + # sasjs request services/admin/makedata -t server-ci -d ./deploy/makeData4GL.json -c ./deploy/requestConfig.json -o ./output.json + + - name: Prepare frontend + run: | + cd ./client + # mv ./cypress.env.example.json ./cypress.env.json + # replace-in-files --regex='"username".*' --replacement='"username":"'$cypress_username_sasjs'",' ./cypress.env.json + # replace-in-files --regex='"password".*' --replacement='"password":"'$cypress_pwd_sasjs'" ' ./cypress.env.json + cat ./cypress.env.json + npm run postinstall + npm install --legacy-peer-deps @sasjs/adapter@latest + # Prepare index.html to SASJS local + replace-in-files --regex='serverUrl=".*?"' --replacement='serverUrl="http://localhost:5000"' ./src/index.html + replace-in-files --regex='appLoc=".*?"' --replacement='appLoc="/Public/app/devtest"' ./src/index.html + replace-in-files --regex='serverType=".*?"' --replacement='serverType="SASJS"' ./src/index.html + # Prepare and deploy SASJS version + # replace-in-files --regex='serverurl=".*?"' --replacement='serverUrl="http://localhost:5000"' ./dist/index.html + # replace-in-files --regex='apploc=".*?"' --replacement='appLoc="/30.SASApps/app/devtest"' ./dist/index.html + # replace-in-files --regex='servertype=".*?"' --replacement='serverType="SASJS"' ./dist/index.html + # scp -o stricthostkeychecking=no -r ./dist/* dcgitlab@sas.4gl.io:/var/www/html/dcviya/development/newadapter + replace-in-files --regex='"hosturl".*' --replacement='hosturl:"http://localhost:4200",' ./cypress.config.ts + # replace-in-files --regex='"appLocation".*' --replacement='appLocation:"/dcviya/development/newadapter",' ./cypress.config.ts + cat ./cypress.config.ts + # Start frontend and run cypress + npm start & npx wait-on http://localhost:4200 && ./run-cypress-tests.sh \ No newline at end of file diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml new file mode 100644 index 0000000..23bc211 --- /dev/null +++ b/.gitea/workflows/release.yaml @@ -0,0 +1,50 @@ +name: Release +run-name: Releasing DC +on: + push: + branches: + - main + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + + - name: Write .npmrc file + run: | + echo "$NPMRC" > client/.npmrc + echo "legacy-peer-deps=true" >> client/.npmrc + shell: bash + env: + NPMRC: ${{ secrets.NPMRC}} + + - name: Install ZIP + run: | + apt-get update + apt-get install zip + + - name: release-build + run: | + cd client + npm ci + npm run build + zip -r dist.zip ./dist + + - name: Install Semantic Release and plugins + run: | + npm i + npm i -g semantic-release + + - name: Release + run: | + GITEA_TOKEN=${{ secrets.RELEASE_TOKEN }} GITEA_URL=https://git.datacontroller.io semantic-release + + - name: Release Typedoc + run: | + cd client + npm run typedoc + # deploy docs \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..603ea0c --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +coverage/ +dist/ +node_modules/ +client/.angular/cache/ +**/*npm-debug.log.* +**/*yarn-error.log.* +.idea/ +.DS_Store +client/src/environments/version.ts +client/cypress/screenshots +client/cypress/results +client/cypress/videos +cypress.env.json +sasjsbuild +sasjsresults +.env* +.sasjsrc +client/.npmrc +*~ diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..51df798 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +legacy-peer-deps=false diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..7f43c70 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,8 @@ + +{ + "trailingComma": "none", + "tabWidth": 2, + "semi": false, + "singleQuote": true, + "endOfLine": "auto" +} \ No newline at end of file diff --git a/.releaserc b/.releaserc new file mode 100644 index 0000000..53177bd --- /dev/null +++ b/.releaserc @@ -0,0 +1,22 @@ +{ + "branches": ["main"], + "plugins": [ + "@semantic-release/commit-analyzer", + "@semantic-release/release-notes-generator", + "@semantic-release/changelog", + [ + "@semantic-release/git", + { + "assets": [ + "CHANGELOG.md" + ] + } + ], + ["@saithodev/semantic-release-gitea", { + "giteaUrl": "https://git.datacontroller.io", + "assets": [ + {"path": "client/dist.zip"} + ] + }] + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..d8e7655 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,18 @@ +{ + "cSpell.words": [ + "SYSERRORTEXT", + "SYSWARNINGTEXT" + ], + "editor.rulers": [ + 80 + ], + "files.trimTrailingWhitespace": true, + "[markdown]": { + "files.trimTrailingWhitespace": false + }, + "workbench.colorCustomizations": { + "titleBar.activeForeground": "#ebe8e8", + "titleBar.activeBackground": "#95ff0053", + }, + "terminal.integrated.wordSeparators": " ()[]{}',\"`─‘’" +} \ No newline at end of file diff --git a/.woodpecker.yml b/.woodpecker.yml new file mode 100644 index 0000000..de5aeef --- /dev/null +++ b/.woodpecker.yml @@ -0,0 +1,9 @@ +pipeline: + build: + image: debian + commands: + - echo "This is the build step" + a-test-step: + image: debian + commands: + - echo "Testing.." \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..c49fad8 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,1965 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines. + +## [6.0.0](https://gitlab.com/macropeople/datacontroller/compare/v5.3.0...v6.0.0) (2023-06-27) + + +### ⚠ BREAKING CHANGES + +* The updated model and behaviour of FORMATS is the breaking change in this release! (but not this commit) + +* removed gitpod.yml and moved CONTRIBUTING.md to root directory ([eb3e1be](https://gitlab.com/macropeople/datacontroller/commit/eb3e1be2e4697a90faa01155c53f2e664c63c3c6)) + + +### Features + +* adding isadmin to startupservice. Relates to [#460](https://gitlab.com/macropeople/datacontroller/issues/460) ([70a755c](https://gitlab.com/macropeople/datacontroller/commit/70a755ccace68d0d2eb4baf25f091300e7f49b75)) +* admin page ([642b7d0](https://gitlab.com/macropeople/datacontroller/commit/642b7d042a34fc83f7871fd84e254490cea81232)) +* angular 16 ([9805c09](https://gitlab.com/macropeople/datacontroller/commit/9805c094290f9d8f7012bb0316ef924865e6ac29)) +* autocomplete load more ([f3df479](https://gitlab.com/macropeople/datacontroller/commit/f3df4790c8160c2f51c643419a24992e4171e5b7)) +* autocomplete load more ([3160be4](https://gitlab.com/macropeople/datacontroller/commit/3160be4fe1f3f4196cf0fa418dee75acfe6a64f3)) +* custom dropdown load more ([0a576fd](https://gitlab.com/macropeople/datacontroller/commit/0a576fddb9525ca41db4a31b7ad4aec6db420ca4)) +* handsontable 12.4.0 ([17d1c23](https://gitlab.com/macropeople/datacontroller/commit/17d1c231b45e667442236f5475cb5d68a67ce7d3)) +* history paging (load more) ([d4381da](https://gitlab.com/macropeople/datacontroller/commit/d4381da4776814419133b11b4c99f57faca62172)) +* licence in a file ([2cc59ff](https://gitlab.com/macropeople/datacontroller/commit/2cc59ff1b392985b342b8491147bea1bf895d7e2)) +* licensing refactor - free tier version ([a418cd6](https://gitlab.com/macropeople/datacontroller/commit/a418cd6085c16d62a2be7fc7f9a9943f9452f3a9)) +* new licence service with encoded features ([fa8722f](https://gitlab.com/macropeople/datacontroller/commit/fa8722f4c5ba8e7334d478560a82d24d5cb7f79e)) +* showing PK in VIEW menu for format catalogs ([fc64832](https://gitlab.com/macropeople/datacontroller/commit/fc6483229a63afbe2f3044e242079798110aef41)) +* support for INFORMATS - also multilabel and notsorted formats ([34af333](https://gitlab.com/macropeople/datacontroller/commit/34af333e414ad965d94b875065fa2d6a7492ed8e)) +* viya api explorer ([4c69487](https://gitlab.com/macropeople/datacontroller/commit/4c69487552612a35e010d5c8de34337b5f43c8ee)) + + +### Bug Fixes + +* adapter bump ([72843c2](https://gitlab.com/macropeople/datacontroller/commit/72843c27ed6638f5fca84c0f8d1b865121655876)) +* adapter bump ([30da29f](https://gitlab.com/macropeople/datacontroller/commit/30da29ffa7a57f723d85ed653de41e158a9743d1)) +* added component to add link to support email ([234a43d](https://gitlab.com/macropeople/datacontroller/commit/234a43dc3537506096fbb16b225c755e9581fd9c)) +* added copy without headers ([32d5a4f](https://gitlab.com/macropeople/datacontroller/commit/32d5a4f6ec293b610e917c10c9719bb6a0334d1b)) +* adding lock check on mpe_audit before dataload ([6ad5d61](https://gitlab.com/macropeople/datacontroller/commit/6ad5d615dfa0ad23f0eda2c986f0d600fb1bc3aa)) +* adding nobs to gethistory ([2c15abb](https://gitlab.com/macropeople/datacontroller/commit/2c15abb22a2fcd31aefb20b15a200a271a42ef2b)) +* angular bump 15.2.9 ([c7e21b9](https://gitlab.com/macropeople/datacontroller/commit/c7e21b97daaec85337459f43856eb8f8a446cd13)) +* angular-eslint bump 15.2.1 ([305de83](https://gitlab.com/macropeople/datacontroller/commit/305de8368bd98486b280208ea95fe3538a1f792b)) +* **approve:** bumping core to prevent unlocks when tables are not locked (issue [#339](https://gitlab.com/macropeople/datacontroller/issues/339) in core library) ([afc0517](https://gitlab.com/macropeople/datacontroller/commit/afc0517a7a152be46072d740e0c893d30b7bfa09)) +* **approve:** When uploading ONLY deletes, ensure that records are added to the mpe_audit table ([2d404c0](https://gitlab.com/macropeople/datacontroller/commit/2d404c0992cc8c611bede64aa71b5d378a5e3032)) +* backend for getcolvals extra rows ([4f50654](https://gitlab.com/macropeople/datacontroller/commit/4f50654c17018103b1b30ea08ae7b01c5afca419)) +* bitemporal load support in audit table ([a63f7de](https://gitlab.com/macropeople/datacontroller/commit/a63f7de32eeb8a67296713271df40c83125b61f8)) +* bump typescript 4.9.5 ([b0e0dfa](https://gitlab.com/macropeople/datacontroller/commit/b0e0dfac6430b476f69966695075cc77cbcf5ea8)) +* d3 graphviz updated to fix vulnerabilities ([28b27ce](https://gitlab.com/macropeople/datacontroller/commit/28b27ce2aca7d2319ba8bc1c4bd4f42e0a976f90)) +* default hot licence, editor rows limit notice on the bottom, showed only when more then limit submitted ([0db976a](https://gitlab.com/macropeople/datacontroller/commit/0db976a5b7c9f167d103461fb65297eb091e2b87)) +* display special missings in VIEW mode ([8d1bfb5](https://gitlab.com/macropeople/datacontroller/commit/8d1bfb5a5d336f094aaa955a87c23bd6986d72f1)) +* enabling configurable history at backend in approvers/gethistory. Addresses [#257](https://gitlab.com/macropeople/datacontroller/issues/257) and ([055a7ff](https://gitlab.com/macropeople/datacontroller/commit/055a7ff5615dc1a074b7aa327cfedb99cd35e572)), closes [#477](https://gitlab.com/macropeople/datacontroller/issues/477) +* enabling refresh of single library when invalid libraries are present ([9545ac7](https://gitlab.com/macropeople/datacontroller/commit/9545ac7a6b44d31a3d5a45bb9dd2168b39a97997)) +* filter on download in history removed, rows and cols number on viewer and editor ([bab3dfa](https://gitlab.com/macropeople/datacontroller/commit/bab3dfa908422708e31b4441f90133873b23be52)) +* firefox dropdown not sticking, load more is note present if nothing to load ([9c78d67](https://gitlab.com/macropeople/datacontroller/commit/9c78d678ef10809392ccc83bfbf1353701b059e2)) +* index html inline style, sas9 metadata type ([8226413](https://gitlab.com/macropeople/datacontroller/commit/8226413c734dfc1f6ce453647f2fb3dc349cda5e)) +* inserting row above/below was scrolling to the bottom ([c30e361](https://gitlab.com/macropeople/datacontroller/commit/c30e36160c4ab42b45a8ec4c13a6f58ff7d3b90f)) +* licence expiration blocks the app (it is now reverted to free tier version) ([389a05b](https://gitlab.com/macropeople/datacontroller/commit/389a05b52ad93d36395b8061f51d07166efa347a)) +* licence expired blocking app (in progress) ([4601683](https://gitlab.com/macropeople/datacontroller/commit/4601683eab34feb5e5701b1efc90e1f678071bdf)) +* licence expired error, added expiry date ([2c20c8d](https://gitlab.com/macropeople/datacontroller/commit/2c20c8dfe0b0ea37f59fcf73e7f803e5023bba87)) +* load more in history to appear only when paging available ([8851ba7](https://gitlab.com/macropeople/datacontroller/commit/8851ba7ded6f2eefbc3598d048729f4b80e6f878)) +* making HIST configurable with MPE_CONFIG ([215fa87](https://gitlab.com/macropeople/datacontroller/commit/215fa87bfd0ee39c4ce499a4bffe3d4e8aa05035)) +* missing licence should not show error ([5a653ae](https://gitlab.com/macropeople/datacontroller/commit/5a653aef288d48f444924255a6328f7172c8fc58)) +* new cypress config, added cypress reporter in results after test run ([8ea3ab8](https://gitlab.com/macropeople/datacontroller/commit/8ea3ab8b89344a2c148e9a97c991c7ccbc678a15)) +* removed ngx-markdown ([cda97fc](https://gitlab.com/macropeople/datacontroller/commit/cda97fcaf7d727cf41093aa272087e21c266a4aa)) +* removed ngx-markdown, added `marked` package, used raw ([43cd643](https://gitlab.com/macropeople/datacontroller/commit/43cd643f6aec475e53f0c798d064a57035f11fa9)) +* submit table request error handling ([b8395be](https://gitlab.com/macropeople/datacontroller/commit/b8395be93382e7187cfb1a1909231ea3f89032c6)) +* submitted page linking ([c18519e](https://gitlab.com/macropeople/datacontroller/commit/c18519e287ffa9eb62d43b7bd414cb1c41b2471a)) +* submitted_dttm type fix and distinct for non admin gethistory ([ef3fa67](https://gitlab.com/macropeople/datacontroller/commit/ef3fa67b950cd626f955bfd79bbfec4a4f1b9bd3)) +* supporting additional date formats. Closes [#484](https://gitlab.com/macropeople/datacontroller/issues/484) ([38d8e10](https://gitlab.com/macropeople/datacontroller/commit/38d8e10dc299be4c7939603b1a7e84d573bde3bf)) +* typo in DDL for MPE_SUBMIT ([f6ca05d](https://gitlab.com/macropeople/datacontroller/commit/f6ca05d733ed05167f15858eaf1e6cfee5aea182)) +* unlocking audit table ([2a6884d](https://gitlab.com/macropeople/datacontroller/commit/2a6884dffcffce22607f7d221e7743135bf32f6e)) +* upcase issue ([ccd9c4e](https://gitlab.com/macropeople/datacontroller/commit/ccd9c4eaf3f45306199dc831cb691401bf5077e8)) +* update to angular v15 ([90a143f](https://gitlab.com/macropeople/datacontroller/commit/90a143fd1ab2b60fe7f48a0c1c582d2727c17757)) +* updated [@angular-eslint](https://gitlab.com/angular-eslint) ([080b281](https://gitlab.com/macropeople/datacontroller/commit/080b281df048b6577ac32577b19c46d74fe92ea6)) +* users allowed with demo key ([6a0fce8](https://gitlab.com/macropeople/datacontroller/commit/6a0fce880e7d3d30b37133bcb1c8e42dee3467fb)) +* viewer rows limit notice position ([5ac227b](https://gitlab.com/macropeople/datacontroller/commit/5ac227b950b0ee4a88d243c0df24d3e5f5e2a6a6)) +* viya profile picture url was broken when client at different domain ([a42cfc0](https://gitlab.com/macropeople/datacontroller/commit/a42cfc077a4a5922e019086ca41365d4779e7205)) + +## [5.3.0](https://github.com/datacontroller/datacontroller/compare/v5.2.0...v5.3.0) (2023-02-23) + + +### Features + +* added file drop and file select directives ([3d29908](https://github.com/datacontroller/datacontroller/commit/3d299087971eea6b0e52886e3b0980bedcb209ca)) +* column ordering stored to URL ([63f7354](https://github.com/datacontroller/datacontroller/commit/63f7354976ca6c5966dadae659065f98524609ba)) +* config in sasjs html tag ([4c0f6ed](https://github.com/datacontroller/datacontroller/commit/4c0f6ed91df48a4bb733f3a6343b95b387499487)) +* editor - viewboxes added ([860a7e9](https://github.com/datacontroller/datacontroller/commit/860a7e9659cd28326a2a0eba3d908ff0fde880a9)) +* **viewboxes:** edit table in new tab ([8321263](https://github.com/datacontroller/datacontroller/commit/8321263b3c3076f317aff5b0228ca8423cc5b89b)) +* **viewboxes:** full table search table ([e86b53a](https://github.com/datacontroller/datacontroller/commit/e86b53a2855bd18eaf91fad0ae8ce84ac4ea360e)) +* **viewboxes:** integration with viewer, modularization ([507f4ae](https://github.com/datacontroller/datacontroller/commit/507f4aef1cab4e6bab9ed310458b8e0fb4f75a8a)) +* **viewboxes:** snap to grid ([940634a](https://github.com/datacontroller/datacontroller/commit/940634a560de8caa08222d9d4f95e3bba8da7d1b)) +* **viewboxes:** table filtering (in progress) ([2029a85](https://github.com/datacontroller/datacontroller/commit/2029a85d6cb3a0ee1f4ba22bd9061cc7a172bd04)) + + +### Bug Fixes + +* abort issue on SAS with ms_webout etc ([05d79cb](https://github.com/datacontroller/datacontroller/commit/05d79cb096adfdaa1dd831b12cb379636e726ebd)) +* adapter config in index.html can be ommited now ([0058eb8](https://github.com/datacontroller/datacontroller/commit/0058eb8ffe481b76130d21837b55dbfb0c24dce2)) +* adapter execute script breaking change ([fd98a2e](https://github.com/datacontroller/datacontroller/commit/fd98a2e68870e797ad40e2fb683e362b63bcccfa)) +* adapter updated ([414bf8d](https://github.com/datacontroller/datacontroller/commit/414bf8d606640091a41c7c91ce1ef77d4c29e522)) +* approve details too many changes JS error ([2efb49e](https://github.com/datacontroller/datacontroller/commit/2efb49ebfdd751c06fd542c9c0f7be08398e391c)) +* bump prettier ([0ab0e84](https://github.com/datacontroller/datacontroller/commit/0ab0e844508a6afbc06d393ca82c44cdc864f04d)) +* bumping core & cli ([c7ce70d](https://github.com/datacontroller/datacontroller/commit/c7ce70d72a1cef1d5249f09a758df56af50f0aa6)) +* col lineage errors (not respecting max_depth) ([2fdc462](https://github.com/datacontroller/datacontroller/commit/2fdc462af270935e35cbc8f933ae753316676377)) +* col lineage hanging issue ([da6536e](https://github.com/datacontroller/datacontroller/commit/da6536e5e508c81b69d4d3aa92df90e5bbd80aac)) +* dynamic mocks for licencing tests ([f967058](https://github.com/datacontroller/datacontroller/commit/f9670583461115caa0dcad1c93bee19f2120c91b)) +* filtering and licence testing, dynamic mocks ([e309029](https://github.com/datacontroller/datacontroller/commit/e30902947fc25ff27366ff77c23d5e9bed3757d3)) +* improved changed rows notice position ([8c521c8](https://github.com/datacontroller/datacontroller/commit/8c521c8aa29c902ea85b7adcabcfdd132ba7d462)) +* remove ng2-file-uploader ([4170546](https://github.com/datacontroller/datacontroller/commit/41705466f1ffc1a28be7b5de250299aafcf9e79b)) +* rename label (dot depth) ([57fa379](https://github.com/datacontroller/datacontroller/commit/57fa37931be42edb7cbe724740a3b486296c072f)) +* update handsontable to 12.2.0 ([a438671](https://github.com/datacontroller/datacontroller/commit/a4386717e8c0f38974297953a6cf805b012cb246)) +* viewbox libraries paging ([4039973](https://github.com/datacontroller/datacontroller/commit/4039973af861146250893da4588de9d9be79a9e4)) +* **viewboxes:** independent filter caching ([7f78ef0](https://github.com/datacontroller/datacontroller/commit/7f78ef0cd2a6967f0fe69a2d55fdd808b4b14211)) +* **viewboxes:** main table filtering title, z index ([0801b5c](https://github.com/datacontroller/datacontroller/commit/0801b5c1fac147dc6ea21e0eeb3b64f514e7c6c1)) +* **viewboxes:** url and keyboard selecting in tree double select ([80942cb](https://github.com/datacontroller/datacontroller/commit/80942cb1f68c6cadf2c026e761c331cb0d1660ac)) + +## [5.2.0](https://github.com/datacontroller/datacontroller/compare/v5.1.0...v5.2.0) (2022-11-15) + + +### Features + +* limit lineage depth button ([cc901f1](https://github.com/datacontroller/datacontroller/commit/cc901f14d499452a19a666c032f72b44b810a4d4)) + + +### Bug Fixes + +* deps update ([8c9a14f](https://github.com/datacontroller/datacontroller/commit/8c9a14f2c7e6004ec62186e096c80f60002f8acd)) +* dummy js file to force admin folder in demo.datacontroller.io ([07f3194](https://github.com/datacontroller/datacontroller/commit/07f319454ab776372e707e763eea34f423ff12bf)) +* editor and viewer responsiveness, logo smaller ([e44ff33](https://github.com/datacontroller/datacontroller/commit/e44ff3389077642359e2fc33f1285d666cbf2c52)) +* enable ampersands in library & table lineage ([078acf3](https://github.com/datacontroller/datacontroller/commit/078acf30e2ac4d8aebaff4a783b9800bf0f4af50)) +* libinfo alignment ([c508f83](https://github.com/datacontroller/datacontroller/commit/c508f83ab25aaba406dfd03f866206909a588d80)) +* licensing error details ([99bb81a](https://github.com/datacontroller/datacontroller/commit/99bb81a01ad021dbfbdfefdb2189eb568125c956)) +* licensing error params ([9c4e1e6](https://github.com/datacontroller/datacontroller/commit/9c4e1e686e9f89380af79d2064abb1db9e14538a)) +* lineage missmatch info not breaking error ([029fa9f](https://github.com/datacontroller/datacontroller/commit/029fa9f045a1a8f3529fd4b0ddf701275f42e779)) +* lineage sidebar matching and error handling ([e26fb0c](https://github.com/datacontroller/datacontroller/commit/e26fb0cede2e05128395599a319bfe4aab2292d0)) +* lineage table 'nolib' fix ([b74f0e0](https://github.com/datacontroller/datacontroller/commit/b74f0e0b9c1cdee17a98daba74ef9b0045765c62)) +* max_depth not working on large lineage graphs ([1e066f1](https://github.com/datacontroller/datacontroller/commit/1e066f17cf9249bf25408ab8e2290c3aea5c6449)) +* missing PK fields in dictionary table ([d40835b](https://github.com/datacontroller/datacontroller/commit/d40835b9da4d9d2750421e9b2232d0a9cea75921)) +* viewer lib info styling on smaller screens ([c2c4424](https://github.com/datacontroller/datacontroller/commit/c2c44241a27aeccf8f3923fdc0dad2e8cbb6da23)) + +## [5.1.0](https://gitlab.com/macropeople/dcfrontend/compare/v5.0.0...v5.1.0) (2022-09-02) + + +### Features + +* adding dsmeta info from mp_dsmeta macro ([2ac6659](https://gitlab.com/macropeople/dcfrontend/commit/2ac66592a27d2581fdbe31ea46f067f0ad42379f)) +* adding sasdoc generation for all SAS Platforms ([56662ce](https://gitlab.com/macropeople/dcfrontend/commit/56662ce7b0bfdacda89621b759bb1df1e8ae83d4)) +* dsmeta added to view and edit ([24e35dd](https://gitlab.com/macropeople/dcfrontend/commit/24e35dda6584a99734520152bce21b22cb90e6f6)) +* edit record - forward backwards changing records ([b28b8f8](https://gitlab.com/macropeople/dcfrontend/commit/b28b8f87859da93105e15471ae7e1c1e6b3846fd)) +* initial contents for https://code.datacontroller.io ([fdf8808](https://gitlab.com/macropeople/dcfrontend/commit/fdf88084384ef9fe4b4d90f8aa431f898114d5e5)) +* library linking ([fa4aba8](https://gitlab.com/macropeople/dcfrontend/commit/fa4aba8bae442c2167611d96da83da8716ca18fa)) +* new libinfo backend service ([0618e63](https://gitlab.com/macropeople/dcfrontend/commit/0618e6397e3d5c31bd2bd75d7346e2bed352b74e)) +* refreshlib feature (and tests) backend ([3980774](https://gitlab.com/macropeople/dcfrontend/commit/39807741bc192d5fb24430598082d88aa45e040e)) +* viewer library info page ([01b1148](https://gitlab.com/macropeople/dcfrontend/commit/01b114842fac6aa8ed4697778e5f4369bcb60e96)) + + +### Bug Fixes + +* adding libinfo in response from refreshlibinfo ([8810b2e](https://gitlab.com/macropeople/dcfrontend/commit/8810b2e459137fa796b8d7d99fa25a1b85a78cab)) +* angular configuration fix ([a67e12e](https://gitlab.com/macropeople/dcfrontend/commit/a67e12e46b30ba6359969a591cf4a7336baf017d)) +* avoid warning for empty library in viewtables ([abed1a9](https://gitlab.com/macropeople/dcfrontend/commit/abed1a97f23634ebe2d3f48228fb4ad678efe1bb)) +* bump core to fix formats with incorrect length ([211f5dc](https://gitlab.com/macropeople/dcfrontend/commit/211f5dc83a4d7b3eca6358ebded4064cc8aa859b)) +* bumping core ([6cb3216](https://gitlab.com/macropeople/dcfrontend/commit/6cb321694112afd54913ebd55f166ddfae57a6d7)) +* cleanup, editor modularized, angualr 14 update ([558ea94](https://gitlab.com/macropeople/dcfrontend/commit/558ea94eb52133381bd92da68e0223a888b04ea9)) +* css issues ([e0f6f33](https://gitlab.com/macropeople/dcfrontend/commit/e0f6f33986d8764839ccb53aba4be914947dc652)) +* current row start from 1 ([05267e3](https://gitlab.com/macropeople/dcfrontend/commit/05267e3fefca6c80e6b364d4f0ccdc77980c48c2)) +* custom autocomplete input component, fixed qutes around date and time in filtering ([985c45b](https://gitlab.com/macropeople/dcfrontend/commit/985c45bf76278959929cf0351ed2ea0f31686dd9)) +* date time filtering with quotes ([78babd3](https://gitlab.com/macropeople/dcfrontend/commit/78babd3121c127095dd5f4711b54fa0e7efb1897)) +* demo limits ([97ee3f7](https://gitlab.com/macropeople/dcfrontend/commit/97ee3f7384014ba0e1377b0ea70b8dd1dbe51071)) +* dynamic cell validation suppress ABORT modals ([951a0d5](https://gitlab.com/macropeople/dcfrontend/commit/951a0d5cb90946e9ebf08644d1e55a0a60e24c03)) +* dynamically obtaining serverContext when running makedata on SAS 9 ([22dec2d](https://gitlab.com/macropeople/dcfrontend/commit/22dec2d570e212804c49e7ee920dde8c8aaa5b1e)) +* edit record separate component, modulization routihng ([0e2a57b](https://gitlab.com/macropeople/dcfrontend/commit/0e2a57b53c7124abe5d50476e80e1b3a833b56ea)) +* editor multiple filterings ([20bb5cd](https://gitlab.com/macropeople/dcfrontend/commit/20bb5cdd7bae1813dfe29aa1aa3658aaf746aae8)) +* empty library no tables, approve details screen break dots ([54ca1ef](https://gitlab.com/macropeople/dcfrontend/commit/54ca1efe3216526b6adc2b7e869ebc316ada3bfa)) +* enabling consistent formats in the generated DIFF screen ([80ec246](https://gitlab.com/macropeople/dcfrontend/commit/80ec24667d8fa74b090bf95ed8bc00ae0d66843b)) +* filtering IN did not append quotes ([62256a6](https://gitlab.com/macropeople/dcfrontend/commit/62256a6b11e2e7494d2f3b29870382a6f922d4a4)) +* filtering Input typing, editor filtering quotes, update licence key placing ([1f2a516](https://gitlab.com/macropeople/dcfrontend/commit/1f2a516742119157b634e0c3cbd84d1abc721adf)) +* filtering logic operator undefined ([5c8e951](https://gitlab.com/macropeople/dcfrontend/commit/5c8e951c89a1c73f166c856ae8fa3d3f977e1fa1)) +* filtering OR not working ([98c43a5](https://gitlab.com/macropeople/dcfrontend/commit/98c43a518566043649fb06e39588f6d36d913d3c)) +* going to libinfo from table view ([13c4add](https://gitlab.com/macropeople/dcfrontend/commit/13c4addeded5eb5bd678bcb3348c9590b052fe7b)) +* half way fixed inline styles ([2f85090](https://gitlab.com/macropeople/dcfrontend/commit/2f8509062981330070b0817bca5dca30ee87b5c8)) +* hardselect_hook on numeric was not strict ([abdea54](https://gitlab.com/macropeople/dcfrontend/commit/abdea5496d6f6a5fb7d364e716761e742d4d09fd)) +* images in dist/images folder ([d187c5d](https://gitlab.com/macropeople/dcfrontend/commit/d187c5d1fa2050250926ebdc58056bee69478ce6)) +* incorrect validation on format catalog load type ([b095926](https://gitlab.com/macropeople/dcfrontend/commit/b095926dd72c5b5182b978fe2b3b462d8176381c)) +* libraries not refreshing on SAS 9 ([77e33df](https://gitlab.com/macropeople/dcfrontend/commit/77e33df9bce37f77f802b8e32a22dd3448c23cc6)) +* licence note ([39d04bd](https://gitlab.com/macropeople/dcfrontend/commit/39d04bdc42102e3b3a9ceef528379e312f3db32a)) +* mp_lockanytable error in rejecction ([195a350](https://gitlab.com/macropeople/dcfrontend/commit/195a3501d6d338bd270ba97f1224c6dbbff148c2)) +* number of changed rows limit ([55ab7cf](https://gitlab.com/macropeople/dcfrontend/commit/55ab7cf9c5c0e3892c5cd89034cbb11d3dc0fb28)) +* pasting NaN issue ([0b1ad3a](https://gitlab.com/macropeople/dcfrontend/commit/0b1ad3a1a81bc2927b89ed5fe45d994d25dbfa02)) +* performance improvements with latest mp_jsonout ([5251f24](https://gitlab.com/macropeople/dcfrontend/commit/5251f2494946867111706758102875926168879e)) +* requests modal ux, filtering reset kept old values ([dc866aa](https://gitlab.com/macropeople/dcfrontend/commit/dc866aacbe944ef1affddaaa7d3c671eebb860c4)) +* softselect dropdown sticking ([b51afbb](https://gitlab.com/macropeople/dcfrontend/commit/b51afbb484dd9ab7ea9641dd185f70a256367ee4)) +* typing in filtering `variable` call only on select from dropdown ([cfe9bf6](https://gitlab.com/macropeople/dcfrontend/commit/cfe9bf6c4ac48d4e5ea7e0f8fa3d4fbd8c949d69)) +* validations failing in MPE_TABLES for column values due to initialisation of CLS_XX variables ([d65b609](https://gitlab.com/macropeople/dcfrontend/commit/d65b6092b4b39cc4b3043f24a2e89de2839343a9)) +* **validations:** ensure LOADTYPE on MPE_TABLES has correct values ([536b176](https://gitlab.com/macropeople/dcfrontend/commit/536b17654d64eff57fe417ad1d830b55e10b046f)) +* viya 4 compatibility ([9bb4b88](https://gitlab.com/macropeople/dcfrontend/commit/9bb4b886d08d81284e9fa60f1809184a0a22d2e2)) +* when library info refreshed it was not stored ([ea50b31](https://gitlab.com/macropeople/dcfrontend/commit/ea50b31e72655d3f2cf7dd2579b753e3786d7fb4)) +* when paste and edit record confirmation type conversion and special missing handling ([a352608](https://gitlab.com/macropeople/dcfrontend/commit/a35260861aaaa6f820c16c7d9c3664564426aad2)) +* when pasting into grid types gets lost ([5e75a39](https://gitlab.com/macropeople/dcfrontend/commit/5e75a39f6b06eec3ce1704e0748fec298aebb733)) + +## [5.0.0](https://gitlab.com/macropeople/dcfrontend/compare/v4.2.2...v5.0.0) (2022-07-11) + + +### ⚠ BREAKING CHANGES + +* mpe_approvals is now dropped and replaced by MPE_SUBMIT, which is unique on table_id. + +### Features + +* added demo config ([ea9cef0](https://gitlab.com/macropeople/dcfrontend/commit/ea9cef0995e36f7663d8979e5335c5b3f0f99cc8)) +* additional tables added to export process. Fixed a bug when staged data contains only deletions. Also added CLS rules to COLS table in getdata response. ([66749f1](https://gitlab.com/macropeople/dcfrontend/commit/66749f16665f9c04b802a6ed4b0899f470866f3c)) +* backend users (to be continued) ([ba487ba](https://gitlab.com/macropeople/dcfrontend/commit/ba487baa9c5d99ac33c59ed8decf3534de8c267a)) +* Column Level Security ([7651fb8](https://gitlab.com/macropeople/dcfrontend/commit/7651fb8ece2a4b29b1e18ac8a447f034bae292a7)) +* Column level securty EDITOR ([fdfe333](https://gitlab.com/macropeople/dcfrontend/commit/fdfe33371c83addd4da327ecd2f5b6f1d4602561)) +* configurable audit (plus test fixes) ([8673d37](https://gitlab.com/macropeople/dcfrontend/commit/8673d37b7356c5efaa3f9ef5efc3f59f9a7ec671)) +* demo max rows ([1b97255](https://gitlab.com/macropeople/dcfrontend/commit/1b97255978acaa8e72a336a65c72357ad371083c)) +* dynamic validation features in edit record modal ([6740a5b](https://gitlab.com/macropeople/dcfrontend/commit/6740a5bf70d929e53d886132584f40d03cf43ecf)) +* enabling backend primary key columns on VIEW tables ([1db832c](https://gitlab.com/macropeople/dcfrontend/commit/1db832cbc56a2d1d0622b5bd21dd02fb9602728d)) +* enabling download as markdown feature ([9032cd1](https://gitlab.com/macropeople/dcfrontend/commit/9032cd18a491339060080c57e4134002cfa95a63)) +* getgroups ([6247d6e](https://gitlab.com/macropeople/dcfrontend/commit/6247d6eb2bf35939a9a6b4caa04d2575bdbfe9c3)) +* hardselect in record modal - numeric ([b88e622](https://gitlab.com/macropeople/dcfrontend/commit/b88e622a72569f75613700bdf7698146a49fe259)) +* new deploy process for SAS 9 ([15e4936](https://gitlab.com/macropeople/dcfrontend/commit/15e4936ef577c199ee33d4ea1622ed8ab0c7cf0f)) +* no key demo mode ([f76a0e7](https://gitlab.com/macropeople/dcfrontend/commit/f76a0e76193a8500081087e0305e755b24489df9)) +* record modal dynamic cell validation started ([e537958](https://gitlab.com/macropeople/dcfrontend/commit/e5379585aa511b7e5764ec8410efe914d8406086)) +* refactored DB for submit & approve ([a58151f](https://gitlab.com/macropeople/dcfrontend/commit/a58151f145dcc81eb7d0772e7b2a170ce861d899)) +* restrict EDIT RECORD ([0e30649](https://gitlab.com/macropeople/dcfrontend/commit/0e306498dc4d57b0e02e33e75f25308dcd35c3bd)) +* restrict editrecord ([5c8f013](https://gitlab.com/macropeople/dcfrontend/commit/5c8f013e2181e298419f963ac1e3aa5b5a87da64)) +* sas9 configurator init ([40b70ab](https://gitlab.com/macropeople/dcfrontend/commit/40b70aba511cf0d815ddf0802344d34e7f3d208a)) +* sasjs configurator ([f823276](https://gitlab.com/macropeople/dcfrontend/commit/f823276487524d60c8bec59793ae1cf261951f7c)) +* sasjs configurator - on deploy page ([6511c19](https://gitlab.com/macropeople/dcfrontend/commit/6511c198a027226a27fc6d8e91c4c915807373c3)) +* sasjs server - redirect to configurator if exits ([eb054cd](https://gitlab.com/macropeople/dcfrontend/commit/eb054cd33e772510cc96a1bfa35cced6497f7531)) +* sasjs/server appstream compatibility - see server target ([cf17c90](https://gitlab.com/macropeople/dcfrontend/commit/cf17c9024171a19f2ccadec6c6616f472f6827da)) +* show abort modal separate then show info modal ([033be9a](https://gitlab.com/macropeople/dcfrontend/commit/033be9a9ba919aa7bec7ce5de1af26941464b5ed)) +* unlocking password protected excel ([ea93601](https://gitlab.com/macropeople/dcfrontend/commit/ea93601192dad275cd32f4647007cc7a2e85d578)) + + +### Bug Fixes + +* abort modal download log butto ([ca4631e](https://gitlab.com/macropeople/dcfrontend/commit/ca4631e34a2a0913c561e34cf71d15efa210fc69)) +* adapter bump and viya usernav rename ([e98ae0e](https://gitlab.com/macropeople/dcfrontend/commit/e98ae0ee76a8a082b2c6cd13f0696bfcf1fd88f8)) +* added open requests modal on sasjs abort ([ea78672](https://gitlab.com/macropeople/dcfrontend/commit/ea786721042e4f5c85e13f3a2886b6f031fe0ea3)) +* adding makedataserver.json file ([0fa8680](https://gitlab.com/macropeople/dcfrontend/commit/0fa86801ef6cf5baea08c39e98d17d0c8f014908)) +* adding missing statement for CSV uploads ([a8dc48f](https://gitlab.com/macropeople/dcfrontend/commit/a8dc48fc697f71ea8276fee28bafbac15e223b07)) +* adding mp_init back ([dba9d7c](https://gitlab.com/macropeople/dcfrontend/commit/dba9d7c776f8f5ee28a7ab4c2cfa5b2f906f97ca)) +* adding submit reason to approve pages ([cd903e3](https://gitlab.com/macropeople/dcfrontend/commit/cd903e3cbb5b939a6c2955d1983bc8a0e5bcc21a)) +* ading dc-admin as default admin group ([fe5866c](https://gitlab.com/macropeople/dcfrontend/commit/fe5866c22e1144788a8a4c53e285d3018bf6de24)) +* alias ([797e137](https://gitlab.com/macropeople/dcfrontend/commit/797e1370f15382c0926abd67363e8df210785792)) +* approve details - formatted default on ([16e675c](https://gitlab.com/macropeople/dcfrontend/commit/16e675c4a223a7f759582a80e4a2e99194fcdda8)) +* assets fix, logo ([667246f](https://gitlab.com/macropeople/dcfrontend/commit/667246f2d35fd9c64794a336fba5a1249e00a69c)) +* avoiding error in mpe_filtermaster (read/write same dest) ([2f6a33e](https://gitlab.com/macropeople/dcfrontend/commit/2f6a33e8b47ddf3d8aeb8078580c7d77a06b607a)) +* badly placed comma ([182a6b0](https://gitlab.com/macropeople/dcfrontend/commit/182a6b0ffabd50c3c5be46d68329a68c53cf1bde)) +* bum core ([aa29837](https://gitlab.com/macropeople/dcfrontend/commit/aa298372e8b0b8b1bb8f08ea027637eddeae47a4)) +* bump core and avoid mpe_groups warning ([bec7149](https://gitlab.com/macropeople/dcfrontend/commit/bec71497b7dca49c451267c581e17f061bcd0e6b)) +* bump core, test setup ([d0efc3c](https://gitlab.com/macropeople/dcfrontend/commit/d0efc3c4b94e54967bf913ed6f149c6c6a7a6f69)) +* bumping core ([5c0b7a9](https://gitlab.com/macropeople/dcfrontend/commit/5c0b7a90536109394522d8b4937b61d4c9b8f1b2)) +* bumping core ([3c28c41](https://gitlab.com/macropeople/dcfrontend/commit/3c28c41237190d711fd4cad979d2e692f17b335b)) +* bumping core and improving makedata response on SAS 9 ([79ab3b8](https://gitlab.com/macropeople/dcfrontend/commit/79ab3b8ce4905fdc636839d04b0f8401b5a65196)) +* bumping core, missing comma in deploy ddl ([2114708](https://gitlab.com/macropeople/dcfrontend/commit/21147086e64cfb87b0328ad540528e7840551731)) +* bumping core, removing licence key ([0a3e381](https://gitlab.com/macropeople/dcfrontend/commit/0a3e381c2fc6d0cba259dbd59583b230d6d37d1f)) +* case when statement ([14304a0](https://gitlab.com/macropeople/dcfrontend/commit/14304a0736e68de97ba63673b5067b0694f06a64)) +* char limit ([d9af43a](https://gitlab.com/macropeople/dcfrontend/commit/d9af43ab59a658b6e0b74674b8852589cd0ce259)) +* checking makedata ([5f64079](https://gitlab.com/macropeople/dcfrontend/commit/5f64079ddd6dcfd021e8b889539eaf1a9b65c26b)) +* clarity csp issues ([2ee3ee7](https://gitlab.com/macropeople/dcfrontend/commit/2ee3ee7272d7af0837dc3d42cddb106cc73492f2)) +* cls issues revisit ([35b5fce](https://gitlab.com/macropeople/dcfrontend/commit/35b5fce8a68b37a04a8c99ef28311eea587b25b9)) +* config ([1797964](https://gitlab.com/macropeople/dcfrontend/commit/1797964ecb1eb7f2bca79a6df2785f9468ed3a4d)) +* configurator added group description and progress bar ([b72d27a](https://gitlab.com/macropeople/dcfrontend/commit/b72d27a927bac79cc1e075bed4103ba82aaf0a7c)) +* configurator fixing ([10b3b60](https://gitlab.com/macropeople/dcfrontend/commit/10b3b60593a6435282ccf1a98ea27832123217c3)) +* configurator groups dropdown, making json request viya specific ([8b1c2c9](https://gitlab.com/macropeople/dcfrontend/commit/8b1c2c915a92010175354301302b5f1e7596e23a)) +* configurator html styling ([9d17ea7](https://gitlab.com/macropeople/dcfrontend/commit/9d17ea7778bc9bb0de5c97808f560be6f2f847dd)) +* configurator redirect - using new api endpoint (list folder content) ([e32edbf](https://gitlab.com/macropeople/dcfrontend/commit/e32edbf2e47c1b212cfc4e07914bd0cfa2a1e1df)) +* core bump ([3a29271](https://gitlab.com/macropeople/dcfrontend/commit/3a29271116cbb7610e9e5ab6ce4710724d85de0d)) +* csp issues cwb, /deploy page force, bump up deps ([f8b8ceb](https://gitlab.com/macropeople/dcfrontend/commit/f8b8ceb9e2117acb02bf56841d27555277a78d96)) +* CSV upload issue ([69f65de](https://gitlab.com/macropeople/dcfrontend/commit/69f65de59642d269fcfda80449f5cc539faced1d)) +* cypress testing ([3f29f9b](https://gitlab.com/macropeople/dcfrontend/commit/3f29f9b429f9cc9101ef2fab237da8f31475b095)) +* dc_dttmfmt macro usage (thanks to compatibility issue on M3 proc sql ([65aa595](https://gitlab.com/macropeople/dcfrontend/commit/65aa595fac58e6309814bf8f2bfd954b36a91b20)) +* default appLoc ([5507841](https://gitlab.com/macropeople/dcfrontend/commit/550784102374e8e5c99c830fc51fc587ea03d648)) +* demo limitations and file upload drop area ([bc4fb1b](https://gitlab.com/macropeople/dcfrontend/commit/bc4fb1b8f4a5209710aaa57e1935c1c4249d0469)) +* demo limits refactored - improved ([b80817c](https://gitlab.com/macropeople/dcfrontend/commit/b80817c23ec1e18b9e81e62a8a7cc9fe1ec4d1fa)) +* demoConfig rows allowed handling ([5254a6e](https://gitlab.com/macropeople/dcfrontend/commit/5254a6ec7ab67e232ef0698f5d07899b9c7c4dcc)) +* deploy component refactor ([2d28d5d](https://gitlab.com/macropeople/dcfrontend/commit/2d28d5d49c93b80f3392fac71373cef4f6935bcf)) +* deploy page autodeploy button to upload custom json file ([bee9274](https://gitlab.com/macropeople/dcfrontend/commit/bee9274153107f4e65989b7c3a9d5a6a730b99d0)) +* deploy sas9 auto redirect to configurator ([f6598d2](https://gitlab.com/macropeople/dcfrontend/commit/f6598d273befde2982fcdea409f01130d12546b6)) +* deprecated images as base64 - since csp can block them ([6c54100](https://gitlab.com/macropeople/dcfrontend/commit/6c54100220dd9be5ac9fe77164514802551cd573)) +* doc updates ([aa36de3](https://gitlab.com/macropeople/dcfrontend/commit/aa36de3c5eeebe941c82e385947f5ef60d392c1b)) +* drag n drop file fullscreen ([90f98c2](https://gitlab.com/macropeople/dcfrontend/commit/90f98c23f232f26d3b1e8a373b6abc6718aad110)) +* EDIT record ([9987e72](https://gitlab.com/macropeople/dcfrontend/commit/9987e72f4a07999784bb94c2eec8c02a6a89d455)) +* empty tables on SAS 9 ([4259866](https://gitlab.com/macropeople/dcfrontend/commit/42598669c67841337116621df96880340a1b1055)) +* enabling deletes ([e5bbaa8](https://gitlab.com/macropeople/dcfrontend/commit/e5bbaa88558c1ec9195730121b4af39bb91174f3)) +* excel upload NAN ([7c0dfda](https://gitlab.com/macropeople/dcfrontend/commit/7c0dfdafa992a6758d590297200eef5015ade512)) +* explicit cols ([6e28174](https://gitlab.com/macropeople/dcfrontend/commit/6e281745de773895e8fafcd47a99c44d45ad1b36)) +* filter values changed 200 limt to 2k ([ae64bb3](https://gitlab.com/macropeople/dcfrontend/commit/ae64bb3508f06319a3e7a8a77f6e4d78d4beb420)) +* filtering added clear button ([981456b](https://gitlab.com/macropeople/dcfrontend/commit/981456b791e45da89bbe33204f1c4c5348101a71)) +* filtering dropdowns showing formatted values and inputting unformatted ([beec1a2](https://gitlab.com/macropeople/dcfrontend/commit/beec1a2e3903792ee597a94a4b78e4dad81e3475)) +* filtering selecting special missing from dropdown ([d8fde39](https://gitlab.com/macropeople/dcfrontend/commit/d8fde39c92c29f8f486c7f167eeb89dac3061cca)) +* finishing up mpe_review + mpe_submit table refactor ([276669c](https://gitlab.com/macropeople/dcfrontend/commit/276669cc98077d019886c412d0d4bcb888190b5e)) +* fixing specs ([829a42c](https://gitlab.com/macropeople/dcfrontend/commit/829a42ce34b12be5eb46fe201b8e24d5f628edc7)) +* frontend ([3694f16](https://gitlab.com/macropeople/dcfrontend/commit/3694f16ddec5df0e3a295f3b35f4ac49d81951f9)) +* frontend fix for startup service, and backend libref ([6dc06b8](https://gitlab.com/macropeople/dcfrontend/commit/6dc06b8dd9fa3e18e9ec142e5de8dfc0e64ffa1b)) +* generic macro for hooks ([0fe00fd](https://gitlab.com/macropeople/dcfrontend/commit/0fe00fd2466ece1f7c3f6371c0834d5d8315e967)) +* group rename ([514146e](https://gitlab.com/macropeople/dcfrontend/commit/514146eb88a550bc5693a00f27405ffb45769edb)) +* hide in edit mode ([fc55fa9](https://gitlab.com/macropeople/dcfrontend/commit/fc55fa97884aa7d79f291a6edc89d4a8b0b4aef4)) +* history tab with submit reason ([592078f](https://gitlab.com/macropeople/dcfrontend/commit/592078fb6c94161f0f991660bd2df41df9d3e4ae)) +* hook scripts and desktop groups ([271987a](https://gitlab.com/macropeople/dcfrontend/commit/271987a02aac90cf7223d03454dee99730f2855c)) +* hotTable height when add record button missing ([1df4bac](https://gitlab.com/macropeople/dcfrontend/commit/1df4bac6ac898c39d61ff923117818746e49a3c6)) +* images to base64 ([1e1114b](https://gitlab.com/macropeople/dcfrontend/commit/1e1114b428c95a6e7a6e6f49c10d390d38f4c9b2)) +* issue with isSpecialMissing function, sufficient spec files removed ([39412df](https://gitlab.com/macropeople/dcfrontend/commit/39412df367558ed4c06593f42ad40709e5587840)) +* legacy peer deps in .npmrc ([14d5f2f](https://gitlab.com/macropeople/dcfrontend/commit/14d5f2f50b8ba683bfce677a68b7c7f7bf7ab8b9)) +* length in meta lineage ([f1a262c](https://gitlab.com/macropeople/dcfrontend/commit/f1a262cdb8dfb1b5ffa2f0db81e951eba01676c6)) +* lengths ([606611e](https://gitlab.com/macropeople/dcfrontend/commit/606611e11f729d2e862e93d26e72672cfb54546d)) +* lineage bug ([be64516](https://gitlab.com/macropeople/dcfrontend/commit/be645166e74f322d69dd29ed55a5a1d73e849355)) +* link and mpeinit ([e4b06c2](https://gitlab.com/macropeople/dcfrontend/commit/e4b06c2dd48188649e72f2b708aec74a252d1663)) +* lint ([af15f94](https://gitlab.com/macropeople/dcfrontend/commit/af15f94031dc221f1022da6971b939a93430c0a4)) +* lint and more approve group removal ([4079f57](https://gitlab.com/macropeople/dcfrontend/commit/4079f5790b0084e10c3289f14f94a453e3ed7ea7)) +* lint and naming of sasjs adapter ([740d720](https://gitlab.com/macropeople/dcfrontend/commit/740d720e5295d4a073127c4dceac32b3344d2ccf)) +* logout in configurator, filtering IN special missing ([43dc4d4](https://gitlab.com/macropeople/dcfrontend/commit/43dc4d4dde309d6e8d82a2165104f6ad25deca69)) +* makedata on viya ([b4c7970](https://gitlab.com/macropeople/dcfrontend/commit/b4c79709bd54e57ffe542dd1d30b046c162a932e)) +* making tests work ([5bcb955](https://gitlab.com/macropeople/dcfrontend/commit/5bcb955f753577b42dd6d7aed124a65227272b7c)) +* making time format configurable ([202d45e](https://gitlab.com/macropeople/dcfrontend/commit/202d45ea0b17e8bbcfb2bac0c5def0d9a885216d)) +* merge development ([5d0057d](https://gitlab.com/macropeople/dcfrontend/commit/5d0057d1eb21deca0bd6506a20c272676b0324c7)) +* merge development ([434943c](https://gitlab.com/macropeople/dcfrontend/commit/434943cce4496c8fcc7aab0cc872773c030ec4ce)) +* merging changes ([fbe5e14](https://gitlab.com/macropeople/dcfrontend/commit/fbe5e140e8560c7d81d5ce9af40c2d411da7801f)) +* merging spec and cols ([7d6bb90](https://gitlab.com/macropeople/dcfrontend/commit/7d6bb90a3c44a106e3ae180e3bca42a15729bb50)) +* model updates ([31cf930](https://gitlab.com/macropeople/dcfrontend/commit/31cf9305b6129edb8827d82cef8e7a8434d97ff0)) +* more fixes | ([ddf94d5](https://gitlab.com/macropeople/dcfrontend/commit/ddf94d5b604c011eb7acd620706b14f7eb9350d3)) +* mp_include ([d518367](https://gitlab.com/macropeople/dcfrontend/commit/d518367aca4a105bd8d210035ea810f548e393fb)) +* mpe_tables hook script ([2ba8a37](https://gitlab.com/macropeople/dcfrontend/commit/2ba8a37532addca762c08bfe32eb05f53da7cbfe)) +* newline ([285f017](https://gitlab.com/macropeople/dcfrontend/commit/285f017a412fce4accf50b9563d5d79007178d4f)) +* no data rows excel upload ([a624f4e](https://gitlab.com/macropeople/dcfrontend/commit/a624f4e67e4be6b32b158f2c00edf9a81a1dcb16)) +* nonote2err switch ([904bcdb](https://gitlab.com/macropeople/dcfrontend/commit/904bcdba6d0d435465b50c2dcaa123c5e6066131)) +* optional userid as input ([33a6925](https://gitlab.com/macropeople/dcfrontend/commit/33a692569a7a0ecc0048c6363ef4643efa265f67)) +* performance boost ([4abec25](https://gitlab.com/macropeople/dcfrontend/commit/4abec2567af55e0deeddd17b292bde5faf78e02d)) +* prettier ([f3868f0](https://gitlab.com/macropeople/dcfrontend/commit/f3868f05b799d2fed8606599966b2f08323b6a55)) +* preventing CLS being applied to admin users ([a414492](https://gitlab.com/macropeople/dcfrontend/commit/a414492210b4532ee344263594b58f6b1ef0571b)) +* primary key always only readonly when cls active ([33ab65b](https://gitlab.com/macropeople/dcfrontend/commit/33ab65b33c95f8633ffc2f144322a0ac20669ddd)) +* quoting ([7ca2f97](https://gitlab.com/macropeople/dcfrontend/commit/7ca2f975b89a0705dd79add7f46f69130de00e79)) +* redirect streaming app ([9e795d0](https://gitlab.com/macropeople/dcfrontend/commit/9e795d0b828270594be8653de6f436afd455c241)) +* reduce row limit in VIEW for performance (to 250 from 1000) ([9a28d6f](https://gitlab.com/macropeople/dcfrontend/commit/9a28d6fd5781352e23ea97df41adaf06899381d5)) +* refactoring deploy component ([4f7a495](https://gitlab.com/macropeople/dcfrontend/commit/4f7a495466cb223f3114c6f221fc312123ffcd77)) +* reload issue - first time loading screen was stuck ([80c5af8](https://gitlab.com/macropeople/dcfrontend/commit/80c5af8322d6dff1b999256d49f14f6af151d2ac)) +* removed inline script, sasjsConfig as html attributes ([fc6fb22](https://gitlab.com/macropeople/dcfrontend/commit/fc6fb22634447a544785b25e622d1323cd958fdc)) +* removed sasjs sufficient elements from usernav ([1176655](https://gitlab.com/macropeople/dcfrontend/commit/1176655c917d36e2cd3360bb84c4a04db3d03a04)) +* requests modal fixes ([6c720a8](https://gitlab.com/macropeople/dcfrontend/commit/6c720a85f8c986bbde8d531dba07099e2e10a84c)) +* requests modal undefined handling ([aca8bfb](https://gitlab.com/macropeople/dcfrontend/commit/aca8bfbd330287557514291cee38f199fe55fdd1)) +* sajs server mode - login ([5f589e5](https://gitlab.com/macropeople/dcfrontend/commit/5f589e5375b36355eb7eff514f25dee304708c4e)) +* sas9 and user fixes: ([b42b47f](https://gitlab.com/macropeople/dcfrontend/commit/b42b47fefb7cb525780d1f887bb8e68b6c609d27)) +* sas9 configurator fixes ([4c83a34](https://gitlab.com/macropeople/dcfrontend/commit/4c83a342b72c126bcdde9bf464171a5c3a122d27)) +* sasjs configurator finish - get groups request ([51df692](https://gitlab.com/macropeople/dcfrontend/commit/51df692a6b9c80da0230e41eb9670a6171e411d4)) +* sasjs server fixes ([dd1fe5f](https://gitlab.com/macropeople/dcfrontend/commit/dd1fe5f4e36152d5714bbeb7e09fbc8a320184a1)) +* sasjs server fixes and sasjsconfig update ([b43e5e5](https://gitlab.com/macropeople/dcfrontend/commit/b43e5e5a01a7f3575b528f9f410f9a2c2192de3d)) +* sasjs server url for downloads ([083bca1](https://gitlab.com/macropeople/dcfrontend/commit/083bca10246d4c0ce66ea661c24da49d8faa5e0b)) +* sasjs serverType - usernav ([aeca2a6](https://gitlab.com/macropeople/dcfrontend/commit/aeca2a6a26bfbca7adbe2d7fe3fa4f38bab55bc3)) +* save password prompt ([49f05b2](https://gitlab.com/macropeople/dcfrontend/commit/49f05b2b748fc8760bf416dacd14952240d5e9ad)) +* sending favicon as base64 ([b6a34ed](https://gitlab.com/macropeople/dcfrontend/commit/b6a34edfdb0dc8c6bf55c90d73ed9fb9e13f29b9)) +* server favicon ([5afd806](https://gitlab.com/macropeople/dcfrontend/commit/5afd8061e22145ee8f8d6fda1c363fa25df97b87)) +* test for OS at backend ([c062b00](https://gitlab.com/macropeople/dcfrontend/commit/c062b00a94d60c2d3a0537f0596fbd12ec9594a8)) +* testing updates ([8b16282](https://gitlab.com/macropeople/dcfrontend/commit/8b16282a4973453f94229edc9c0657bdd1da3507)) +* tests and bumping core ([336f54a](https://gitlab.com/macropeople/dcfrontend/commit/336f54aa22fdf1bece991652c601cf519b8ec95b)) +* timestamping issues ([082f0cd](https://gitlab.com/macropeople/dcfrontend/commit/082f0cd05c480e78f7c5e01e06885702f3800ff2)) +* tree navigation search UX ([a17f253](https://gitlab.com/macropeople/dcfrontend/commit/a17f253c87ff9002c5e4ecd9f1e60ee6d4dd681c)) +* update to improve user experience with sorted data ([8cb1b5b](https://gitlab.com/macropeople/dcfrontend/commit/8cb1b5b29412ef0d6c061d37b39a81d2aebc76bd)) +* updating licence key and filter clause ([c87c3d8](https://gitlab.com/macropeople/dcfrontend/commit/c87c3d8e98f6ec2fc31217b57e4e4850f3cf4f78)) +* usergroups updates ([83cd292](https://gitlab.com/macropeople/dcfrontend/commit/83cd292f8cf24533cda5dcbc509d0da84e22434f)) +* username / group updates ([229886d](https://gitlab.com/macropeople/dcfrontend/commit/229886d565ddf8d626ce9a1ef27bdd35ec33e8b4)) +* usernav linking and group name ([02c8f60](https://gitlab.com/macropeople/dcfrontend/commit/02c8f608bffc9a37122dfad417f5130358969c7d)) +* users & groups on sasjs ([8886905](https://gitlab.com/macropeople/dcfrontend/commit/888690536d06e1bcca9071d5cdbcdd29b1dc2ad5)) +* using conditional logic on mpe_refreshtables ([f71f18f](https://gitlab.com/macropeople/dcfrontend/commit/f71f18f29dfe312cc733fd3b6755fbbd3b49d0bd)) +* using mf_fmtdttm() ([34ad201](https://gitlab.com/macropeople/dcfrontend/commit/34ad201baebf8003fdb6cc235436d6e47893727d)) +* using usernav instead of viya_users ([3d50bbd](https://gitlab.com/macropeople/dcfrontend/commit/3d50bbda18251f3625163bf452f37ca96e0f40d3)) +* UX improvements, cols, spec cleanup, dropdown empty record issue ([9a7c3e9](https://gitlab.com/macropeople/dcfrontend/commit/9a7c3e95dce762e50d126b2d9ceab53ca55c9c4a)) +* viewdata for just meta only definition ([65ae495](https://gitlab.com/macropeople/dcfrontend/commit/65ae4950ca206698b7c0a2e3d890e445a60048d2)) +* viewer error handling ([3c54689](https://gitlab.com/macropeople/dcfrontend/commit/3c546890d98df730273ffad6b0a4cdfb2ff3214e)) +* viewer PK coloring, search missing when no data ([f10b8c7](https://gitlab.com/macropeople/dcfrontend/commit/f10b8c71a893a3339deac0129e270f486acb86be)) +* viewer reset filter ([0ac5972](https://gitlab.com/macropeople/dcfrontend/commit/0ac5972b7103b593aa5d8736591a8bcbf915dc41)) +* when file upload error (csv) file is discarded ([7653fff](https://gitlab.com/macropeople/dcfrontend/commit/7653fffb3a697897e51d5c70a2855dfebc2078dd)) +* wps compatibilities ([79c5223](https://gitlab.com/macropeople/dcfrontend/commit/79c52231cd063de2c87b1c351761c85786d7381e)) +* wps fix for mpeterm() ([2473364](https://gitlab.com/macropeople/dcfrontend/commit/2473364356d611e54378caad76d02e0beb1566e5)) +* wps updates ([4c85101](https://gitlab.com/macropeople/dcfrontend/commit/4c85101bd910ece6829727cb1d7212999b3fac77)) + +### [4.2.2](https://gitlab.com/macropeople/dcfrontend/compare/v4.2.0...v4.2.2) (2022-03-21) + + +### Bug Fixes + +* friendly labels on sas 9 invalid view libs (and other ci/cid updates) ([9014f28](https://gitlab.com/macropeople/dcfrontend/commit/9014f28193ad118c28667c1f606b61f8fd61cc68)) +* sajs server ([0353ba1](https://gitlab.com/macropeople/dcfrontend/commit/0353ba1ed93efb74fd22c601115079154cfde104)) + +### [4.2.1](https://gitlab.com/macropeople/dcfrontend/compare/v4.2.0...v4.2.1) (2022-03-21) + + +### Bug Fixes + +* friendly labels on sas 9 invalid view libs (and other ci/cid updates) ([9014f28](https://gitlab.com/macropeople/dcfrontend/commit/9014f28193ad118c28667c1f606b61f8fd61cc68)) +* sajs server ([0353ba1](https://gitlab.com/macropeople/dcfrontend/commit/0353ba1ed93efb74fd22c601115079154cfde104)) + +## [4.2.0](https://gitlab.com/macropeople/dcfrontend/compare/v4.1.0...v4.2.0) (2022-03-17) + + +### Features + +* requests modal dowanlod logs ([bd9e759](https://gitlab.com/macropeople/dcfrontend/commit/bd9e75917f7e1f2a8459488b9030886dba0e69d0)) + + +### Bug Fixes + +* bump core ([a664573](https://gitlab.com/macropeople/dcfrontend/commit/a664573634046d2e27ab8f321d1e5f9153362805)) +* config ([fecdaee](https://gitlab.com/macropeople/dcfrontend/commit/fecdaeea2d9ba818f7df7c227cac669729f60de4)) +* filtering pickers checkbox ([8327421](https://gitlab.com/macropeople/dcfrontend/commit/83274213d32c46e28c88b8ddfb38c1a2a5eabfa0)) +* getting sas 9 tests to work ([d83b22d](https://gitlab.com/macropeople/dcfrontend/commit/d83b22d1664ce7266d443ea25f10ba139a5ac394)) +* missmatch fix ([b33b520](https://gitlab.com/macropeople/dcfrontend/commit/b33b52026b0bb3d51964f998c32047c8c757d370)) +* scss ([443c3d7](https://gitlab.com/macropeople/dcfrontend/commit/443c3d785c93d1e93d18a691161e1b57398a58a1)) +* validator length, abort modal MAC ([c6b3d1f](https://gitlab.com/macropeople/dcfrontend/commit/c6b3d1faa8ec70fbdb17ac00000a02b0c3073e5e)) + +## [4.1.0](https://gitlab.com/macropeople/dcfrontend/compare/v4.0.1...v4.1.0) (2022-03-15) + + +### Features + +* server configurator ([df6cc6c](https://gitlab.com/macropeople/dcfrontend/commit/df6cc6cb8c575be4c83c321f7757719a124dd7ac)) + + +### Bug Fixes + +* audit service issues ([c6e1452](https://gitlab.com/macropeople/dcfrontend/commit/c6e14524aa43dd797d410ce072b989c15a8fe91d)) +* bump core and sasjs/server makedata update ([590710b](https://gitlab.com/macropeople/dcfrontend/commit/590710bffc95f047da06eff5a33cfe40bc8196e6)) +* refactor sas 9 deploy ([4458385](https://gitlab.com/macropeople/dcfrontend/commit/445838535f3d5fbed11bea3d5d0e92c8577d531a)) +* sas and app services timing ([7828d04](https://gitlab.com/macropeople/dcfrontend/commit/7828d04f49667f26a229a2c58e0b03e96a6bccdc)) +* sasjs server ([c999716](https://gitlab.com/macropeople/dcfrontend/commit/c999716a5fe494c882bc017b474208447d906738)) +* sasjs/server updates ([2cd0135](https://gitlab.com/macropeople/dcfrontend/commit/2cd0135d0da32da546990659a60650944509d04e)) +* update db for constraint support ([cc1e171](https://gitlab.com/macropeople/dcfrontend/commit/cc1e1711afd246cca285aa4850f339051f7637bb)) +* updates to deploy process ([f22556c](https://gitlab.com/macropeople/dcfrontend/commit/f22556c4cb1d4568779004bbd34113c688fd2845)) + +### [4.0.1](https://gitlab.com/macropeople/dcfrontend/compare/v4.0.0...v4.0.1) (2022-03-10) + + +### Bug Fixes + +* approve details UI ([4e058e9](https://gitlab.com/macropeople/dcfrontend/commit/4e058e90476a3130d877f56475dc52bd7be6d1a0)) +* bumping core ([70b5359](https://gitlab.com/macropeople/dcfrontend/commit/70b53591b1fed91f02bb7aa7a106259231488c8f)) +* missings validation ([0745486](https://gitlab.com/macropeople/dcfrontend/commit/074548695ff2865ab32fdb7f9e3d5291d96cdc47)) +* sas tests ([30b4b48](https://gitlab.com/macropeople/dcfrontend/commit/30b4b4832ab0cb24cc57c6e05858f49088b7b978)) +* special missing period prepend validation, replacing period in numeric with null ([9de4197](https://gitlab.com/macropeople/dcfrontend/commit/9de4197d92bcb8c01ff7caa59543f2480497dc9e)) +* testing issues and ability to upload excel for formats ([0e84e75](https://gitlab.com/macropeople/dcfrontend/commit/0e84e75086e2f438892f014ed363a967846aaa1d)) +* tests etc ([435452b](https://gitlab.com/macropeople/dcfrontend/commit/435452b0c7acd2fe14900388567821cf4c64f22c)) +* validation for numeric length ([0f9614b](https://gitlab.com/macropeople/dcfrontend/commit/0f9614bf9f9165dad5475c9262f6c9c76c27dba2)) + +## [4.0.0](https://gitlab.com/macropeople/dcfrontend/compare/v3.13.3...v4.0.0) (2022-03-03) + + +### ⚠ BREAKING CHANGES + +* The filter_text variable is now dropped from mpe_filteranytable + +### Features + +* adding mp_init to ensure strict compatibilities. Also removing the word 'error' for better log scanning. ([f539474](https://gitlab.com/macropeople/dcfrontend/commit/f539474557f17d984e82e79f119d7c05b5bc0dba)) +* approve details - formatted values ([2d53b46](https://gitlab.com/macropeople/dcfrontend/commit/2d53b464a2d533e6ceb12883908b40c4bfc8bb1e)) +* col info in header menu dropdown, added sheetjs pro tarball backup ([6ed88f8](https://gitlab.com/macropeople/dcfrontend/commit/6ed88f8283647f8c890233bf59ee12c8d0f935db)) +* dc-validator module | shared components refactor ([271cc25](https://gitlab.com/macropeople/dcfrontend/commit/271cc256bb86e109f9dc03882081e55c696d78b1)) +* excel upload delete column apply ([d908126](https://gitlab.com/macropeople/dcfrontend/commit/d90812633949c8ba8bd6727cdbee28972809c06b)) +* format mods! ([6c6f3c5](https://gitlab.com/macropeople/dcfrontend/commit/6c6f3c5ca3b3547fdf32e3e8ef1686c176e48622)) +* formats catalogs ([5e233cf](https://gitlab.com/macropeople/dcfrontend/commit/5e233cff2511b5bd4bd207e65c4a6b7e3197d0c8)) +* formatted values for GET_DIFFS (backend). Relates to [#398](https://gitlab.com/macropeople/dcfrontend/issues/398) ([585ddb7](https://gitlab.com/macropeople/dcfrontend/commit/585ddb749da8eb48cbf1a1565fba738e07097baf)) +* mpe_audit table now updated with every load ([b48a762](https://gitlab.com/macropeople/dcfrontend/commit/b48a7620a6406c321f70c53a3d8d86f98854a0de)) +* primary key headers different color ([f7aa07c](https://gitlab.com/macropeople/dcfrontend/commit/f7aa07cf8aff6334cb8ff26941577fcb3a5a9a90)) +* sasjs/server support ([63c9dd4](https://gitlab.com/macropeople/dcfrontend/commit/63c9dd45f497817d982b94f7f1ea2712fa820dd3)) +* uploading excel with _delete_ column ([4b273e5](https://gitlab.com/macropeople/dcfrontend/commit/4b273e578141f4e5d63b6f7136a9dc23cbed43ee)) +* viewer - column context details ([0bf4c48](https://gitlab.com/macropeople/dcfrontend/commit/0bf4c48d356c5caea161d869afcd7d7613d0de4d)) + + +### Bug Fixes + +* abort modal refactor ([82a29a3](https://gitlab.com/macropeople/dcfrontend/commit/82a29a345f2b6e4e48094f1bac1f69e7380f416b)) +* adding .SSS to datetime and time formats ([af453e8](https://gitlab.com/macropeople/dcfrontend/commit/af453e87b7e21e253b0d89d0dc36e4d9fdb5c7f3)) +* adding catalog support for validatefilter and corresponding test ([8104fd9](https://gitlab.com/macropeople/dcfrontend/commit/8104fd9675e06454f5170c368af452189e1bd711)) +* addressing comments ([111473f](https://gitlab.com/macropeople/dcfrontend/commit/111473f870ff7a081df34c26270385590e8ad15a)) +* addressing yurys comments ([8a84fe7](https://gitlab.com/macropeople/dcfrontend/commit/8a84fe7e5ef947f43d5fbbdc5c8f626858fcb36e)) +* angular build ([f6c850c](https://gitlab.com/macropeople/dcfrontend/commit/f6c850c8c534655008b036800322e69501ebdd8e)) +* angular new config structure, fixing ts lint errors ([997e8b8](https://gitlab.com/macropeople/dcfrontend/commit/997e8b8ed8258f7cceb024d46ba3da217f99ed74)) +* approve details abort modal refactor ([8aec836](https://gitlab.com/macropeople/dcfrontend/commit/8aec83692a62b95a284c26ce18a735ddb5f49176)) +* approve details screen more compact ([05bfa52](https://gitlab.com/macropeople/dcfrontend/commit/05bfa52fd9fac93b60cc398ffcf15e55db750646)) +* changelog ([14b369a](https://gitlab.com/macropeople/dcfrontend/commit/14b369aa2e7ac3aee5d8b23e9721d434b287e54b)) +* conflicts: ([5622d01](https://gitlab.com/macropeople/dcfrontend/commit/5622d018d93ba358dc01f12e2ae387c9f105a075)) +* dropdown filtering UX optimization ([bf75a4a](https://gitlab.com/macropeople/dcfrontend/commit/bf75a4a2b9f8c7a50ff968b07eb96fd4cf874e6e)) +* dwp issues - bolt icon on viewer, routing user back to viewer issue ([53e8b64](https://gitlab.com/macropeople/dcfrontend/commit/53e8b647594301def750b88437a93719bd80958d)) +* enabling formats on getdata ([d1ae3df](https://gitlab.com/macropeople/dcfrontend/commit/d1ae3df2813cb28ff474906175974c548d96e161)) +* excel file `delete` column parsing ([1d1635d](https://gitlab.com/macropeople/dcfrontend/commit/1d1635d675599e30493e36c7f8be9c1d1409fa72)) +* executeValidator generic function, fixed tests ([1bd76a1](https://gitlab.com/macropeople/dcfrontend/commit/1bd76a1efeba60441fb8dca34e5bf4081426fd0f)) +* filtering datetime decimals cut, getcolvals types ([bf8d059](https://gitlab.com/macropeople/dcfrontend/commit/bf8d05942955a3743da81459f9000f60481ea825)) +* finally getting decimals to work both for time and timestamp to 5dp ([6062444](https://gitlab.com/macropeople/dcfrontend/commit/60624442b1fbf877de229709b1c9b67cf08e41b9)) +* format support for getddl service ([5f5a224](https://gitlab.com/macropeople/dcfrontend/commit/5f5a22402a38798e3ef80a00a86e629fd7044ef4)) +* format support in getrawdata service ([993e208](https://gitlab.com/macropeople/dcfrontend/commit/993e2084c0537d94b481be3b79f57d6040221546)) +* format-cat entry ([2c0ebf5](https://gitlab.com/macropeople/dcfrontend/commit/2c0ebf575cd18c2467e5a3944877974b51255e7e)) +* **formats:** adding formats to viewdata service (and fixing test issues) ([d3ea3f0](https://gitlab.com/macropeople/dcfrontend/commit/d3ea3f0cc0aa80d299eb1f9a8487e67242782340)) +* hot assert error appearing (blocking the app) ([c03b5fc](https://gitlab.com/macropeople/dcfrontend/commit/c03b5fc0cfcacbf4593954b73103a005a92a2b9a)) +* hot dynamic validation adding source requires adding cell editor of autocomplete ([263fe95](https://gitlab.com/macropeople/dcfrontend/commit/263fe95ecefb29010d0b6725af59de544abff226)) +* hot freeze issue (assertion error) ([c91aa0c](https://gitlab.com/macropeople/dcfrontend/commit/c91aa0c15fec121fc4dacbd8ad677dead10d0194)) +* hot height ([6c81769](https://gitlab.com/macropeople/dcfrontend/commit/6c81769d6af5886b2dd07379b188e545e4416e78)) +* hot, deploy abort modal refactor ([536e489](https://gitlab.com/macropeople/dcfrontend/commit/536e48905c4167e33afc561b1dc39c6c454b173b)) +* include decimal part for datetime and time variables ([9ff05ce](https://gitlab.com/macropeople/dcfrontend/commit/9ff05cecf5ad0d148b8cdf3cb6e4eb084b373917)) +* initialised variables fixes ([ad35a49](https://gitlab.com/macropeople/dcfrontend/commit/ad35a49029100626a087703d2f5892797903b000)) +* leading char support (and test) ([306bc42](https://gitlab.com/macropeople/dcfrontend/commit/306bc421643426fc5fdbe2faf1011084ca623241)) +* licensing abort modal refactor ([cd127d7](https://gitlab.com/macropeople/dcfrontend/commit/cd127d750b43695b9977f90e9ee0a10c33c46ca3)) +* licensing with multiple syssite ids ([cb31af0](https://gitlab.com/macropeople/dcfrontend/commit/cb31af0063074e968717ac337bef29102283f8f5)) +* macvar in buildinit and getting delete-folder script to work from local ([3280d8b](https://gitlab.com/macropeople/dcfrontend/commit/3280d8b0906ac7bb731fbb47769ad8405b08681c)) +* make Lato font bundled ([4f20403](https://gitlab.com/macropeople/dcfrontend/commit/4f20403f691cf3e79cbab30b74bb378d233cb0a5)) +* moving the checklock macros to the core library ([f332bd5](https://gitlab.com/macropeople/dcfrontend/commit/f332bd556ee6aa1e996e79507aab81ff275e78b0)) +* NodeJS issue ([5e282e8](https://gitlab.com/macropeople/dcfrontend/commit/5e282e86e3f771659f01793c527b259bbc133c55)) +* numeric validation length in bytes ([cd833e9](https://gitlab.com/macropeople/dcfrontend/commit/cd833e9ddf0dc355c34d99da509d66ac86841e55)) +* paths ([eb06998](https://gitlab.com/macropeople/dcfrontend/commit/eb0699829363085bf6f91f90d7e2412a9723e180)) +* postdata ([8d9d141](https://gitlab.com/macropeople/dcfrontend/commit/8d9d14171ba587111e9e8a37b16f21ef963d480b)) +* record modal: dc validator refactor implementation ([5e25805](https://gitlab.com/macropeople/dcfrontend/commit/5e25805ce05062ec9648af4594d1d40ff3899805)) +* refactoring retained key generation, migrating core component to sasjs/core library ([8a74311](https://gitlab.com/macropeople/dcfrontend/commit/8a74311aa22800e85e5c6aca9c8157aa3d073d80)) +* remove processed_dttm from result ([2117727](https://gitlab.com/macropeople/dcfrontend/commit/2117727ac9a8d3a7fc4b437047da6f7c090d9c62)) +* removing processed_dttm from validatefilter ([e848c3b](https://gitlab.com/macropeople/dcfrontend/commit/e848c3bf98ed6a3762bcce8153baa68d0c2488ff)) +* removing unnecessary colvals col, fixing unfiltered rawdata download, showing batch code on parallel approve abort ([b736861](https://gitlab.com/macropeople/dcfrontend/commit/b7368615b06beb9a29d25a10a9823bb48e07b3d8)) +* renaming hot into editor component ([43178e6](https://gitlab.com/macropeople/dcfrontend/commit/43178e66a7c09762b47c24f7a525308bf39f1499)) +* replacing Macro People with 4GL Apps ([c43225b](https://gitlab.com/macropeople/dcfrontend/commit/c43225b3f85d1993c106a601db8f06a8ec76f91e)) +* sas9 deploy work ([b822a14](https://gitlab.com/macropeople/dcfrontend/commit/b822a1458113fb59a2be4783f3b458875c1cad95)) +* sasjs bumps ([0194cca](https://gitlab.com/macropeople/dcfrontend/commit/0194cca61f35ad8aff534e73c709cb707e657581)) +* sasjsAbort refactor: viewer component ([290a5d0](https://gitlab.com/macropeople/dcfrontend/commit/290a5d0715cc15ff9990ba81bcb09c8a5f196560)) +* servertype SASJS ([60f733c](https://gitlab.com/macropeople/dcfrontend/commit/60f733cd7cd54bed17959222ed6f6343ab915b1f)) +* special missing support ([4e739ee](https://gitlab.com/macropeople/dcfrontend/commit/4e739ee2d72778689e842a0b931f35bff52a378a)) +* strict mode enablement ([f226fc2](https://gitlab.com/macropeople/dcfrontend/commit/f226fc23e884ca7e9dd80ca9d283de1098f7813a)) +* supporting fmt catalog in getcolvals ([92d6e8a](https://gitlab.com/macropeople/dcfrontend/commit/92d6e8afc7c12e6535b3372558ff72a05e40dfcb)) +* surrounded data with all empty cells ([e2b3a76](https://gitlab.com/macropeople/dcfrontend/commit/e2b3a76c3128d870e6858c1e475c0a1a7fd373a6)) +* terms abort modal refactor ([b7ae9f8](https://gitlab.com/macropeople/dcfrontend/commit/b7ae9f865a38c928471bfc5317a0599f4d879048)) +* test fixed, dc validator utils ([f163d75](https://gitlab.com/macropeople/dcfrontend/commit/f163d75864cde7baa91065ea013abf5c7e996470)) +* test setup for viewtables with format catalog ([4080459](https://gitlab.com/macropeople/dcfrontend/commit/4080459d707e8f7ca2503755e2d3839ae6137d65)) +* types fixing ([3cfcb2e](https://gitlab.com/macropeople/dcfrontend/commit/3cfcb2ecb07c21a077e1ff9d191235cf04771e82)) +* uninitialised variable ([65c1f51](https://gitlab.com/macropeople/dcfrontend/commit/65c1f51268be0cdaf593f1a0c429b8fc2333571c)) +* updates following strict mode ([94fa05d](https://gitlab.com/macropeople/dcfrontend/commit/94fa05d1b4dc8f8b0045035acb4b42d5456fca98)) +* updating analytium email addresses to data controller ([a2f2783](https://gitlab.com/macropeople/dcfrontend/commit/a2f27832f7d0369b0fa4de307988c2393634c87b)) +* updating tests, bumping core, new postedit process to check MPE_VALIDATIONS ([a7d49b8](https://gitlab.com/macropeople/dcfrontend/commit/a7d49b8996603af226873f475d33902ab9e047d9)) +* upgrading the filter process to work with mp_filtestore.sas ([354ecfa](https://gitlab.com/macropeople/dcfrontend/commit/354ecfa53e54d3ac1aaf0a10b0f221afad5c44fe)) +* validation hook append to cell source if any ([d2a22b6](https://gitlab.com/macropeople/dcfrontend/commit/d2a22b65b501ce222526e830a5279ecaca68ac53)) +* validations, undefined,null ([6fe5f73](https://gitlab.com/macropeople/dcfrontend/commit/6fe5f73889703829fa675be4ef52570cccda36ce)) +* validator - editor implementation ([782e6d0](https://gitlab.com/macropeople/dcfrontend/commit/782e6d0b4c9cde390d907d6318a11fe6d982a0b1)) +* validator check ([3fe5b32](https://gitlab.com/macropeople/dcfrontend/commit/3fe5b3269cab99e2d84827b0e1450bfb6a55b7cd)) +* **validator:** yury's suggestions ([eae158d](https://gitlab.com/macropeople/dcfrontend/commit/eae158d052255eaa683ceaee71969da9f8b27722)) +* versioning structure, moved to root ([e9da745](https://gitlab.com/macropeople/dcfrontend/commit/e9da745c9f32f4308230488e547343288c64949b)) +* viewer errors ([dd8b115](https://gitlab.com/macropeople/dcfrontend/commit/dd8b1151209dbf650b4c0eb38f307d4e5e41e67a)) +* viewer hot error in console ([e5775cf](https://gitlab.com/macropeople/dcfrontend/commit/e5775cfb37711a2684c267f660e5c96c8c71aff5)) +* wording ([caa372f](https://gitlab.com/macropeople/dcfrontend/commit/caa372f56763d76918b3d4e8153cffeb73dd14aa)) + +## [3.14.0](https://gitlab.com/macropeople/dcfrontend/compare/v3.13.3...v3.14.0) (2021-12-08) + + +### Features + +* sasjs/server support ([63c9dd4](https://gitlab.com/macropeople/dcfrontend/commit/63c9dd45f497817d982b94f7f1ea2712fa820dd3)) + + +### Bug Fixes + +* changelog ([14b369a](https://gitlab.com/macropeople/dcfrontend/commit/14b369aa2e7ac3aee5d8b23e9721d434b287e54b)) +* licensing with multiple syssite ids ([cb31af0](https://gitlab.com/macropeople/dcfrontend/commit/cb31af0063074e968717ac337bef29102283f8f5)) +* moving the checklock macros to the core library ([f332bd5](https://gitlab.com/macropeople/dcfrontend/commit/f332bd556ee6aa1e996e79507aab81ff275e78b0)) +* paths ([eb06998](https://gitlab.com/macropeople/dcfrontend/commit/eb0699829363085bf6f91f90d7e2412a9723e180)) +* sas9 deploy work ([b822a14](https://gitlab.com/macropeople/dcfrontend/commit/b822a1458113fb59a2be4783f3b458875c1cad95)) +* servertype SASJS ([60f733c](https://gitlab.com/macropeople/dcfrontend/commit/60f733cd7cd54bed17959222ed6f6343ab915b1f)) +* versioning structure, moved to root ([e9da745](https://gitlab.com/macropeople/dcfrontend/commit/e9da745c9f32f4308230488e547343288c64949b)) + +### [3.13.3](https://gitlab.com/macropeople/dcfrontend/commit/compare/v3.13.2...v3.13.3) (2021-11-10) + +### Bug Fixes + +* adapter login error in console ([06b8842](https://gitlab.com/macropeople/dcfrontend/commit/06b884250953dccfec007a6ba2066a6d73685168)) +* adding comments in index.html, ensuring hard stop on table lock ([bebd9d5](https://gitlab.com/macropeople/dcfrontend/commit/bebd9d51c61afc4a34ef91cd1d980a81ea9dee01)) +* cell validation - arrows not appearing on render ([7e879b9](https://gitlab.com/macropeople/dcfrontend/commit/7e879b9e39de5a7f899dc2495a5da2d6471574ad)) +* cell validation - empty cell triggers forced values ([540297d](https://gitlab.com/macropeople/dcfrontend/commit/540297d16fd7f176a86112ef058d0cfbe6ec143a)) +* cell validation - force values are set on all rows ([1b0c31c](https://gitlab.com/macropeople/dcfrontend/commit/1b0c31ce08ae0427f65d6f646729a2a8de0c6048)) +* closes [#373](https://gitlab.analytium.co.uk//undefined/issues/373) ([209130d](https://gitlab.com/macropeople/dcfrontend/commit/209130db4c4330152ba6176fc79d562a4075b9d6)) +* display modal with sheet name where the data is found when doing excel upload ([351d511](https://gitlab.com/macropeople/dcfrontend/commit/351d5118d0d94680b39e0411bfa6390af7f52591)) +* duplicate *ALL* values removal ([fdc5b6f](https://gitlab.com/macropeople/dcfrontend/commit/fdc5b6f1a520fd3366ab38d6903b30cd9130f52d)) +* excel fail with missing first row ([e508a54](https://gitlab.com/macropeople/dcfrontend/commit/e508a543ea6ba0e76b7603e4a9b3358596ad8a19)) +* rejection reason not appearing in the email ([0476090](https://gitlab.com/macropeople/dcfrontend/commit/04760903836e87892d79caee3628c911ba787b86)) +* upload excel faster validation ([316551b](https://gitlab.com/macropeople/dcfrontend/commit/316551b2f800d1fbdd3f418d40ce2330ff1742eb)) +* upload validation speed up ([4277fef](https://gitlab.com/macropeople/dcfrontend/commit/4277fefeb4695ee7cbf5c588ceac654d5d32c9dc)) + +### [3.13.2](https://gitlab.com/macropeople/dcfrontend/compare/v3.13.1...v3.13.2) (2021-09-27) + + +### Features + +* licencing - multiple site_id values support ([8e98dd5](https://gitlab.com/macropeople/dcfrontend/commit/8e98dd58cdaa10fd6e11b499f16b80c4627c183b)) + + +### Bug Fixes + +* better UX when doing quick reject ([0e35427](https://gitlab.com/macropeople/dcfrontend/commit/0e35427a5f66de4aa98128470c1c0e28db4b0e9e)) +* deprecating mpe-getroot() ([a6bc6e7](https://gitlab.com/macropeople/dcfrontend/commit/a6bc6e7423d10b62a7512b787c3d3dcf7e3e580b)) +* excel empty numerics parsed incorectly ([0d0e3eb](https://gitlab.com/macropeople/dcfrontend/commit/0d0e3ebff6f88faaef502b881ae0176e3dc7b6d6)) +* invalid casting ([e086fb3](https://gitlab.com/macropeople/dcfrontend/commit/e086fb317ca4a094223402b46806a5d7ae418372)) +* switching to sasjs/core version of mp_getcols ([616fc80](https://gitlab.com/macropeople/dcfrontend/commit/616fc80c4dbd1c89efd0d48cce027edd53019ef3)) +* viewer - handsontable onDestroy of undefined error ([7832e0e](https://gitlab.com/macropeople/dcfrontend/commit/7832e0eb664c85df66b2580982a49d4c4aeec060)) + +### [3.13.1](https://gitlab.com/macropeople/dcfrontend/compare/v3.13.0...v3.13.1) (2021-09-06) + + +### Features + +* dynamic cell validation force value flag ([016377f](https://gitlab.com/macropeople/dcfrontend/commit/016377f4f2e34c3ad45850b0aee982b2c49ccd36)) +* enabling force flag at backend ([1d9ab78](https://gitlab.com/macropeople/dcfrontend/commit/1d9ab783ec30eaa815b5cf752463fbb6d3d814b3)) +* hot.batch() improvement, loading spinner on error stop and presenting exclamation mark ([66d6c6b](https://gitlab.com/macropeople/dcfrontend/commit/66d6c6bd6c92bbe49acc8d88dc2f222f3f4b9be3)) + + +### Bug Fixes + +* adding test trigger ([9391796](https://gitlab.com/macropeople/dcfrontend/commit/93917961412d1d9a81647ccf4745df6acd1c2f99)) +* enabling mp_include for error handling, and adding force flag on mpe_tables validation ([f1163e1](https://gitlab.com/macropeople/dcfrontend/commit/f1163e1fa7f34d94587c55dc306c86bc5039d0bc)) +* enabling native PG for key_seq incrementer ([f81505f](https://gitlab.com/macropeople/dcfrontend/commit/f81505faf934b125e4d46c493ee66af0d9183b83)) +* excel with additional columns issue ([b7d017d](https://gitlab.com/macropeople/dcfrontend/commit/b7d017dff02921abfb9e774652abf7bb0163225c)) +* filter message should be removed when excel is uploaded ([3350da9](https://gitlab.com/macropeople/dcfrontend/commit/3350da96b60216493c32eac84228145cc6f3239b)) +* filter RK bug ([b61c93d](https://gitlab.com/macropeople/dcfrontend/commit/b61c93d893fad5acc8b1f104dd2184a880e7a767)) +* handsontable instance warnings, improved singleton when calling hot ([faccc11](https://gitlab.com/macropeople/dcfrontend/commit/faccc11eb452cc1b5c2497e1ad6c274889cb9755)) +* more PG tests ([48836a0](https://gitlab.com/macropeople/dcfrontend/commit/48836a01ce3128131f1a01ff927cc021eb3669a4)) +* pg direct - working branch ([0d46dd9](https://gitlab.com/macropeople/dcfrontend/commit/0d46dd98387baada4347a5c0d698079524e97f16)) +* PG updates ([f41eefd](https://gitlab.com/macropeople/dcfrontend/commit/f41eefd8ea2615ad73510fa577274b22e4377e24)) +* timestamps for PG compatibility ([aa321c2](https://gitlab.com/macropeople/dcfrontend/commit/aa321c295f05c881ec75dc6c40413ceb208778d5)) +* using db compatible date system ([95a564c](https://gitlab.com/macropeople/dcfrontend/commit/95a564ce106142480f82321f201c6ae628e7fc1e)) +* when no changes on approval screen state as such ([55a24db](https://gitlab.com/macropeople/dcfrontend/commit/55a24dbf322f110d567792b1cd24e7c612d7f493)) + +## [3.13.0](https://gitlab.com/macropeople/dcfrontend/commit/compare/v3.12.0...v3.13.0) (2021-08-25) + + +### Features + +* backend for dynamic extended values, docs updated and tests written. Available on MPE_TABLES.DSN column ([10fe4ba](https://gitlab.com/macropeople/dcfrontend/commit/10fe4bae537adf76e524b228d466c9bbe9d8ed81)) +* date picker dropdown with values ([2be1ad7](https://gitlab.com/macropeople/dcfrontend/commit/2be1ad777254d69966b8b54b9b3abc719227a9c6)) +* dynamic cell validation loading spinner ([e415476](https://gitlab.com/macropeople/dcfrontend/commit/e4154762b0d75f25be4727b566e012c860fb61a9)) +* excel upload stater ([6aa35e1](https://gitlab.com/macropeople/dcfrontend/commit/6aa35e184e90b2d821031aea686f40e592e92f84)) +* logger service, displaying console log when debug is on ([35992e0](https://gitlab.com/macropeople/dcfrontend/commit/35992e08d9b2db1b2133d2c1e23ce08686a62cd1)) +* upload excel states and remaining time calculation ([7529d40](https://gitlab.com/macropeople/dcfrontend/commit/7529d408f0851318d099c5c438b02c76259713e7)) +* **in progress:** extended values cell validation ([e44dc9a](https://gitlab.com/macropeople/dcfrontend/commit/e44dc9a065dbaa534a38f4edf5f6e097c5cd9413)) +* row headers added ([55d5b24](https://gitlab.com/macropeople/dcfrontend/commit/55d5b24acb31c402c9d47499acff046c0605ba0f)) +* **k8s:** dockerized frontend app ([5c9176c](https://gitlab.com/macropeople/dcfrontend/commit/5c9176c137041a862986217711304ecb3a67b793)) +* **k8s:** set up k8s node with dcfront image ([b234b28](https://gitlab.com/macropeople/dcfrontend/commit/b234b283eeca353adb41aba2837539e3b1f75aa7)) +* **server:** enabled typeScript ([2ac724e](https://gitlab.com/macropeople/dcfrontend/commit/2ac724e3e57700b9e5f291ff934097fa6fb6bbb2)) +* **server:** initial commit ([8f2a0a5](https://gitlab.com/macropeople/dcfrontend/commit/8f2a0a5020b28866d2c35b3a8b22842dd3e89785)) +* added test case to test the validity of uploaded values in xls extension ([7f7909b](https://gitlab.com/macropeople/dcfrontend/commit/7f7909bb62213cfd58eed047d15a91552723e4c2)) +* adding datalist dropdown to time and date picker ([caaf5f9](https://gitlab.com/macropeople/dcfrontend/commit/caaf5f915228cd387b9711a0e9f2cd71d13c01ac)) + + +### Bug Fixes + +* adding demo key and fixing build process ([9298ef0](https://gitlab.com/macropeople/dcfrontend/commit/9298ef07f7ad038dcb9a0ed7d78dc8fe8a7a39bf)) +* agree checkbox flow, open table from tree stability, library to open in cypress json ([1a3dcf2](https://gitlab.com/macropeople/dcfrontend/commit/1a3dcf229861fa9252d58196a93f61d572fe441a)) +* backend updates ([1b3a61a](https://gitlab.com/macropeople/dcfrontend/commit/1b3a61ae1160b95044e8c3ccca1dcb5cbfab0f86)) +* batch script updates, adding mpe_users to mpe_tables ([b5659d4](https://gitlab.com/macropeople/dcfrontend/commit/b5659d47e22f62483921ba460a7b59a44d98cc07)) +* bumping core ([6034d12](https://gitlab.com/macropeople/dcfrontend/commit/6034d12a0c7d630015e3de34080cce07aea188b4)) +* buttons focus outline remove ([c0348e3](https://gitlab.com/macropeople/dcfrontend/commit/c0348e3c56abf4476e3683f3cf91900ddab4a10e)) +* created and implemented sheetInfo interface ([7408ad7](https://gitlab.com/macropeople/dcfrontend/commit/7408ad746cd83256ba20f496751f44d6fbe591db)) +* date picker datalist arrow overlap with calendar. On loading screen abort modal not visible ([f426536](https://gitlab.com/macropeople/dcfrontend/commit/f4265365dc9fbe8548fb28a1f1d648e6aba16106)) +* decoding licence key on http faling with invalid base64 ([5220cdb](https://gitlab.com/macropeople/dcfrontend/commit/5220cdb6d4d9ac86143454920b1d6eecb4d1a333)) +* der touristik issue with error on table due to DQ check ([641a15c](https://gitlab.com/macropeople/dcfrontend/commit/641a15c0f723bb19937e38dbe278de5f708c1dc1)) +* displaying the error message that comes in response from adapter ([43e5e31](https://gitlab.com/macropeople/dcfrontend/commit/43e5e31fdafa1c4cbb0af60c467407c147d5f1f5)) +* dynamic cell validation on numeric cells, numeric dropdown with sofselect issues ([4c8a68a](https://gitlab.com/macropeople/dcfrontend/commit/4c8a68aa5ede968435d47031b6d3f6e5c0731f52)) +* empty sheets triggering error (update range function) ([2caa513](https://gitlab.com/macropeople/dcfrontend/commit/2caa51354a8018d03297a4bb455ab1a5ff4bac6a)) +* enable support for backend rls checks ([0422c39](https://gitlab.com/macropeople/dcfrontend/commit/0422c39c1450b65c2c678d2305647165acf93db8)) +* enabling hook when submitting RLS and adding query object to VIEWdata response ([6023e8b](https://gitlab.com/macropeople/dcfrontend/commit/6023e8bf4e54feae68ad9c0312dd5ec43aea5084)) +* enabling post edit hook for mpe_validations to check each table query seperately ([3906316](https://gitlab.com/macropeople/dcfrontend/commit/3906316f805758d5daee38c356447c3a67fd4263)) +* excel finding data in file issue ([7d17685](https://gitlab.com/macropeople/dcfrontend/commit/7d17685e5c1eee35458d35e9979968778f072aa9)) +* excel tests fixing ([a27066e](https://gitlab.com/macropeople/dcfrontend/commit/a27066e2b0ac9ebde3bff7c57240b9885dd47b72)) +* excel upload with missing, duplicate and blank columns ([038b32f](https://gitlab.com/macropeople/dcfrontend/commit/038b32f6517cc5595a94fa664afffbaedd7ac340)) +* excel with missingg first row upload fail ([839f34a](https://gitlab.com/macropeople/dcfrontend/commit/839f34a70481f6b35e172392a52d3d43ef9addc6)) +* handle the string which contains apostrophe ([fdde83f](https://gitlab.com/macropeople/dcfrontend/commit/fdde83f51468bafce73d10203f2f19b00fc952ba)) +* hardselect_hook prevent invalid submit ([127ff70](https://gitlab.com/macropeople/dcfrontend/commit/127ff7056f92a4bac1117f319e79b1331b55a3f3)) +* history download context passed ([7fc3637](https://gitlab.com/macropeople/dcfrontend/commit/7fc36377d236537eb2aaa729cc3e39c5bda7da6c)) +* immediately remove approve list item after clicking on reject button ([5004988](https://gitlab.com/macropeople/dcfrontend/commit/5004988132b03b29403e1b56b65423a016c226c0)) +* incorrect group logic ([0be9e18](https://gitlab.com/macropeople/dcfrontend/commit/0be9e18b3395d8f6df1351d07e5167d90e7234f3)) +* issue with filters in different tables being combined ([51d3c98](https://gitlab.com/macropeople/dcfrontend/commit/51d3c98ca8dc065e16bfa4e645f54f28a3701fae)) +* lineage double request ([5a78a30](https://gitlab.com/macropeople/dcfrontend/commit/5a78a30dc8830ea81dc33ee90d3115513c13926c)) +* made some attributes optional ([9879633](https://gitlab.com/macropeople/dcfrontend/commit/9879633d67f84ab9c4943efa564453aeffb18580)) +* merge conflict ([957f4f6](https://gitlab.com/macropeople/dcfrontend/commit/957f4f635d5ef2de1980006987939c45f3835939)) +* message typo ([b231651](https://gitlab.com/macropeople/dcfrontend/commit/b23165171a728eec59c0c18c1225e1f17a7f1a57)) +* metadata aligment and loading spinner alignment ([385da0e](https://gitlab.com/macropeople/dcfrontend/commit/385da0e2df3964d2e51ab1a4beb711d1f697ec2e)) +* metadata object not sending request ([a616a42](https://gitlab.com/macropeople/dcfrontend/commit/a616a42e1dc3dc2e337c2db27e11ad7468e5a779)) +* metanav search issue ([e6a727a](https://gitlab.com/macropeople/dcfrontend/commit/e6a727a32e56fa7e08d9559b5bbf230f1713b4b9)) +* new clarity styling issues ([50c9a23](https://gitlab.com/macropeople/dcfrontend/commit/50c9a23e6464d381382b197fabae5d1830af088c)) +* nobs value incorrect in filtered view on VIEW table ([23fa2ce](https://gitlab.com/macropeople/dcfrontend/commit/23fa2ceaab050eb6e6a5503cc72d94d7762c9225)) +* non picker input dropdown not visible ([4de8726](https://gitlab.com/macropeople/dcfrontend/commit/4de8726c5f660b4763dee4f03f7dc471c40848b9)) +* not null validations not applied ([eccc28e](https://gitlab.com/macropeople/dcfrontend/commit/eccc28ee877d9c57294cb5d72a315fdfbfe51541)) +* numeric column freeze when put char value ([d2cebc5](https://gitlab.com/macropeople/dcfrontend/commit/d2cebc50b3ccbd04f0a609c9299b874f0f334a14)) +* pass debug parameter in upload file request when deug mode is enabled ([ab8ab28](https://gitlab.com/macropeople/dcfrontend/commit/ab8ab2844e2fc390bfdd2e35803627724cb3ed0e)) +* postgres compatibility ([700fa74](https://gitlab.com/macropeople/dcfrontend/commit/700fa74fe223b08de627569c8739406e92d7b6c2)) +* Primary key value lost when uploading excel file fixed ([0672a55](https://gitlab.com/macropeople/dcfrontend/commit/0672a556d59a9593b5109def961cae516dd1c2d8)) +* reproduce filter for viewer component ([6edb0aa](https://gitlab.com/macropeople/dcfrontend/commit/6edb0aa410aadc1fc067f7b49c58fa93df283e8f)) +* RLS lib assign ([6b274eb](https://gitlab.com/macropeople/dcfrontend/commit/6b274eb1f75c226ad8619bccd30ddb9cf4adb4d0)) +* sas fixes ([0f4a1bb](https://gitlab.com/macropeople/dcfrontend/commit/0f4a1bbbd99afd4fe769b796d0428c066801166e)) +* updates for PG compatibility and to improve logging in case of hard exit ([6f43756](https://gitlab.com/macropeople/dcfrontend/commit/6f437563b5f814e15f93b56ddf3d9d41b54640c5)) +* updating test and config to use correct context, also updating tests so that they actually run with the designated context ([96aadb1](https://gitlab.com/macropeople/dcfrontend/commit/96aadb1b056b44bbc3dcc0b82a0504a6b90840de)) +* validatefilter not handling sasjsAbort ([ee444bb](https://gitlab.com/macropeople/dcfrontend/commit/ee444bb11a566f9b3dee1ff91bb97017856d4a39)) +* restructured repository ([b0accc5](https://gitlab.com/macropeople/dcfrontend/commit/b0accc5509f8dd3946763c8b4fddbf3691c98fff)) +* restructured repository ([64530a6](https://gitlab.com/macropeople/dcfrontend/commit/64530a664780264b4b9264897d4c70d2efc54237)) +* **ci:** fixed merge request CI step ([687785c](https://gitlab.com/macropeople/dcfrontend/commit/687785cb09bc8c271705b4fc9daae90f5ec052f6)) +* **CI:** fixed gitlab-ci ([84bc6ba](https://gitlab.com/macropeople/dcfrontend/commit/84bc6ba9fa9508324ab5fc7eba2ad4fdf445c861)) +* **k8s:** fixed ingress service ([6a71df7](https://gitlab.com/macropeople/dcfrontend/commit/6a71df7c8a1602ff8972ebad905886707c552779)) +* timeout set globally ([79c0250](https://gitlab.com/macropeople/dcfrontend/commit/79c0250f06ab5fc2dfb3f290456cd266dc517729)) +* validation for numeric cells ([6b9dba5](https://gitlab.com/macropeople/dcfrontend/commit/6b9dba542d2ce2e94c4368cce665b351e26a332f)) +* when user open filter url show him filter clauses in filter dialog box ([b800672](https://gitlab.com/macropeople/dcfrontend/commit/b800672ad51a5443eca76cf86d468c5c0443be6a)) + +## [3.12.0](https://gitlab.com/macropeople/dcfrontend/compare/v3.11.0...v3.12.0) (2021-05-11) + + +### Features + +* adding dynamic filter query to public/getcolvals service along with corresponding tests (and updates to test config) ([df86c39](https://gitlab.com/macropeople/dcfrontend/commit/df86c39aabf264236580c283a56e378a106dc6d6)) +* backend logic for formula validation ([7d17aca](https://gitlab.com/macropeople/dcfrontend/commit/7d17aca7b982749f42303d51ecdd9cb549e73e9b)) +* check for invalid clauses when adding new group clause ([085ede6](https://gitlab.com/macropeople/dcfrontend/commit/085ede69cb4056e598460150a0b5443398dedb94)) +* checkbox values moved in modal. fix: selecting IN operator before getValues is finished did not populate values. ([831f6b7](https://gitlab.com/macropeople/dcfrontend/commit/831f6b794e8f3477ff2c3e1b49845540dba8425c)) +* creating dynamic where clause string and passing ([2724383](https://gitlab.com/macropeople/dcfrontend/commit/272438366702a2ac7d333b0e6e9ae0a97c1f8e2a)) +* getdynamiccolvals service (and test) ([c5a8df8](https://gitlab.com/macropeople/dcfrontend/commit/c5a8df870a83d460840f220ce3a33c1fb55a22f4)) +* getdynamiccolvals v0 ([44be1de](https://gitlab.com/macropeople/dcfrontend/commit/44be1de57ceec597d14acc6e8e0a86c1f8d2f42f)) +* lineage depth level pick ([46e4601](https://gitlab.com/macropeople/dcfrontend/commit/46e4601a1c9eaaa907c60adf16cccb7a02bb30bd)) +* max depth lineage limit ([569a560](https://gitlab.com/macropeople/dcfrontend/commit/569a5606d8d743a1ba9ac19e388a960b0f320409)) +* mpe_filtermaster macro to handle all filter generation (and corresponding tests) ([ddf88f0](https://gitlab.com/macropeople/dcfrontend/commit/ddf88f027bf23d64857628b040fb1419ba9e8c19)) +* new validatefilter service (replaces whereclausevalidator) ([909ba02](https://gitlab.com/macropeople/dcfrontend/commit/909ba02b4288e2d4c3c266389ba6432fd3f85aac)) +* reset filter button, improved datalist elements ([bd42094](https://gitlab.com/macropeople/dcfrontend/commit/bd42094919550752c53927d95f5c855d851e131a)) +* Row Level Security (and test) ([5e0fe2f](https://gitlab.com/macropeople/dcfrontend/commit/5e0fe2f80223966a65e5878dbc250eefa61d995b)) +* where clause check on adding new ([82410d2](https://gitlab.com/macropeople/dcfrontend/commit/82410d2cd4e011406e3d866571f703fb01bf708c)) +* while uploding EXCEL parse formulas and formatted values ([5008010](https://gitlab.com/macropeople/dcfrontend/commit/500801042103480e034cd489d3a64d196a780432)) + + +### Bug Fixes + +* 0 rows on filter, no changes modal improved ([0318d86](https://gitlab.com/macropeople/dcfrontend/commit/0318d864459e1c46b3e2be919c48d7602cb77872)) +* add record edits newly added row ([91328ea](https://gitlab.com/macropeople/dcfrontend/commit/91328eab83e5000b8d2a7038de230b0cb16e3472)) +* adding default hook for mpe_security ([d282fd2](https://gitlab.com/macropeople/dcfrontend/commit/d282fd27a602b8576f5c7d63b6781c350a50d058)) +* adding header to getdynamiccolvals ([c8f054a](https://gitlab.com/macropeople/dcfrontend/commit/c8f054af26cdc90afdd3737b3ef2fe6470d23ee7)) +* adding outds so can send back to frontend ([6151391](https://gitlab.com/macropeople/dcfrontend/commit/6151391443293242c320e3b94181d5a107ed0934)) +* adding stub for service ([0a32bfe](https://gitlab.com/macropeople/dcfrontend/commit/0a32bfe6d380c392759412fb2b57b1c99b71abe9)) +* adding tests and new macro for fetching test response ([0fd4e35](https://gitlab.com/macropeople/dcfrontend/commit/0fd4e358f0323b0137e3f3ed36819b432992fa84)) +* app break on lineage error when debug off ([f4f1fae](https://gitlab.com/macropeople/dcfrontend/commit/f4f1faea56742f8236d3d4837ac09d185072054b)) +* appLoc check support for old adapter ([4d6fc29](https://gitlab.com/macropeople/dcfrontend/commit/4d6fc29a61cee1282286f40ce1874dcf6fd05da0)) +* appLoc check, with adapter function ([2fa0de9](https://gitlab.com/macropeople/dcfrontend/commit/2fa0de946cce7ba4288a1ab645cfb80ea1839d35)) +* approver list for *ALL* listings ([54a4fdf](https://gitlab.com/macropeople/dcfrontend/commit/54a4fdf388cebbe51e95ea2c60d8c605b3507145)) +* auto deploy close modal button ([3657ae1](https://gitlab.com/macropeople/dcfrontend/commit/3657ae1448ae954145cd6ee8a9bf08fb5d463454)) +* bumping adapter and closing [#305](https://gitlab.com/macropeople/dcfrontend/issues/305) ([2f3d49c](https://gitlab.com/macropeople/dcfrontend/commit/2f3d49cb529ca95a71bd4a58115edb586a98bb0b)) +* bumping sasjs/core ([3b0896d](https://gitlab.com/macropeople/dcfrontend/commit/3b0896d7be0ba403a8701a96bc6e662fa1f09947)) +* changes required by axios-adapter ([eac1bb5](https://gitlab.com/macropeople/dcfrontend/commit/eac1bb566d9927782ae372af51dd400657d347b0)) +* check to ensure table exists. Closes [#223](https://gitlab.com/macropeople/dcfrontend/issues/223) ([ee5b21a](https://gitlab.com/macropeople/dcfrontend/commit/ee5b21a2bd4ce1743ed550011577c06ac9041953)) +* conflicts: ([92d6b4d](https://gitlab.com/macropeople/dcfrontend/commit/92d6b4d0c772f1dda7e548fb69a4e58624542fbc)) +* datalist improving UX (show all values on click) ([99f298d](https://gitlab.com/macropeople/dcfrontend/commit/99f298d5abd3243c6b0070f8bb3c1ba95f52eb48)) +* dependencies ([42f23d4](https://gitlab.com/macropeople/dcfrontend/commit/42f23d43691fa7e41f64e9d87dd50695934d8256)) +* deploy page ([0c1c312](https://gitlab.com/macropeople/dcfrontend/commit/0c1c312ce7c205d468909d736bea0a1cb49842e2)) +* double click opens empty dropdown ([c751295](https://gitlab.com/macropeople/dcfrontend/commit/c75129559fb26f94dc4f86b5f5781844f335f50f)) +* download audit file error ([8a92657](https://gitlab.com/macropeople/dcfrontend/commit/8a9265779481a8955185e564c57297243366c8e7)) +* dynamic filtering is true by default ([47d6c37](https://gitlab.com/macropeople/dcfrontend/commit/47d6c37127439bd21def7415073893bb0a98eabc)) +* dynamic where clause was sending null values ([aad3d94](https://gitlab.com/macropeople/dcfrontend/commit/aad3d948895d89905e80d1d8a3751d8f551a70fb)) +* editor breaks if submit service fails ([eef29ba](https://gitlab.com/macropeople/dcfrontend/commit/eef29ba679cfe0b67f5a58216f6d6fb2fc38a97c)) +* editor reset filter not working ([9b2e5a9](https://gitlab.com/macropeople/dcfrontend/commit/9b2e5a9b4f7c44b9fc04a96d5376fc22c896f9fe)) +* enabling excel export for non PC files sites, also updating tests ([35a36e7](https://gitlab.com/macropeople/dcfrontend/commit/35a36e705c17b5978884c53912d4a673400bf670)) +* enabling filtering for getdata service, plus a test, plus fixes to make the test work ([69c6dde](https://gitlab.com/macropeople/dcfrontend/commit/69c6dde4322e096c12cc312a3e3a1e4d5bb889ca)) +* enabling uploads in excel for non admins with *ALL* security settings ([46a083a](https://gitlab.com/macropeople/dcfrontend/commit/46a083a9e6453873933e57118fe6e3bfc66ee3b6)) +* ensuring selectbox order is honoured. closes [#283](https://gitlab.com/macropeople/dcfrontend/issues/283) ([124c1d3](https://gitlab.com/macropeople/dcfrontend/commit/124c1d3d9372dc37f7fcae0e375577eedd77f942)) +* error on compilation ([574d1ca](https://gitlab.com/macropeople/dcfrontend/commit/574d1ca615458f8447ee0d9c76c63f145f7def6c)) +* extending viz memory, added rendering spinner, added download png and svg buttons in the modal ([d6f674f](https://gitlab.com/macropeople/dcfrontend/commit/d6f674f56e1342c7069194b40a22a2df6261f9bc)) +* filter text removeal ([08bcc4a](https://gitlab.com/macropeople/dcfrontend/commit/08bcc4a858dff402dd49ee8714f1f1b0bf341a73)) +* filter_pk numeric ([e5a7728](https://gitlab.com/macropeople/dcfrontend/commit/e5a77288be0077355449d7dd520a7c4aea42d2d3)) +* filter_pk numeric ([f0a1d7b](https://gitlab.com/macropeople/dcfrontend/commit/f0a1d7bec28f9b2847640d129a770eca4362ffa2)) +* filtering datetime wrong time on some months ([00c2d4e](https://gitlab.com/macropeople/dcfrontend/commit/00c2d4ea92afadb9ab47cf1d2c9de82827fed0b8)) +* filterquery for numeric and string ([29d4967](https://gitlab.com/macropeople/dcfrontend/commit/29d49679b668d1d41968a9d1fc3fdc172112415f)) +* filterTable params fixed for getColVal request ([f6b43e2](https://gitlab.com/macropeople/dcfrontend/commit/f6b43e20b1b2792968d4c661a35be2018f25e151)) +* fixing dates on fronted. REquires an adapter update. ([544124b](https://gitlab.com/macropeople/dcfrontend/commit/544124b3914939b603ddab97b709adb8c187ce45)) +* getcolvals breaking filtering ([086cd64](https://gitlab.com/macropeople/dcfrontend/commit/086cd64bdb8b985317ae5c40cdfa95d2161c7e59)) +* getting tests to (finally) work ([caeea9a](https://gitlab.com/macropeople/dcfrontend/commit/caeea9a72e7400d8a6ae6ce4b6bbb0666f968193)) +* getting viewdata to work ([d78cfa5](https://gitlab.com/macropeople/dcfrontend/commit/d78cfa56cbcc363eb1ba35c6bfd38080d3141126)) +* http key support ([a166665](https://gitlab.com/macropeople/dcfrontend/commit/a1666658ceabe5c2094f1b33f86034ca445ebafc)) +* I ran npm run format:fix ([7c5814f](https://gitlab.com/macropeople/dcfrontend/commit/7c5814fd729f04acc78d77c217e06611832552e8)) +* improved progress bar, passing dynamic clause object to server ([c0a37a4](https://gitlab.com/macropeople/dcfrontend/commit/c0a37a4b8941fc5253d2462766c8be053febd6b0)) +* large lineage handling improved UX ([316af47](https://gitlab.com/macropeople/dcfrontend/commit/316af476580a774538615bdb318a30310efec187)) +* last minute fixes ([4399118](https://gitlab.com/macropeople/dcfrontend/commit/4399118d92941baf92de32c852c3a8ec6ab1e54c)) +* last minute updates ([d58dc0a](https://gitlab.com/macropeople/dcfrontend/commit/d58dc0a3fe061be53163cd4a521a4d72ee8ebe8d)) +* line length ([15e596a](https://gitlab.com/macropeople/dcfrontend/commit/15e596a1cd009d807d82ab9890bd7e7e506555b0)) +* lineage not rendering issue ([ba932f4](https://gitlab.com/macropeople/dcfrontend/commit/ba932f4c43fd6c3762e773143e2060eda6b4e867)) +* lint fixes ([fa6fbcc](https://gitlab.com/macropeople/dcfrontend/commit/fa6fbcc3bd45b504f8242a3b8924d5d32f7f456e)) +* max_depth ([b90efe0](https://gitlab.com/macropeople/dcfrontend/commit/b90efe01b5ffa5d5761d01a1f5839f9cabd0cdfd)) +* merge ([3f4db37](https://gitlab.com/macropeople/dcfrontend/commit/3f4db379b5c3ada8a29a8221ea810e56f2299cc7)) +* merged cells excel upload fails ([df5e6d7](https://gitlab.com/macropeople/dcfrontend/commit/df5e6d7848e1864554bdc98daf6d9215f2caa40d)) +* migration DDL ([63b7dd9](https://gitlab.com/macropeople/dcfrontend/commit/63b7dd988a61467b359eb285ce4e9976a5c2c2e5)) +* minval validation broken ([ce1db82](https://gitlab.com/macropeople/dcfrontend/commit/ce1db828662185e2c58410d3c5f45eae84f9a154)) +* missing changes and improvements ([d463d32](https://gitlab.com/macropeople/dcfrontend/commit/d463d32e18da4093e55ed64c4fedba40eca02b9e)) +* more debugging, closes [#282](https://gitlab.com/macropeople/dcfrontend/issues/282) ([eb26f89](https://gitlab.com/macropeople/dcfrontend/commit/eb26f89e045d676dca5c1868dc491685e0289b4a)) +* moving meta_mapper into designated folder, so it can now be overridden by the end user ([595f08d](https://gitlab.com/macropeople/dcfrontend/commit/595f08dc9490d5424c60e2d2ae053d523cc8265d)) +* moving tests into same folders as services ([19ada72](https://gitlab.com/macropeople/dcfrontend/commit/19ada72845725722266827beff872e1c24aed62e)) +* mpe_config issues ([315ed39](https://gitlab.com/macropeople/dcfrontend/commit/315ed39fb7d751c800ecc8436d079bd34a0e99ae)) +* mpeinit ([b541f58](https://gitlab.com/macropeople/dcfrontend/commit/b541f58788925c772be79f5888e0caff0070c26a)) +* mpeinit failure on sas 9 configurator ([9ace8e1](https://gitlab.com/macropeople/dcfrontend/commit/9ace8e172ff8059cf3ec0e64a8b3233276e21c96)) +* one clause in group subgroup logic is undefined ([7cca83b](https://gitlab.com/macropeople/dcfrontend/commit/7cca83b2d0c02231aa4c22721592f061b5a1f6d4)) +* ran npm run format:fix ([eda5785](https://gitlab.com/macropeople/dcfrontend/commit/eda578585fa174c529a8c866e8e112126478b22b)) +* reducing rowcount to 100 for performance, also updating sasjs doc ([a612d33](https://gitlab.com/macropeople/dcfrontend/commit/a612d33c31c022dac6b8e9b1e334fe9b77313e47)) +* removed services from appLoc ([4d390df](https://gitlab.com/macropeople/dcfrontend/commit/4d390df35a2b771acc7c7fc5b8b3d1276e8d421f)) +* removing FILTER_JSON ([4e7b549](https://gitlab.com/macropeople/dcfrontend/commit/4e7b549b3a9f45b52eb7e0da911da8e35fdf44c1)) +* removing nested macro ([2641e41](https://gitlab.com/macropeople/dcfrontend/commit/2641e415eab27ac1c1cd33004aea856538021ba2)) +* removing nested macros ([70f25d2](https://gitlab.com/macropeople/dcfrontend/commit/70f25d217ca3dcb12b4f4422284451e7127d8086)) +* replaced NOT EQUAL with NE ([696348a](https://gitlab.com/macropeople/dcfrontend/commit/696348aadd5e48d1bf08aeee2a5cbe9d9aba2e54)) +* RLS hook, max-depth, mor eRLS values ([d2e9fa3](https://gitlab.com/macropeople/dcfrontend/commit/d2e9fa3552e409fb2cc48401a6f4eb013c5e3d4a)) +* sanitising inputs ([04855b9](https://gitlab.com/macropeople/dcfrontend/commit/04855b925ce64c2c84e6434b05be5a22a741b378)) +* sasjs/core bump ([2b57031](https://gitlab.com/macropeople/dcfrontend/commit/2b570317f00573e24ec679d54e2b2d21bb37db0d)) +* shortening token ([49f17e7](https://gitlab.com/macropeople/dcfrontend/commit/49f17e755c32ed01531f9953ad73d9c2c2e15d12)) +* small performance tweak in filtering ([672d51c](https://gitlab.com/macropeople/dcfrontend/commit/672d51c3da0db809b5712e7fb67b41e718ed181b)) +* soft select in edit modal is working now ([98fa2d9](https://gitlab.com/macropeople/dcfrontend/commit/98fa2d9b84fc1e844a1521fdc8cb348f51eeaef8)) +* sql update for history ([e1a3511](https://gitlab.com/macropeople/dcfrontend/commit/e1a3511a8768195f666254225e23965f1984a5af)) +* styling issues ([720adb2](https://gitlab.com/macropeople/dcfrontend/commit/720adb222cdcf07cedb640d97bb534d2252b1a89)) +* table max depth ([352e2c0](https://gitlab.com/macropeople/dcfrontend/commit/352e2c0ac8635cbc52fedd3ac3aa954ed766c95f)) +* table on click scroll into view ([87f72be](https://gitlab.com/macropeople/dcfrontend/commit/87f72beba9d345c1635769695c466af1a209e363)) +* test (and fix) for etlsource, upcasing returned cols & tables ([77ddff5](https://gitlab.com/macropeople/dcfrontend/commit/77ddff51cd07bed962d39de9748728401933e7aa)) +* tests ([8c0eb1b](https://gitlab.com/macropeople/dcfrontend/commit/8c0eb1b1c6f1f2464c4f4cca3b9d18cae80ef917)) +* tests and extra validations routines ([3dbfad8](https://gitlab.com/macropeople/dcfrontend/commit/3dbfad84a9b249b536d2041b4ee1863a412f8c9e)) +* tidy up sasjsconfig.json ([4ed469b](https://gitlab.com/macropeople/dcfrontend/commit/4ed469b3ea9edadf04ca2b70eaf29b5ddf0dfeae)) +* tree on generating graph scrolls to top ([ccaac6f](https://gitlab.com/macropeople/dcfrontend/commit/ccaac6f8a60b8968d5c05396b823b5af6deb3b1a)) +* typo and fixes ([b258426](https://gitlab.com/macropeople/dcfrontend/commit/b2584266de6eb2b96a8cc61b4927e1811c64a75c)) +* uknown error to SAS Service Error ([564e893](https://gitlab.com/macropeople/dcfrontend/commit/564e8934388ba135acc89417a7a1ac31798dd852)) +* updated upload excel with formula test to check parsed values ([db58aa0](https://gitlab.com/macropeople/dcfrontend/commit/db58aa085dee3a616f4e1015868fbb5bf9a9be3c)) +* updates for viya testing ([637c1e1](https://gitlab.com/macropeople/dcfrontend/commit/637c1e16390e8c72bce9bd6d907e70b7e8366f02)) +* updates to make sasjs lint work ([fc5fe54](https://gitlab.com/macropeople/dcfrontend/commit/fc5fe54a9ac8c4716d4a4ceb58dd583918ae47ac)) +* updating dc tests for SAS 9 with macro ([f42012f](https://gitlab.com/macropeople/dcfrontend/commit/f42012f4d368b8043e227ca25fdcb3032bc58887)) +* url issues in deployment ([f6f933d](https://gitlab.com/macropeople/dcfrontend/commit/f6f933dbc6e465963474accbcc49cadfd83ce70f)) +* viya users limit ([d6961f4](https://gitlab.com/macropeople/dcfrontend/commit/d6961f415b0826be75dd77999459583da320419e)) +* warning on large dot files, hot dropdown style fix ([eb17798](https://gitlab.com/macropeople/dcfrontend/commit/eb177984387368af1d2454f20b73a6720e3cc040)) + +## [3.11.0](https://gitlab.com/macropeople/dcfrontend/compare/v3.10.0...v3.11.0) (2021-02-14) + + +### Features + +* Adding DC_LOCALE option - will override locale when set to anything other than SYSTEM. Closes [#237](https://gitlab.com/macropeople/dcfrontend/issues/237) ([419f022](https://gitlab.com/macropeople/dcfrontend/commit/419f022fd13e466058d2de017e85a8a9205400e1)) +* dragging file over table opens drop dialog ([9d8ecc8](https://gitlab.com/macropeople/dcfrontend/commit/9d8ecc8a87ed5367c1cabc28b3d7c1e5a5ed66f7)) +* enabling column level lineage to 'pass through' proc transpose ([66c911e](https://gitlab.com/macropeople/dcfrontend/commit/66c911ea96e97f573d2834bdb2a65755e65a145c)) +* enabling native REDSHIFT access with incremental loads ([1532305](https://gitlab.com/macropeople/dcfrontend/commit/15323052086b13b2a57dd4e0b43bfe76ac47ff03)) +* extra validations for MPE_TABLES cols (upcase for VAR_TXFROM, VAR_TXTO, VAR_BUSFROM, VAR_BUSTO and VAR_PROCESSED) ([5cd3434](https://gitlab.com/macropeople/dcfrontend/commit/5cd34345ecc992ea3401d1f590837b3fa9c9ec46)) +* rows number thousand separator (space) ([3644f35](https://gitlab.com/macropeople/dcfrontend/commit/3644f3502f92b87d91fc0b1f3b4c1a3758247ff9)) +* **licensing:** 2 more tests added for no of users reached/exceeded ([d615eea](https://gitlab.com/macropeople/dcfrontend/commit/d615eea5f2683b6384537cc164d33c9fda941197)) +* **licensing:** activation logic added, refactor of terms agreement, license events interconnected ([89f20ae](https://gitlab.com/macropeople/dcfrontend/commit/89f20ae9bc115f721d92828e0d386dc162a8d6bc)) +* **licensing:** added site_id check, added more error handling for decrypt function ([c54074c](https://gitlab.com/macropeople/dcfrontend/commit/c54074c5330e6fe720b68ddb21db2c0296857792)) +* **licensing:** fixes ([acbc326](https://gitlab.com/macropeople/dcfrontend/commit/acbc3269aa9b3f4554c22509f1d6e0a69ec9f366)) +* **licensing:** fixes ([eea2c96](https://gitlab.com/macropeople/dcfrontend/commit/eea2c96204a6232581eba6d44ff3da1987b3ea9a)) +* **licensing:** licensing/update path to update the license key, when app is activated ([7145150](https://gitlab.com/macropeople/dcfrontend/commit/71451505f7d8509e9cd174fd6168621bb726b944)) +* **licensing:** register key function ([ccf8e50](https://gitlab.com/macropeople/dcfrontend/commit/ccf8e50ba169851e15e1aef3527ebff27b97b6cc)) +* added colored logs in console for matching errors with tests ([2e55a59](https://gitlab.com/macropeople/dcfrontend/commit/2e55a59dde805c5b8eb173af052dc0d20d7e33d2)) +* admin/registerkey service. Expects an input table called keyupload, with 2 variables - activation_key and licence_key ([3bad92f](https://gitlab.com/macropeople/dcfrontend/commit/3bad92fdf7a5dca3111ca77a701ccfdb5a3c0319)) +* auto deploy improvements ([d290a96](https://gitlab.com/macropeople/dcfrontend/commit/d290a962cd03c70d1efbd69a5dbf5fb2a03aebe3)) +* backend service registration code@ ([e1c7ac8](https://gitlab.com/macropeople/dcfrontend/commit/e1c7ac86165080da4097ea40fffebdb0c3910518)) +* creating context for auto deploy ([6811828](https://gitlab.com/macropeople/dcfrontend/commit/6811828e9b12af2923a79822d701184e142ac8a4)) +* cypress UI testing, started ([8ef54c4](https://gitlab.com/macropeople/dcfrontend/commit/8ef54c43e570bea355c4f84bbc346dc328826ebb)) +* deploying services as part of CI ([e981ec0](https://gitlab.com/macropeople/dcfrontend/commit/e981ec04aaa4ac998eb1c207da5e20e9ff3dcbb5)) +* excel file discard button and UX fixes ([91f4dc3](https://gitlab.com/macropeople/dcfrontend/commit/91f4dc3c2551e35b73342ab685c2b14dafb0681d)) +* handling the service not found error ([402e4ec](https://gitlab.com/macropeople/dcfrontend/commit/402e4ec1bc950f795a1c8251c973b85d07461580)) +* licensing and user registration ([0f9e114](https://gitlab.com/macropeople/dcfrontend/commit/0f9e114080e4f5e09487f4144f24cbafc05df1b3)) +* licensing proof of concept ([80a7ebe](https://gitlab.com/macropeople/dcfrontend/commit/80a7ebe3acc9241b53c42fd3c640585b1061abe5)) +* push on dfevelopment deploy SAS services ([6815ab8](https://gitlab.com/macropeople/dcfrontend/commit/6815ab8961615ef5263ebbc200d84b354433f856)) +* regular excel upload test ([a07c739](https://gitlab.com/macropeople/dcfrontend/commit/a07c7395e2aded774632dd55f0f8a3c40e88b488)) +* requests modal on autodeploy ([62bc1bd](https://gitlab.com/macropeople/dcfrontend/commit/62bc1bd9d8304e74d3bc9cf03f747cbbab907082)) +* updating context with makedata response ([cf9109a](https://gitlab.com/macropeople/dcfrontend/commit/cf9109a0a3f2e6062f28aa858f4ac8b6f3873d67)) +* user registartion. Fixed demo expiry on production issue. Added evaluation agreement. ([a42fcc1](https://gitlab.com/macropeople/dcfrontend/commit/a42fcc15035f74861fa777603734e0ccdca40be7)) + + +### Bug Fixes + +* `trim` error when chaning values in filter while variable not set ([a8019ce](https://gitlab.com/macropeople/dcfrontend/commit/a8019cee5f957573b54932c5d926af6f8006ab5c)) +* abortModal not working, hashing disabled (it was bloating the server), testing fixes ([9f7aa8f](https://gitlab.com/macropeople/dcfrontend/commit/9f7aa8fb84fba86be174df62f5140257bf03a648)) +* activation key in startup service ([4fe5d53](https://gitlab.com/macropeople/dcfrontend/commit/4fe5d53ac8e821657fdb0efd1c757c9480eec3e6)) +* add dependency@ ([5127159](https://gitlab.com/macropeople/dcfrontend/commit/51271596bb9de8fe449091647533607982e4d031)) +* added contextname to viewer download ([f1d9c35](https://gitlab.com/macropeople/dcfrontend/commit/f1d9c35925c30b3bec773df19a1161b670c21fcf)) +* adding editors to history, closes ([c464ee8](https://gitlab.com/macropeople/dcfrontend/commit/c464ee86d0581ada4ae0f11a85ff413dacef9d04)), closes [#233](https://gitlab.com/macropeople/dcfrontend/issues/233) +* adding engine ([0309dfa](https://gitlab.com/macropeople/dcfrontend/commit/0309dfa63c377d8f9e7602f1dcbb83a4424df70f)) +* adding licencekey to startupservice ([83b21c9](https://gitlab.com/macropeople/dcfrontend/commit/83b21c93d7fdcf44966c4f67364a5994bd678e7d)) +* adding reason message to emails ([48dfb43](https://gitlab.com/macropeople/dcfrontend/commit/48dfb4370dfdbbab3dfd9e903cf99d8b4b7cea0c)) +* alignemnt button not applying changes ([af7cbda](https://gitlab.com/macropeople/dcfrontend/commit/af7cbda41bff4e9564c466a5b73478dbd6e8a38d)) +* app crashes if activationkey is invalid string ([e1dacd8](https://gitlab.com/macropeople/dcfrontend/commit/e1dacd81d3ac4edbe8d1c796bb8165654cc54dd2)) +* appLoc check before running startupservice ([802b178](https://gitlab.com/macropeople/dcfrontend/commit/802b17893e36e228210199d9229b8b65a9f25884)) +* approver name ([8b79eee](https://gitlab.com/macropeople/dcfrontend/commit/8b79eeee1c235cdf93cb6dbc1eeb65eaada1c2e6)) +* bitemporal loader error (causing lock to be left behind) ([8a53226](https://gitlab.com/macropeople/dcfrontend/commit/8a53226dadd273b7ba9620ac2f03c00c76f1264c)) +* bump sasjs/core ([4d76965](https://gitlab.com/macropeople/dcfrontend/commit/4d76965ea0126d5701fe6a5d5afd3ce8940d4cc6)) +* cannot change column width while filtering ([7672561](https://gitlab.com/macropeople/dcfrontend/commit/767256128d3e7c2441741d749d401956459e2b11)) +* catchphrase fixed ([c5af7a5](https://gitlab.com/macropeople/dcfrontend/commit/c5af7a505331c65128a4b98f87372f9c3039f357)) +* checks for approval, closes [#234](https://gitlab.com/macropeople/dcfrontend/issues/234) ([4f995ff](https://gitlab.com/macropeople/dcfrontend/commit/4f995ffcfc9700add88ac9ac787b37eb9ed1d702)) +* CI script updated to work with newest CLI ([f336ee6](https://gitlab.com/macropeople/dcfrontend/commit/f336ee6c22a93930c509c9c0bb829d1282f9870e)) +* cli v2 ci script, refresh viewer table, autofocus tree search for libraries, apply keys redirection wrong ([049e872](https://gitlab.com/macropeople/dcfrontend/commit/049e87214beb559c5deadb25669fc34ca7237922)) +* col names, debugging, and ddl file ([5876d22](https://gitlab.com/macropeople/dcfrontend/commit/5876d22348b1b8ff3d3e344b85f25aee9c3dd811)) +* config ([08d6be5](https://gitlab.com/macropeople/dcfrontend/commit/08d6be53ac7d900b2ae08bc084b75c2bbf393a2e)) +* config update ([b2e5e01](https://gitlab.com/macropeople/dcfrontend/commit/b2e5e01eabc898056d659eb683fa2820b940eda5)) +* converting uploaded data to correct types ([ce7b6d7](https://gitlab.com/macropeople/dcfrontend/commit/ce7b6d7cd2c3e67c70d772f1e69891f7961fd992)) +* copying primary key field with dragging ([7105a7a](https://gitlab.com/macropeople/dcfrontend/commit/7105a7a0b4b86072466696a50f7f5e3f3d9b4a1d)) +* cypress new clarity and angular elements getter fix ([15540db](https://gitlab.com/macropeople/dcfrontend/commit/15540dbba1c8059c483857722c66fd11517945b1)) +* ddtype field for [#231](https://gitlab.com/macropeople/dcfrontend/issues/231) ([90ae7f5](https://gitlab.com/macropeople/dcfrontend/commit/90ae7f5c4abaae55f90257d7f14698fcdea114f9)) +* ddtype, [#231](https://gitlab.com/macropeople/dcfrontend/issues/231) ([c4d32b8](https://gitlab.com/macropeople/dcfrontend/commit/c4d32b8059abe89c8f35815fc90d1aa6c12ab8df)) +* delete this record ordering ([cacbf46](https://gitlab.com/macropeople/dcfrontend/commit/cacbf4612908bf06d490adc05d971f3bb2fcaf5e)) +* deploy db recreate checkbox and UI fixes ([fd6a13a](https://gitlab.com/macropeople/dcfrontend/commit/fd6a13a6e837315beed789155322a0451806a881)) +* deploy error handling improved ([e681d9a](https://gitlab.com/macropeople/dcfrontend/commit/e681d9a82b138fcfd8ad2478955ebcf8266ae3c0)) +* deploy makedata use original web approach ([dff12bd](https://gitlab.com/macropeople/dcfrontend/commit/dff12bda82ddd37a331245600c978c0605445d6c)) +* deploy testing and key generator ([9a0ce35](https://gitlab.com/macropeople/dcfrontend/commit/9a0ce355edc6b2a50f8e39a84f01d78977f81efb)) +* disable accept/reject buttons if user is not approver ([8971999](https://gitlab.com/macropeople/dcfrontend/commit/8971999f5c9a788b588a65b606c216385f213127)) +* disable deploy button if json file not present ([a93736a](https://gitlab.com/macropeople/dcfrontend/commit/a93736a15cca6507a7a0f726ebc51e3e4e8f536c)) +* duplicate keys, removing duplicated indexes ([3c2dccf](https://gitlab.com/macropeople/dcfrontend/commit/3c2dccf4d9283bb19bb83845f003a7b5f5e53e98)) +* duplicate primary keys modal improvements ([a68e2d6](https://gitlab.com/macropeople/dcfrontend/commit/a68e2d6334657367c2d75c9e9de18c7a3bfb3226)) +* empty object error ([ec90456](https://gitlab.com/macropeople/dcfrontend/commit/ec90456859ce432e775eb83bab2acdc6eb4bae38)) +* empty table in EDIT menu not shown ([b2ca2c6](https://gitlab.com/macropeople/dcfrontend/commit/b2ca2c6b09f45a6fc2b88c4e0da5cd5080df2344)) +* empty table upload ([4a5204e](https://gitlab.com/macropeople/dcfrontend/commit/4a5204ee0f807e6607286820e11ee436c2403a0b)) +* error message when no root folder available ([e3ec4f9](https://gitlab.com/macropeople/dcfrontend/commit/e3ec4f99eed8ae6569cb8967750d79bc239b48a3)) +* error when createing data dictionary in viya ([6deb93d](https://gitlab.com/macropeople/dcfrontend/commit/6deb93d2faa5db2f9458d1066d60da3cba2ec400)) +* excel time exponential value ([4b16c93](https://gitlab.com/macropeople/dcfrontend/commit/4b16c937305beef553b8bb7269590ed64d9d10ce)) +* excel upload with no data rows (js error was triggered, uncaught) ([cdc8784](https://gitlab.com/macropeople/dcfrontend/commit/cdc8784d1886562caa112cec6d2df106bfc7e737)) +* exist typo ([2b13d75](https://gitlab.com/macropeople/dcfrontend/commit/2b13d75022c1d402600d8b39888fdf1f4c5adca6)) +* extended test on both viya and v9. CI separated viya and v9 test jobs ([d41ff50](https://gitlab.com/macropeople/dcfrontend/commit/d41ff508a7d69b2fa5f59a845293a2a4dd52750e)) +* filter operators not in sync with selected variable ([9e714ab](https://gitlab.com/macropeople/dcfrontend/commit/9e714abc1c9bd1f75f31bc17f9ac77d3d389ada6)) +* filtering modal datepicker (in progress) ([3f1b4a2](https://gitlab.com/macropeople/dcfrontend/commit/3f1b4a25bf9d95035073fd91df552f09ed34ad93)) +* handling of getdata error in response from SAS. Fixed abort modal style. ([e4c8cc6](https://gitlab.com/macropeople/dcfrontend/commit/e4c8cc647886c1609ae88a1b48a1eae8d3fe9b0e)) +* handling trailing slash in dcPath ([8808227](https://gitlab.com/macropeople/dcfrontend/commit/880822744407e0a52b690bee28d3d2188017ab5a)) +* hans-jeurgen processed issue ([2f4e5da](https://gitlab.com/macropeople/dcfrontend/commit/2f4e5da9b5f1df08b71813a6664b562883cb2a04)) +* hot dropdown has no arrow ([b9ead6a](https://gitlab.com/macropeople/dcfrontend/commit/b9ead6af4502a5158f363cf6b23a46db5a82a211)) +* if logged out in filter view, cannot log in ([4d682d3](https://gitlab.com/macropeople/dcfrontend/commit/4d682d38f2f2c2cee18d70976c08b9db9142228c)) +* improved upload and submit UX ([e6156dc](https://gitlab.com/macropeople/dcfrontend/commit/e6156dc55bb58bb56c0b84338267d827f6fd0f29)) +* improved UX, search dropdown of variable ([7a7504b](https://gitlab.com/macropeople/dcfrontend/commit/7a7504bac030f208111f76255eac3a27dc7cef8c)) +* keep list ([1527248](https://gitlab.com/macropeople/dcfrontend/commit/1527248167bdb110bbf9f848590972d71fab0250)) +* layout issue, in/not in filter checking errors ([d68b342](https://gitlab.com/macropeople/dcfrontend/commit/d68b342fcba3d89c15ff431339f6901e01823319)) +* length ([48dfd3f](https://gitlab.com/macropeople/dcfrontend/commit/48dfd3f86c63b18e58fb12e6a6c1b00e063c3732)) +* length issue ([37c39cf](https://gitlab.com/macropeople/dcfrontend/commit/37c39cf99c9e82058bcf3d2e37bb8bc5ed6040ad)) +* lineage issues ([b4b1680](https://gitlab.com/macropeople/dcfrontend/commit/b4b16801afbe99814732b02c734741ed1826a9a7)) +* liveness test requires submitting table to pass ([1b43a63](https://gitlab.com/macropeople/dcfrontend/commit/1b43a6394848000705ba532cf4e3d7cf7ecccfbd)) +* makeData error detect ([b977b2a](https://gitlab.com/macropeople/dcfrontend/commit/b977b2a5c2659ab9fcfb6b0dd793571eb5a7b6e0)) +* migration for incorrect datetime format ([8aefd1b](https://gitlab.com/macropeople/dcfrontend/commit/8aefd1b74ddfaba21b773259afa9ccf293597dd4)) +* missing value ([2c69aad](https://gitlab.com/macropeople/dcfrontend/commit/2c69aad426ae4081cd1b751aa1eda8db474f6a65)) +* older versions of edge licensing ([d1eea5c](https://gitlab.com/macropeople/dcfrontend/commit/d1eea5c66e816080fe2ae342838f48594d7cab74)) +* optional viya call ([8e1537e](https://gitlab.com/macropeople/dcfrontend/commit/8e1537e24edbcac1795608197987807446b27ec1)) +* pages are getting wrong details on pagination ([615af15](https://gitlab.com/macropeople/dcfrontend/commit/615af159bd1f5e1efbfb7514362392e1e26d135e)) +* processed_dttm was not dynamic ([04d17eb](https://gitlab.com/macropeople/dcfrontend/commit/04d17eb348bbcb2321bb840fd04f54f0261a5868)) +* refreshcatalog ([eae6bfd](https://gitlab.com/macropeople/dcfrontend/commit/eae6bfdfedfde33dd18d9723eb2c1e78ce0665cb)) +* removing old package to remove npm warning ([bc99db0](https://gitlab.com/macropeople/dcfrontend/commit/bc99db0bb9b36d276da7cd670ffd814714c1a44c)) +* removing tabs ([4742842](https://gitlab.com/macropeople/dcfrontend/commit/47428423cd6746257f3ce1e11a63a68222639b20)) +* renegade %end ([a4a74ac](https://gitlab.com/macropeople/dcfrontend/commit/a4a74ac54c1483da4e33d26a5eedab679d844b03)) +* replace dependencies with sas macros in header ([3acd92b](https://gitlab.com/macropeople/dcfrontend/commit/3acd92b236055fc936638fc399b1b2dda7e727dd)) +* requests modal not working if server error ([cdcd578](https://gitlab.com/macropeople/dcfrontend/commit/cdcd5781f1c5a9a8cd72e167f47d36f848ad38a3)) +* return from service ([4d9a8e5](https://gitlab.com/macropeople/dcfrontend/commit/4d9a8e55b08463e82fe343f6b41fae0b4a3291c7)) +* rows separator is comma ([060ed48](https://gitlab.com/macropeople/dcfrontend/commit/060ed484a2ab10d9d6039a57030c755aed43ee9b)) +* rxjs imports (production build error) ([83d0859](https://gitlab.com/macropeople/dcfrontend/commit/83d085916326aecfeb0c8329397e2af37a5e370a)) +* sas double slash, new loading bar ([5fe053e](https://gitlab.com/macropeople/dcfrontend/commit/5fe053ecdcbe6e8487f6fe670d50545dffae03a6)) +* sas9 metanav broken ([0503e4b](https://gitlab.com/macropeople/dcfrontend/commit/0503e4b19bd15e3f4f20a2b442576de37238624b)) +* sas9 startupservice not executed ([0914007](https://gitlab.com/macropeople/dcfrontend/commit/09140074f9564b894878fce5f47c89544fd21d58)) +* stage component error handling ([2d9f417](https://gitlab.com/macropeople/dcfrontend/commit/2d9f417913cdf14593292a267f264caadb36036f)) +* startupservice failure handling ([d8c3380](https://gitlab.com/macropeople/dcfrontend/commit/d8c3380b861386c1b5357d40ade549fdb4b0756b)) +* startupservice sasjsAbort catch ([9f30bbe](https://gitlab.com/macropeople/dcfrontend/commit/9f30bbe7b3c4b5d73908fa0329f37f4b0a5230c7)) +* **licensing:** registerkey sasjsAbort fix ([a615e12](https://gitlab.com/macropeople/dcfrontend/commit/a615e12a31a293a36600912623e328b1fe244559)) +* **tests:** licensing test fixed unstable behavior ([011fcb6](https://gitlab.com/macropeople/dcfrontend/commit/011fcb662c92a7ee8a8ecf09c540d45e95432785)) +* **tests:** licensing tests shifted all to quickKey update ([6cc0128](https://gitlab.com/macropeople/dcfrontend/commit/6cc01281d6f5b957904a5e341be2eb2d88c2bbdb)) +* Subject not constructor error ([e22afc7](https://gitlab.com/macropeople/dcfrontend/commit/e22afc72ac190f28385d709a062a7d98be34103b)) +* surrounded data excel upload ([612729b](https://gitlab.com/macropeople/dcfrontend/commit/612729b0467c76371de3cd1784af275ef935adbb)) +* switch to new SAS 9 folder ([41ee6c4](https://gitlab.com/macropeople/dcfrontend/commit/41ee6c43f56835f18b72bfef6776e49acce200be)) +* syssite added to licensing page ([009618e](https://gitlab.com/macropeople/dcfrontend/commit/009618e47d6e6a7161bfecfd23e7fb2566d011f0)) +* tests fail when switching between viya and 9 ([c315d40](https://gitlab.com/macropeople/dcfrontend/commit/c315d40890cbf21a3fe6476b548048ac9c23d6cb)) +* typos and length checks ([69beff1](https://gitlab.com/macropeople/dcfrontend/commit/69beff1edd49e51d00cb193c35f460bc9b906425)) +* unable to VIEW tables in der touristik due to lowercase librefs ([945d5ac](https://gitlab.com/macropeople/dcfrontend/commit/945d5ac77e1afad51e139e70f4c315a005124eea)) +* updates to urls to support /services/ in program path ([c978f25](https://gitlab.com/macropeople/dcfrontend/commit/c978f25a29b32360083426d492cd2ee30f1f4595)) +* updating sas9 config ([54ba22d](https://gitlab.com/macropeople/dcfrontend/commit/54ba22dee71947d372a0c936f7dca8b4124b6f4b)) +* uploading video from ci tests ([14868e0](https://gitlab.com/macropeople/dcfrontend/commit/14868e0511606ef39f95ea3c4b861a433ce6f804)) +* user menu dropdown was not closing when you click on hot table area. ([000e39e](https://gitlab.com/macropeople/dcfrontend/commit/000e39ea94388e53dbf971db86dcb8fa244df368)) +* user nav style fix ([2a6af21](https://gitlab.com/macropeople/dcfrontend/commit/2a6af214435c905217d4188123cad08a96df5992)) +* usernav issues ([b4bc47d](https://gitlab.com/macropeople/dcfrontend/commit/b4bc47d31b043acbb4f7a4bd4e675d7f38d11f62)) +* using more robust functions for encoding and decoding base64 ([899ce20](https://gitlab.com/macropeople/dcfrontend/commit/899ce2007c748691271c75f326c5da8161351df5)) +* var_active addition to mpe_config, moving redshift setup there ([35fc30e](https://gitlab.com/macropeople/dcfrontend/commit/35fc30e0a4a65b9c5e5ab12de4bccc1b50d00ef4)) +* viewer if table eixsts undefined ([cbc8cc8](https://gitlab.com/macropeople/dcfrontend/commit/cbc8cc8281cf978722c3213c5138f99a6efae872)) +* viewer library collapse after choosing a table ([84c6cd6](https://gitlab.com/macropeople/dcfrontend/commit/84c6cd65e9dddeec5a807bfc36b55cbbc40b3636)) +* viewer rendering offset is to small ([52985fb](https://gitlab.com/macropeople/dcfrontend/commit/52985fbde43bff97d0d60649bfef02b0b3434831)) +* viewer table search abort modal ([b6388da](https://gitlab.com/macropeople/dcfrontend/commit/b6388da53cce3b3e2fa5267610a4992ea49e5ab8)) +* viewing non lineage tables broken in sas9 ([fee51ed](https://gitlab.com/macropeople/dcfrontend/commit/fee51edcf3167c0649b645cd77bfb772a1b36abc)) +* warning ([0925733](https://gitlab.com/macropeople/dcfrontend/commit/0925733139d417fec36470475486c5af4737f98f)) +* web streaming & deployment for SAS 9 ([3a36280](https://gitlab.com/macropeople/dcfrontend/commit/3a362800cbf17e65fb5da368641a668b4473f086)) +* whereClause display wrap/styling ([cca4c9e](https://gitlab.com/macropeople/dcfrontend/commit/cca4c9e2d0126b5ad98ef1704bd8c94a98a833b9)) +* wording of EULA ([64d9f1c](https://gitlab.com/macropeople/dcfrontend/commit/64d9f1cbb6c5880da332caf8bd4ef4e380262585)) +* **service-paths:** use relative paths without leading slash ([bf0b7c1](https://gitlab.com/macropeople/dcfrontend/commit/bf0b7c115f071255d704b060256914d75d1703ba)) +* **updated:** angular 10, clarity 3, optimized ([5031ed2](https://gitlab.com/macropeople/dcfrontend/commit/5031ed210a3e493f2652db5cb90e0b396923c38d)) + +## [3.10.0](https://gitlab.com/macropeople/dcfrontend/compare/v3.9.0...v3.10.0) (2020-08-18) + + +### Features + +* abort modal complete refactor, removing duplicated code for abort, error handling improved ([3175654](https://gitlab.com/macropeople/dcfrontend/commit/317565491339c5697de2fdce65796920905d711a)) +* adapter compute api integration ([22dad29](https://gitlab.com/macropeople/dcfrontend/commit/22dad297d92ea2e28c2d28db8b721f350058ca8c)) +* added typedoc ([12480c4](https://gitlab.com/macropeople/dcfrontend/commit/12480c410a1dc7a852a468973119a9aa292f53b4)) +* file upload using adapter function ([eb0dea9](https://gitlab.com/macropeople/dcfrontend/commit/eb0dea9fe509439899f2de2c144ddedd56cb88b3)) +* handsontable v8, removed edit icons - contextMenu edit button ([1092e5c](https://gitlab.com/macropeople/dcfrontend/commit/1092e5c51fd50a050b1a5adcf285c5693a14d8b3)) +* jobs error catching ([6c01e03](https://gitlab.com/macropeople/dcfrontend/commit/6c01e033d3c2d788308b545b438450d8da356d87)) +* odd rows different shade ([ed336da](https://gitlab.com/macropeople/dcfrontend/commit/ed336daeaf7459637b321b1c9c4e83921f96720e)) +* pgsql download ([a617d17](https://gitlab.com/macropeople/dcfrontend/commit/a617d1742e4d942f8245eca07b71285f8432a0a9)) +* sasjsAbort uses new abort-modal component ([2bc300b](https://gitlab.com/macropeople/dcfrontend/commit/2bc300b621438b73a5401ee9c2696f263c180047)) +* started catching of adapter response error, showing full log in abort modal ([e781703](https://gitlab.com/macropeople/dcfrontend/commit/e78170324df8573c296463dcb7ddfc9e9df36e3b)) +* viewer lineage linking ([911d0c7](https://gitlab.com/macropeople/dcfrontend/commit/911d0c711481f56af483b82683b62e4bec3b5497)) + + +### Bug Fixes + +* abort modal added syserrortext syswarningtext ([6d6ccaf](https://gitlab.com/macropeople/dcfrontend/commit/6d6ccafe1695f0fe09164c7f701e45658b28ccf2)) +* abort modal customizable title ([c222f55](https://gitlab.com/macropeople/dcfrontend/commit/c222f55cb4f885824f5310d5510e4474acf89981)) +* abort modal styling ([e753d9a](https://gitlab.com/macropeople/dcfrontend/commit/e753d9af0cff0de6ad3972ee414458cfbc60b087)) +* abort modal warning and error text style ([abaaff8](https://gitlab.com/macropeople/dcfrontend/commit/abaaff8df856a643a87692afe375c7f4fc70ff77)) +* abot leftovers in htmls ([8de9713](https://gitlab.com/macropeople/dcfrontend/commit/8de971329894d6e3ed74ebc97b437a957e750d47)) +* add record button, modal loading spinner ([8527df9](https://gitlab.com/macropeople/dcfrontend/commit/8527df9608fbc9c444bf8cce6e0ac5f13cda33ee)) +* adding uri to enable lineage linking ([2b12f8c](https://gitlab.com/macropeople/dcfrontend/commit/2b12f8c559a3ee163e5890e801afedc128be3d9b)) +* appLoc checking ([7141efd](https://gitlab.com/macropeople/dcfrontend/commit/7141efd683c8a067063db3bfb5041b61d04a2105)) +* appLocCheck for viya only ([620b94d](https://gitlab.com/macropeople/dcfrontend/commit/620b94dcedd076e2225f88e4df122d324dc5fbb9)) +* approve page vlaues overlapping ([b1d182d](https://gitlab.com/macropeople/dcfrontend/commit/b1d182d8b1109bdbe27f243ece35ab2a81485607)) +* approvers casing issue ([d4d1112](https://gitlab.com/macropeople/dcfrontend/commit/d4d1112d9480a7a47ba2f25bfea3ef1a19546de9)) +* autoselect/autodocus ([a93bf8d](https://gitlab.com/macropeople/dcfrontend/commit/a93bf8dbd274265edaba48ef30fb2830d7064a65)) +* bump sasjs/core ([5617ced](https://gitlab.com/macropeople/dcfrontend/commit/5617cedd76a6a24b935b9c4e035ceffd88f6fea6)) +* bumping core ([f5fa141](https://gitlab.com/macropeople/dcfrontend/commit/f5fa141efba99088d8ee938e7f4d612b4a287965)) +* contextMenu enabled only on edit ([e8b4d30](https://gitlab.com/macropeople/dcfrontend/commit/e8b4d309fb7667920004cc2b68075d375edaff46)) +* data creation refactor ([fb0e343](https://gitlab.com/macropeople/dcfrontend/commit/fb0e343c345fc4cbb23990bed976f20db651c1e6)) +* demo mode add record button is off screen ([993b1a6](https://gitlab.com/macropeople/dcfrontend/commit/993b1a6c898f83f11fa42c69eafeb5276610c26e)) +* deploy compute api fixes ([2b6e989](https://gitlab.com/macropeople/dcfrontend/commit/2b6e98995f7a02e693580f193ee3e66c01163859)) +* duplicate key pipe ([0116304](https://gitlab.com/macropeople/dcfrontend/commit/0116304aa46cdec4ee1b831968562e5a2f670c2d)) +* edit after invalid submit not applied ([be350d9](https://gitlab.com/macropeople/dcfrontend/commit/be350d9d21ee2180f95ace03e86a21adc55a1557)) +* edit from viewer, submit error ([e0f2d56](https://gitlab.com/macropeople/dcfrontend/commit/e0f2d567245cfb6b9722e0cc4ba24fbcf7dca3ae)) +* enabling makedata to run both as url and request format ([5989992](https://gitlab.com/macropeople/dcfrontend/commit/59899921a8279ef2fedf24b5f9a20e9f4a399c91)) +* excel submit, UX fixes ([5de9c1d](https://gitlab.com/macropeople/dcfrontend/commit/5de9c1d105fc6a4540c5a33400a77a79c78fe6f0)) +* home component cleanup ([9416f75](https://gitlab.com/macropeople/dcfrontend/commit/9416f75d85a1a384ec2eab8a90647b3ef839c931)) +* lineage download full graph ([4d8d10b](https://gitlab.com/macropeople/dcfrontend/commit/4d8d10b99321b6de5e41a4371bffb38e6a6a1d0e)) +* loading spinner on submit ([6adc797](https://gitlab.com/macropeople/dcfrontend/commit/6adc79795d3a155e2e0013d55db7a3ac946bb05b)) +* makedata seperation ([32f9cd6](https://gitlab.com/macropeople/dcfrontend/commit/32f9cd6826c3ca87c40b31e3456d848eae24620f)) +* missing dependency ([f5debd8](https://gitlab.com/macropeople/dcfrontend/commit/f5debd86ba67328f232486977fe5aa8ae537c69d)) +* model updates and build environment updates ([528ed9c](https://gitlab.com/macropeople/dcfrontend/commit/528ed9ce19830300c49d4ca6fc9bb662b6a282dc)) +* no editable tables configured ([7e344df](https://gitlab.com/macropeople/dcfrontend/commit/7e344df7f6a3ab52bca9934c975f1da75e845a3e)) +* options button styling, sasjs adapter & core bumps, excel export fix ([2752c5d](https://gitlab.com/macropeople/dcfrontend/commit/2752c5da44a7d994a4099177c768c92562b8e25d)) +* record modal linking UX ([94981cf](https://gitlab.com/macropeople/dcfrontend/commit/94981cf2abc1541c017aea0192ca1a5ff87745a8)) +* Remove the auto-hide of the sidebar above a certain screen size ([d841ec6](https://gitlab.com/macropeople/dcfrontend/commit/d841ec6839d44e34014252fb9ca605d79e8ec88d)) +* table sizing when no demo banner present ([e00533d](https://gitlab.com/macropeople/dcfrontend/commit/e00533d35f9dca2a9ecdb13eade7467245f52f56)) +* to avoid circular reference ([c715aed](https://gitlab.com/macropeople/dcfrontend/commit/c715aedecf7e1326ed65260bcf7cc363e7d54125)) +* uploader multiple files ([35e6cfd](https://gitlab.com/macropeople/dcfrontend/commit/35e6cfd84fb96bbdc919268495af00eb20160ba3)) +* viewer options icon gap ([2d7199b](https://gitlab.com/macropeople/dcfrontend/commit/2d7199b82a63b82e04a9e0e7e2dc7427337a6d21)) +* web query url ([ed85e0b](https://gitlab.com/macropeople/dcfrontend/commit/ed85e0ba06f5dd89a4ffbb3e31d7036fcfaa5fca)) + + +# [3.9.0](https://gitlab.com/macropeople/dcfrontend/compare/v3.8.0...v3.9.0) (2020-07-14) + + +### Bug Fixes + +* deployServicePack removed ([01e3473](https://gitlab.com/macropeople/dcfrontend/commit/01e3473)) +* _program conflict ([50dfa2b](https://gitlab.com/macropeople/dcfrontend/commit/50dfa2b)) +* adapting to sasjs, removed token functions ([706eb3a](https://gitlab.com/macropeople/dcfrontend/commit/706eb3a)) +* adding maxlen ([a1a36e4](https://gitlab.com/macropeople/dcfrontend/commit/a1a36e4)) +* adding seperator ([d262685](https://gitlab.com/macropeople/dcfrontend/commit/d262685)) +* autodeploy infos p instead of input ([fab1294](https://gitlab.com/macropeople/dcfrontend/commit/fab1294)) +* bump macrocore, default value for _program ([f3d3e5e](https://gitlab.com/macropeople/dcfrontend/commit/f3d3e5e)) +* bump MC and enable public services ([5319005](https://gitlab.com/macropeople/dcfrontend/commit/5319005)) +* bump sasjs ([582c9e3](https://gitlab.com/macropeople/dcfrontend/commit/582c9e3)) +* bump sasjs ([4b5a167](https://gitlab.com/macropeople/dcfrontend/commit/4b5a167)) +* bumping sasjs and missing puri in lineage generator ([5f25bd6](https://gitlab.com/macropeople/dcfrontend/commit/5f25bd6)) +* clicking icon in viewer menu does not expand menu ([3941635](https://gitlab.com/macropeople/dcfrontend/commit/3941635)) +* client token removal ([af14883](https://gitlab.com/macropeople/dcfrontend/commit/af14883)) +* data model update ([13a53f1](https://gitlab.com/macropeople/dcfrontend/commit/13a53f1)) +* dcpath in deploy ([a157f05](https://gitlab.com/macropeople/dcfrontend/commit/a157f05)) +* demo expired styling ([61336b0](https://gitlab.com/macropeople/dcfrontend/commit/61336b0)) +* deploy and token imporvements ([9d05839](https://gitlab.com/macropeople/dcfrontend/commit/9d05839)) +* deploy buttons position ([b06ad5d](https://gitlab.com/macropeople/dcfrontend/commit/b06ad5d)) +* deploy defaults set ([a074787](https://gitlab.com/macropeople/dcfrontend/commit/a074787)) +* deploy navigate to home ([17ed9b0](https://gitlab.com/macropeople/dcfrontend/commit/17ed9b0)) +* deploy page fixes ([3f7419f](https://gitlab.com/macropeople/dcfrontend/commit/3f7419f)) +* deploy removed client and secret, debug was not switched on ([09475f2](https://gitlab.com/macropeople/dcfrontend/commit/09475f2)) +* deploy updates ([43083b4](https://gitlab.com/macropeople/dcfrontend/commit/43083b4)) +* dynamic build of getviyaclient ([21e7b9c](https://gitlab.com/macropeople/dcfrontend/commit/21e7b9c)) +* edit table styling issue ([d408a60](https://gitlab.com/macropeople/dcfrontend/commit/d408a60)) +* editor title link ([a7edd3c](https://gitlab.com/macropeople/dcfrontend/commit/a7edd3c)) +* expired token shows login page ([d1ad578](https://gitlab.com/macropeople/dcfrontend/commit/d1ad578)) +* filter issues ([ccf9ea8](https://gitlab.com/macropeople/dcfrontend/commit/ccf9ea8)) +* forbid unchanged submit ([0ec1c52](https://gitlab.com/macropeople/dcfrontend/commit/0ec1c52)) +* get all contexts, deploy ([dae7ee1](https://gitlab.com/macropeople/dcfrontend/commit/dae7ee1)) +* get executable contexts on deploy page ([d51c0d0](https://gitlab.com/macropeople/dcfrontend/commit/d51c0d0)) +* header invisible when demo banner removed ([7216154](https://gitlab.com/macropeople/dcfrontend/commit/7216154)) +* hide demo banner when license key present ([634e14e](https://gitlab.com/macropeople/dcfrontend/commit/634e14e)) +* hitting accept before diff load causes error ([dbc9fbd](https://gitlab.com/macropeople/dcfrontend/commit/dbc9fbd)) +* jobs type in idlookup ([3a138c6](https://gitlab.com/macropeople/dcfrontend/commit/3a138c6)) +* lineage column level linking ([bf04597](https://gitlab.com/macropeople/dcfrontend/commit/bf04597)) +* lineage is depending only on 'fetchlineage' service, not any other ([6631fd9](https://gitlab.com/macropeople/dcfrontend/commit/6631fd9)) +* lineage libraryid of undefined, cases covered ([f44b75a](https://gitlab.com/macropeople/dcfrontend/commit/f44b75a)) +* lineage multiple requests ([45350a0](https://gitlab.com/macropeople/dcfrontend/commit/45350a0)) +* lineage table url access fix ([ffb2477](https://gitlab.com/macropeople/dcfrontend/commit/ffb2477)) +* macro invoke ([f9b91dc](https://gitlab.com/macropeople/dcfrontend/commit/f9b91dc)) +* macrocore ([50bd41b](https://gitlab.com/macropeople/dcfrontend/commit/50bd41b)) +* macrocore bump ([778a891](https://gitlab.com/macropeople/dcfrontend/commit/778a891)) +* makedata ([773a62b](https://gitlab.com/macropeople/dcfrontend/commit/773a62b)) +* makedata updates ([2a6d6ae](https://gitlab.com/macropeople/dcfrontend/commit/2a6d6ae)) +* metadata name from response ([642428c](https://gitlab.com/macropeople/dcfrontend/commit/642428c)) +* metadata object name when linking ([62b6b6c](https://gitlab.com/macropeople/dcfrontend/commit/62b6b6c)) +* metadata objectName param ignore ([56cfa9e](https://gitlab.com/macropeople/dcfrontend/commit/56cfa9e)) +* migration for mpe_datadictionary ([b6a5edc](https://gitlab.com/macropeople/dcfrontend/commit/b6a5edc)) +* more rendered rows, undefined celValidation ([43111bb](https://gitlab.com/macropeople/dcfrontend/commit/43111bb)) +* pk duplicate check, removed cellValidtion on frontend ([6871191](https://gitlab.com/macropeople/dcfrontend/commit/6871191)) +* pk dups check on first submit ([6e41613](https://gitlab.com/macropeople/dcfrontend/commit/6e41613)) +* pk issue ([58e727b](https://gitlab.com/macropeople/dcfrontend/commit/58e727b)) +* predefined colWidths ([98bb6e6](https://gitlab.com/macropeople/dcfrontend/commit/98bb6e6)) +* refresh service ([6d1d489](https://gitlab.com/macropeople/dcfrontend/commit/6d1d489)) +* removing 'error:' string ([049d04a](https://gitlab.com/macropeople/dcfrontend/commit/049d04a)) +* removing access tokens ([9031e9a](https://gitlab.com/macropeople/dcfrontend/commit/9031e9a)) +* removing caslib assignment ([53396bb](https://gitlab.com/macropeople/dcfrontend/commit/53396bb)) +* removing session table ([e50c996](https://gitlab.com/macropeople/dcfrontend/commit/e50c996)) +* search data bug in viya ([3c54cbc](https://gitlab.com/macropeople/dcfrontend/commit/3c54cbc)) +* siemens issues (lineage, exporter) ([7eed379](https://gitlab.com/macropeople/dcfrontend/commit/7eed379)) +* sorting is lost after clicking edit/cancel edit ([65ef697](https://gitlab.com/macropeople/dcfrontend/commit/65ef697)) +* startupservice ([367a194](https://gitlab.com/macropeople/dcfrontend/commit/367a194)) +* startupservice abort in console log ([9a5e10f](https://gitlab.com/macropeople/dcfrontend/commit/9a5e10f)) +* styling and manual deploy ([d683a70](https://gitlab.com/macropeople/dcfrontend/commit/d683a70)) +* styling, admin groups limit and sort ([6c3bcad](https://gitlab.com/macropeople/dcfrontend/commit/6c3bcad)) +* submit after error ([8949021](https://gitlab.com/macropeople/dcfrontend/commit/8949021)) +* submit without changes modal ([04998e3](https://gitlab.com/macropeople/dcfrontend/commit/04998e3)) +* syscc to 0 on startup ([145866a](https://gitlab.com/macropeople/dcfrontend/commit/145866a)) +* table update ([69a6e70](https://gitlab.com/macropeople/dcfrontend/commit/69a6e70)) +* test ([bb01cd9](https://gitlab.com/macropeople/dcfrontend/commit/bb01cd9)) +* token expiration ([1e5fb39](https://gitlab.com/macropeople/dcfrontend/commit/1e5fb39)) +* tokenauth management ([20ae61d](https://gitlab.com/macropeople/dcfrontend/commit/20ae61d)) +* unable to edit and dropdown blank ([06f4aae](https://gitlab.com/macropeople/dcfrontend/commit/06f4aae)) +* validate primary keys, editor performance ([aa66cbc](https://gitlab.com/macropeople/dcfrontend/commit/aa66cbc)) +* viya auth rebuild ([f74a4da](https://gitlab.com/macropeople/dcfrontend/commit/f74a4da)) +* viya fixes ([24c6603](https://gitlab.com/macropeople/dcfrontend/commit/24c6603)) +* viya token global ([4b597f1](https://gitlab.com/macropeople/dcfrontend/commit/4b597f1)) +* viya usernav with RESTApis ([7e12bd5](https://gitlab.com/macropeople/dcfrontend/commit/7e12bd5)) +* viyainstall ([3384ee8](https://gitlab.com/macropeople/dcfrontend/commit/3384ee8)) + + +### Features + +* authentication process update ([045d6a2](https://gitlab.com/macropeople/dcfrontend/commit/045d6a2)) +* auto deploy for viya, appLoc exist check ([c4466b3](https://gitlab.com/macropeople/dcfrontend/commit/c4466b3)) +* auto deploy if startupservice not present ([635e58a](https://gitlab.com/macropeople/dcfrontend/commit/635e58a)) +* auto include sasbuild/viya.json from dist folder ([ea5f5c0](https://gitlab.com/macropeople/dcfrontend/commit/ea5f5c0)) +* dcdeploy, creating database ([f17919d](https://gitlab.com/macropeople/dcfrontend/commit/f17919d)) +* deploy page collapsable and improvements ([e6fc907](https://gitlab.com/macropeople/dcfrontend/commit/e6fc907)) +* deploy page json upload ([4bca65d](https://gitlab.com/macropeople/dcfrontend/commit/4bca65d)) +* deploy page with presistent keys ([078ff27](https://gitlab.com/macropeople/dcfrontend/commit/078ff27)) +* deployEnabled switch, removed buttons on deploy page ([36f2e5f](https://gitlab.com/macropeople/dcfrontend/commit/36f2e5f)) +* file uplaod with token, synced with formdata token ([e67a841](https://gitlab.com/macropeople/dcfrontend/commit/e67a841)) +* lineage svg linking ([e64c840](https://gitlab.com/macropeople/dcfrontend/commit/e64c840)) +* usernav shift to RESTApis ([b70091e](https://gitlab.com/macropeople/dcfrontend/commit/b70091e)) +* validate rows, pk duplicates in modal ([98ad374](https://gitlab.com/macropeople/dcfrontend/commit/98ad374)) +* viya deploy page ([8f058d1](https://gitlab.com/macropeople/dcfrontend/commit/8f058d1)) +* viya deploy without client & access_token ([f8c3bc5](https://gitlab.com/macropeople/dcfrontend/commit/f8c3bc5)) +* viya including access token ([2d4a91f](https://gitlab.com/macropeople/dcfrontend/commit/2d4a91f)) + + + + +# [3.8.0](https://gitlab.com/macropeople/dcfrontend/compare/v3.7.0...v3.8.0) (2020-05-31) + + +### Bug Fixes + +* add record url rewrite ([8ab80e8](https://gitlab.com/macropeople/dcfrontend/commit/8ab80e8)) +* finishing up TableLineage ([ff600aa](https://gitlab.com/macropeople/dcfrontend/commit/ff600aa)) +* table lineage and post service macro append ([cee486e](https://gitlab.com/macropeople/dcfrontend/commit/cee486e)) +* **lineage table:** libref and table name ([f87cf6b](https://gitlab.com/macropeople/dcfrontend/commit/f87cf6b)) +* **table lineage:** csv download, table name ([e4580be](https://gitlab.com/macropeople/dcfrontend/commit/e4580be)) +* metadataRoot to appLoc ([d437a6f](https://gitlab.com/macropeople/dcfrontend/commit/d437a6f)) +* moment import ([718df90](https://gitlab.com/macropeople/dcfrontend/commit/718df90)) +* using sasjs vars in viya build ([bd790b6](https://gitlab.com/macropeople/dcfrontend/commit/bd790b6)) + + +### Features + +* varchar support in Viya ([c954f65](https://gitlab.com/macropeople/dcfrontend/commit/c954f65)) +* **lineage table:** title link to viewer ([2726d09](https://gitlab.com/macropeople/dcfrontend/commit/2726d09)) +* table level lineage ([54f7731](https://gitlab.com/macropeople/dcfrontend/commit/54f7731)) +* Table Level Lineage ([01256a9](https://gitlab.com/macropeople/dcfrontend/commit/01256a9)) + + + + +# [3.7.0](https://gitlab.com/macropeople/dcfrontend/compare/v3.6.0...v3.7.0) (2020-05-22) + + +### Bug Fixes + +* ensuring _debug is always present ([299a78d](https://gitlab.com/macropeople/dcfrontend/commit/299a78d)) +* file upload debug param, staged data download package button ([3b62a5c](https://gitlab.com/macropeople/dcfrontend/commit/3b62a5c)) +* secret path ([c628553](https://gitlab.com/macropeople/dcfrontend/commit/c628553)) + + +### Features + +* download lineage as png ([0f2af40](https://gitlab.com/macropeople/dcfrontend/commit/0f2af40)) + + + + +# [3.6.0](https://gitlab.com/macropeople/dcfrontend/compare/v3.5.0...v3.6.0) (2020-05-20) + + +### Bug Fixes + +* disable filter when editing table ([d411f9a](https://gitlab.com/macropeople/dcfrontend/commit/d411f9a)) + + +### Features + +* edit number of rows ([f82e15c](https://gitlab.com/macropeople/dcfrontend/commit/f82e15c)) +* submit only modified rows, redirect to staged data ([b3846b6](https://gitlab.com/macropeople/dcfrontend/commit/b3846b6)) +* submit statistics ([ac8e97b](https://gitlab.com/macropeople/dcfrontend/commit/ac8e97b)) + + + + +# [3.5.0](https://gitlab.com/macropeople/dcfrontend/compare/v3.4.0...v3.5.0) (2020-05-20) + + +### Bug Fixes + +* adding cols info to getdata services ([211e943](https://gitlab.com/macropeople/dcfrontend/commit/211e943)) +* bumping sasjs version ([30aa4b2](https://gitlab.com/macropeople/dcfrontend/commit/30aa4b2)) +* edit button on table viewer ([7fbf306](https://gitlab.com/macropeople/dcfrontend/commit/7fbf306)) +* editor navigation highlight, saving space in viewer and editor ([31448a5](https://gitlab.com/macropeople/dcfrontend/commit/31448a5)) +* file upload with token ([4c0e18d](https://gitlab.com/macropeople/dcfrontend/commit/4c0e18d)) +* filter datetime dropdown to show raw value ([6a3008e](https://gitlab.com/macropeople/dcfrontend/commit/6a3008e)) +* filter values dropdown ([cd1ae54](https://gitlab.com/macropeople/dcfrontend/commit/cd1ae54)) +* hot filtering issues, submitting only filtered rows ([159bafc](https://gitlab.com/macropeople/dcfrontend/commit/159bafc)) +* IE search styling ([b2d93ef](https://gitlab.com/macropeople/dcfrontend/commit/b2d93ef)) +* loop in viewer libraries ([313495e](https://gitlab.com/macropeople/dcfrontend/commit/313495e)) +* options dropdown position ([2ae7402](https://gitlab.com/macropeople/dcfrontend/commit/2ae7402)) +* perms issues ([4953fae](https://gitlab.com/macropeople/dcfrontend/commit/4953fae)) +* removing bottom bar, saving space ([bd9c35c](https://gitlab.com/macropeople/dcfrontend/commit/bd9c35c)) +* request modal linking ([a3f581c](https://gitlab.com/macropeople/dcfrontend/commit/a3f581c)) +* SCD2 now works with OR filter ops ([6745cb1](https://gitlab.com/macropeople/dcfrontend/commit/6745cb1)) +* schemas in catalog, metarepo in metanav ([43d0109](https://gitlab.com/macropeople/dcfrontend/commit/43d0109)) +* usernav version bar ([34c6ebb](https://gitlab.com/macropeople/dcfrontend/commit/34c6ebb)) +* using existing cols data for filter ([3c6ba97](https://gitlab.com/macropeople/dcfrontend/commit/3c6ba97)) +* viya group title ([d360ec1](https://gitlab.com/macropeople/dcfrontend/commit/d360ec1)) +* viya loadfile updates ([a25d36a](https://gitlab.com/macropeople/dcfrontend/commit/a25d36a)) +* web query url duplication and spaces ([c27fe3c](https://gitlab.com/macropeople/dcfrontend/commit/c27fe3c)) + + +### Features + +* ability to exclude certain libs from the catalog refresh. Also a fix to the lineage process. ([f2e95ce](https://gitlab.com/macropeople/dcfrontend/commit/f2e95ce)) +* datastatus_libs ([528b84b](https://gitlab.com/macropeople/dcfrontend/commit/528b84b)) +* downlaod button on submiter and approval screen ([cfbba5a](https://gitlab.com/macropeople/dcfrontend/commit/cfbba5a)) +* meta nav repository presistance ([ad46c61](https://gitlab.com/macropeople/dcfrontend/commit/ad46c61)) +* rows to submit ([dc918dd](https://gitlab.com/macropeople/dcfrontend/commit/dc918dd)) +* selection on view presisted ([962ceba](https://gitlab.com/macropeople/dcfrontend/commit/962ceba)) +* sql server data dictionary upates (plus removal of error lines) ([d8e8586](https://gitlab.com/macropeople/dcfrontend/commit/d8e8586)) +* sql server integration to dictionary tables ([8610d7a](https://gitlab.com/macropeople/dcfrontend/commit/8610d7a)) +* writeback data in Viya ([da3d0ee](https://gitlab.com/macropeople/dcfrontend/commit/da3d0ee)) + + + + +# [3.4.0](https://gitlab.com/macropeople/dcfrontend/compare/v3.3.1...v3.4.0) (2020-05-03) + + +### Features + +* data catalog for libraries, tables and columns ([1865eb1](https://gitlab.com/macropeople/dcfrontend/commit/1865eb1)) +* filter values editable ([ffa1065](https://gitlab.com/macropeople/dcfrontend/commit/ffa1065)) +* viewer number of rows ([37fbf3d](https://gitlab.com/macropeople/dcfrontend/commit/37fbf3d)) +* viewer search table ([ae65969](https://gitlab.com/macropeople/dcfrontend/commit/ae65969)) + + + + +## [3.3.1](https://gitlab.com/macropeople/dcfrontend/compare/v3.3.0...v3.3.1) (2020-04-27) + + +### Bug Fixes + +* ddl download ([ece1e79](https://gitlab.com/macropeople/dcfrontend/commit/ece1e79)) +* submit bug, stage page license key ([388c067](https://gitlab.com/macropeople/dcfrontend/commit/388c067)) + + + + +# [3.3.0](https://gitlab.com/macropeople/dcfrontend/compare/v3.2.0...v3.3.0) (2020-04-26) + + +### Bug Fixes + +* backend changes to support frontend fixes ([2e7b6ef](https://gitlab.com/macropeople/dcfrontend/commit/2e7b6ef)) +* dqdata update ([b8db8bf](https://gitlab.com/macropeople/dcfrontend/commit/b8db8bf)) +* invalid values on submit, notnull validation ([4ac8088](https://gitlab.com/macropeople/dcfrontend/commit/4ac8088)) +* parsing errors and warning improved, performance fix, icons added ([e2b8a24](https://gitlab.com/macropeople/dcfrontend/commit/e2b8a24)) +* remove syscc=4 in approvals ([af24fd3](https://gitlab.com/macropeople/dcfrontend/commit/af24fd3)) +* switch to mp_streamfile ([8cb4529](https://gitlab.com/macropeople/dcfrontend/commit/8cb4529)) +* warning not linkable ([9491ccc](https://gitlab.com/macropeople/dcfrontend/commit/9491ccc)) + + +### Features + +* request modal error and warning linking ([ebcf2f4](https://gitlab.com/macropeople/dcfrontend/commit/ebcf2f4)) + + + + +# [3.2.0](https://gitlab.com/macropeople/dcfrontend/compare/v3.1.0...v3.2.0) (2020-04-23) + + +### Bug Fixes + +* get username from MF_GETUSER ([10bc04f](https://gitlab.com/macropeople/dcfrontend/commit/10bc04f)) +* double scroll, add record button, add row scroll to bottom ([75fd508](https://gitlab.com/macropeople/dcfrontend/commit/75fd508)) +* dropdowns ([4247114](https://gitlab.com/macropeople/dcfrontend/commit/4247114)) +* editor page not working ([c7ae36f](https://gitlab.com/macropeople/dcfrontend/commit/c7ae36f)) +* record modal not opening, paste trim trailings, 'edit' button performance ([26da7f5](https://gitlab.com/macropeople/dcfrontend/commit/26da7f5)) +* WIP dialouge not opening for new row after cancel and reopen ([ad37092](https://gitlab.com/macropeople/dcfrontend/commit/ad37092)) + + +### Features + +* dqdata update ([ccbec0c](https://gitlab.com/macropeople/dcfrontend/commit/ccbec0c)) +* exclude data lineage and metanav if serverType is viya ([56c0459](https://gitlab.com/macropeople/dcfrontend/commit/56c0459)) +* metavav auto open on object url navigation ([ce49d75](https://gitlab.com/macropeople/dcfrontend/commit/ce49d75)) +* usernav functionality for VIYA ([63fa9ae](https://gitlab.com/macropeople/dcfrontend/commit/63fa9ae)) + + + + +# [3.1.0](https://gitlab.com/macropeople/dcfrontend/compare/v3.0.0...v3.1.0) (2020-04-19) + + +### Bug Fixes + +* sas path in url dynamically ([241911d](https://gitlab.com/macropeople/dcfrontend/commit/241911d)) +* broken url ([397857b](https://gitlab.com/macropeople/dcfrontend/commit/397857b)) +* char input length check ([69efa6e](https://gitlab.com/macropeople/dcfrontend/commit/69efa6e)) +* incorrent url for download and upload ([2638d58](https://gitlab.com/macropeople/dcfrontend/commit/2638d58)) +* link to this record ([970f952](https://gitlab.com/macropeople/dcfrontend/commit/970f952)) +* metanav services and utf-8 issue ([3820e78](https://gitlab.com/macropeople/dcfrontend/commit/3820e78)) +* modal upcase validation, copied to clipboard, number converted to char ([9bdcf50](https://gitlab.com/macropeople/dcfrontend/commit/9bdcf50)) +* record modal original column order ([2595911](https://gitlab.com/macropeople/dcfrontend/commit/2595911)) +* submit modal, record modal improving ([ec1eab2](https://gitlab.com/macropeople/dcfrontend/commit/ec1eab2)) +* **excel-upload:** add polyfill for DateTimeFormat.formatToParts ([22ce409](https://gitlab.com/macropeople/dcfrontend/commit/22ce409)) +* **sasjs:** upgrade adapter version to fix IE ([517fff5](https://gitlab.com/macropeople/dcfrontend/commit/517fff5)) +* **url:** remove hardcoded path ([7071186](https://gitlab.com/macropeople/dcfrontend/commit/7071186)) +* wrong navigation from approve/submit to view table ([d144a2e](https://gitlab.com/macropeople/dcfrontend/commit/d144a2e)) + + +### Features + +* add "NOT IN" option to filter ([d41217b](https://gitlab.com/macropeople/dcfrontend/commit/d41217b)) +* add / edit record option ([e82b346](https://gitlab.com/macropeople/dcfrontend/commit/e82b346)) +* autoselect / autofocus on edit submit ([8833e11](https://gitlab.com/macropeople/dcfrontend/commit/8833e11)) +* metanav attributes search, auto open object details ([9dfb112](https://gitlab.com/macropeople/dcfrontend/commit/9dfb112)) +* record-edit linking ([14eedca](https://gitlab.com/macropeople/dcfrontend/commit/14eedca)) +* viya support wrapup ([d211378](https://gitlab.com/macropeople/dcfrontend/commit/d211378)) + + + + +# [3.0.0](https://gitlab.com/macropeople/dcfrontend/compare/v2.2.0...v3.0.0) (2020-04-13) + + +### Bug Fixes + +* all servies converted to SASjs ([f649bf1](https://gitlab.com/macropeople/dcfrontend/commit/f649bf1)) +* bitemporal loader error removal, build process switched to dcbuild.sh ([0ccc4bc](https://gitlab.com/macropeople/dcfrontend/commit/0ccc4bc)) +* case sensitive librefs ([198a2de](https://gitlab.com/macropeople/dcfrontend/commit/198a2de)), closes [#86](https://gitlab.com/macropeople/dcfrontend/issues/86) +* configuration and startup service ([d4e1d7b](https://gitlab.com/macropeople/dcfrontend/commit/d4e1d7b)) +* configurator ([f0f2224](https://gitlab.com/macropeople/dcfrontend/commit/f0f2224)) +* configurator, and metanav services updated ([c626f08](https://gitlab.com/macropeople/dcfrontend/commit/c626f08)) +* enabling sasjs build ([71d65e8](https://gitlab.com/macropeople/dcfrontend/commit/71d65e8)) +* environtment verson path ([8636879](https://gitlab.com/macropeople/dcfrontend/commit/8636879)) +* final build script ([9cd80cf](https://gitlab.com/macropeople/dcfrontend/commit/9cd80cf)) +* final for viya ([920d9ae](https://gitlab.com/macropeople/dcfrontend/commit/920d9ae)) +* getting to demo version ([9ffbee2](https://gitlab.com/macropeople/dcfrontend/commit/9ffbee2)) +* incorrect validations after duplicate check ([24a417d](https://gitlab.com/macropeople/dcfrontend/commit/24a417d)) +* lowercase response, approve route ([9e07fb1](https://gitlab.com/macropeople/dcfrontend/commit/9e07fb1)) +* metanav SAS integration ([3fce458](https://gitlab.com/macropeople/dcfrontend/commit/3fce458)) +* page not found on approve details ([08fea24](https://gitlab.com/macropeople/dcfrontend/commit/08fea24)) +* precision ([2321892](https://gitlab.com/macropeople/dcfrontend/commit/2321892)) +* preparing web target ([20aaf69](https://gitlab.com/macropeople/dcfrontend/commit/20aaf69)) +* re-org of files for sasjs-cli 2.2 ([81c2094](https://gitlab.com/macropeople/dcfrontend/commit/81c2094)) +* removing h54s and boemska ([120cd1b](https://gitlab.com/macropeople/dcfrontend/commit/120cd1b)) +* response lowercase, debug switch ([7660cc6](https://gitlab.com/macropeople/dcfrontend/commit/7660cc6)) +* sas errors in 9 ([5d1471c](https://gitlab.com/macropeople/dcfrontend/commit/5d1471c)) +* sas9 fixes ([45b90dd](https://gitlab.com/macropeople/dcfrontend/commit/45b90dd)) +* setting username on login and request ([8e1e0d1](https://gitlab.com/macropeople/dcfrontend/commit/8e1e0d1)) +* splash page ([6a50a22](https://gitlab.com/macropeople/dcfrontend/commit/6a50a22)) +* stagedata fref pickup ([55572cb](https://gitlab.com/macropeople/dcfrontend/commit/55572cb)) +* stagedata table object, debug switch modal close, removing appLoc in request path ([c227a2c](https://gitlab.com/macropeople/dcfrontend/commit/c227a2c)) +* switching mf_abort for mp_abort ([1ba790f](https://gitlab.com/macropeople/dcfrontend/commit/1ba790f)) +* test updates (demo version) ([cbc2723](https://gitlab.com/macropeople/dcfrontend/commit/cbc2723)) +* upgrade to latest sasjs-cli format ([8aae0b2](https://gitlab.com/macropeople/dcfrontend/commit/8aae0b2)) +* upgraded sasjs ([fdd7c17](https://gitlab.com/macropeople/dcfrontend/commit/fdd7c17)) +* uppercase issue ([08d65b8](https://gitlab.com/macropeople/dcfrontend/commit/08d65b8)) +* user _METAUSER instead of sysuserid for SAS9 ([5c12760](https://gitlab.com/macropeople/dcfrontend/commit/5c12760)) +* various, including bitemporal ([09d77ca](https://gitlab.com/macropeople/dcfrontend/commit/09d77ca)) +* viya integration ([99a8993](https://gitlab.com/macropeople/dcfrontend/commit/99a8993)) +* viya integration of getgroupmembers ([426bc88](https://gitlab.com/macropeople/dcfrontend/commit/426bc88)) +* viya updates ([22d6e98](https://gitlab.com/macropeople/dcfrontend/commit/22d6e98)) +* **dcbuild:** hostURL starts with // instead of http/https ([1f3d6e3](https://gitlab.com/macropeople/dcfrontend/commit/1f3d6e3)) + + +### Chores + +* readme update ([4ded32a](https://gitlab.com/macropeople/dcfrontend/commit/4ded32a)) + + +### Features + +* viya macros ([bef208e](https://gitlab.com/macropeople/dcfrontend/commit/bef208e)) +* data quality rules on edit mode ([65a20c5](https://gitlab.com/macropeople/dcfrontend/commit/65a20c5)) +* enabling users & groups in Viya ([30bed3d](https://gitlab.com/macropeople/dcfrontend/commit/30bed3d)) +* integrating sasjs (startupService, SAS Requests, Login) ([d7e20f9](https://gitlab.com/macropeople/dcfrontend/commit/d7e20f9)) +* sas9 auto-build with latest sasjs-cli ([5c2f1e4](https://gitlab.com/macropeople/dcfrontend/commit/5c2f1e4)) +* sasjs integration ([beb30d8](https://gitlab.com/macropeople/dcfrontend/commit/beb30d8)) +* viya mods to enable first service ([a8c8932](https://gitlab.com/macropeople/dcfrontend/commit/a8c8932)) + + +### BREAKING CHANGES + +* switch to SASjsgit add README.md + + + + +# [2.2.0](https://gitlab.com/macropeople/dcfrontend/compare/v2.1.0...v2.2.0) (2020-03-28) + + +### Bug Fixes + +* date capture ([c7c3d57](https://gitlab.com/macropeople/dcfrontend/commit/c7c3d57)) +* DOWNCASE->LOWCASE ([aecba73](https://gitlab.com/macropeople/dcfrontend/commit/aecba73)) +* hot license key ([3f5b636](https://gitlab.com/macropeople/dcfrontend/commit/3f5b636)) + + +### Features + +* apply dqrule in edit mode ([3b4afbd](https://gitlab.com/macropeople/dcfrontend/commit/3b4afbd)) + + + + +# [2.1.0](https://gitlab.com/macropeople/dcfrontend/compare/v2.0.0...v2.1.0) (2020-03-26) + + +### Bug Fixes + +* closes [#83](https://gitlab.com/macropeople/dcfrontend/issues/83) (decimal truncation issue) ([870bf5c](https://gitlab.com/macropeople/dcfrontend/commit/870bf5c)) +* cypress ([56ddfdf](https://gitlab.com/macropeople/dcfrontend/commit/56ddfdf)) +* debug switch wrong state ([00d9ad1](https://gitlab.com/macropeople/dcfrontend/commit/00d9ad1)) +* double click triggers edit mode ([169b84d](https://gitlab.com/macropeople/dcfrontend/commit/169b84d)) +* legacy support for x variable in post edit hook ([3777c33](https://gitlab.com/macropeople/dcfrontend/commit/3777c33)) +* local vars ([ba8ce4c](https://gitlab.com/macropeople/dcfrontend/commit/ba8ce4c)) +* migration ([81a5e0d](https://gitlab.com/macropeople/dcfrontend/commit/81a5e0d)) +* test update, remove logging ([cae0735](https://gitlab.com/macropeople/dcfrontend/commit/cae0735)) +* tests ([e28d872](https://gitlab.com/macropeople/dcfrontend/commit/e28d872)) +* tidyup and enabling views in viewtables ([06639cb](https://gitlab.com/macropeople/dcfrontend/commit/06639cb)) + + +### Features + +* data dictionary and mpe_validations tables, and DQRULES now sent in getData service ([856b4f6](https://gitlab.com/macropeople/dcfrontend/commit/856b4f6)) +* hardselect, closes [#84](https://gitlab.com/macropeople/dcfrontend/issues/84) ([859cfd1](https://gitlab.com/macropeople/dcfrontend/commit/859cfd1)) +* user friendly display when library is empty ([cff71f2](https://gitlab.com/macropeople/dcfrontend/commit/cff71f2)) + + + + +# [2.0.0](https://gitlab.com/macropeople/dcfrontend/compare/v1.3.3...v2.0.0) (2020-03-16) + + +### Bug Fixes + +* backend can take either first or second file as CSV ([a3aaab6](https://gitlab.com/macropeople/dcfrontend/commit/a3aaab6)) +* click twice download dialog, link to VIEW in EDIT ([9b47b75](https://gitlab.com/macropeople/dcfrontend/commit/9b47b75)) +* enabling clicking of users in groups page ([ab2acc4](https://gitlab.com/macropeople/dcfrontend/commit/ab2acc4)) +* moving to single directory for log / staging data capture. ([766e9fc](https://gitlab.com/macropeople/dcfrontend/commit/766e9fc)) +* pagination of libraries in tree ([5e79ec3](https://gitlab.com/macropeople/dcfrontend/commit/5e79ec3)) +* removing 'multiple file load' feature ([2f21cc4](https://gitlab.com/macropeople/dcfrontend/commit/2f21cc4)) +* removing 'multiple file load' feature ([268fdc1](https://gitlab.com/macropeople/dcfrontend/commit/268fdc1)) +* saving sub-page in navigation, startup service refactor, edit in VIEW dropdown ([98280a9](https://gitlab.com/macropeople/dcfrontend/commit/98280a9)) +* typing on X and prettify JS ([9ab737d](https://gitlab.com/macropeople/dcfrontend/commit/9ab737d)) + + +### Features + +* backup Excel file ([7c5e57e](https://gitlab.com/macropeople/dcfrontend/commit/7c5e57e)) +* **excelIntegration:** upload both csv and excel file ([d90bfdf](https://gitlab.com/macropeople/dcfrontend/commit/d90bfdf)) +* cypress testcases migration ([4fa372c](https://gitlab.com/macropeople/dcfrontend/commit/4fa372c)) +* cypress testcases migration ([e2d9998](https://gitlab.com/macropeople/dcfrontend/commit/e2d9998)) +* cypress testcases migration ([8e6ccc4](https://gitlab.com/macropeople/dcfrontend/commit/8e6ccc4)) +* **excelIntegration:** upload both csv and excel file ([57698b0](https://gitlab.com/macropeople/dcfrontend/commit/57698b0)) + + +### BREAKING CHANGES + +* the previous download links will not work following this upgrade + + + + +## [1.3.3](https://gitlab.com/macropeople/dcfrontend/compare/v1.3.2...v1.3.3) (2020-03-10) + + +### Bug Fixes + +* dups in groups and missing members ([e06b269](https://gitlab.com/macropeople/dcfrontend/commit/e06b269)) + + + + +## [1.3.2](https://gitlab.com/macropeople/dcfrontend/compare/v1.3.1...v1.3.2) (2020-03-09) + + +### Bug Fixes + +* removing duplicates on groupnames ([8e8f99a](https://gitlab.com/macropeople/dcfrontend/commit/8e8f99a)) + + + + +## [1.3.1](https://gitlab.com/macropeople/dcfrontend/compare/v1.3.0...v1.3.1) (2020-03-09) + + + + +# [1.3.0](https://gitlab.com/macropeople/dcfrontend/compare/v1.2.1...v1.3.0) (2020-03-09) + + +### Bug Fixes + +* closes [#73](https://gitlab.com/macropeople/dcfrontend/issues/73), adding test data and faster viewLib service ([3fbfff2](https://gitlab.com/macropeople/dcfrontend/commit/3fbfff2)) +* moving meta specific macros to macros_meta folder ([5bb6fb0](https://gitlab.com/macropeople/dcfrontend/commit/5bb6fb0)) +* recursive join issue (was necessary to have a dependency) ([cf0c4bf](https://gitlab.com/macropeople/dcfrontend/commit/cf0c4bf)) +* services in usernav ([cb6630d](https://gitlab.com/macropeople/dcfrontend/commit/cb6630d)) + + +### Features + +* **usernav:** adding remaining backend services ([2f8ccd2](https://gitlab.com/macropeople/dcfrontend/commit/2f8ccd2)) +* **usernav:** sidebar integration ([60700fb](https://gitlab.com/macropeople/dcfrontend/commit/60700fb)) +* **usernav:** User Navigation ([265c489](https://gitlab.com/macropeople/dcfrontend/commit/265c489)) +* User Navigator services ([505b99b](https://gitlab.com/macropeople/dcfrontend/commit/505b99b)) + + + + +## [1.2.1](https://gitlab.com/macropeople/dcfrontend/compare/v1.2.0...v1.2.1) (2020-02-29) + + +### Bug Fixes + +* IE and Edge hidding libraries ([c59de7c](https://gitlab.com/macropeople/dcfrontend/commit/c59de7c)) +* resizing sidebar improvments ([fe7b4bb](https://gitlab.com/macropeople/dcfrontend/commit/fe7b4bb)) +* view new table, old removed, added column dropdown ([e8d254b](https://gitlab.com/macropeople/dcfrontend/commit/e8d254b)) + + + + +# [1.2.0](https://gitlab.com/macropeople/dcfrontend/compare/v1.1.0...v1.2.0) (2020-02-27) + + +### Bug Fixes + +* model change in selectbox table ([92fd9be](https://gitlab.com/macropeople/dcfrontend/commit/92fd9be)) +* remove autologging and make debug mode false by default ([cc625f0](https://gitlab.com/macropeople/dcfrontend/commit/cc625f0)) +* tree library leftover ([b2b9c07](https://gitlab.com/macropeople/dcfrontend/commit/b2b9c07)) + + +### Features + +* metadata navigator ([80c3fcc](https://gitlab.com/macropeople/dcfrontend/commit/80c3fcc)) +* **metadata navigator:** routing and scroll bar on objects ([9a88e5f](https://gitlab.com/macropeople/dcfrontend/commit/9a88e5f)) +* **metadata navigator:** routing update and repository addition ([571da8f](https://gitlab.com/macropeople/dcfrontend/commit/571da8f)) +* **metadata navigator:** search bar on metatypes ([3b94c0d](https://gitlab.com/macropeople/dcfrontend/commit/3b94c0d)) +* **metadata navigator:** search on metadata objects, design improvements ([1973147](https://gitlab.com/macropeople/dcfrontend/commit/1973147)) + + + + +# [1.1.0](https://gitlab.com/macropeople/dcfrontend/compare/v1.0.2...v1.1.0) (2020-02-26) + + +### Bug Fixes + +* **docs:** direct lib now in settings ([a572625](https://gitlab.com/macropeople/dcfrontend/commit/a572625)) +* adding npm package ([cdb6c87](https://gitlab.com/macropeople/dcfrontend/commit/cdb6c87)) +* dropzone buttons one row ([a630a69](https://gitlab.com/macropeople/dcfrontend/commit/a630a69)) +* edit integration undefined table approval ([b382aa8](https://gitlab.com/macropeople/dcfrontend/commit/b382aa8)) +* editor libraries bug closes [#57](https://gitlab.com/macropeople/dcfrontend/issues/57) ([80c7719](https://gitlab.com/macropeople/dcfrontend/commit/80c7719)) +* header match case insensitivity ([63ed719](https://gitlab.com/macropeople/dcfrontend/commit/63ed719)) +* IE Tree bug, resizing sidebar ([2e0db53](https://gitlab.com/macropeople/dcfrontend/commit/2e0db53)) +* removing call to mm_getlibs and ensuring compatibility with multiple repositories ([2520ddd](https://gitlab.com/macropeople/dcfrontend/commit/2520ddd)) +* this.table ([0877332](https://gitlab.com/macropeople/dcfrontend/commit/0877332)) +* using meta libname in settings ([550b9ce](https://gitlab.com/macropeople/dcfrontend/commit/550b9ce)) +* viewer caching issue ([bdeffe2](https://gitlab.com/macropeople/dcfrontend/commit/bdeffe2)) + + +### Features + +* **excel data integration:** missing columns addition ([5fdab7b](https://gitlab.com/macropeople/dcfrontend/commit/5fdab7b)) +* **excel parsing:** order doesn't matter + wiscard extra columns if exists in between ([c0d0c9a](https://gitlab.com/macropeople/dcfrontend/commit/c0d0c9a)) +* **excel_integration:** header selection method update ([be1e2f6](https://gitlab.com/macropeople/dcfrontend/commit/be1e2f6)) +* download DDL (#closes 43) ([4ff3398](https://gitlab.com/macropeople/dcfrontend/commit/4ff3398)) +* download DDL ([9a70fff](https://gitlab.com/macropeople/dcfrontend/commit/9a70fff)) +* excel data Integration ([f630f1d](https://gitlab.com/macropeople/dcfrontend/commit/f630f1d)) +* **excelIntegration:** Date time header validations ([2213bee](https://gitlab.com/macropeople/dcfrontend/commit/2213bee)) +* list of metadata repos (new service) ([7d5e17e](https://gitlab.com/macropeople/dcfrontend/commit/7d5e17e)) +* usage tracking. closes [#45](https://gitlab.com/macropeople/dcfrontend/issues/45) ([dccd7fa](https://gitlab.com/macropeople/dcfrontend/commit/dccd7fa)) +* wide drap/drop and auto upload on file drop ([b02cfc2](https://gitlab.com/macropeople/dcfrontend/commit/b02cfc2)) + + + + +## [1.0.2](https://gitlab.com/macropeople/dcfrontend/compare/v1.0.1...v1.0.2) (2020-02-12) + + +### Bug Fixes + +* approve page overflow ([711401a](https://gitlab.com/macropeople/dcfrontend/commit/711401a)) +* editor page overlaying header bar ([a9cd778](https://gitlab.com/macropeople/dcfrontend/commit/a9cd778)) +* moving JS to be exernal ([05c41ba](https://gitlab.com/macropeople/dcfrontend/commit/05c41ba)) +* moving JS to be exernal ([5b85773](https://gitlab.com/macropeople/dcfrontend/commit/5b85773)) +* perms ([6721a67](https://gitlab.com/macropeople/dcfrontend/commit/6721a67)) +* sidebar duplicates and double selection ([edade84](https://gitlab.com/macropeople/dcfrontend/commit/edade84)) + + + + +## [1.0.1](https://gitlab.com/macropeople/dcfrontend/compare/v1.0.0...v1.0.1) (2020-02-11) + + +### Bug Fixes + +* migration mpe-security ([7cd7896](https://gitlab.com/macropeople/dcfrontend/commit/7cd7896)) +* moving scripts.js to external site in demo version ([49ad2c0](https://gitlab.com/macropeople/dcfrontend/commit/49ad2c0)) + + + + +# [1.0.0](https://gitlab.com/macropeople/dcfrontend/compare/v0.12.1...v1.0.0) (2020-02-09) + + +### Chores + +* remove whitespace ([89fc982](https://gitlab.com/macropeople/dcfrontend/commit/89fc982)) + + +### BREAKING CHANGES + +* seems this needs to be in the footer for it to work + + + + +## [0.12.1](https://gitlab.com/macropeople/dcfrontend/compare/v0.12.0...v0.12.1) (2020-02-09) + + + + +# [0.12.0](https://gitlab.com/macropeople/dcfrontend/compare/v0.11.2...v0.12.0) (2020-02-09) + + +### Bug Fixes + +* **new design:** clarity new version fixed elements (inputs, selects...) ([755a41c](https://gitlab.com/macropeople/dcfrontend/commit/755a41c)) +* **new design:** filter input elements (broken due new clr version) ([338faf8](https://gitlab.com/macropeople/dcfrontend/commit/338faf8)) +* issue20 security updates ([f7168b7](https://gitlab.com/macropeople/dcfrontend/commit/f7168b7)) +* new design, viewer sidebar optimizing ([bb29fb7](https://gitlab.com/macropeople/dcfrontend/commit/bb29fb7)) + + +### Features + +* **new design:** lineage component ([2e070c0](https://gitlab.com/macropeople/dcfrontend/commit/2e070c0)) +* **new design:** sidebar searchboxes ([b6cca58](https://gitlab.com/macropeople/dcfrontend/commit/b6cca58)) +* New Design ([a4f41da](https://gitlab.com/macropeople/dcfrontend/commit/a4f41da)), closes [#35](https://gitlab.com/macropeople/dcfrontend/issues/35) +* new design: lineage started ([6e1ead1](https://gitlab.com/macropeople/dcfrontend/commit/6e1ead1)) +* selectively disable tables in VIEW ([44a418e](https://gitlab.com/macropeople/dcfrontend/commit/44a418e)) +* TIME support (minus time picker). closes #issue42 ([a16e240](https://gitlab.com/macropeople/dcfrontend/commit/a16e240)), closes [#issue42](https://gitlab.com/macropeople/dcfrontend/issues/issue42) + + + + +## [0.11.2](https://gitlab.com/macropeople/dcfrontend/compare/v0.11.1...v0.11.2) (2020-01-31) + + +### Bug Fixes + +* missing macro in bitemporal loader ([7681d46](https://gitlab.com/macropeople/dcfrontend/commit/7681d46)) + + + + +## [0.11.1](https://gitlab.com/macropeople/dcfrontend/compare/v0.11.0...v0.11.1) (2020-01-29) + + +### Bug Fixes + +* enabling embedded carriage returns ([d9422dc](https://gitlab.com/macropeople/dcfrontend/commit/d9422dc)) + + + + +# [0.11.0](https://gitlab.com/macropeople/dcfrontend/compare/v0.10.1...v0.11.0) (2020-01-28) + + +### Bug Fixes + +* short numerics and best. format numerics now handled ([b7c1279](https://gitlab.com/macropeople/dcfrontend/commit/b7c1279)) +* stp registration ([8afa679](https://gitlab.com/macropeople/dcfrontend/commit/8afa679)) + + +### Features + +* short numerics ([c840b79](https://gitlab.com/macropeople/dcfrontend/commit/c840b79)) + + + + +## [0.10.1](https://gitlab.com/macropeople/dcfrontend/compare/v0.10.0...v0.10.1) (2020-01-28) + + +### Bug Fixes + +* short numerics and numeric formats, #closes issue40 ([eb5893c](https://gitlab.com/macropeople/dcfrontend/commit/eb5893c)) + + + + +# [0.10.0](https://gitlab.com/macropeople/dcfrontend/compare/v0.9.0...v0.10.0) (2020-01-25) + + +### Bug Fixes + +* adding more sample data ([89b25d1](https://gitlab.com/macropeople/dcfrontend/commit/89b25d1)) +* editor column max width ([8e803fc](https://gitlab.com/macropeople/dcfrontend/commit/8e803fc)) +* editor file upload abort message ([10cad83](https://gitlab.com/macropeople/dcfrontend/commit/10cad83)) +* lineage regenerate problem ([354d126](https://gitlab.com/macropeople/dcfrontend/commit/354d126)) +* sample data ([b743892](https://gitlab.com/macropeople/dcfrontend/commit/b743892)) +* viewer / editor column max width ([6c3abc7](https://gitlab.com/macropeople/dcfrontend/commit/6c3abc7)) + + +### Features + +* groups plus metadata refresh backend ([850f29a](https://gitlab.com/macropeople/dcfrontend/commit/850f29a)) +* lineage refresh cache option ([35d1b6c](https://gitlab.com/macropeople/dcfrontend/commit/35d1b6c)) +* max col width 500 plus custom groups feature ([5d5b55b](https://gitlab.com/macropeople/dcfrontend/commit/5d5b55b)) +* metadata services ([697642c](https://gitlab.com/macropeople/dcfrontend/commit/697642c)) + + + + +# [0.9.0](https://gitlab.com/macropeople/dcfrontend/compare/v0.8.0...v0.9.0) (2020-01-19) + + +### Bug Fixes + +* maxdepth for lineage ([28cf028](https://gitlab.com/macropeople/dcfrontend/commit/28cf028)) +* MAXOBS for editing data ([5ada758](https://gitlab.com/macropeople/dcfrontend/commit/5ada758)) + + +### Features + +* 9.3 compatibility (remove fcmp in windows, updating adapter) ([11e7692](https://gitlab.com/macropeople/dcfrontend/commit/11e7692)) +* admin tools (config viewer and download) ([a95ed90](https://gitlab.com/macropeople/dcfrontend/commit/a95ed90)) +* extra checking to ensure the install user has the correct metadata and OS permissions ([4ef83db](https://gitlab.com/macropeople/dcfrontend/commit/4ef83db)) +* licence checker plus adding MPE_SELECTBOX to config download ([5109670](https://gitlab.com/macropeople/dcfrontend/commit/5109670)) + + + + +# [0.8.0](https://gitlab.com/macropeople/dcfrontend/compare/v0.7.2...v0.8.0) (2020-01-13) + + +### Bug Fixes + +* lineage table removal ([e28cb59](https://gitlab.com/macropeople/dcfrontend/commit/e28cb59)) +* removing configurator after it is run (to prevent accidental overwrite once library is up and running) ([8759226](https://gitlab.com/macropeople/dcfrontend/commit/8759226)) +* removing stp dependency in mpeinit ([44d3c63](https://gitlab.com/macropeople/dcfrontend/commit/44d3c63)) + + +### Features + +* lineage flatdata csv download ([fce560f](https://gitlab.com/macropeople/dcfrontend/commit/fce560f)) + + + + +## [0.7.2](https://gitlab.com/macropeople/dcfrontend/compare/v0.7.1...v0.7.2) (2020-01-11) + + +### Bug Fixes + +* empty lineage screen now displays ([9876ff9](https://gitlab.com/macropeople/dcfrontend/commit/9876ff9)) + + + + +## [0.7.1](https://gitlab.com/macropeople/dcfrontend/compare/v0.7.0...v0.7.1) (2020-01-07) + + + + +# [0.7.0](https://gitlab.com/macropeople/dcfrontend/compare/v0.6.0...v0.7.0) (2020-01-02) + + +### Bug Fixes + +* adding port to web query ([07e6a5d](https://gitlab.com/macropeople/dcfrontend/commit/07e6a5d)) +* closes [#32](https://gitlab.com/macropeople/dcfrontend/issues/32) and enbles viewing of tables that only exist in metadata ([c942b21](https://gitlab.com/macropeople/dcfrontend/commit/c942b21)) +* dropdown to download button inside popup ([ceb5b75](https://gitlab.com/macropeople/dcfrontend/commit/ceb5b75)) +* dropdowns and buttons reposition, saving space for lineage graph ([e95a713](https://gitlab.com/macropeople/dcfrontend/commit/e95a713)) +* editor table, dot check removed ([9612323](https://gitlab.com/macropeople/dcfrontend/commit/9612323)) +* IE editor library dropdown, lineage selection width ([9a1c923](https://gitlab.com/macropeople/dcfrontend/commit/9a1c923)) +* index.html metadata ([83fb505](https://gitlab.com/macropeople/dcfrontend/commit/83fb505)) +* index.html metadata ([ff0c552](https://gitlab.com/macropeople/dcfrontend/commit/ff0c552)) +* index.html metadata comment update ([c2e337f](https://gitlab.com/macropeople/dcfrontend/commit/c2e337f)) +* lineage download buttons hidden ([9227ccc](https://gitlab.com/macropeople/dcfrontend/commit/9227ccc)) +* lineage more space ([f2e6375](https://gitlab.com/macropeople/dcfrontend/commit/f2e6375)) +* lineage popup remove, positions, linkable ([9d53f2a](https://gitlab.com/macropeople/dcfrontend/commit/9d53f2a)) +* linking lineage ([4c2095b](https://gitlab.com/macropeople/dcfrontend/commit/4c2095b)) +* padding issues, editor table loading fix ([bc0c2be](https://gitlab.com/macropeople/dcfrontend/commit/bc0c2be)) + + +### Features + +* IE compatibility ([e28ac50](https://gitlab.com/macropeople/dcfrontend/commit/e28ac50)) +* linkable lineage ([d8ebc19](https://gitlab.com/macropeople/dcfrontend/commit/d8ebc19)) + + + + +# [0.6.0](https://gitlab.com/macropeople/dcfrontend/compare/v0.5.0...v0.6.0) (2019-12-14) + + +### Bug Fixes + +* package updates ([03ace1f](https://gitlab.com/macropeople/dcfrontend/commit/03ace1f)) + + +### Features + +* lineage and metarepo option ([99090a1](https://gitlab.com/macropeople/dcfrontend/commit/99090a1)) +* Add Data Lineage ([b21a644](https://gitlab.com/macropeople/dcfrontend/commit/b21a644)) + + + + +# [0.5.0](https://gitlab.com/macropeople/dcfrontend/compare/v0.4.0...v0.5.0) (2019-09-20) + + +### Bug Fixes + +* error message not surfaced on VIEW table, closes [#25](https://gitlab.com/macropeople/dcfrontend/issues/25) ([4687ec4](https://gitlab.com/macropeople/dcfrontend/commit/4687ec4)) +* format length issue, special chars in usernames issue ([447f483](https://gitlab.com/macropeople/dcfrontend/commit/447f483)) +* removing npm audit warnings with devkit update to 13.9 ([e1d28a9](https://gitlab.com/macropeople/dcfrontend/commit/e1d28a9)) + + +### Features + +* improved deployment process for evaluation version ([3a9e846](https://gitlab.com/macropeople/dcfrontend/commit/3a9e846)) +* Allow WLatin file upload ([1c02491](https://gitlab.com/macropeople/dcfrontend/commit/1c02491)) +* auto config for eval version ([35ab667](https://gitlab.com/macropeople/dcfrontend/commit/35ab667)) + + + + +# [0.4.0](https://gitlab.com/macropeople/dcfrontend/compare/v0.3.0...v0.4.0) (2019-05-27) + + +### Bug Fixes + +* additional types added ([279fb6c](https://gitlab.com/macropeople/dcfrontend/commit/279fb6c)) +* editor dropdown remember selections ([75391eb](https://gitlab.com/macropeople/dcfrontend/commit/75391eb)) +* email fixes ([996b14b](https://gitlab.com/macropeople/dcfrontend/commit/996b14b)) +* email issues ([c74f668](https://gitlab.com/macropeople/dcfrontend/commit/c74f668)) +* filter remebering | cleanup ([bd59204](https://gitlab.com/macropeople/dcfrontend/commit/bd59204)) +* issue 18, use strict ([a4ac751](https://gitlab.com/macropeople/dcfrontend/commit/a4ac751)) +* issue 19 ([ca67123](https://gitlab.com/macropeople/dcfrontend/commit/ca67123)) +* metadataRoot added back ([50243a3](https://gitlab.com/macropeople/dcfrontend/commit/50243a3)) +* remember filter editor ([6fe1545](https://gitlab.com/macropeople/dcfrontend/commit/6fe1545)) +* remember filter selections ([774a42e](https://gitlab.com/macropeople/dcfrontend/commit/774a42e)) +* remember filter viewer ([de53590](https://gitlab.com/macropeople/dcfrontend/commit/de53590)) +* remembering filter selections issue15 ([d86326a](https://gitlab.com/macropeople/dcfrontend/commit/d86326a)) +* remembering filter without regenerating ([f5fa1dd](https://gitlab.com/macropeople/dcfrontend/commit/f5fa1dd)) +* remembering selections | running service onliy on startup ([f8aeef5](https://gitlab.com/macropeople/dcfrontend/commit/f8aeef5)) +* removed some settings ([222001a](https://gitlab.com/macropeople/dcfrontend/commit/222001a)) +* removing col freeze as not ready yet ([a8ac2bc](https://gitlab.com/macropeople/dcfrontend/commit/a8ac2bc)) +* removing not null constraints ([b4f4ba8](https://gitlab.com/macropeople/dcfrontend/commit/b4f4ba8)) +* save selected library and table ([c98bdfd](https://gitlab.com/macropeople/dcfrontend/commit/c98bdfd)) +* unique urls in prod build ([605de8a](https://gitlab.com/macropeople/dcfrontend/commit/605de8a)) +* unique urls in prod build ([b749b35](https://gitlab.com/macropeople/dcfrontend/commit/b749b35)) +* upgrading handsontable to 7.03 ([08200e0](https://gitlab.com/macropeople/dcfrontend/commit/08200e0)) +* viewer dropdowns remember selections ([189304c](https://gitlab.com/macropeople/dcfrontend/commit/189304c)) +* viewer dropdowns remember selections ([ae29b42](https://gitlab.com/macropeople/dcfrontend/commit/ae29b42)) + + +### Features + +* adding email options in log in mpe_alerts ([e546d8e](https://gitlab.com/macropeople/dcfrontend/commit/e546d8e)) +* adding dropdowns to mpe_alerts table by default ([f43db13](https://gitlab.com/macropeople/dcfrontend/commit/f43db13)) +* adding frontend filtering, column freeze, and readonly column switch ([003373a](https://gitlab.com/macropeople/dcfrontend/commit/003373a)) +* always on debug plus siteid linking for eval version ([fa0a418](https://gitlab.com/macropeople/dcfrontend/commit/fa0a418)) +* locking down eval version to a siteid ([bfb6325](https://gitlab.com/macropeople/dcfrontend/commit/bfb6325)) + + + + +# [0.3.0](https://gitlab.com/macropeople/dcfrontend/compare/v0.2.0...v0.3.0) (2019-04-11) + + +### Bug Fixes + +* closes [#16](https://gitlab.com/macropeople/dcfrontend/issues/16), missing getAuditFile ([e6b6717](https://gitlab.com/macropeople/dcfrontend/commit/e6b6717)) +* issue12 dev work ([8b547af](https://gitlab.com/macropeople/dcfrontend/commit/8b547af)) +* missing macro in loadfile ([334b4a2](https://gitlab.com/macropeople/dcfrontend/commit/334b4a2)) +* problem with file upload. Also enabling licence key implementation on view & stage components. ([0f186e5](https://gitlab.com/macropeople/dcfrontend/commit/0f186e5)) + + +### Features + +* enabling multiColumnSort and manualColumnResize. Closes [#1](https://gitlab.com/macropeople/dcfrontend/issues/1) and closes [#13](https://gitlab.com/macropeople/dcfrontend/issues/13). ([56dfc90](https://gitlab.com/macropeople/dcfrontend/commit/56dfc90)) +* moving ALL config vars to MPE_CONFIG table. Closes [#11](https://gitlab.com/macropeople/dcfrontend/issues/11) ([6132793](https://gitlab.com/macropeople/dcfrontend/commit/6132793)) + + + + +# [0.2.0](https://gitlab.com/macropeople/dcfrontend/compare/v0.1.0...v0.2.0) (2019-04-07) + + +### Bug Fixes + +* failing file uploads in demo version of DC resolved. closes [#9](https://gitlab.com/macropeople/dcfrontend/issues/9) ([f0a6aeb](https://gitlab.com/macropeople/dcfrontend/commit/f0a6aeb)) +* missing mf_abort in getStageTable ([97f0c66](https://gitlab.com/macropeople/dcfrontend/commit/97f0c66)) + + +### Features + +* switch settings to be an STP for easier modification ([a28057d](https://gitlab.com/macropeople/dcfrontend/commit/a28057d)) +* adding switch for library checking, no by default to improve responsiveness. Closes [#7](https://gitlab.com/macropeople/dcfrontend/issues/7) ([adcacf5](https://gitlab.com/macropeople/dcfrontend/commit/adcacf5)) +* enabling emails on SUBMIT, APPROVE and REJECT. Closes [#10](https://gitlab.com/macropeople/dcfrontend/issues/10) ([daec738](https://gitlab.com/macropeople/dcfrontend/commit/daec738)) + + + + +# [0.1.0](https://gitlab.com/macropeople/dcfrontend/compare/v0.0.1...v0.1.0) (2019-04-03) + + +### Bug Fixes + +* accidental deletion ([8236438](https://gitlab.com/macropeople/dcfrontend/commit/8236438)) +* enabling build ([f5e8807](https://gitlab.com/macropeople/dcfrontend/commit/f5e8807)) +* fixes to fix demo version ([6cf6c69](https://gitlab.com/macropeople/dcfrontend/commit/6cf6c69)) +* removing console logs ([3d6e6f2](https://gitlab.com/macropeople/dcfrontend/commit/3d6e6f2)) +* upgrade to avoid npm warnings ([d8f90c3](https://gitlab.com/macropeople/dcfrontend/commit/d8f90c3)) + + +### Features + +* **clarity:** the styling now workscd .. ([28b2db5](https://gitlab.com/macropeople/dcfrontend/commit/28b2db5)) +* single SPK compilation ([b785d84](https://gitlab.com/macropeople/dcfrontend/commit/b785d84)) +* removing app component replacing with document object, which is safer when importing SPKs over existing packages ([0ba14ed](https://gitlab.com/macropeople/dcfrontend/commit/0ba14ed)) + + + + +## 0.0.1 (2019-01-27) + + +### Bug Fixes + +* Adding new rows now works ([8685b4e](https://gitlab.com/macropeople/dcfrontend/commit/8685b4e)) +* removing invalid json ([7dd24e0](https://gitlab.com/macropeople/dcfrontend/commit/7dd24e0)) +* removing version.ts from source control ([186c669](https://gitlab.com/macropeople/dcfrontend/commit/186c669)) +* removing version.ts from source control, now with gitignore ([2c8ccf8](https://gitlab.com/macropeople/dcfrontend/commit/2c8ccf8)) + + +### Features + +* removing font ([325f193](https://gitlab.com/macropeople/dcfrontend/commit/325f193)) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..7ad7a6a --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,66 @@ +# Data Controller +# Contributing + +## Dependencies that requires licences + +[SheetJS Pro Version](https://www.npmjs.com/package/sheetjs) + + +To auth for SheetJS Pro version you need to use their private registry +Add `client/.npmrc` file with following content: +``` +@sheet:registry=https://pylon.sheetjs.com:54111/ +//pylon.sheetjs.com:54111/:_authToken="TOKEN-GOES-HERE" +``` + +[Handsontable](https://www.npmjs.com/package/handsontable) + +Licence should be inserted in the `client/src/index.html` file: + +``` + + +``` +## Development +Update `client/src/index.html` so that it points to your SAS9, SASVIYA or SASJS backend. +Be aware that VIYA can be configured in such way that it would not work with cross origin frontend. +Follow this guide to disable CORS: https://sasjs.io/cors/ (NOTICE: Sometimes even this approach would fail to work, in such case it is imposible to set it up without reconfiguring the VIYA server) + +Start dev server: +``` +cd client + +npm start +``` + +## GUI Elements + +For documentation on the Clarity Design System, including a list of components and example usage, see [our website](https://vmware.github.io/clarity). + +## Code style +Run prettier fix: +```bash +npm run lint:fix +``` + +## Generate docs +Typedoc is used for generating typescript documentation based on the code. +That part is automated and beign done as a part of CI job. + +# Troubleshooting + +## Makedata service "could not create directory" error + +The dcpath folder should have its permissions set so that the system account (SYSUSERID) can both read and write to it. + +Example: + +If dcpath is: '/tmp/dc' + +Run: +``` +chmod 777 /tmp/dc +``` \ No newline at end of file diff --git a/LICENCE.md b/LICENCE.md new file mode 100644 index 0000000..ce65cf9 --- /dev/null +++ b/LICENCE.md @@ -0,0 +1,27 @@ +Licence Agreement for Data Controller for SAS® +==================== + +Copyright (c) Bowe IO Ltd + +Data Controller is a software distributed by 4GL Apps, a brand owned by Bowe IO Ltd, a UK Limited Company headquarted in 29 Oldfield Rd, Cumbria, registered by companies house under number 08777171, VAT number: 203914240 + +This software is protected by applicable copyright laws, including international treaties, and dual- +licensed – depending on whether your use for commercial purposes, meaning intended for or +resulting in commercial advantage or monetary compensation, or not. + +If your use is strictly personal or solely for evaluation purposes, meaning for the purposes of testing +the suitability, performance, and usefulness of this software outside the production environment, +you agree to be bound by the terms included in the "licence-non-commercial-datacontroller.md" file. + +Your use of this software for commercial purposes is subject to the terms included in an applicable +license agreement. + +In any case, you must not make any such use of this software as to develop software which may be +considered competitive with this software. + +UNLESS EXPRESSLY AGREED OTHERWISE, 4GL APPS PROVIDES THIS SOFTWARE ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, AND IN NO EVENT AND UNDER NO +LEGAL THEORY, SHALL 4GL APPS BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT, +INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM +USE OR INABILITY TO USE THIS SOFTWARE. + diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/client/.dockerignore b/client/.dockerignore new file mode 100644 index 0000000..f95b09f --- /dev/null +++ b/client/.dockerignore @@ -0,0 +1,14 @@ +.vscode/ +coverage/ +docs/ +html-report/ +node_modules/ +typings/ +**/*npm-debug.log.* +**/*yarn-error.log.* +.idea/ +.DS_Store +cypress/screenshots +cypress/videos +.env* +.sasjsrc diff --git a/client/.editorconfig b/client/.editorconfig new file mode 100644 index 0000000..59d9a3a --- /dev/null +++ b/client/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/client/.eslintrc.json b/client/.eslintrc.json new file mode 100644 index 0000000..c7a3034 --- /dev/null +++ b/client/.eslintrc.json @@ -0,0 +1,46 @@ +{ + "root": true, + "ignorePatterns": [ + "projects/**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "app", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "app", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "extends": [ + "plugin:@angular-eslint/template/recommended" + ], + "rules": {} + } + ] +} diff --git a/client/.hintrc b/client/.hintrc new file mode 100644 index 0000000..ee107bc --- /dev/null +++ b/client/.hintrc @@ -0,0 +1,5 @@ +{ + "extends": [ + "development" + ] +} \ No newline at end of file diff --git a/client/.vscode/.editorconfig b/client/.vscode/.editorconfig new file mode 100644 index 0000000..831610e --- /dev/null +++ b/client/.vscode/.editorconfig @@ -0,0 +1,9 @@ +{ + "search.exclude": { + "**/sasjsbuild/**": true, + "**/dist/**":true + }, + "editor.insertSpaces": true, + "editor.tabSize": 2, + "trim_trailing_whitespace": true +} diff --git a/client/.vscode/launch.json b/client/.vscode/launch.json new file mode 100644 index 0000000..8f814bd --- /dev/null +++ b/client/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "chrome", + "request": "attach", + "name": "Launch Chrome", + "port": 9222, + "webRoot": "${workspaceFolder}" + } + ] +} diff --git a/client/.vscode/settings.json b/client/.vscode/settings.json new file mode 100644 index 0000000..dcd791d --- /dev/null +++ b/client/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.trimTrailingWhitespace": true, + "editor.rulers": [ + 107 + ] +} \ No newline at end of file diff --git a/client/Dockerfile b/client/Dockerfile new file mode 100644 index 0000000..43f720a --- /dev/null +++ b/client/Dockerfile @@ -0,0 +1,13 @@ +FROM node:14-alpine as builder +WORKDIR '/app' +COPY ./package.json ./ +COPY ./package-lock.json ./ +COPY ./.npmrc ./ +RUN npm i +COPY . . +RUN npm run build + +FROM nginx +EXPOSE 3000 +COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf +COPY --from=builder /app/dist /usr/share/nginx/html diff --git a/client/Dockerfile.dev b/client/Dockerfile.dev new file mode 100644 index 0000000..a537f3b --- /dev/null +++ b/client/Dockerfile.dev @@ -0,0 +1,8 @@ +FROM node:14-alpine +WORKDIR '/app' +COPY ./package.json ./ +COPY ./package-lock.json ./ +COPY ./.npmrc ./ +RUN npm i +COPY . . +CMD ["npm", "run", "start"] \ No newline at end of file diff --git a/client/angular.json b/client/angular.json new file mode 100644 index 0000000..6a8c96c --- /dev/null +++ b/client/angular.json @@ -0,0 +1,169 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "cli": { + "analytics": false + }, + "version": 1, + "newProjectRoot": "projects", + "projects": { + "datacontroller": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + }, + "@schematics/angular:application": { + "strict": true + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "allowedCommonJsDependencies": [ + "handsontable", + "core-js", + "pikaday", + "querystring", + "punycode", + "url", + "rxjs", + "rxjs-compat", + "d3-graphviz", + "save-svg-as-png", + "@sheet/perf", + "@sheet/crypto", + "iconv-lite", + "buffer/", + "zone.js", + "text-encoding", + "crypto-js/md5", + "buffer", + "numbro", + "@clr/icons", + "@sasjs/adapter", + "@sasjs/utils/input/validators", + "@sasjs/utils/utils/bytesToSize", + "base64-arraybuffer", + "@handsontable/formulajs" + ], + "polyfills": [ + "src/polyfills.ts", + "zone.js" + ], + "outputPath": "dist", + "resourcesOutputPath": "images", + "index": "src/index.html", + "main": "src/main.ts", + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "src/images" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [ + "node_modules/@clr/icons/clr-icons.min.js", + "node_modules/marked/marked.min.js" + ] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "13mb", + "maximumError": "15mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "7kb", + "maximumError": "10kb" + } + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "outputHashing": "all", + "optimization": { + "scripts": true, + "styles": { + "minify": true, + "inlineCritical": false + }, + "fonts": true + } + }, + "development": { + "vendorChunk": true, + "extractLicenses": false, + "buildOptimizer": false, + "sourceMap": true, + "optimization": false, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "browserTarget": "datacontroller:build:production" + }, + "development": { + "browserTarget": "datacontroller:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "datacontroller:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "tsconfig.spec.json", + "inlineStyleLanguage": "scss", + "codeCoverage": true, + "polyfills": [ + "src/polyfills.ts", + "zone.js", + "zone.js/testing" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [ + + ], + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "karmaConfig": "karma.conf.js" + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "src/**/*.ts", + "src/**/*.html" + ] + } + } + } + } + } +} diff --git a/client/cypress.config.ts b/client/cypress.config.ts new file mode 100644 index 0000000..0d639a2 --- /dev/null +++ b/client/cypress.config.ts @@ -0,0 +1,28 @@ +import { defineConfig } from 'cypress' + +export default defineConfig({ + reporter: 'mochawesome', + reporterOptions: { + reportDir: 'cypress/results', + overwrite: false, + html: true, + json: false, + }, + chromeWebSecurity: false, + defaultCommandTimeout: 30000, + env: { + hosturl:"http://localhost:4200", + appLocation: "", + site_id_SAS9: "70221618", + site_id_SASVIYA: "70253615", + site_id_SASJS: "123", + serverType: "SASJS", + libraryToOpenIncludes_SASVIYA: "viya", + libraryToOpenIncludes_SAS9: "dc", + libraryToOpenIncludes_SASJS: "dc", + debug: false, + screenshotOnRunFailure: false, + longerCommandTimeout: 50000, + testLicenceUserLimits: false + } +}) diff --git a/client/cypress.env.example.json b/client/cypress.env.example.json new file mode 100644 index 0000000..697b15f --- /dev/null +++ b/client/cypress.env.example.json @@ -0,0 +1,4 @@ +{ + "username": "sas_username", + "password": "sas_password" +} \ No newline at end of file diff --git a/client/cypress/fixtures/example.json b/client/cypress/fixtures/example.json new file mode 100644 index 0000000..da18d93 --- /dev/null +++ b/client/cypress/fixtures/example.json @@ -0,0 +1,5 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io", + "body": "Fixtures are a great way to mock data for responses to routes" +} \ No newline at end of file diff --git a/client/cypress/fixtures/excels/15mb_excel.xlsx b/client/cypress/fixtures/excels/15mb_excel.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b15d2bb8afbde2ea3a3164b147e497e6af4fc802 GIT binary patch literal 15279267 zcmeF430M=?`navNE!9>V%c-qhs8el`Q^mDjwMc6@mAVJROvwUPSt7Csgv~8hMe(>` z5XF5NMFE*X*$GIjf<^=}2m&IY0Tofih)Tqe{IU0XZ>@Df`};q=z2o={GhYsmaORvZ zlkvRYJ9WaVUCcYZ-pQ;}r%ru3sn>RgZm)Fe^!{s|I=$P;th4AlUmuy9kIY37I>#+Q zGBCv3>r=W*XUm&OC!JkgNWP;9p~And?)5=N@$A~mVIkXW z?)um*+q0ECJK8e$^{Eq&MfciW@p&hAapQq^hVwJl_dMCVcUWeR3n4ML4)Svo{RS?v z>gCzpzr4xiWbx?E<7_;K=Z467tQQLNKRNsLp?)i-^Id~0S2I)}f!Wz8yivezHC`^R z99bvcba%RUXXnAo)^6+Gm|ygImeOO*=e^&q5TLmZZ_iYxu5TJMusYkNZaErdxxjH# z&lKzEx4&3BGkoW;vzdsSsX@Vx-tu+~K%&0MN__j-Wm{&_!#eH!_5(Vp(3 z{JTvaGbClw*`4yMhbD|hONP9?Wa#ngprLPCj6bwwrhdvtx$+Oxx4*W*eFN$)*nik9 zuUq@< zbn$od3a}pdV9(9U|KX|ln_oR4a?+HegWg)!WN%omZYix=`_9-2!Qa|v^${#w^uzfc zsjGMQ{jf^)#YgW5dM|l(ocz#2Lw;q|*Q*=UeeP<9C9LdeKKiq?U}jl#t6$(7R-gNC z_}(w!VlFSJ^iJvBP2de@Iiq)<*I(__X~Y|yI`wGpnGi4QU|;{)Gkkq#KY07vPA@I>1iYxH2(mpgj~?zSAcE--ndP0NjSaZ^*AcJ48EORg|2oM!HFsxa?5&wEq! znC1eRP}$`OJ>cTvfL zSE&--pU3a?Y2mzv@52j9?|fapw#$`C8x-bW@@n6F@6%hU+dZ~k7*z8P5&7eYw~uPx zoj5Hp;=(P_pdZaOi&p(OwQpZA@14mrzFf30XP1-n?tZ@vnDgdkYqa;ZFHdxufo57c z!>NuxbPi6M{K4`4?-vhLFi{^Z>~2uJvczdz=QED6OJCo5>C2vz7M*R`lXz>~vNfmC zoB7vzpI_#Bb*oq0`JloP`^SS8YRB6X;@lbC zSBsAxJuzs&nS`$=+&G)Ju&4OvmJ{`_bUtU8{-l$~2$Ni+K`b6%ZL zv1EeP=Z;f8jO^Dx@4JEVPW}H8*3iB2?&*wc8#iD2%q4m1@zcw`J6?QUA@@i>t^Tkw z=lZbFpR!_dSB(knUO6{)^K||k{inCH<_)7f+m_soU3C|KS2%Fsu$JTYd;NcGvp)X8 z{IxUucPFbdG@5x^Pwgw+Am6yC`|xE0;vrL3lWnwUpAe5vnelOZe`;-iWnBBT>D|ff zmG&v~&$pJ}PMn8tGq1GY{IyTK|Ls57k%gYQgWg)&6qd6@bI32!I5mINy#8T_(kkB= zbg<|0NnSJKY(wvFj=J&Hfj!ZuclRCEJh;I9{>a8~>f)%e`|KzIEcBuXoKb$?Axlg&&^QebDX1if-$6t{ITD zc$UHWJ*UpEg>K&^UU%{6@mHPf#`t|i_1!liv&%HY(1IC5(q|u8Tgof!c3d!KRLoG3 zb-#dQtG6N+G_)Rs!wPNh`je)HZhtg#Qa>NL4!hTPa)H5J-)|oh|4Oz2Qa3kQfc39m z20zHUThEIkK5hxTeDVG(mq(jr2luT=I^OfkH)bE2J^cRsF*SpScz09Sz5PSwo3A%l zEf*Y{yy$R`#htv8vdV7A9q$)_TF}zC#Uf{+?w;-ZyV`YS zw)2}W2iF*HE>CnhU-gOMdYSc@&=zB957oRoRa-2a+Z^M?qjfF5)eB7xZOePq z7%!d)w#`}4)(~vFK+{sQptZSZ%>B}RHLBLT%X^v9j!?cPI6M1ZTa&8o@}2B^m#5UI zj2GKf18&{D6P#ErFE<6t4R?auO0JEh158?{$gPzWx8Fpyw(_9qzbuH_=V}#-J?5p$V2Yuxr}H&bH#LKLyqb0 zmUQ3hL-*S5%k>9t?K7nnneN?G8E&7P;5!z=5G@y7yJE^Iw>EBB+1B8@a)BY}P+P;48sm*?y-XfCh9PgLTJJ>Lj@HkR88|?9o2Px((*BR1%rf0He$iB82x)C?X=-lGYRXyYcQeFrZ{?IRWa|{)YD4q!%1;)Q zw|ZE-x3Hx(tE^`J^-Jq03*)`!YpQDFjiZeVgyHruJXtkZNIb^wF~RD;LpZYna$}%Xi+_iPfssM&Ih3 zdndoJxN$8)bYE9`e8<)zRqKP_EW@K_zG41?_vh=Af-S}vn|*EX7w(fA4;=C}ni2+g zb6-+1BWO{@go5saM<2OfE4kaUrmaizw1QKEMjyZ4Ie9_>J1Fbe_1BX{1!LUrx8!)V zY_yqvH@xCq_o9vKj|^Nd8J|@W)c=MkFj5$ByQ1oJJP&40>(lJ_5UOM&#HC8!}^Y`n?=Lqn17n6Gdiwt_Oa2ZJlHEnoMAmC-J5N38x`Ag8rc1cnX<_gNVQc{}3u(||l)JH^ou zhix5o{|w$5+xzk0AGVCs4+ZkQ+9H8r6SkeE^RO~b%-iuW7}B`$@!;bvS#6P{ArsqD zx+_*jao&#o`T!vRO)y*R@ObcdEyJ*Cs;-xnacrJTtiBtN@6uWe437q#`y@Ob{B6tj z(dCfWKFTJ5_R(hTXo$fof$sOge%6?JEclz2ae4^kG1^3dVLetk=qM}W_&k>m1{rOl zqahWmNL`tgQJCklUq2hjI~ZJzReaqDE93WhHL>~+fqb{tS77L1Fx|>X=GDaOML@n^ z>+5J>u*y-_(O{f@G?4GpHVF*duxgqv*vdFLucm{+L~WC!;Sg3)x)v*=b6(AU{X8J= zU~mbRPu2CXGJcz98>@cfi_aKYZ!&pi`dhe!T}U zC1`gz8j`V`)D>A7I~W`?-hF++mzyL*j=F9*F>zhR=R+sEZ!7qE(}E$dy1kb_F{;9H zsDpby_e_F%z2h~V%4`G3OCp@eVJETFi9Y})xuNs~vuJQB ziI9*fCvk`q-x}U>L#hO`jo`Ip;wN%g0S;S-*U{yK`mJDBGA$$boWf_Fc%z}G2fC3^zYYA7Ooxzti|}P9o(+umKz9@Bw}Xqx z^n7wp5x(ohvxN;F$e2*SqqM=zpZ^W)DMha`;X46HA(oJ`)A$`Be=Ky6qHaw1E-*ZW zSWezPjXxFg?O>!7y~~8tz%hkbNy;>MkdXg9ES3iD4EP>>#Ki6fp(%6(*`*kd6)Nmu z?^&oX6T1g&N}<=0ON+6CP%$0~XQ3~d*cgzRLPwKb&fpnB#YDJy78=IH?k%0L?VAD0 zS?C{(>0~A&_9)qA#+Rc zW}#vloa>3EGTrZ}-b4C%>3Gt$6thAe3G+RXkdf{OeyKD|)|KKMA@4`nbvBy8 zNE3h}l};jE&*D=;o)C_ojXW7C0}iIrX=L45TrK2@A)bx=87T`iskD-GEyFj2JZG3c z8_i{;i9nZ1=a6+}*eK*phh4qUVn%uZ@Y3ibq-#0uF5=CASB^gs z@mwMHLXnI#3GmbCeA2Z74;1m-VZImI%t(`gUmAUitgFCdL_8_%>WyedngSGQbTR3A z4o?>GJmGk66wgRg!ND~8ELnFBJBxT;5PPE}Mw$jRY4kbLwG#V?cs?-S8z~uSI?$z! zDh2i^hpA5oucXr#$iCd(PtxB3=OW^g*YX`b_X`I$clp zt-^anyg(T5gU&Mb%F;~(kHdT)bdHf`0l#$m23c2yb40ul*wq(l8EH09q|>)Z*J^x9 z#G4Dp`=SO$dI%g$r|*(=)wo*3n-8%sy2YFd^!DT}fbqWQE>oWaE~e84a!(DuE8@vv zgD)~N^(yd62HlD3djY>L=KTz<=AhTv`oo}42Hl0)a{<36<}HDqa{_mDOI`Vin70(- zIjAQqJp%X{bXUstA|5E_Era=UP;XXx6!>M(-Kn~Zc#N1A4!imxf|ce1MF!oIa@FF= zVjkWZXeMnh!q=Q?*Qb=#uk80ne1A9jR&0jC0OZBS7J|%7dIZ(w3f77hTjAyaBx7Swfr?CeG_~{!z9m*{hvx#&d^WZS z+{>hGsV?=nvqZ5I_LiZgZ0u?9fs+1?T3U~LN)$8{%Frq{Rs%*V>2Xw-tC)}|_Q1_D z6vf6C11BXtfm(VM50NPL!gDgTm5n_ELY4Fss!IbND^bM4-hpTj8(RW4Dd}m{(gy4x zQN%-GAWC3kOF^cRrl>C0@C=C}0d5XNDQxUnP@$wn)Y5C%U!q{)xj>Z7#+HG5O4^0$ zavd+0C=S5hK`57vEe9WD(KD%~*KwpokpzW7sDO>F03)+#52{NerX`9LxH$-wu(9WW zQx-j&TH1({B#Jb6E(o1xV=F;u7VS%Qxq**J6dAC0Fsfr?&x1`_bO5#V1}>H;lu#Iq zuCuXKATx^&rn)p?twfOxHwUBJY-}~C$fD;_OPla5i6RG{3q}Suwg%kGqUBVVo4B*H z;xOzTg1RKeUH~6t(@UtOH*rsA#SthBL2o6-UIZhv>E%=x9VVO=xo~p`GEa=v0;g>Y~wCdSr*P1*E1YUwTP;H=1p!cg>O zV(cZ5nN3GiU7GO>XGHypGFOvzs8{u1j`R%IgU0X)TnwR-h zpDz4R8OjB@4&ep^HxanZz-7h1)jLAEta*b^b#b9c89HHv@72o#sAJiM&H?9-74QsTkU<|waQw{;*28N@dCq|a zGw=Tr^h;14*)>ZL)W6Z8GA3g}VDznlcO+f21tI-)4z)4r3G1VWSO+?HJtUah|Bl18 znDPm!(f-zVoV(@-<~Q#acNEBcz;IdvmHsxZjm9ok3*+=L9Xa^$S4c~Ln0*0KYs9}m zFGib=YpfPFf9#m&3sjBsd$?WvVGoXYuFclU7^~l{jljPi z96cHgmYshhwxel>9aqC*PcS3W!vw5K0fXDDB2@@+GkB` z;vR$59%=C_!S+w^>~Xs6A%~WGE%H}1?a3|LA+~4pXU)qFJe^Qe#p-(j6RmX-7*=9A zUuSJ)M0t+|v&|Eq*1}PjXk~QFQ^o5kV2aneI2!h2c?W}&@>Fs95x}%pTO%-R!SZQ3 zUn^q=gTcVWYHJ(~Sy)c#nyieHJk@@E2ZOc(!*XnzsNS$iqqOU8unpR2ZIyxZGuU6Km<-R&LSHkn`@p>vdI#C11TPjUro!Hy$c~AP1s|l+yUC>` zI8vx^fI?3+k%^51BU9;pWS7#0`pTt59678M#|rt5Fv$~9jM;wRmP#;WN-53|@+o-B z6S**E2_P($I7kjVi`7ED6C5%dc`#-Sh)E?<$&|CWT*wze|JlfwF=IhqDv?PJE5r3d zz62)CM!}3(BDj=F93oT7uwKY_fwyKOIb(JJyp~4%LJlj(W+MJiaEKRL&X^qp{nCg$ zGNl~9FXGRH{$418F-rm{jW|ILtH72bz8g&PLeY#_GH^>H3dxiT{0|Y|1K#pNI~cPR z5SB)0$YJNOy@)>x4)I3&7_(FmlSY)1Dd+HyBK~aX?~M`}vow&GMpTf)DzQ|=_l8N{ zD4j7&2ba=_Dl(-Khlp(IUw2UW!d7o|n6bG~1NxSnHixhrvln+ufmYJY`I(>=E zJ&!kw6ajFq4?4|QD!~uw^i|TX3df5Sfl%plC-zzhs$lH1fOk4^gDk1S*&BIMLNblr*z$oz3*w#=~mLU z2Hz0z7Q%dA)XGRzK$lJ%$+{YB6!8|pu5(alR(crlGU(2f>jm6h%v%h{&p};T=`Ub# z2K_o!q>Po^zJNa!^OwTNIp|$B{0MN&Ai7bqi+GTjzYG@7K_9Z=M?qi)(Sy2u5q~4* zhr^zJ=rcAv7p%`9-lb$(JXL(CUiBUph&33_@IwPwbsjjBLA+0y*J4+(W)-CU&~R3L z3{+(hA5l@YSSHr2fm%Og!>W&iwhZD^%DfIQ6>HW)!XF`4tp*=w5`C$tIvgd|M8X;V zXcDVF0cjL@sx`ny zN!U~7S8-p7W)GxgXg#Yg1`;JPk&3#CheLrUUD%KRF3m1q(m9f(p{^;uA*B*awIH7t{8Sf~v| zhgfwPXj2l?Df8=isYG)C5N<{+Xp-QJAXLbzD}YTFA*IY4@g9jL z1=2yNlvSStk}SfDifY6u5=|P^2B9ieT?rOs5pyW>8#q^@$$&&Ky2Pr_gKb%ajEcH} zOC%a4oDqx~S#=dSltqM4=1sUxqREDIFuKF4t3g#3F`tTR!nY-w9H86oKHMD;~rlTCzE<~rQhS(6Lt5Cjs{ zS|G_LR#8zpJj_{h3~EEr$BF7%uppaQOPSxocFr0#BtlWYM0Fk5mQ6%aQMa(bS(6WE zgrWh7>Pz5IHnEX1Z^o|9ngU3NqTz|^%YcK*IH-(+%Km0h8OO?UX^l&3f0))pvgY@y zve5`%O(A#4^~2wN5Ez$7jCNXYIWlojs}=41%@Cj0_X^gw_y(QN@%8vVpwj;Pg$ts8 znU?s&*vs1&el+>@U#yg&XhdTDgZn~y3ngpDKF*p#$OX9$;RXXY5gud)t{x9ppolBZ z#1*FEigIyP%KrWp+WuCID~Bj>hysTw{QVIHu5Jrgv*yL>^>9@WxH1r22@J0M2Uq%p zs|EA-uY==Ue>u#D+i`usjRS5PaH)XHgnyY#SiNgYaQ)?vm7&XhxI?ZVo^KEsZAUak z$lD@J#>TRm=RrADE(H_!#v4F>wOwN)EkV(r;Rms`iT(dVrj+UN`IG#QTY ze_1)7i&c*PF0GxA7mck!`-xzFoZdkf^US~lICO+d`SZ#>ANoN5g=Jop3pxU2?*5OI zGxW>foIF$6ImYVW+t(`u|3*6>BA$Qz^-*p!M9)4XJO7P%KJnlM<%W;A5&y}}c35us z5Sjhwx4)p=@DaT9$#TOry=Fb9{_v?->6NO%&!atjmfafo6aT{Vg>(}eqSm__KrvC}PAW8ZNi28yg z=_4R&(~FU$kASH17bHm^0a0I&Bz*)#eL<4+5fJqSNzz9^RMU%*q>q58^1(0W(Y!vE zz3v}##S}KZB5X!Qm}^CtdqtSEBFwWQ%&Q{Iry^`lMVNm@n5-f!s3I(+B5ZC&*!+sH zg%x3oD#8|5ge|QITUHSkUJ-^X!d6v;t*HoGTM-sn5p#QpY?oV5ANQbL?m>M#f_8ZX z^^peck_Ppe6|`$sP#@2rU7kUGW(Vz>9n{AwXqQ(|AMc=D-a&nQf_C}bwVi+dho8E9 z^VX|_yhd)V7-wyi=6^Hj`ai60xuco{v#lU3neZcrox*A-Ch}XwNI1#^)hAeP198c8 zAenm#pL0@-hI2j8%>>Ks;6ySVO4=3S1}B9LRC*wNg5?fyHJM&O<`&^rCxtC+^#FNw z^dhqFY5cm7_bs%NqSu-FouE$&y_DQ@8owvxeFr_Is5?`?3w)bGhm(CZ_;Vo-!FVZp zkEy4@Pbu^&a*w8=JJ8DJa3Kgc?2^>xq6~?Bl?IRAMh#Qi8V%HPhf?&pVpoyX@n^q*NlF6qMow zp~ev&@kCCH{eIw`O0Z-}Db5yZDA;*6`iZem0IO4pBvNn|7YH>@aO`X}i?L?_lS-tK zC1>$@p+*E3&qjWXJqrp`2_-2g!`Fox2|O|zg);VupfQ!mAxp}zL8x(ooxRY{jQs)d zb{cVn6qMt)M4F%ASTD4Ku|Eg~q!Gu+l5+f!NHY^I_CgBAJ_$@pBl1Z>1^!Z`af3&^ z&?d${8F;4=r^u2D{Iy8q0Xuu6U5tGSSe-@`lY(=2qDV6fj`c=yjD0F#(ulKU$vG?* zX=cO4-sm7>p9Tukh;yW%5_^d>-tdSw%4F=*L1P+GO}Yp_1^3eE8nVlIyjY}|1AF_R zTqZUHe2`Apl1tCyNRh%H3Vl!k6PpP}rqfr*E>)NoDP(Z74=Q0|mB1;TzDCw;t_5!C zL?f9}g)>C_V0g<1)i7q+AS|8Gk;AI7TEq{9LwwN{#_SM?Nhj`*Db=`K#GeQKeNhu* zmILzAiF>5&xjzT~RQ2}kWs^aeQRWwMU$JH>q~{>Os*eCk2JsdZbrBB}YnDOn9P}}( zJ_;6O5bsdtT5KoQghRp)^<&k!U|R-ZPRUz^mJWUhvf+6kHG}9y-PYpiV*V-^>4%20 z;m1H}2Js;!tHpD~{57!H4~=HSkApiIgaviG7B3R>*TSCu=sPxC4L~OG86~U3YsLIX z=-`hgu;C}b@J!+h>UJI8DdtDPNPjeq4bKOTnFOR{m+%2Ge*-M`Mr^Wou&>;ZLX2T0XY9=v)x_ud65c9Xf$N&_;hMxkZ znZ#&Hb_L%Q^S8s|05p#cF9LTm30vy+72HX}-wAul&=NNMGyqECJ4#lM-;wZX=paKY z*>DXQt|Z1$x9jnz68;_-DMRbn@M7SoBqmU@t9X!vzZVwE&=xlQ3fcl@i!8F zEbJMGcC+CnV7-!Uya1CCk5Y)aOM4@mfFus8@+vf-5=FpKb|Za3n?5`G5k8H{S# z@bh4O77;+nZs5}rz7jeFqibw<6-dn@f~ng#@C6A!8%74BW;VPUlx7k0C|MJ}DdFe9 z;$U>24X*)rvIseKy9sx4<{ySVL(r><;THhNCYDgLoA@1P{t@U9g1RM!Uj)OmiRIMo zoA^^_elCm*LGLDpYk^}nv67PM@E~XYF<2aeK1>X+1%cT_1a(`7zj5ZPVb4(XSz>q{ zSf5R-qhz=6RA+uZbO=Q-G5iup%_gF$+qdv^XMO>U3`Ii|!!LuEm2U*yD-FCpFJL9E_wXH=$xpW(Cmve# z@tk6_ON)n>MV>v|Hdl7-wU%`kx}Lgr{AbzFQJrT6*>*Rniq7ublFk(<;0hFQkHoo0 z;@l(gzsDnSPS(juOFL?8HOPIcElhVUOl_5kCcSRCs_jyAyQy<|jj6fD*skR?+?w*M zwDXE>+pWq(d0UOD%yyZn^`y1RRQss3)8yMN?bui4>;cJ4k=GmT_D+#kaQTgcHq+^%g6a2j?}jygSlJ`Zp*$vO!mQ|X1M?*DSy91pO%4}gj!ak) z-P;;D$7e@{#x*>2-b3Fta3chF6Fs^aqj?D^Cdk7Jj%`}MyMZh8QFCO=UEYW*MF@>vqlC%1eV z@8?5W^JToB4{6Pp@qRv}HG6?}3+l`4EM7(&`VjYg8FA=C-1B9`p$~D-ml20P#64d| z9QqLVjBfX5y1JjZ9{IuN$rIf-7kstJZ^$**%O|d{`@k}Jsykiq{U*f_=;oe(J?aCi zWPy8p0lDem5KlM6CeTGD;z!c_BzASudE3G zwj^RYX%<=pliX2Rg4q_}mP~k)DTO%0i9Z59j&H86ehU{kX-2}a9_VU<{WicP6G3FjDSX~Z zGa4@TK)M9`?VvE3m`e(Z@O3AR4Lst3?j_jo0FBASLb9X?8=N$@`{AL_d%c!I{7eoz zjm?DoZ{ZLrdV?|B1^T5BVPwi_{JxO?9rTx?9*h|cPztev9HzmRLOy~?Qq+qv+YQ`O zh}C4-pQP_3--tyc7_)ugQVOw+OgV!?g#0P+)+}Vpn8kwEQi)yUuo4_DKi5wVdJm9C&@uX`hW`#Tw=6fO`Bi#@DQfZc~ zE5$iN-jA^BY&3(BCICe$okY5x#ixWkAsjy&c`{N4989It$hxz*TF4VaJRA8lQWj`Z zX(j1ehHnUY&M<#An#)KNfi9KKA?wPpQOKJPyLzF;jPwBDrO`)7*K*ul#G3)fdm+q7 z4}!sI^f9uo9DgF>xkBuPA{l8C;HS~~q-zBpDB`)pd@r<_ktPGbH2M@-SAoZfcv9Ha z8_|q31t`+!V$$^-o-E>d!tvfHo{^@4gK6|xvhEyq7V*3w_C`sJG!1Cd=yRlNCH4{V zd|1FN2^`ajYox5I;oCADP7*1C;5i?3o{7x@q3LuJ*`*pE5h+4o zZ(mf$#Abs{>2x!>v>F$S6my}_7hPv!4}r{dx`pgggS8^X{QcvqCJmr{(H%ye1FF&q z0~u9=Z;Lbwq1G3*F=`cPOD8%}<`-}mv1Sn@=AhSD^eT zYVr4C-U?{thdyWPbHT2Rxo71A%;Pd>K;>$&P^?%9=lY>RtmQFqB7^>bva7|OV#R8x z^h5t(Esuk%8T7|gZY`cGRz$#7KlBZ2sRnOm(tRkqI*i2%1svs%>{-hbpnoRakIJpX zo5hNCaIQa^%39`wA2R9wl-(s9FIKFFN`LetYk3mP%A^NSxtFj~tcZrK{%AUDSpZgK z(t|0x%Q#=G*aSxfASr8E2;ws7;Z*Krd`_&`0_O&xIjrR=a3Yf)N!eY&4PwPMs0=_M ztYs0nnn~MGxmR$jSg`}P2B1Z(id}G&4283n8qi-!BPzEZ_m(Jj z!?`lFmbEMfKPc%RD7&lJN}`B?N*UV7TAl&3l=LJj_bMJGQS5`QGPIMmECDN&G@r6- zz~d!~I5;X0#j=*AAWlg;Qn?LSC{gT(a|6)<*77Vkp`@KCyKC4}qF|sh5M{8IW#Fok zmQcCZ@LY)^5w-@R!>naFcr%OsiL$$nu|#nYjtW9**0KWh&!XL^-0OI=M3D^V2BFie zo!;63oh?y{X(rtduCyVQUb&z*?RME3#-m%I*fvmnbsf zs9;pjT2_I$EIN?Ny@Ah36j^X?FuKWFR)Z5+bSP!lgc~G^Lr@uv^sHqKxSB;TpmLjV zt3;uKt-+{MqU8nfW;XpZWp@*IbyoZWM};7>M9Yhye>NRP<=(`-ofSvn+z|9mqNNu6 zkWH_k>~z@5S&;{oA?W=?%UUoin_f-j>hLIM#c|jgf<8^OtOF~uX$56>3y*hJoPeW3 zk!7OgB@mZQucvZvVWG3)B%B+H1|?cv1}C!VO_W_T_H=1eZY+aZW?f@ zfXjq`p-jkGXgLclS7G80Ewo&aGj4C;%1)g58!B<|p{>|30{}?l98EG-IVPKnb|9j#oi>J(Sw(Y)WGs&|* z)Oyfq_KmpjM>Nq}f;EL%^_L~G=7Gx4URBvEeX7y_aG3KB{AIiY+@;_y1t-JdWH_7* z=hsZg*`K+)!>Sj(JLI~K>$+y{6Q+{;g!$i6J(9COb8saGS8{MA2Ul`%<=+FYeCkN% z9GjeAw4-)aV>@|iYpgWsYvlK@$qoAD^83*$L$izVVw0&^)s9}8PP!P+$lI=%ZtXB# zwQg^uGPcu~^0!RaT#UC`O!~GO)7>fZw&QYBrHe`DVyZb??sGs=zS#S~fV4lfY+C%v zU;c)^bn%KgFu^UlcwnjoX9p(*CVguD^9`5hHpw&RzMhSgYg@ytrB;_Du@GIm7j7^AfYa^268JQpjYgDx7Y z1cqNjarz0*4*d%n&DkBVkA3d#-`M9TCp*G`{)VnRxz7G6sOA3uSUew~nvY5}zn)L& z9%V5F2L6*GFO5vL6PMet>dAu3$$2$#`q4oCkdAyp%O@d|f5=fjA!r+`f8z;Yegjvo z#O;vav(U*S6Le2TCS&y!FukQq)nD$f+JcLApTTDhYk5t}*|%vlxb)Nkkn z_vnH_o7{$+aZNk1YMs*;L#Md!DEMYm*pPSKzRF(}<B7~&iB=&OB41h=6P-cRCG-ymBoXL`tc)pXy8g_O^za-di z1aBu3Ge|)JUge}249B{o6A3=I{~Q2QGIyxu5D#=E!E76dNhSixlvB9ei9Z_pd!VKS zv+W=+nFu9^72$d(z70(BKrIPoJHVx6VgZ>_g!N8*TX@R@nG)!-KSiMFDRUR(YVatb zVjOIhqE8viJzzx&tsw1+@pz%)2RLdLvSch{KwJvFp3E)ALZM;;oI48*Vl4N96Djm2 z((VlQ6f)hXuJjS|Cd2$$XcQye2Xra)cCzjaUMS>Eg8G(U@Tg_<8BF&nut>IASYl}I6@&f*fGMhIujM&68?0f$nF4AQ&|*9kRZNY6%r zjG6^isYEszRfca1HO^2w8!ceeiJ&c&I82(C<1Ql2bVzuiFh+d3DJ3(|&QLl@dgnu0DAhM zQ%rp(_%@xcC;L|6y&_&9jQ2rjnR;dEZuZYHXiiaX5!%(@29aU`RQe)4W2pjH)9E%c zw+6S06mr<=i#oBEhryc}^edFz1>9Av_!*9xgUndVUqJs1`ZX%|0`4ugxkd+RmcYex z5RbJ#0w!e;T`9pu{H0hE29L}^AF%dEfp-ScohrGAzZPqj!_I!F4{M(bR%Z}BDS;MG z6l+$%v3_@G6Q|JR6q=ku)5rPmv5Hf$|5gwAKNui{bv_D1W&R^RTfR>>Yj2%U!PX=mFt~9?j6n< z!Z|}YX9(vE;hZ5{Cj4tYx5ZX9safJ+5jCj84}LQW9P38H;CTR3M*=hX4d zYq*KVvQHEMnWk>i_w@>)pTUs=Q_vX*Ce<;L!nH8bzO;bjVM+;O1I^18+Pw%sZ6lDiRFBfrWv|NgiICd-=^z_>eC zUZRg6O#Dl>`G#@ZOqRDT)*E-1$V*xyW|;Vmw)t)24w)<;kUV-TN;f6X7MKKvX&pP@ z>n@h9#1S3Zel=z4e_@|nn`vvcP|$ALbkse7BCSpQhwjSX*(raAO#ZWZB7V48N4N>* zJ3ilLh|^Eg?bA-l+ktJj+r{hUmue>`eE7zUPrDv_eb}JcCtLbWIAy!GaHqdMB4Vi5 z+4i2Bl4qKxYwy43KJ4*3TJcruc4V!cPW)Bu_*@+0)TeQb&#*r3{x{_4A~2x5m)Y6I z>AwJ`X91B<6-)wCf_BFffh4>VX=QvU zihKezStBq!3taT;lc0TSv*)4~M~`dAIwg6k{rW#79(w@OF0JiLa*U3Kec1Gp9HWEI z#me}S9OH{1i@zrx+Y?>Kk;UH;kBL^scYhC$jLl_sb+14%OBMMf3k6erDBQ0tDW64YD3f@ES2X?_alI%)m^36J5U zJ}}>uOb3ulPvK%G#V9EBK-Uvuw}H%LI+*NIgtbnJui<77bUPt-JE%ye=aEZ`@GU3B z7!7y~~8tz%hkbNy;>MkdXg9ES3h!JpL4rv+c}lo|;MU$SgFHvEK(8Q;6+k z$r(IfsF?ygd!la{`&jUHDnXNi61+;N;lr_>=m*9=4h%>o_L3zfc&kt|4KDV)von!1 zX+FuMIrnVmICVN`OCv6j=I8NJk!B7gd{7>v&Hx{$6Ln$5O8KxVwZ$!|^hNS*ZpLR?^>7b@liY32zU?G8D;5iveFrkEdL(;(-$0 zUYIXKn_1}@;HRV~Q*~GI7zr;Hb`3-{D=h&ECG9}DHsHw;UOXHhh~imkDLAO4Nvf^^ zJ4<*85C@_pR(cj_l(dj?y@q`xJQn5$A|)#=13D$`Ox0b(3njb*uxk)H!b-~lFN>Z* zxn9R>B)lXzJ_zNr(h4v*i*~2#uH)?zUJArPsF;YXU91%BD|8mdl* z$2jxUuxltH5~X!OkxfTZuD9@HXI?%WABwCJrI*0LYf*DWouY0EH}GQTL}ZnL=C zEbcaoEAH}NTik_vP|rQ6|7$&{=dK5LJ-Giu=Kc%$vAc8b0}IzB&-&DAv>nkDA#aN? z85_%L=2jF;plXH^f=ohvTJyZ4*q zrp75MqpnHS)_PoJXjf>yUin%jNXvWA>y66cX&-u}m)|&0HFMtKyWx#*Rt`<;<&{`o zec;f{`-ktYXzW%wBF*Cew?Z>k|G=R6D_8jdl>E1w68wvtd_utGSM*PRnAKWa8R-|; zB?=7dvC2V5%^&BeqpXbM^IYQe5XfV+|9<6}!GA-XpdXw$v)TyUF0_mNonG^gBEmeE{rcHJ&S(=I4XIc~>dLH)9SnX5HSu~8kat}0`2<5}u$6I5uUUfUvwbFNn;Z>?u!_>P zSQ&q>>%3Am7|5U6;@59`7Umivamag$@^h!wLSXn0$!hx~=C%4A^69ATbMdPyqP31s zQGOOZC#6d2p4?IutM3I&^z(qKPj2}HEY-!)upi4Eb?xxtGXU21md^rMpU2VJ^fWm2 z4~f;sgYp+NZ$2XKd_nW(BjU~%G;cm4?yPw+^X4NM>x-H4BOP!ncFcWMUpEE5bLO_+wzP2fCjSz60DzCgkMpqK5H_C(tX5{Z8<93bB|JoW^en zHQ&OqQuHQczY7dVA(oLPr}0NZ&3ACI6!92)8ca$dFe%XBFNGQek4Vu6jQ#G?hJx7e z-5@Z9h#+rk@HaxfJ?uFPea3|E0qawUb)>8qPZjdVLx))iGT|{GHHC;KZx`d~LjFV; zISUPC!uNvG6wE0!|IZbgf&2a>h326@Nuk-}&r)bM{7DMUJ)A;wC8yBj6q+2n$+4Tm zId+p{H#v5bV>kcu>?Y?E<9uSAPmJ@4af}MbsQi~ODyLuK=Nu?&{=>h<j=4ZgxoqpZiPFyqMFNuf2mAZ{W72YxJoQsB^Is{ z%Lwi%*GoJ-;&KR=L;nBekO5U3BFrJe|Fwv4HCN<-D{{bPFfM~VX9nA~C77!&v)qS+ zHJ=4*{$`Z?ncQYjSmR>m;A@rBMgP~_ri*U3_yy3%MkYp-`KPAyDFKz$!iVn8=r0ui zIr%pO`ta4?1vqZg_gCzb<2E0~JvnakcQ7Z%ZCV*QZu4<&Q(1gP&ifK#HHbs_ItXeC9jGxa+`pA>p2x#u)~PssZY zdP-4urhXUrHiZr+`)cs#LLP$gQuH2EPlKOQ=vCw%ji=20PcddP9Jk4Fn~bFjTurCj z$lMy-DpJT{t1s%rS{?>(X3(!tb{BA0vEpYqY7R1EEq?+1Gw9c-+zYt3*oNaaFXIbh z{#F))K)Fvhgza;K#?H=eR#10ovF*N$#^zsTlPK*XK%wKgpq zi)?NLM6{i+wQYI-v`u$e#A{Wx-?nT#Z8K07@pe`1cP;O0Y$nShKvgYj*{HGckwtu5 zRXeWb{bHLnvWR|FwLi3MEVf}~5d*4fC$zkO#^#hPVt7^Uq?V0mY;MRRY^rLfw7g$p z(>*W(Rn_uaHkQ~742+mmRXeTa{ZgCBff0^XwT>+tOKp4tBP3O|RLlEkZPo-vxK-6U zwQM|V!v;opSJjGI-Y>H`6&Mj%RV!)PSY~r0Fk(SftxL=M#TAUJ~ zU@K}ETD`FQ^# z1LS|+x8>g6e!acg_WOUmy=UFExWDu6XYX^)&OVziJWrlSHc`IOXUdfuJ7OQ%r1(ZB zmn%1S=qqgQ_(oqYS9*2CDr}m3qpz1MeLD0X+l=;$&MjAN?TCGBW9AoKRIc3Kp$u}YgJ|7e>EWps!BQ=8EN z(Tob^;f~m+Hf90QODmK|JM^E~EDMPKyh0h%5&O)>J0RM*LV3JHzs4piAevjDjO&Q4 zu}KMt_Nq|E>&XJD$RFe!kn4ba49Km3+zJ0YJ0UZ;mFMH4Dx%5)a;;K3Ybcc&)$wGJ zoDgy`kPia6GmyLDU+XtQkyUC}&4-m4HSrIFTTl47v=(ia1&~E@LdeBHJ_zK_K<WRaW@axst(0=YAgyW(H#H-g;Cr>n-aGUHi% zdT=Y>r{ZN1TNXeT$q6AB1Nk73I|I2Z{-u5+_yxB{`BbQi=(2!(tLDxc!^#Y0JXs_s zgj@{dgFx;Kzhzfc2S1i?+PUJ$$-B%MF9%;7DY-e7YCL(phk5xKSHCugHm{Z3g4E^@ zuGHVvUX-TZS{iin%*R&EiSd4Si=@wMoQbdcycVEWo^imtf8kk+Yr>Du>ljHcaAqX^TahxN(BI#V@ucAEUK zZh2*2x4EXHxvirrthd#*udz8(qps|$OVxBXhpFrB`s5nL1jSk{Nv`jn#w=f9IY*l9 z8{PP}Vv1y%XK|^E@H$7mr*V{mE*ayQP%0CKxT|lrA4neOd!ga8M`tAVTaUjmd*=K? zI?n$>%V*VR^6U>EpJ~o@d66+L@WQLlUYseh7aiYZ{>M)$I%__;%JX?G^W{I; zGl~4p;J{yTPyVYg&-0z@B+Q#X38ZXcEzGSv-}&aD zmS?KXDPb2n?Q>mc_Ej(bmY2Dz=clF5RL6ghFHgefx-%!PklJ1kDc~%Kx?K z%w@Ti7dq*buyfVT|0Y87=V_V07@_%ZibE+HjKAE&3;R?xW@g_{qBQ*vFZ{Qunb<9Q zX5Wh3f1R3XxboLiGe4nd&Q~X_`jt$~k*p%GhBX6@kc~w8c{T#2xeLT%SrD=XsZMUlD4T}jsb7h|6X;!J;w0NQOpVBmm&BH#I z*hb!{m|Xo&X_{e4ojw%J8y2H^#HVXFvyb?c&vz0Z@#$*fqkh9;=FC23uI6H=D@Bu3 z9rk%oDo^vd>J5v>S6C*kTYtOZ$oQ#g4(m@8&W_t^S--C4cEi!})6+g(pIEps?yx15 zyS|{|*!Y=gtJYsEbc_>OZsIah1ZxsB4545;pK@EAxZ3e=a^9xZhfS&1xQr`;>BlK` z;zVc1962v=^*1dC2liqa+r zI<6|_HLSjCL(SU2=n^bSpfsjU4t4y#nAfxVu3gfD&D&OdMAh+N3{2ktHHC6%@*c+> z-|^mAvtmB=GY^JV^8RlqA6}Zg&+*lFym!~E_#5?z2V-pV{zS^>mnI)@+;Nxp{+bmF zsrNi~o}P7ja+KrucX`%p?tVfYu#sV$yy#oXp-YpGIIg+ zCi5M?zsGZ0bJw1_dn3aldC^%)(WS{J99P|caqsO-cb8JLHZtZWFFHqQyfpcg-hcmysy^WT}j=& zY3D1i`G;3gPi$hWNtj?_n+7*5IOlPCd~6H^@rmGH9G9A;4` zY-X%WJ};oeT~17M+*`uCx90E~>YB|A&*byTl&hB$(;Wvr_k1WnXx1Jd$}MGD)Jsaj$~6jeXdg`pAoskvwU~zzet1DZP@(PaMZR=Iv$Q-9nx0 z&B#r@b%kP>KKZHRvB$h)?7Q2j9B)QZ@~x{BoAk-g9mkdPzGdItK~3~#JV?HEjpCdh z`2Eg|#0JN2%Xt#EwjcF{H=`o?xsLwpXQ}Xlcl$+^^osRESzF6$H^1yTUiV&*UhtZKdER*sqeR8kkrAl5Wdqo)a zr4K`sJnRN#@RiALGe3C38|JiP7u9kLV`$2-n-r5PlLs>|J>ls)t=N;a!TEc$z%7h- zQl@877GFsm&iq>yZ>H1XaO$-!4E>bp*_4e}5=Sv}s(AC94)3FOZ(+QfGChY9c_mSs z`L}A`5~stF)OlMO(^FhtxoREE>7A9sl2TW%M_11%H1o86PW9i zJZ~rMC~Co0#=I1de2VHy;w0u%B`?%T`%CJGZH)OT9=9mkR}&{Q*FEJ$IcXoEF4@Ld zlHzfjVsSNbD)Z@6-YF;TV^rQY#%C!W1(X$66K68lJ>#V~Y4fQC+Zbz7Jmi$ER};;c zPoME*PTH~55!)G@6pup6;j4+3%yl)qJ5Jgss7tmpHl=tJQAAf0XEUGH@G6|NzoPQC zGq$C8+@ajPnmCWSu9ny2qW@;!#XdT}`xQKCR{TIca}Q9kGM4JH_KWiuSd{ z`OJ0Cd83`R6RAsfFnB2*cPSRv5*IR`KIctx*8Y~t+rc=J;&G3%;#%So=DIqbnX~p; zYQYZ1i4>3fl&#kimocB#@ob&7&r?V2WF)3|d`~%iE%7tvx);1<&e|8LOLj6Yrg%J{ zh^{3%GM~QSxj1VJsJxvFaf(L?K1MdS0lr zwval)mywm?QA*L4CUThT8hBC8+G6SwUq(TSM;XOJnz)|%w1IcZS^E-|=gYX4;_-;G zLYlaVxvr6y;;b#97WgtArFbYPTcwHK%%_b!nX~p4>IgqZb&AJh%3*2ZHs-n}-W_M{ zYt$uvj29^$I_%jBidOV?MXC&@su500qcG1qFF7aoKNcE_qSY#wdFrT*YCb?+m zPyo>C5H zBpzX|d&yhoqFq2;62O?5>hX*s%1GohpT6X|xM&wrc>xT|RF4|U-HgN&%yq3iGK7;1 z;Uq&icaRA^uN!*t`tcZ~(uz!!Ir}F|lp*8$$S*c0zu24%vn9i9$uQf$ewZzp%|vE1 zk=aats%$3mkt82U@{#l=Loe*f&dgxGeOj2w4gWtWu~UiT+`ib*O{KFY4g!^`h;l|c73fHgVU;e{-;GB zM&&*5|Da-1#(n=()yGQnL(vn$HV5D96sQ==q&%xb%@gcC2;J0kuQOToiM#5SUU9JM zJH6#0s#3k;5Y-dC<)NzQdc~ot7QN+Rs!qM)FpDoZZ|4r;jT$#)y5pyXUzdJtv6nME zcO1_&C$q0?e(9V2FDqBqEK`@GrN_Qf3M|!_pM3|0b>r3AEbnD@3 z{{W>~!f-dOY~8=N{9=KtCD-Mf(%3ACFjRBw2k>+&%MyqGq~(7Ws)XU$x}({1JQ1So z9M)>>Go2{eQkv!VZ$Yl>U6y6azQWZ?_pIWZJ{E_wC0pLGXvn_euI1-h6=nKZ6i%0H z$=7Wv&3eOPhiBC()5mGyL6R-Sx=m$SHtZ`KwBE32EeszjX}O_0sWfXK+kdUr7|*I* zrau&)Xf683!7nO)EOzGVhKj;nJ*)KCzl6tql)uvYlRk${t;OM=NLp^`PAbcq!uDUM z742E|lVZq+G5*vLznvKL<{cBO7?y0h@S#1CHTE(7Kai-R3;Tt3^Z&=h~`@3nGdsc;;W(dReBrRFG zE~Qy-SWNY-iZRU)hchKD1-dR}SyZ+^SL;oSqHrroOP+2;X_f)o-(Abcv+9s(#v2yz z=vI_v(b@hRw3oT5jvwmSs(2cdpZV)1oNcT+))OD=W<+mM}+)SpEl0gWs@Nq$?}SvSN3x*Q)fa ziZ=~T3n$j^8y3f~JKePGJgfGZ_6Wm`BrVyxp`}@GSZo_Qr+Lh_3Zv&4cBKJfH(L9? zuI=4btlpE*G4!M6F}o{_hF!PQ4-EV0Ro~aodw1Pc?>XHubW!t|BNax|uiLQ#!)_1_ zb-laptM{Di82V{(qD$QONi9AL$3LJZ1#%rz8(ze?T^9?OXWI%SF5@3k>jSwisSWip zyRM6c%&F}Kc`oD2sMH|t`qYMom~XC&FEP)y7nHb+S5P+x?Npulyi7se6U5z`>d+KZ zblvhA)3KwV!KJL6njORqNOfqAX}oSJW0rIj^thB&QU?ZeccnVC#Eg`xy9?XqS9r-ebA+x;AoZVG0-F5XdYFaS&c@5(umbFo{L%C(Cd>=L6E7P)xS<+jO;ab)~9T>)~N_FUoIh1MnlIhr2Q0Q9LMO_fa ztxI+2jY-b5Y-g7A6+Ct=Q&abZaaE}feKAFumfg&K2~o$&GR10Ugr?x7Yg`{y5ytIF z6=-6*GQ}F^khkOm*2cX>Gx&l#NGN!VKmLYzAS>c6xz5_S0W|g(+>t`T+x)pV#6wv_ z-j+{Z8#jm+{{?rPP%wbM`i5AG74f#*a&6oYn&J!YM4@0HKj4OV3~R^$`TVtU!)OM( zxbF!CgZObb#A8_z1LU8rjT=E@@8Z&gg2DW&H^h3ZAp_-{wQ(b9@w>Pm2n9pR%T3Fu$LPtbkOFTW?3#|l?;a`Uz%mPgylF~PII$)IcdxI zsWkas?g^piSpL>5@iJD;aJjA9_~|sQaBiZ|a~%J0miRN)`VsPFZsTXt?8CVig`O0? zC`;_fsu>}7aT`yg9SCoWfA~zk-fg@oEh(HU5jN=ZtFpvStg~8jU$^n*wEA$aOxU2u ze>+>emNj*xJi=|f1&tcP%@a20^Nq8`>sV(;%K2{NX9=eDF&D?pq6I~8zZ23X@E2!` zH?kIvl3#R-`;aD$;Fbz$2KcD6WxwQ!95g$1fm zth_PuZnro)ntC7iEfMWq{_q^}F4n?#WB!aBaX2gQ9r*-K+yYwA ze(pOW+GPIX9C0LTp|*S`Cyqgr?&s=@XjAwbbHs;OdD`-MoVZVD>iyhzMYQ+$kvZbS ztc5!AC7ig$GL^I>x&J|x}E!300 z;KVu8qzAbEBAPkBE?0b=m8U1~=ES+u)CagAQOo-E4#NCrl{vhXoTnFT1KyC%(PWY$U2~)iCFE?J17(SFJANe{dqBbkGdeO-u zIU(d?ARh#BXCQaQzt(Srw8l-Cxn z&e5b>tZcbu;nJ2FadWb4=eVZ(q=e zKobNS=X%gMg68-Fj+CCu?36m_2p_&7EzaIR=`e zpfP+3nu#!6{v5cvTo}$6rCUI{7o=k+iv4!or%JbUSivb}plMu63}@y88b8n^#S_Do zKZfC|&l1CR%m%3hq{%4t0_lbY?RPu_3C%6gOal#F2$}%UL~RDm8W=A71Toyn2Qb`u zlzs@(^B|o&s!Vzo=9di`=X;=u0uA#6IOR8>84SZUZGhoyU^qn_Nbi8u8>9z3h^F*? z5e-G(z(^L*Gk!iOjS)Wv)JFUW@NGmpK-DbJ+5%P~+AL^yEQT4bfs>e?g7a4ZCZ7Z> z!7Ab%z~!ak26OKpC&riqW9-5)tN^#pTIZv1NF~OIhmI*Y#tFc)I0oV=ti}=5;9RrE z$Kqs#W{1%NIncRZE8u(9(yv} zt|6i^;3&j*0edY#U*E(Gal6Vx7-6n59usaKn#di5ot22=IHrQHX_DJqXnt ztRiM$^#D{a>5J28XNd>QHy3XBbGYHzh${fwbD+8uPy!fwo0#QTnCpW$#(o%MFOIz5 zI7saVb8Um_Z0I-_&=>JTz}bivfK1|(3a^tB*BlOGtimx69f(WPflHd51!EY4y8R}g zA)o|tJfJUNXp!0D>3B)+;TXGNxQTdmyNrX_YvGcHqxuGnF&J<*;@g1jnNaPuC(w#m zF=22?qrzZ}hT|}!p@2{I#Oa-9h)Zghfw~dY62v+{U&LpCvjIbiE;o+DEM?#rK`_Q8 zz)?ZQK~fjEqz9(4xC^j79jYOK62QJ&W{+F=FiQ=5m}zeq<0;@M zZ{wgKHe8YyswL2IBcLxL7jQPB8{l$cmNw%oZH6%};TVVlU2*zFxTM*aVT=`^ZodS$ z6i|Y=7|<86kGPoqcu9M43=bGC7_V-Fv07!ir6T=SfYqto=(I6L#Q%L@pxUZj?T|JW z57<8(=;1;94+jQDMzs9=^hJS$Iy1hv^NNagw(QGjgJRAJ!!9@|KVne)S$AGqX9NGS zzwUkS+lMw-H2x->;pN$!{iq`U&<2(ASBB{|k~Jw89ia|O{MvKzN> zaNE37xersG?zBFT>U_K2U)S}Q_@0qf1@otu{qL{iXZQK{4)->n4&^?;3CVxW`@Et<4TISU zQ~bgW2h{IL&snrKq=g?lTrj3W zXTh$vn{3WZp{>9D!NDa%eIl>k=zd~qq0chPFfnq9EFzAU2!@mlWpb>9wpVoIggmBn zG)=jy?QTr$7(sMO&KGM#c9={ZRDYUkF_~rL96A1G_wywqhnIZ9`cD!_=pt#RWG>?_g>&)>J z+Nz~FFV}{&`$ab1>~3h*so&F9R%y~cv_6e0`iPZq-DLK#`n2?%5pE&v{8D20$nIb zv9Jww&Y%7DTlxC$3#@!1hi3y?0FFnr1e}35i@@9QRM7^OPfAXr+x4qD@eyq` zO9T^2h~j2e#Hjits)ZNJ)j4u&cK3@Vg$5-|Cg+Jzc1>sOzP1N3`f~-TDLI91Av;Y7 z$r+G%8iJ$|BtalyS<{a0Yb%P;w-FGhXmAT57Ur1xc&bGRtI{b_mEB#lq|m6uiphCP zB)fWqkPP7v632H4iD(Zc^Hlk<*9Ce=B*zpXq*pCM>Y$)RyV z{7fRW>!nnSL##^Y+l0grBx;bb7J+0TNE~(K4xHXCCJ{RI`=}N%EIX%2QBHT&l0uV` zF-*?;qR=ZkMbCA=! z!z5x{{W+?|8J3-Mq(yFb-IBr?CCiyF@5iuKf#fVm94UlElmrrPu4OVS(yJ~ro-Oe-1&J3(f>}5i5+i*1T@zlEPX15cq%E z2him-bfF$1x|D9DEjZNnFeY}BATuS0<=(r~q-H{WD%GNt73LgyJFmNb$-&tru1tVNIP_pFp*!W@(%v$LDv~E*Uwu#E!`+5cOTvagS;% zj)~na2usQN+P!zX2_abu62Ux>JOqgxB&C0U3)WY3gm@b=cgZ7(yB>9;BFb6ttrz{D zigg?le0kbe^$^~fJCF%|oqH}5?^QQcr~dGQbwdq;RT#W-E$!M2?_L+V!u!_VeUFIu zO?_LjZ#?!bPsx$ETcyK!w%Zfu{R#HJs-4f~C`7;V!xDxd&adK^{`^P(yWZ`A_MY^A z{o|UBBI_9JxYtCA7cL*#E|P2#o%( zf506O+tmN~(LV)7K9OGep>Q@eo*b{`pNiH$PQw3e`NzlGPRC)04YIMc83#KF=ge${ ziSvUi?7c&*hJJ);uMB{R!+x*-o@{9I63^fJdVM?bEAe-~rEdoxZ2yP&`q%%5E891~ z#Q)*L{@*wl8mu&WgaPqSa5w6BSib$w$p4|Eqc8Kf)a|L?CK;;n!3B4&et#SJ{cV4q?{6b_ByvZB9m!u}NW36j=4-8p+MrN*(ocEir;$Z+LdeBH zJ_zK_K<E>P^@}FSHe}Wer#m-LOCs@M-c7$N|j_A zdOyFpyK{k2*bAk3$YZOIdJ3Ayel2@>Jk;o|m}jZIwwf7o*Pal|t zukPz^P9qGpH*C9S$VW7wx7N0EhI~T9cA}bP+de}+vteaI-@s-~Pnwqc&bfp_vj%Dc zVRn+K2$NBR7Gg7CJ=kSsjezK`mDK|#VYLqM0Aj7Nv^b!j2BA-VH9sXRW-CUfw8vX5ui8XJ*?sd z6kruG3#(wOZMcTjcw_1P^>A}SIJ^Va+J^Ih%MicDD!6PLVzG*dKHEF7P(`2ZvRGrO z7LF1MqLky%;tObo=#5oARM%q_(FLn9P<6yA;)Y4H$J4svlq# zk%rYHP<;=ph!cq^T8LA07+Q3orRht+5rE!^1F#wm)o$>MdLzCBYywYh!walN8B344 z!xTM%!#jtdr4(=(;&)gDUv0xJtRmjP>H(-;!Ri5Hshk6&q`+Yc4_eLwnjxOTY9v(o zSVfG&>VBw3U==Y`UraZ`DcT1uJD_DWq9s!e%Sg!717c zE%QOtv4x+FcYhYld-xBsuQrf%UHT{E!^BYaCqknXc-2$4Dl_jhC#Ix z?4rvMTLABXzqa8yRzr=Y2V7y43OGy&ftC_LGsHVs4TfqSRuN@b1&3{e1gnTCdSZJ0 z8F8IAZAU{nB9k6{(@AXdRx+khV1(TIe{R$2k0c>6)iHV`%W0&W8IM&w`> z{Im^gu!{H@R(C*k308L)OUF9H&3y!iceX>z9KdCW?_(7lwGGp;iuf*8!Cc#*kJYWl zQhO&DWi%Y7Y=M>`fM$q&U{y`=foeOT8DbMw!Cu=?gH^-|T`@f!r^pLhzK534h=qVr zo>0xfDq;p!!ByLU2HVkyguzyN5vOPqv?PM4X(QkXKySn&SoMG^537i~vAO}Ofq-4~ zEftlATYasyG%s5H8ZrzClkA~6bi!s!-|B09V56kEfpEw+Fe^-j#a2=p}zM0hq1p6kIk0&2^vol{?##lziX_Vk(I>d z_ikAb3|Ic!E(W{VZyXqsKOY9`+XDCb+sAU~Anxnl7^@1u-#tk$`~=;9#3VibVUqTQ z{jNz$VRMGHum)J0huC|*ed@S(xsLRU z+B0m<_?CY`Aq-95vQzVCJ}>+4Jvi+ z@2)-M6S?(fYhHRz#*+Xgo3pkhLuG1V;a}0o*B@`~6Kr2N66HfczH$%9MJRua@+~c_ ziPk>EY>hsZE;Df)TFkE0k?yHY_KAFUv$Z5Wr~OGlJ)0BKlF?==vh%O#=Cj^K`8y~d z26Fmdkeg(=^I9@mO)VDsR}hml#kx7zex%MRKN;bYEv8rMoZee|(kF6tR_mSgocF5& zYT29mXL~&3h zVU(@C?h{#*)mo9BvkB$tD0f1+8Orr0wT9R3@rispyY*&z&fco7Cu~kmOK^*+g}c8k zF-exzM#1(D<4=u|ndFTu9$KlhJp$w(qx@Txe~Vd2042l$S#|#Kr{{E5bvfx|%w)*eV!cYjMO%BoC-QDi zYi@duC(7rb{3ObkqkJ05$3+j$ZGDiQ6H(pug3V#5f{B%M+FwRY(r4DL#KN0#Dph7u zGOn0esT0JjP4bCkp!_V#KSy~I${nrGQi`oAb(Fl?c%R6C+}5J>oEz0$HEa$?6-+EV zvA>L%q}A4y#KJQ@l}7uy&tMq+4EVc6!bS%C0Il=POkYvG9sf?t$_TP(A_Vvkrm$n>_am zsvcq`J@5}DCTX*^9kG%=Je43b(KRSuUa1p*sP>#s>{?XJXH^|lAij95|gyeI+Iv6b7BjNsy*%#xftc= zQC@=b29*0+XZqV0{4_;AI&n1RQoqEhNUqQ926A@R( z3)>p=TN?Tk?!vJ@4?K%+{-b{oV#oE$-$XpzQ4ffH*f5D$o^(gz^Y;}H&r2hV*s~QP zVn3F+|4i5)EY{Wu+I&#hzyS3s=oSs51_l#jl@J@WLNp0Z@XOL4!}0>bx7?roho>WcHAvivZQm<@0-X3m7|cK&JwapAu*{JmkDBsDAMfs% zMR`Rx7VSP+%gqZ7sl0QrMsoOIk9ygzb1ocO-+_FcI&pr9v6JL8t{sJT) z1oA=n>plp?7b=l&^OJA$zvd@$|rx2b3m>G@-ZN{ z0&*w()9i$#GnTXkzo{*_FH@rQ(exx}TJtLjKWTP?rX@bC=Uin^wrgK~rABG4j@GoB zYr2aw)kQ{Onsb>UbHdawE5kaAT-!CB^+sVGgfq4+nlQ;G^fkNJDNje6zY?`=ePz+@ z-=;caE4!Efu)A}iQRNFIJtR0a+US+)v~B3U{NnCThEe7VrBz5zO0?Z8)j8X~d-)*) zb5eV3-+n<2tLuQ|*+Kr_T9tVV&hhH#_K#VNu=%%P1!XDsH>jz+{B+Ngt|#~j+xh?qkgg(g`dhgM3% zDMCB!MHt^3F%hr{?XV}Xig*O8`(Z#HRuOk&b)T`c)eUaW9}btHGjRYWtaqBC|XRuLy*6-~0b#1sw2DZ;~% z&=Q5t*g=4!5qrSK8HLW+SAe4tF@!b>O|nD?t+W%YmQ84feFP$J#Cw2E!7v#GSVhdj zY7kVfVHHt~)j(runhQ+Pc{p5#&e*R3?*xE87ORL~VioPM`>~4n1y=oxrS<4(^@T$- zKj`WWn1asO^;ku8!Rk&BIARrX8CKCGyO1#K-i4bRjfd9I5{1s#4**9a(y+P>MtKjb zh?qbdg(g`dfmWJ>Q?vy{BS7ShH~_E-?XcZwK}CFt7F2K0zQ8JCHCDZdy@(A{R0@a7 z&>8z3;2lrU-@+>54XmOa_6k-Jg;?E0>_ux}l(TSXwh6kP0!%??EFY_gQCRf=K?GJ2 zL$L}b*{?DO*7h3C^~q0bNwp2jzoP&f?0&Stjzt?R6>YFCXoD?6->mcp->edSv-#+o z{SrG&={Hu|*Abr94ZqJo>T7Mk(LE^tQN35%zO5!fJsLmXEI4*(e?gVl|45TVjWyv2_smVArD$b^-ceFQ5;Wg+5p_^ug+* z4|XKVhoF2Q*k-d)UWao3C!$H{gB^oD*kRyC=Kw~QleXyqJgVjSHtQPoShoBF3Ec##%qYt(aR@WDEw50;KTSQGTY^3eyo6n(Jg z&=g9D#-R`PJM_VBLb(LxY?Pa! zTn}usrw`=6Kp(6h`d~BA2kU}9Saa~fwxexU3w^Mo&<8t03AWjND9=GT2jv!%wxbXB zWAwqkhd$V2=!2D`4|YBJU}u33HVt+GZ6fZ$o(~%5SP-x1bMp4)|c#qYrig`e0|E4>lHkuy@c0 z`y73+J5W9k<%VFJ%|`jg{MG~MgcFu9w)T6x-rO1cgP|6zn!no;`%`x0lk>d0*;#FdwW@sC(xfE&Tl8^Ln+`vR=!LqkC7DA9da!enKT*wWE`7 z*+~8i-m(#quZAhfucjxzn*Pndn%>=$o+lxHkaIw;1M)E-w*qn}{PXODUi1=)JNbj0 z19BaZj{&(AkUQa@WheaWhrnNv7(SGcx4Bud)r+3um4CUBoRCMpPKqdULdeBH?hOBB z4+5F9P6p5WS}UT+oOLp1oy=J$AB4YH&ic={HR3p}v9rv#$CDl^F|<=eC3xi*OO#}p zoRc?S5Sf~XzCC4OJ&G{Ri{s7F2|f8nJ+J&iRreEmYAQ9)T*F#JdwMH-uer|<2omPQ8Y@5E5lQb^Tny>T2zE|4SsS?^cy}#&uS~>jF z)Sl;+glRUky}9Qc&929f$dpa!qxa5`M{5iT&up#cPH2Jnt>)+FXw;Tv1P*F`a*npS zw3M4nB}W|tI9i%arG*~5jy~PBDMo^5!(Pi zM|=gyKy3Xoq}KYnSgSeq98KD?ETDkEF9GlP1MbHv;ul!;gQ`DP5w~E~_m(W_q)S=2 zU)oB(v%emlOJFMC!+C&7fX5Nf0WuL!qZTm%wR1rmzo7kO&8q^ljBN0}(!nyDaT@V9 z;2uP<%x1VFf@L;i0U}stGo~QkG*+8!2_){acPTMB&XsV(jffS1<%s2gMTn09uOlh| zlMx>Qo*Y%?xBfm=+7jgn_nvc>n4Hmw8Guonp?V3chytu`g6g+eMf@tFL3*|>#@Rpp z1Gvk@aKnCx3_vTyj{!SofxreZ9dRyd0n_)xfbHLX8M562ZVoN8@$;d5fd_FypCNGB zhrlhHF&sv;`T{!C6vKU>XExpz#Mv7_+&;1_J@72kx5^9bvKhH}20!RfatAt~X_h?? zI?%DhGY4XHFYwD|grnF8#YG?{T(drp90)U?!EES|wjR##J#<(KhS`jdp@Y>1=#W%=v84KErj=`i)!48SgVHDVBGXkK4)iUUC_BM1t=WM(QjDC6@jD7^g;GfNyYq_p+ zLL9NY(;3i#e+xRGb(U=m9SpF;F6ht*R@sa;3%GV06z78&y|ZjX5XZaUlHIl-o;aT^ z(4h#tvKb=iVD%w%h{%HuXr46~4;{w3!{w|+G5BUPwxZZHqJgao%hER&I-q-2F%CK$ z;6R7v&>f&}5Nn~>Ze*F25iEs6;GE5~Vw9&0zFHV4cmlfZ}l|&iXQh>IN$l4YcfG&_TTxIv7F+FYwN0aG^uG7IbjD z38SNfmOTi>K`0)D;$6n-vo~NV7~>fRLWhMnpaWWH4c>wdt*$V7k3BK^QgF{^RGGuI ztIvQq6U2mv)<`)IKOuTT<6EJFJ9a354x_+Jn=u|Qry9i>AVwQ)eDnPFWItG$ z3THUORp`(Nw%LpaW^g%W&_P!U9neS1u7}atD87JV@XTh!p!jZhL;Ul5#8Mb?4LYEa z)}R(T+;@V}W1&M47-ut9KnJVaF#3?IAVw#xffB?koo>lY%wT2igAU1HqRkkEXSe|! z+S8!}T4@y(&_T|I(fv>iF4~MDQ@HjkD3%bL6dRTTdTHYyL5Bs{VLfy>1UA}?Na$cC zgbp>AVRSUp#+QINdku{4s8yDJ@eFKI;G@l8;2F+AhmuRs0o}Chd(eT79T+gW7Z_Mm|JvtZ#L`0g)w}+^NbV;$_W4Gca-X zhbAR9HU7|K_e0Z{KQujsrtYxLYsab6Q{LUbTk>F9(%|{S-g$SgCgQy5{iVIz8**nR{VxtfB9UoRY@KG{JzKUxL*I)XZ_`_zj&Ev9uDa) zn2&?i{-!(p`MDfA9uSil=ADuHZzt#HU4OB|z0IdXxes8lp6$QmgZRg}YWiN-oH}D? z)yaI#&+s2z|7VA;Y^uc|7XPjKJ#3Da(AM9igg_=|4504YfMWq25%mE1hz6)dG(znF z`QO%t?65yLsN|FM90$OWg8^4z710T+L!i12tB9Uh9SYSQSRKl5yU~5$RAj^oBhqvS z)h{PPJ=gXUX}a11yK)`+?zVGm&SGI7k)}JmB!P(Dy$RxJC>{*rvnZy}(ssAqHnpI! z5*`!zwSZ=Tt%&afj@<)QOTbx(9{{dIoDH}gaSls&XuWxQPR-ihXMC2SAoDR1UE6k? z%?S|pZL{|rQ{w6!*>KJHxL_xn7$XpkwORUk_|+Fs#}P!eIeqz zfDSrPosLz+_pv$_s&lZ4_z_meL3NSa>KTGeVkW}d(%GB~!aiSnPfAIpcjV=)ZiT6c z$qJL2=xWvbr01-6>uuz-OhGI~@l_P-fw(Qp(v{` zdF~dn-M$d91<=6=s-0Lxe2W9sccD5Aun_SbtQtdApR;;_AndVD(Ehe)Hb-03M}&b+ zF0mur<~iN@rlJEZ%@q^AcD+%0&TLMvlF#}C#A*~9qxd}#$K+TZWmT5zEQo9?C(>yF z-4Txi?m>(LJdGF+n2mT6P>GlTIFQHvSQL82WcIlFeMB%VpfBQLKndbfz;?tHsHK4R zbJQZP7CBH$h_!u%)4RjI5b*|}0}ZOTu!{H{R!yN=idDoXST%#{bIxjKK^U^2#?$`PPg6Q>hD)TuL++nWy|AKY#qn{Dvw$CUFUnZQD*P9K)c; zM9iv;EW{}yFx@P@WxUlk)irCS$}Ag3n+&DW0P!bD(-cCHehC$`T zfY)KbpUL_!0M1H>_9z$uPxD%({^@MLN(`We%MO82Y~f;vk5nNdKJ&)XTDTZuA<%y& zBjyk`zQlj{$|I3eIJRV-XLULZsOO=QV;e z^ku`vgyAWEF7BVk{!9ADO6eb;3^yRd4ajhVzizle|5o;&|Gdv3ZG*lON&hVApCumz z(pX9wOW)jB`k&=TCSPnNUu-2`Z2d2Lv6XzYpR{@WSGpSX6;Yx_@&`EwM!mvC?h{&@*_@bB=@@i`UfG}D?eYNbXWYfzqs~w@3L=s>2(3` z8in~*C`C2+gD=0;UKRV{i^>l>dP5rrs~3N_*2T``+xX(Bi9O@%ca+Szyf(`!Px7Dj zcV>6;pA!D+|CB&}#AL8J`IXE6%kNH*;k9IV?QaRMZSH$Xgx8+4YtZ!6n1}T=+V#qP z!df3{x;uz?+CF7wuROD_wK+_E&aS7c+2~GXW>1GvnEGL_U0?gTN==ntnEJj^Xh*F^ z&Fa<<@eB!mr3$x=vULdwz7U=IN_E**b~iu0yK|XQWxaA}NYDA`gjcFG+t9oDsokAR zjWX+%V?uf^L}$L*TKSfWnz{Uo?gH2DkhfOxGuzdK4>wHJp<2GW??v-{BFOexXXe5L6{tMNGkJAXLv{74g)*2HV;?s#F*a9$fV?Xc>ce5HK1%xaz%FMGVF&cyQG_ zu!`upuR-<*M)C2577nyD?*v=}=!5tfR(C*k304v3V|6=J=V5jGt)}~5$%w=E;jnlc zv`hzFj`%KCw?b7PtBCJlbqiF7VRg%`CM_JLkMQpaQ+=SN9nc)H39H^vt-&f{1y;SF zT7p%?I}r`GX*fk-zg2@1S2zX{oVdbhu-~e|i7Om~2u@sKG}v#|;KUViv z8=>V0v^0ZzR?P$SLEMd1aJ{Mnv5L42tKe3Zf)iI5qtHVE?;{2Srfs;@^dgQJMH&Ey2cSg?K3w5u#GQclh}!|Fh+6@*5W$8k ztjEjpifC9C4>y+$hxEsBRT-4Aua(t zins`H`?_0A6L5;afh)9!7U=>&D&oh0T8MUl_28M6f&o`3N2CKLA2M~t>ZblqTOwlg5xdm`Y2j{JD3gX*<0}(ZZuTrQ4 zH!ZyvFdGq!x5CqiUEvL8p)g7i97@}vg^lH1D&>rzVAQh4D+%DSzH#ZOt>BZ2Z1h*}{2rwH_4tN?7EVsfvi1~o-h`GcR zZG}IBDigZ z^{a_)wMI7rG#^1`ZBJ6Mov_uHaM{kT#$4JQ%%$aFF0CF0+0McsTW<`qZNwm3H3r$v zeu^D#L5K1qhQ*%+66Vx0)BZ!wqu+#|Ju0mbNgztq?(uILp#Qu&vx14sf0aE-MZ~lA z7m3S!b38NZm7x~o&30zPeZKhsI6Xu+i*n+=?Cl==L+osS@web-kIq+$Ui=Z0v_0&H zN$UGulXTTP()fn^@Rp2MrlP?ROz}hL8KpTe%w4Y*N?Mw`;)y2SCEeNa~iGj6KF|hVD%F9r`1?BTlKFMD& z6cT9L2SNg^76#Ui!oXS{2G)Lpfwk{pV66@W)(VEB9P@1tpnNIHFFvuLVgju$B+xow zU~S&uVuMP;99w(HCvq1C*5+Vf?K%vsorUrVD96CsJj}PA1lqZnKx+tr zwGE>ou$GU3wF(TZZNq%qKFqh>h4PP4ZjADGP(Cbr1}4zzV*+gyCeSXzz}oj9u=b!1 z1lF#{z}jpKtlfz6IVeAc@=sAd9p&RDQ89t`Bqq>)hJm$77+C9wfwfc!tfgUK?Q9IJ zO+tA&%D16higFkKLOn>J9fEMCvn}>n5&oHodI|kOyLpcW4mSDbZ5a!$F zX1l+{z}i4eptXSn+L0Jodlmz0mHTRs`b2hNzU^BWSUUg%Yj>mkW0V_1zU|p}il-5o z!Ta+kU;^zJOrYJ5fwg~wz*@m%2(0zRz*;#5)_P%J?L3qlq5MmfFGBfylV)K8?KhY} zy9yI%X&6|090O||Ah6Z}18WyzU~L-8t5CiJ<<=-qK>4TEx)@k%fC;n|46Kd9z}m$a zSbGKoYga;GZNm%*tkuQ9+IWP#}SJAO_Y(Vqonp46I#` zfwh+~uyzf~O;L{dwtG;18|BZdMb|Ka))^9LX&6{5!NA)31GQ40$ll!6^7Nbm7+AXp z18cKT?uK#;$hVc~7yDJ}Y(AJj5ff;?#01*gm_W;gz}iAf2&|33z}ov5Si3c^H9I}W z8s%T3{4UBjqWlAtPl!H)3AB!wK%0z#wGT0{))NA2Ju$G>5d&+b7+CuZ<-RDtj`B*B zZ?T?=fwfaGfp$Cw)_#eBwFMYhTZ4hM+aa)aBnH+_#lYIrC|`|oA<7@Ada6xl{8Mz} zJ~-Z4dW6U$eG>$;Cre_O)Tzh(gCcDEBQ+^~xt~i6sl4ABO3Iz4hR7>ciozfmJZ_>z4ad zVu{}eUilN?a{hJ9Z5~|WFA4iII_tX$zpdc6B-r*}M*m&)C+hx~irYVH{U_@G6v(XG ze}qJnQ}^GJjw&Lb4*1pZXWax2dgYh;l0V2fAlCu;7?4{5xfA|rcEZ2Tw_23`_+3Th z9eI&oLqjeG@(ZdIBJx4_@e9<*#qi@|_$$4Ut+D_6E7dViv^?Gw5wBFYHD9#&l~=0& z=_?NZ^S{W7+~vs!o80B$3rETS_Wk=ex02i1AG;W$$XEW!SN{K(U-=g`&LO{(lKf7} zt)Ap}Qj!nC|6}i5;G(Sd?q7KqFNp~%B3Yp+g9u(wL9DDi2IeV`Fh+=gqnRL@I-qjV z42V>)3xi}pH?<3S5ig3j~ZIpbb1pEiq-D(!Cb5*s`fc&z;#29R{WnKLz>`_XBN- zA5e>I+Q3+9XRWxi`dN3;+>7Qa_Phg}K->eYnhE_b;6dW+)DmB#cIJvZeK<=nn#H!z zZv{pZ{eUjS4M1a}FSRqET|+H#mDr*ZEN(uVp6KaETn5aa4*d(jFrqVXKJj^KiO-5H zx`bJnP#cJZS}hZ51CdaxWkPKr5^A+fs0~Cyt(FP3fk>#;`XS-f?MdLAX)FAOEEHR0 zIuFf>h@v$`Os#elk+U$M*7Pw{+cDI1F7Ou70a!A1gRmRhn*#bAQI%A&l-~}ws1I^g!=y{Gf4ajub*r`BkR*_4q9Y?eV4kJ#P zr!+o~Sr|_1W`&+wB+0r>29^<#P^-N_lmVGd>t+Ew%<3dytj!9)16Z8tL^Q+EWBMqN z(X^%$fU8*@4_rz_KCN~E@e!a%ruEy+EqVw|bM%xUlU6%|_#m(k(G197+Oo008wiCh zLnN*CGI7j2<%E1J?hKl-Cg@=U=h90*O z=vhcaHm!CJaX65vv~Gq#Q&xuo2NMxZtL>h$!q0(QG!#vS(wYtdmLL$;bTIH75y`aL z6GQ_bGigl+0%OE1=G-Er(P~2=D(eT_MC=P>ByCwA;1X65Myq{_*b6wFc%Qh7PGfOQ zq>a57J;Trwi!560y+pmpBGon`_BB=qWFT#9H}ES~yPi-QXJVFgG~JL&t36EY05Xr( ztsS_V)iz)t5uvnNA7U#|#L@Z{IpQvAL306mOq+qTh{&YXP9)w2GL6=>5jcR=24MT- z6@KZMrK}Fk8;E=@s|7NQwyXx2%PL}Mwa19x1NRee0hvWx_T3Z82`90*?dXX`3axfM z@g~rNcmv2N+SqS_kF$ypTCFwl`V-3NgLSXJw9q`O>Yrrm58mpjdbW>+QM zvEI3GYnJS!J9ZS^v9@%_D(Q~xraRW;71(K&bjPke7qMz$x`;8YQNb*WrgiOI;Y1(r zdU>gxI3u&VyPBZqxZ$HR#OZfbgtp<#@9tzcOm(quM??rF>#Fz-3lnqgtrP3oZ?^VS z{cql+uj}P4|BOvKk;zT!tN%@#^kQnx{nymJ{g(+Z&wa4LuAvQfC~UAY+F%#b20IWo zSS4++Hn72J`$Akzu^Gj^#}22(^-Wq_ooI1=lor{dErpQ8K#@TTMr7ARVz;bi`KD5&H@pvD#U1#LDQ1O`#)p4IQ!RlwYr~ z-VBTDNIGKAkA=lGl#bX-bi_8&5!+SK{;jL$J#@rwr<{)1^AA!^N9^L)VW73n@fu8v zYZxr9aynwY>4R{K00u?cj< zw$ebmlk$a>e@3|r`e)jr_@r^Pjgj@T7+#2$qsb|f9KPIScP(Gk0W zj@UDle@pqsMmZg^HIrd+RnZY!N=Ix99kIIW?RBo6+v$is14pc!j@X(hl+zLGx(f!{ z>3Loew78yy#dYrrSX_6}5xbI(*laptSJM$YlaAOp%D<%iCCcfDT{*gNXt~Im&3~R2 z*F&_p7Qy1GT?0p~jE>kDbi^K_Besl=*jFe|qx>7neJP(gb~r7r!)S5cMT_fMI%03Y z5j&EO*z>dE+{G)5j@Y*;e~$75%C(f&`Uf?t-uYXzUP3n7v%MDxck8b~B%umBtt@`@q!eu5&G+s?xv&1M7iY$tL?8fqW+C%^}jq>33u&A{lUB1V{iKf zcG{o!-S({Nw|ZLd(kIMeJr1=^!i#NJ)B=leF+8+x@Y(*NqGalnOr80XIXcBldJz8Y z9|VUKQ?t^DU-})=|3B3_EB8Celdh;9xVPEmTis((*Lrk|2uSBw9a zuI9FbTe_ys(VZBpenBh>&g1JQ|-YJ8jo7 zQ8Vz=+XBznwN2EFKD9w$mR;*a&7@O{<8`My3+JXa)CF{0sL4vZJyA3Hlu3NDzy@Gv z9Iy^pN~{5<5x)oSBYp?mIySlfy@M{w3e%={6vp37T(nf+ZQv+kBX9t*0oeX51ogmM z#5!QfkP^RRmn_m6)*?Z+9tpAyb%>3vM}lm_S|So;8|n}nTaN_UhP6Z_$Trj=LAD+V zvJGoDoXxoO-m;PqKR9Lm>6G<@Q`VnOSwA>s{ppnTgHzU@PFX)VW&KydDeDKPtp9|W zE6V#kn<%y+6RWJ=haE`=YKUpTL&Ounoy1h&8sagaBk}0C&M&;Th*iG1P^>*xiv@2d z76aE4i+~=)%fRP|UjrW}UfL5_JS|ht_2!>g$c)wPWBzLP%O>_PFa5@$olrjQ7*iX(;f!DtnGFT==&uGbj66}o4_jT z&j?xHHYbSV#&tRuHWy4jbpb}zRDTR;{Q?87U_dFnvi{7F^{v8y!|!4C-4w5*_yWWy zDV{N}b>Y5SQEvX(NQ3n)!hqfHV!#3nuzd*wZl1@0y%?|$Zdre($ol3{ycgmDQ&*I~ z8Y3=$syhZ0X)r*E0j{vi`llfa*7q0&_^2=-7e>`o7m5oYcBUA9S$~lun-OCpHr@AQ z3|ROM25iRw+eH|VcMb!lVSot?v;GW{^?irpw;+C;;`yO9t`Fn(PC1JKh8R!^$E-h- zWPNvFfaM+x=!O+F)d91ol15RLo?F+6Zx2k(M-GsTlB&fOEJ@x*O;1Or@Qn)Tm@fLPz>FrYRZ1E%wI%rQWf zgV`e}hHKWJX|leLQyey~^JX?~g+|y>ZA~#CG#dlFF~9`2S%1dK`cA=s3n7?YP4Nhd zvmkaFne1!sB<{>o_-6f?C+lm50f%>BfDZKw)FyMr;{7Tl?}T_Q}hVPz)7-$g^*^+c;> z5bjJy%KFw~fKMO>?8kuACJb=Sz<@jqaD{i)pP910WfX6PSV3`hNX@>Mi{e&zIvoQ( z#sCwTXZ;x}>w6vp7H-CXaXg($%>MK#h+m@^?pc44Dx1+V8FywH23Y!GKpA|isaG&y zMj8fqVn8YEv;K^g^*u!KCWvDxzDV)OJ%PjBa4S590sG*e^{+%Ctna%RFn9w7EX4rZ z0t^^`0<%9zF$}c+43_nM!=NNJXTP{JYu91G2p-`K1{fX30G$fE0|%`?lVyE3WA@s$ z5MPFOHT49=sStl-l-!Q0T=2$#H!;9gjRAdAFyItsH-U%NpV_j$ za*AITFR5d=GZ*p*pI|`i=NRxV29&}?>(6jm-}xAD_$ACf*ixa7PU@Wb)+0N&Kl-T2 zpWYAMa3u4=eTHpur9mwdYi^u7V`*>vd9%vZzi!nn%hZM!3op8^{Xp06i%zpy^|Rta zg5C69RdYnJ>bpBXsq!~+-!QyoOyTu4M?Q?JTpDn}?duKpI}=ar+7hv46_;Clbv_3fe9A!&b5P>9v*Pv_3z4qGVzU@=%;h%bLOHj1**Q#={ucCG%`sE! zGdMR37spZ_a|{`9f-RvfDGR|Q?Y-yNs_Ge`aDp+9+=`-}T_ z6gt%M zwrwuI@EZO&^d|;XMvc5r=D4k;NTk-veba?Ix24EJ-4D2vH~@HvXaLj@2Lr2#LxBd{ z6%QqSbHe=T`>JDIJ;wt>iIaeN#L2+Ey&$lmmN=d<Pl9L zYgsi$RmrNcsy(aYx@zQ<1go{-1G0hEz)?gS;6&n7;4I=a-~!@w;8NlYnI^R5vZdNb z?k>FAL|>pm7^>@m7Q_ueN8%>n8loR?XPDx4Qiiy7hF0%$^=t)(5<7r-L>;j2{Se%z zhL+eD7)l%n%)4JR+A~nxI^&A`Qga>xdOrl5#46E-)rV1?%_{K;Rv$t28PAvn31;GU z$myt1?R^HQCOQJo5S@Tu5f=h0h|dBWiHm^u<|e-{pDS*MH(D-Psy_tU5kCgH5)S~k z5Vk4lZ$*) zbLu?1#jRrnYy~C|b*xT7wXYYd#34YLHL6CeTB~N|byTWGu1J_GZU>?QxRkgOxSF^M zxS9A8Fr2s=7(;wn=D541*iwC29xQGLVli+hu>^RCSPIk-%YfCya-czkB1^3kx5Jp~ zcvsInU?{Nwm`D5q*w++-i_{W}s3l%e>(u5xfBQ}FX~*9Z--@0a^|?>}#DyqT7vf~9a55WkGAG2z{GF^PoWLCe zgDAKGy||N0)xW&hlj7owljzRFVShFLx0|CB7rAF|dX^{^OCzLR@{z(6qzB=5{vb%- z5dJUyhH%OADS196&!^=1{J-#ginzKz{JU;V=^w=MBrWq;t>pEUJl@jto-aKJf7CBK z7+D&ju9ZHdJ&^7L=`oOA1=5@Fck?FnPcaq0Yc07;BzH-^wgpV{nMgHEIe8{@cqPxI{G}a!*bW^>F;S9UEV7=S)QEy^2%wcyH|W$?APDE z<>HgmI2y~5_PLqeC-qHfnO(P{gFA}dgYNuIRISEL-##?6tF<~_udC?l)&%Qs zMQ7IO8&k`54I;+2wKOqP&!pO24k-=}&5cnat9Dsnz~M*{O8c}~`S+D}fdPq;X3dQs zIRstIFYIW0$}IEyO54DIqWt=fwhtrcHa8x0s55ym=*FD^e|B$o%pAI{;C69Pyzt#x z=^S(uHSXPk9U`^1tFu9*)^^`1S+vw>xmou+iaxF97A;jRH|u&wF}U@FsCt-nzM~k? z`spJ5_B+8k5szARY0*mK)+phQ^(b!>mZa7Y;vL{7Vk=NVYymDIHUpm`Hti{^vJVtZ zYc%8Gylovvg!8s_7!l6f)_aL?-nKRh=dDLPoVTqN#M(V&E_RsZ0-EkM=t(D50}m6w z2gVX_0e2I>0|pYSfIdS?0^hylqVzDkiRM!DnB4#_Abty+MXUr)Bwh!OB31wgh*`E{ zmhy5mTZB2)qx>7-4PqJaGVv-fmskosM!W*tPb}F}wrU0z2mh@{Jp8w<@ZWmG!++Zf z|E)(n{I{*}-+IKuf7=TGtw%ikx2^EsdcApp0d?b#p0A&^sHjf*T4zHFM(C? z-YU-n4-(H(OU$A6{GPHtoFx;@VpwmLX~1Y=D$s>^6lhFLq!!LwEo zv-u%<`Vr%R`7qup-vx#dRlxbgx2PpXh%I^;v!udzs|-hvA29@IOWY2;1Fx+z5SU8b zOf7K}wfTF>&RJuN)}dJitF6)-c#!xKa20U{Z~}2TwYku~NNw((G6iRGLDPjji-E?( zMZjVhZIzC|XySZoiSwu>&J|lUly?z)w#wP)2_wz`&L`Rc`w=Gt^I@}9PNJ4LUTo0- z-bHMVL(d&pYn7(JRN^S0A8`cGmN<-BxN4PysXe`?Y~mDbQGYa7v8Ok10`VST6^ymY zF5$HFI7n;*t|B%ACuHs^%eBHR^=KBuSF5ZBMiZ-mF2qWpF|nLlSZbA})DnvgN@80s z;x1zIB6|7}zX0aLRjVujh7t3C^NCs15;F`+-0Cq)DonM?6X@|H9s}AE)xbL^Avg?7 zC4NdRaX+;u_mqWC#^T;bvkE?1<$J(`#J#{(#CL!bhBC1B>CJRc-}F6aA25l|Zv+|u4p`HhHj zz3?&n#H)*n)9^O#z@o2j*?Os$>E)Y?!EFr6hrWj}XKu3Y*|y}!}iH1nRO z)7{}SCZ%>ot>OTUVRtt{&v89NMINjw==eBf%=Q$;Y5r>5|M~U|uMZF|8+;t={M8fu zusveffljfmTVW>k$e87x-Q`@*n6%hAcmFdssqTkOI)lL4yF3{&tk}}Jx4-P(xZ(`+ zlzR%-q~?qk@vbUuFZ)E{O50X-%++&v!ztm6yDzSIZMfU%rYn}}LH^6q%v0`#cs9lT zAU4>Z|KzpJw=Jy={o?{0&-ad-ATlJkSDj1E`3uWNEcZcq2g@s19?f!Jl(Sjh$nseK zgnn_h8Ro6M3Qful4Hzstm`Sm3Fj#gzf@Rf@AXrvwh+x@-0hITKd?)1#DgW%6wFQ!5 zM;ak1*2y3)HN!lw50YY=UadMTk~$_G>47xE3vp*?fPYdw-; z)w7TkD>t>T4{)p*f}~hgzd}2aNVuaa);GN6Ow$*sIl60`t3+}q<&RT7j`I5{?;kml zNwFiD6dQr0SnEF_DR!?&s||GAWr$$el>-X5ij8@#D&04HHRUrYkE8t0l#8@lA%9@3 zMM%{S-|*P1rZcHI&oe3Z5Rzim&Ip#(S|C_fW)wFx!+ZvFXb(|dM)@n0r%}Gl|GaTr zq=@1iR5-ufa5#fyhcPL37lUQbB3Ra1fneE@QxPnCeiY@*p?#b3=O|C0T-zX@VILph z=xu_e*rLIO;zD-GH6Oo|}<--DBnZ*pD2H1 z?9}k8L%za0+jLpn>`aQ4At}~68o{z7oe(VRG(Ij-qzMl%bSXDHN_hq48!5M^Jf8AD z+Z#PlXj?7}vCEH!6HCDLodDbJ!VQiVEJ8^SD}29(C* z<(?Coj-hMBtIDoOybF{G;`5(uVxkT_>`vrQ1e&I!u2r?+|M#gGS1rkuqqc$KZF9K_guX z=~Cc_lDg-+aZ*gBukHAqe{F|Wx<=BME=dn;&lj3W-@qlky?^bOZJDK*{>%Q=J8IJt zUV7Km<(|M1Us*jk%6t35Llrsh!#e*`)UAqIGWDYqK94+{nKAF$r_tj-{3`#8xNqzJ zG&4#1b~)*%p7c{s`l%=V)RVq*^I!D!n$mYjl}1R07Rk^e8CoPm%Uv5kj{x#$yf+w<=8n0}e&jH#ep`1bvww+0nMZY;JX>abVYHk>$;eOU*K? zD|b5RzRZvBIPSZxEvkINV}UoUx*hJBq;c;I)CnJKTW6c_!M5DFwP>mCc71kya#u_F zs=11#+X9;xt43%i2z)iLVX`a+U$a$53s@ zP*X(GYHtx8fF)B`__a8RS<39u%tcR`9qV(^qvtu|G~naJsX%KY@@Tc=h}OVi#3}QX#^*6hH#TQjA#kGK$HQ~ zi59@aM5NJbV{KOW9l+vDC!!gS9@9sGn~4*EtBDAs)h;EP0~Zh<0nQS$?B*6dgr+%q z%8*5?9YK5$*oSBaY(WBS*;wEWBBE%umx*KMDJSG(ac9tsH9?P>I2!l?5lOV#H;E&G z+lj`&^+cn2%II9o;)bRhf@rl1i4Oqh5QhVWEk_6pfu=;{&}s)0?+12IS>flvEgFjE zEyTr|4gr=B5kspzM;rt^K{NnY8w&v8mj|V5W9h25xbsH8fRjbbTr*M z(Q}yC0gNTK19uaVK&uTT-U0d$TY+v?EBuNaaTm3qxd1(;2%y!@A~pdh5^n=X5gUO6 zh{&JSwohK+myTJ=>d?G_sMoSu;ALVBFqeqnYqL9z0{b@0FR^UGaz8j@ zFR|=@O+A)|*P$@H%KF3bI)jE+3mRTcX?T5${#Zx)W5-iIobrK`_kln5(5v|gG`z}b zc(tVA)fk4?^Yq8|rQvlr4X?OOqVYzXD^D1XTQKz|rsy=ZuyMZ@cZG`zk=!|O9Nyqd%C zI%qiju?Ognt)zT2<&RPRA?45eCp-Ydt8!przj8xI8eR|6@cIG`uZc9g%IS}l!5^DI zf2@-JSPkX1ly9l9cBkQW3JkAKBjX~4f0F*#sWiNfqv7=(8eY%SAG?b3X_Swqoc`FO zlzU`*mC*3&L&K{r46ilx#~RV_YC^+n6#cPZ&>wq?@=cW6QBHrX(a^|qG`xOS(JtJb zt@OtR(D3R2!|N{kV{g(Q+v|1sV+Z8GAKRb)*uM0~zDD^Il#d&`hKAQUG`v1U!|QMw zUf-bM^(h!$We>w2n?iqVHRXYnKSBA!l)vSF{t*~nLk(egT};EPnugaGX?UGN!)pu; zuM6RiJx_mZDE+aQC~u@Zfbz#0<$s3Z)%#HxUY+TWwWHzHoQ78w4X+F7k3C3#>|ZFK zL^=JjX_PB+y6pg*>i{@6eoUNdQUT@HV&_Z0YJo#~IYqd(T1{#YaWV|O?1^@6FjFTJh{ z=yiRkQ8;7w(it1d@@kgfW0}s_zO=xGv-~m3bjF5`j@(bft1}I+hiP~%rs35ahF9+y zFuXd`ADc#h>rEP7H^3h|Xg2(@<4xg@ z{fP3VlqXSsrLpT<%ZdNZqZWqtChc3o(D-W*X{_>pk{k91V{MORs^uE3wPR`8tbmF0 zSL0u&Du7=!T{zln<%#r@TF~YC3(GyO#$W8H{YfFc!(w-Tv4QpPggs8vT&(3TKYFaI zcVmaGhH+N%HTGOa$>=HF3~K3Sz{|hqHT&=8cnD=bM;y~n^-zCq!e70=&!N0_`Urv_3kXrgeYU%g)q~G6@ zet%E;CA5E&UqV~|<9QbUQG*PRrFO87Wi+!XtQ|UpF9t681e}D%;`klky*Y6xk z*F(A<(r?2{zYQ<_HhiPEU7U{;Tq>nnmj0nrEmukD#nMYadI|i;zXaBls>Qc|OCQo6 zNcVyC7)Y-I=}q{1c@xI_c2PB^FH@hH9i~s~O3dum%+)m+=$rk5 zyKRG876soCpLg`WU7xI7wF$|!bHUdx1Yi3q_}b;*YbC+g%7U*|1Yf%meC<~7wc6lo zjltJig0Hm)U+WHDevg^_bieTp+Xn|M?`9xZ5(o z%b;AFWt-CQQ#f~bzEOrc#MisR#I-H&=ds?q!p^nr3!{vqAwPpb)5N)~GAJ*}@=Ixm z{Tb|9ZZKDyH8iDRhvm;>*LyQu+s+sTC54!ISM>WyoZ#Aa&L}83B;LE?f5VP=BW>2A zl!mu0yH*&?E%~45X^^SSvPx;#Y1#E#&^M)FpJmrdgUphw--I3p!P+ddl!h?NuKyjY z^!LAFmYQ;pdRQMXuS|J5z+Lr%6@r=<}?~32@ zan2~tyW+Qe+_c!YvY}QR_);-p&`*X8yd9!X^vu<0nZcnrB z{bpTKv+i`W?#pJ~wPsyIv+kZ2+4oTk(gzmrviZ!#xuqasS;=LK>@A9=iB8o~KIt|` zT#8x>PAw}bw&=B0;gRT66SX_tCfUWgwcz}+k`jw~TNSGloob^Fr`x2s6t#YK;@G6E zTNUdPWpz>K(vwfPJbkC&`(-g@7HL}*{)w{ss9WjD=`MM93Obg>lv{LeRcuR?HAD@_ zNIv88bX&nd_m~O`y8y-OiJ=qr*yOsTv=xkWUs`FgAwUtCIOulNQyDhrTxPTvJnFvm zhQ-kUMRekzrYJ>*%>|c~_JW!2ORFrJ0u=FygPNm4GHkwbnbGm`=096m1S$?B)-*?b zkdgeg%YlvpXZKOn7Ha|(M-ppVqRwO_YhA{77OZq1Rcmo5P?3^Y(;8Kgk$lzVKxcu{ zeN??gb)X_6G2+fr#py&@ThxHec&8*Yxzi<7UvS$!MrTnPtmsNi&_}grChJ}L-lMs1dCWaBlWmILNeTC;Mx9RX zB@ewvW4Ju#KAGz_#h|2wdsVYeC-;;0y;t+l@|fPTecKcdBqiLZT6#L!KpuLp#%6g; zUs>rk#h9doUaHNflZVRt-lutDc}#zq$#%sfNeR7GF{hJ<%R}$eJik0(B7K2md6;%Twhfn7KE9vk=JHXdvO_x*%A}ehs){qo z_VNS$G_A|KZTpSUbS#fClXdP;Y)g{euNsh*{J8w-{+fXvG2>)*uPI(nk_}T$%u0Sr zp4VS9+9T#++1A$-dy-^^ss&le3*=7^&`k1(F;CD}j9E8oyiD_&;@u?g;i~mn$A-n_0=v%U2H6JnJ!PlFTtg@mZ4h2$ec3*;#&bpk|rJD4A?$ zNK59JXsdl8iqDf0j8x+P{9NUs2AWqqVkXN_(;)zo;D%#me>DcX~q%v816HbL^Dp_(p_ zlDV>8uPg3VJ3XixoMZE<-1&aZAkUJ=W%FKF3{X3bQ(5NNgvyKV*NpKjnJ3%vx?-5x z=^@p^9Gf@f&cie^&yuHP*{>@`shu8H`Q+F{$cu()>^)27%X)ht= zwNv4tc9N-f=h`I8osBf-Jxi9#=IvChRy$d$4(HmW$cv0LS3OHyWjl5%)~lT+t1jf) zoRm8oYic}8++^816`R#gR;t=un+$o8v8Kzj#9h{FmtwoxX^Luao=ukAd8B5LSBZyg z-Y!MB+R0jFnP-zHFB+*C<5l7%+p$aWrrOCywJ^`7K<+$BBl9Xz$g+1SV$@DkRX%w( zU&xC_Y3#j9R>^wpR(zm#nx@*FXLC{RJX+)ARkB((Z@1!8wbOLf;XIondC_Rii(Vyb zWIJ{%)M}?0stb8GSLDtn8gH)>A6fQp#R;{Ot*SQ9<{NpDi6+3S#8=iULUBgzG*dM= z-{!j9d5mV4SIK(Wya>fPwbLw>WxmZ#dC?fndtN0QWIG}hU#XpDs}|i;gtN^-jX=pdEyd!+mxy9mkuFZutax8i^3Tk%+}wTnUO3%CW zyqEq#9|ZgVc=wHDu#zsZWH%xrr=1~bA7&aeN*4p@F|}^8Oo=x znR~3YJ)mYm$E5J@YF%G-n?HN?w;n;aYGSr{oY|XVYE~K%>60)1;K{4BQC-`nRR(z5 zIY{N-)t;!O??siq7ghRRRO!z}r9T&y{#^7w^v^|q{26yDMG6o7)#0Ik@I9;7ud&nB zS?P7~>-=1GC z@>6qzyKmhIZYvZ28JgMIqz{w@?s7?TItqfDJMZ~KrZ1^)5^n z>xO=#zf(B5#x7oGla`biP>^iUnRif@mSjcD048olHHB5;5mvXLdVp18Tv&}m)h&y( zq{z+ac?Ug1iMxQ2{;0mjDlvdnKU6oeO7sq^$+&`9e3j_&L{I%D;0r)s;`6L-MD-a~ ziBGV)0oB>8Za7AeimoPuWIE9iL?xQO^5tLsr6$tv-FR@b50pVf6|>kK%H?tmDY z=!>3KpcS!>)wQVJWR>_0t3Id}u}b_Rw8r5mx5yhkIp`TmJOzwggX-t35))W`8P$(j zCB7G0lW~Asv>H8cp{M>O;2S_+;;XE#LUjwP#8+5dDXM9&1Gm0(wrGM0XM8T zTQ{0p^c0$o=t-Lgv>-kXG$76eR(nA(2dE+10S^&pi7kr2;&z~EXNw*$;&k9V;#AXU7VX3=X=tWRLeDN^F!5esFQR_Gz)E)rx`ElmPT)tx_K=#%L6~JLnrW@*aV0hb z?TEL5Cd39{=Q3#PfThG5VA`^?bqUefqVLgs8$EX40XGnD0v8j%1x_Vi2M#A*12(yx zt=ocG(#p`(xZzNxz(d3m;7(#Oa1HS?(2;lvXhHlcq~_U;SX?hO?F!LT`6BQFFq^0W zendP6+(FC-dJ%KQ7OlrDc4($$p~r-H8rbQIY6h^BcnX+CJPF)KJPzFIdbaMW3R{$d z=3?~NeGZ&TOa=}oCIOpXfZz!55-|aI^o6r^pJA4?Ptn|op0tC&HN^cuN8(373*rYr z17bX|dZ`#z<$HQ_@VqZd8)aRK;xj!ErFzLbhpDOIOidlZ)Kn{`rmkdaY8g{gOBu7; zT8RWu@3S26CI+OLi)hg1h*gb8U6cQ-nfv)&;r`Fn>0UmF7}X!Ys|o&k+?9w5exdj+J|Mmvim^{JBi8%m0i`x~cnN zle&J>CcRQ-IB#3N;kC`TTs;jMPHl8dxHm3(ZTOtiO&2ZI{r#7nG@o&Ap<`;!B%x4g z``BBR8EUpw?RWJwp|}^sffV2G@6H(Whs z4X18fS{wT>YgdgNWG~Y8ocdDU3-Y6sS5Ur@a{C7PQ2WF{$C`d|#Tn*Cy$jcr8=AaY zb<8(>#F?fmsW}lM$JNzyLBpw5OSL%yVCBOpA3%8@$oEmcDG* z7a(JGq)1NB+g?1ubmh$zK+f)8N<tPh7)?eGmBmECkE zHD?baSql)!YP}MXtb3PV5ED()n+xJ4P}c|!{) zlp8iNlJ(x4rgNz|y|1@_>+0FN5%L|Bi}X|>A4mE9k<*#6I+hu$!;rD64oAkS{3&Ft z);ttfm|?COR=7$;LNbzd6Xgz+kE8re$`{zLG%PeOH=Gwiqw?2%FRgs}uF76}?WUTfzDzq&(9KN$^pKth^ zjAT8}NY48y&L(2^-cU6V?hHs|) zG0H!r{37M6DW5*pad*{0-|)kEO_x%0USN=EB63gFTI8N;MVP9%@n#_RRB3|TQw`;{ zly9Ltlk#i+PBY`&#Vc$~p_O=rMN~!mhL6i{(xm3RQ`s(FVdopW#GO>-A0+m4qkX2h zlV($H3i(mWJt+UYvOU-J`TrJxHw5kKBy*94_iHc$`KI1>&W*+{CCY^BR!2nIXD;(k z-^e^(km5BWczu*l{v_S?Nu?1>x^kBwadqdR|7Ac=(q|SYxsK_7{YOu{p?CwAs>RDV z#Y?=Geez#Mc3vi@Yy>5sym$kOx%B(GXAdDVc)t62SBuD?rP{ZZJHcDPBrVC{;; zBU&pj#(Zv=>K7GzPNQdg|Jw~D75|+hC4268=@R30))SoE^T_?;iXB&YZ%O}U@sD{H-2S*IKdOJ<_q+7vYtkD`dV~GKH<*+;EoDwinbT6{w3In5y$OF`Z^HHe z@ir;R2`61*$rmp9!X;n0)S7T~$TUfcS zE>Yi@sBbNvt82ZZzr9G`6`858T@>8bq#yg9eolL#s26t|>st<%>nr@kf97`873%%u zvjaZJo*#BN`@3};{WrBeAC|bW?S(Mkjcv|h^&8ukg_&(^doC<~W82a&_l<2!!pb+c zxrNQ$*tR$!?BJ7Y7%uG;WPrv{dO)-u8~dxHW`$2e^sY3RDnVfJ=zYz^8~!d&;Wp zV}(6)FI}cI%I=}}leuh+1MiwX>kzH%}RVb7R5en(X(IYqA_P6E%}-J|dn2?jYs^y@TKb@B{CPeHua> z1dMne)!wWEPpvRkc00wNpIp-#Bf2NYqq`1xByL>VN2|mxDQ`Q8UFugTmaD7-=6?bF z9vDWvDX?OMFx9QfcxlASn9LyVAYQSzjzxslU3prR^LMPQC5i$vijz@v^6WRLp!n9=(AXC7|?~d z187VP=5FLeu$5Y(AGO2{VvojPk9N=l`;Yvx^a?o@Esn;9;yRcf?b261BBk(VYye+cGZg=rY^`UptDW zPDsb9zXVpD0-gsRB%T#mAzY{y%kY%gvUUdDchaCtHz+Z!zbNj2OZ2*4g~jtI@e1&5 zq87LTSgs8z`~D)HlCM#-LoMwh&_oz;pNtlFfa!Nw>gLH})uvUz)x?{?rNkQo+rF4w z^H8)yjCggR=2nSrOXBq>lwrs5lnlaBBi3Qny@5lBT`E+4QEdheReJcPHlGu>(puDR zqBfcMjZv~)>VDixDOl>uSale2C2&5`6W9+JB$jeyKW-&g)S{1JkPFb|*q*ZIEO9H* zIlBXHSUWmry@+(q&LhG(+pyD3JJ=Gp($D*518z0h)|@ge^n77C*JIA0a&h{B$H)CrlWL@^=U!M*GgJP~ulu8K zHoNRCu~kb=s)ze8J7KO8F51)_ zXJLg^$qnoiuNrO@4p~=E>xNUWIEwD4g=;o7#~a-vhoJisyMHjvmKk<#uR7-H`FO)A zrK5NMxZ<_+%v!1+_FtA}t`b(-)Et$t&#FZCdEu8`8~(Vk)LL3kMEBFeI-8o4a7}ID z|IKl8m9WSP50kLPs^rG@zE=%9U#;5hdOL4!^xl#7zFix_-xR)C(HMokdBRES>iKfR zsr8P#gkyGX_zBTzX+6_lHY6@}ZTJP@hNWTlq`6XgYJ64!sqvdA!)bjJx zCdY3&{9c^VztC0Ryf#GmW*5~fe`tg^?0v|-zRPa1m$1SH=PM$F|F!=3AmNeKnMN-V z#@NhCn`eX@cCxi2Kb`ow(Epng=6SHtn&0GS-+|!q{Cs*~WRx(!`h~~x6TVr$@WcE( z#?N$q=JN9bKF@6xJ1?BFs*#iJ>%}z{23l9oQw^v59M2n%?F^~f;p%y&Az+=OxA4!3 zofjrpOSPB3gV;=Ar4>6b?6azX1~<ty;+$dJhQHzl??&HsXZnxa&365u+RFP6QZvn8fgd728tRWavD2!pK!#w zdbTtKyy93hHg3_{@Eh4p=PcEM{thS1i-c!3HAg3GwJP~z_VHKW65Yducb0zH6Xv1! zqx%72qg9QZXJ2%G;i}Xe*kx7nC+*|Q4EG6JtgGjU#sDSVvTMT?!Xay^-tF&@W-hv$ z*!>{7ogRrR6z@NDTfgmJ^GKZ4+VK6t`D&?-^3OPKUL^dpsX5Dp305T+KG~~=`-C^v z)pL4dzizy1C(Vn5i8eJSP8erZqT5M0W!Hv3hi>ab=nfU8+0>lRud9VoR_w-zLfh1w3}J{> z$>sLtR}D>s@zvE+(HOA7u|^i>E6!P1W-UecNa2yaYPf;j>(K2q8QnivWc?g#Cdbu_ zea>wvvs9=1XQa^~EB5(%d!0(Y+`e3#^RB8i*V|>5*1{c|W*$1S&`<2MFwLq)dZBy6 zuKcmW?W&Tmu%9b-LzrM)J);`C);ZSL#F>eG&TGoHRA2B95?d#1vZ>#S?)TB{G!5Nv zqTBisx{Ah8>x3m1uf7M53)T)1Mz6%S=(fKR-=W_)OhXBcZy|+sl{?CF?LP{OrbxA z->w(EV$E9uFl#;!3GA7}xf92%#YD$&R+ll`|0v>QUM{Em7SpuiY_DLhp8d{6;|)wO z0x}EE!b5URjc$hUs|ug-e>LF^#xZ-WUU?Wl8bjA`R3nb?_eCtFh!b$NyK%VbIFeW& zPo%m7iz&ujC%G#vnC1v{o5armWkPk@x8lu*3+sks{f)k7Aw4Jb;-v&p461f5M6UgT?;M-u=8Xy$M(Af8F?>AN-51+yCM4 z>W}os(LX*P|2Lt(h31=3O8rcczTIB> zoj&Pz`lR3KlYXb~KmK?6ynO76Qlt-Q52X7*dJLpjf%GQ)-Mk4arLf{ZYFP1$QYgKY z)-I*BOE17b&x)Evb-BK>II~UoW7~%6zZ)8)%U(2BcRO`x@a@uQy-w(KL5=(3gLIXJK~0w;=XT!E z&vDqYYwY~U%az|ZHn)A>xTvLV)t0Ueb95nN_0LBJ@6XRHsx1Gm(YK||Z%fzKIl3KV z_0L7>Kh6&>s?7YZ(Y>Y3cT3ld#{zDb_x{8ssJUFE&d%-h)h$+;>1=fqHH-B7bno2A z*AEr}v`zYza}`Us`8F?Bjc6M$@KxW2#j5FTHysp9U-PY5tXk4`z@dA`oy=fmMQM9; zbV-Qs4dE_po8chrQN9(x);Yj3U<$DWs3cydmiQI5_A4@HElRA(vb`x>Q2~qNge%JS zTi{gUb>MK~HDFUL1m6HJ5w8M|nkJXOe9%RlQH?M|W#m39ykw=-z+=Skf%}QKfKkNn zfFZ;x;3neDJ>3Upr3(ugB4-;eAZNB5k+Tg8iHMwSxPYA5azxHHEF>aww&4OIXUh>e z+puum*&u`WmWgc$#wv?!u_If7Dxx3InYaOHMD(S02DEFaC9ay+y04_UU~<62`>=L3 z7Tk-N2&{x#)%Gwjn|KKL5%E*t4&uRaorhO%5v#Nm_S_2Bi&(HJ@hjk9;+Mc~;YzG< zg`qX0mI%jcMj4QivkhhQ=C#^|9T3~i%-M$6CvdW~(FUyI6b~bBwtN7Lx%Kzp@P0ZB zXY6c4tOMon(gv(5+|zv|?pBmr+uAs^jd|Fuh?Ffq2HS3Z5xk^+w|I0!&o;Qh)7!T8 zJ<54%o$$bxZ=yV9RC4+1sknR|Y$tH|*E~AnXB$kXVfYs@7@mI~D_hLr<0#)nc@E_w zf!6PglejhgGI?}F&^DC8P}?>+8pHiG7=8$GvgH?SaI&5po=7=TXdBAls%@JbMR~!V z?l0cKS|i}74VX}X;k`I~Gl$by>-R2?jwITKSaS@IfT=cM!a2xyAYit9md%RHH7js6 zUD-BI)|=Nnn|y83TMyn7XW4h?WBtdyHh!ai$HutRTVky~bJlewp5LUAoiep4voY`u zaY{X(Rr=s1%cBiOXE%y+w>8RvERRK5m5*{6%bQpplU=)S%q5GX4Sm^lf?eL|+BX^_ zLh~>phUFD3k3_jI%bQt#k!7RoT2~`Xq|C*LCG1*^F4qSzqBRHQ=`1_4Y>2XwO8cR!=nO{qusn+8J}5i0ypZK#Ecc@NG}M+;u4YV}k}l4uKf3nai>{~HHGm`T zVOf7sl=Ct%;+7T8zs(WqZj_&9`JC0&j9e>BRF5v#PIRSYV8niosA9PtyrIMygr9m*osGQ933n ztwWb84I|1XV-3eJqO=BOBbL)yKFsp>RG)-8mgW5{f0tFe@4Jh*z1X#xUGJf5-%X4N zJ%JHRS$>D*Z&B{c@+_8jv3xzN*7Z6jQXa>M5$xK5F4t=q(VB{KizQBUE6d-YtYrBz z%Ntm}N_C33y;5*jsM+;0x=gO1Yh?;1dXr^OmbEC~JcjammS14Gi0WhF_Bw`%7P9L( zbd_F0SJCGfVaf6WmcK&TndQMOKhAO?)klT;YyI{nUF3Ur@{TqXw*=RmvW?4KGycPG z{EZT0!naf|J+*Su_q$g$zI);mc6`K+-Rzjnj`klqK4!<8=ukfMjlb$hxxZ0->{}Rg z@LMs#m5H1GtIH_y*OXO9cGpH7OBeHYt^Z9EiNhLB4QR}i~&Tlb8tSCQGX;XV`(q4-{ipI9E#KVfK{;ltZo&bWDwPjWc!IH*ri zKfmx#Pj_6KY;7bryJ~*(zUm!mIm?#^u8ZC~2;z?@o2g$4^Z7lldwE+WAsR)gvdI>ORu(k z<>vWflEX>I^9Dup{ld4O>G*E4wYA)=%>3!T)gPthoTqp+#EW-8>`n1th|io!o+%GL z;pjc2$i2?+(2kbqw4A!--8Uwy?O7g*ay833mLFsJev~aZ-lZvxlUnYRDeeZdtKR77em zT1x=ID%v2lb=0wFosLrpricWCwSs7^fIx^FSX@9`4Wbpgscl^#Pyvl5$`&OmE)_w* z2vkv7BLaa0@_+8D!|$EWzcZtD=AFLn`OIhTe$V|}=gB!w&N+TWu5(Q>qxKE7GthQ` z8ttYmXCFaQnQhO0)oF^H&AyW0_~A}R3+l`#MK=|Di_WLGDLm$mC|nj23Sx>&z>+H064WI#QJE8hgIbG9;!? z4v9BHJcz`DL?nKL#C{)%`^!7l#uv>vDlN0M7+mcW5;HHS?WVVA7}_(bEkipHZELh= zLv2p#9cbIiFTPml84~k(PTNBVr#%9nGTS`!>LZGrcSVx5@x$jHO|CQlB&O+xx9AnQ zl3iotNL&u_0f>i?I0E87@yxb1UGf&qkSkAm9DS+Kg{ixwOWsx#jP@dAinCb2ifM+Jw5RVx%ZnIcI@{9eza_3ZN4)>P?LYckL|p| zkdT;!+_pLgr|$&XGTTEIBrbwjNa9Tpe*m$A>_%=|xr1CGa4)r$SypdRCdzFLyhQP$u zXmX*n&OCfaQ<5S_gmy97Q>d*#`vbJg&~~A=0qu=`39F9!u;)^2lg3+=CyzYo(QjIz zV@S*db=zGBr+WewdoGQtW;f_(e(mg*{E)<7LR<(jpTx`6ZMhE1e-c}hyZgI9wZoyW z0{OvCwt*$`Z4=nI_uM%p!8M{cZ>9TLF1VI%t=Ri9dzt*-NT)ILCd-F#QDrj8FRvwk z4eiY_v{PjKmHSF5p2eYf!n$Pb4SZngK#*$MO2gIHO zwMDC$llA9ho$uRcUv9eJ)0fUgkh1$FxQ1>ZYXiGU0@WSt7AuiIUAuEJR0?)F&Fn5I ziEU@MO}d|{j!xl8+nvYMIUN^6L!Z`i4}ubZhPfyT7#; z>=p%Y4^(r7TLbPo;BEu%QNTS3e>G1+=DfWXeEO-gOS#>C$7|N1O0TT%cvNp{KkQy3 zHJ15w=u6y!ZR9@Jk? zN;Rrg1DWqO$>e63py^ukWm4+Vvu>>uH0Cv%7@l)$nV@;0#*bl^Thjy6op!0ICQI4) zz>#Ix<}<5lN>BuI1RAmk>%$38p$kk!H;lU9q6_>2-F4^d)+8#~$S+T?rCI!GQpaHW zsKtcIYY7*k3w#UR52-r~U7#DfYp6SAOO4y52P^_|AU1h45=Wj}!;6FifuqnR&#hr7 zy1;(ulKs}ueM^nd_-8klDZGk1y-ONNZniL0 z5R5KxCE+#_D7Hk`T>hL+&W|?vQ8Y3GxQP(9TmA;ZZs*UkPtpwg%{yAbUg`I0N)|>04`ulw3|+D zEN$}NrV)5-`SS@Y$uG;FN0<%tAp85k83&ZxC7mUn4Y7 zBCW!WumtEzr~tl7xZm%5-4AVwknQ#bjB4Hy1*YX_*ue0FV zRGLL$N1I0wX*+>%8*n_~3ZN~a2XHK*9dHbx8PJ9;(H1(nN@UGi(?~YZittO|2*OQ3 zOF}>3Fv1zYA#8~@(=1lBsTf2f28yXw3?M84_9IjP`x5R4_9hGm_9PT8IbSyvOVph< zC(#JME8!5}bA*jP)a{@Q*XuwdVH&WF@Drc&brtcnL@l(rf<_cggdV^~LOY<2&pO}31&my!| z0Yqr+ejq|?!-0jgs}T6}v9)v+T_I89yL4EW39kb$5~cz32|odzCtL%}BV6$A`8snf zQ8sPb(TL(4p&3v`SS_UP8A1(EL3jjsl5iU^gDp`Yotz(S@=wsn3}71JSfHG+8!(x$ z65+GQ2(y7l*b==@v+So$#n&_v4m?CC1b#)x2Yx|l1^kTA;6=M7GF;Ws^V1fWA6Qmx zmg#Y;Rq$;V8+&OMl4uVgx>ktj+Ga%82IL{Sb_b$str1=8j_BHG>|jmNwciO-E4|*V z54CWA($HF_pZl}gH?2zeh0W{(ba6jB{_}hNOji`mqG4qnPaay^c^-d1*TL^LDE&UC zoLN&Qo#)?=|9JLK(miBg=k*}Ys-7}=v1U)Q*UxC*v})onZ2xyGQr(Y>bdIuXpYdSW zZa3|nx`*<*B*rUk)1NEw$jBK<$+bmDuHA-c+94E8dlbpF-bk+PN6EG6T}b>Y#Jwoy z)@+0N4=j6DD0;Es^doyGmRQ>=8{XG7Il^OZk3>(UZ5~Un)tawinY2MM=UAw1M$S^m zUxC~Tau!?5y87T0vP@m5AoBuk}5Zf&!@d`#$KgG?~kHCf_O!!m4@2(Hzd3pZAs z2#T4^0&7{^B;;>5oMv(sUd!aeT>V*Mt=2r7#ncAHENA(%89A9Oy;dk%+;CcF?=&&= zwq8cjwGkfM`z5+4ZT)+aoRVvUV!naA2=bMX{}^4Xw4K88YPHM>TXifbri{hd{+L}W z6os>JT6?)$=$MsFL#>BvS?+)$GX->cw8Ku7^1Z8 zNm;b!pRgp`pqRH=c5OxuuY6qU^E4J=8x&K{a%(ek9<#7op~%<}!7e;$ zs2f`(7F^4&q~{@LfwfxmNgt7X49l_oF}zkN>ZcRTa7|)Y(wM{oB{RkrEYl*rHYnyD zmPwnD`-U)tYzPs@}-5X@#O0 zx(Ie9eG#f;i}bdukHmvFAu*ZVrYyczYrcX7+y=!=XR);zIbT4&0P=4ke+P2A(bu0lI zkS&v+gxuS8p=Cjc)?BfzN)d!4+l-uM7GEnANpunH!c&DR*&?whTXrQ)OsrShE@Tn5 zT5~>&wGE1~&1)>n$gyB?wnEVk-CjRecXlPQ;98~aIF?qcHUE<3*#^aU`I!Pn549AW~sJX z^KC4vHYny23%kw8d7nkt3Pl+@BfIcQAzul(3*=TLH;YwoW@)uTQI5{YuB6J)NVZ5H zxT@HdG%eAGJ;GR^EqjEq$lIWp*IAHlM$T7|e-AkewPo^P$oYvrr)__domrhi+XICE zIJoxb1)XuW($#wc)h~Bcyv&kpjk)hoPVKfMlx=J2$--GH9FJ4lt$>`#TAVV~?N%Hm#W zFZQscAXv87WZG**1ly}nPkZTT`o9x)rna7Gpg~87&1mPQESl`;+MOAlqcH(KQ%$o> zrvs_R$H&pph2djxB!4gMoPyn)Ea3LpO6Qu~q|f%IV_8c}SIBN+mTmh4&Cc)U=`(46 za;b5<|Kf~aZax3E6L7hU_BVFX{_bqT>4ECstwowUckTrj+zT$`+zT##uP?aZ-VwpQ zBZ7NJ#A@yx5x<3ZL>LG9hNPrb?RvMDe&P0$UHGqmI&)PN+$O!nZKG}$>hEY?yKN@ z0-R3(e<%g~CCYh>&q-7?(f*Ea9#ww{% zqiwG?wbh#{eM}D=O%GJbiMFFWS!xPmR$Z;B z(PR*`=?}OqmTY%RcZ+p%lNjN+9oVLS+eZ4mdVZV!6Sv4hH8bB@N{sK=sP0!X|Ea9az9t^p3+DL*h*>h+rQv_sj))&+kKQ>W>R z?K?L`x1I_Ae5>fTJUxURk+k%gCg}WJmPpGE|FOEi?tpbcXOkV~)8oPZkFCulY%;x? z&hzOf!1A!&oXXgFc}Pn`wZC|gzShbg{yP?Fjr7Mw>i9*Av~Fe0n6rL;8X}k{(~MP_ zpqr~!!9r*YT2{u)Jll9iC>nxx4{8T@p|%)pE3|t-jds*ozZYP@G=~AR4-A++;MeR5 zzvc$=Yo0tye$6F!$lmD;`AEq7L*5JWZX~bVpbop!%CwQF8&RWCx1z?PevB$Z-G`cp z`UUDC)Nk)N*^%9IxCPlg=b9zPF+W`ovU@geB)jK^bL0-qxkGl(rDXSXngsbs$ooUy zljLhQk^I~_zts&!rd@-&7BvKQ9cnnL1XYT<0d*5<6zUe#n1;PCkXv;7U~-Gz>rHOa zO`FLrIwy8z2z^H;(!Kea07**ivI&NTrBdoZr z`h%lU525Cv-b3vL zqfmFC{zu%n%sv}k(aP#p)L7JyQDvz6P!my^9hWH&p?-^c95uDV=~!rFi@nov)MV5Y zR5@xYY8vWys3%aefgtGvM=YskNgAqk@tQ; z_T}x<$i94U6xo+I#gct_4&+}$UI=*&~Zl(?F?I+<7V z-{8jm(Z0+3tM#ie1kT=S=ILifSmx;uRJXBL0Hpg#*ed`^^z`_^eN9+I?b#+KEP3N) zv!dr$t&fe%IbQcL&d|PZOx5~;rHhla<`e7^mZZP`Me?`_%TI7Wx#oUs|6lv(3%?Sl zbZf3~YrtIx+-<-;3b-fXujWap=6>%bmixVzKsEOZVBC$s-3Z*f34Y`6CJ5wnG2ZFc zzsK}q?tACH_uzL+VpnkS?Oc5O@8kivqD0PKFUu8f4Y=!oyA8NU0rw>QwLA&`L*d6< zvN)G4&LxX;H&;n4vndAf69c)6fx8%f1s6kFt-d(e7{HHAw{|ayWxs~Pz7=+ba&2x+ zp8kS>r#4O1!92C|rN(xBxU@Z9s_!M$ZBezjn5tE#I9030-PkTQ#&uNKbhO%ZJXWjP z6kDW^LYS$RnQUEDKE~Rl4r83OIYZi3nbdy66dn<_ee~?OBkG5`$NC4lq=&jBR;zVB z_jNuGbv_StKGizyeVz89PWwQot=75U*SSB`xj)dkSL;;wb*hIt)dO8dmx@nJ^VWym zoo%vuZqMCirv0Yfcej|VSUqgo-?96y+GNFQm1%$bZgH1LB-;i(S|GF4_m9j^?WsCB z-^-%hrFnwpW#b{Y_DwA+X>fT4l5JIc=6f;LP0%=s)_mL#Uu zWCay3ka_EC!&v&C>K%w5Ks=qqiCb!dE?>7(G*~s#4hyiudD`JpDD5zqc5o@D9eTRb z4iPlFRXvHXAE4PYAr3y@v5~Du)l(4p8;_+#FTHV z>NB8N+x4&~I~*15Q0PKCG_!!r2H|bmL9w4^UrRd#QoyY$cOD&k2Es`j~bIEgfS`Xmxlx@<$qB@$a=mzFC#+Yij3ua8gJ zxDAN8ZQySPQ_gJzefg4tlRpB35(h1T*9a2qMkuL zfqD$}AnF0sJ*YcSqfjNNYf%FyEtMX=L?=67Kb^(peNdB7UFOc2SQu}@tIZOX^UyH?`eEq z7>&P<538c_ywfzBy8cS$YOd_DDu+Rz~6@ zLYiz1#4AaB#=i7+sf1rlz?}$4PQt5Tt|ApH-mg)8-gt{c=t~gXt7HW~4unhyw7%2X6pb`Ud7k z!T;>UMW@)&$Re3-m!0C%FVEi`rR?~Qw&_PA>+{m|mA_=g*_1h@bTsXm=T!97{_OYi zHy`|u*Rr*2f>U=ruZz;Xl*Q+2ZQhERe70rF0@1*R_VV3=?h(?dwo|%L`yI3`(e6p@ zbhOu^ZG(32h;d!Dy+UGkoozYiEgIJ#SrtFLZ-h;$?IE<~Xgi?YkJ{t9k@_myQ_vm& zHQKtf%ceK9KX8!S=sP})7YvG!p7IFjt#mK5UD#clRAMas9NIs0;YY|~n#(cZl* O&|ZS}aB9!$N$mu*-$Q#O z)M%eXdsTzis0isvkAMM6RjKX5URs|zbH%25$B>x2=UUC3$Ol2*o8B)834wzWa>LHzKs5lN-Yw5uH-67zai%LQ-I$7tJ9+rJOBebL^B z_IRk#-hlQOXitb(*jKA%b4S$&g~S}pYRORKEG##ac#DoTwAVVwJ@p;I@d93iRN)a| zp;WO&G$XkJ^1F}+Lw=?q!7(DKj5&6-%R*xMWVaN1i*gzy!SQ>Ys2z>=1hg-rJqham zq@IKJ_h?Usx_^>5yCqJMlU{C6dyC2%+AAI8LHdr>@q(!lrc953QA#OW!~t4&cH~>? zZP<}RUI=+D#z8LU;YRr#piCnQFk(~_*nnNnf6 z=`FH`JPz_dLjEG;=1B=TEjPSHFX<#}+OWvZ{I?0-N!Jny}j`n1<=cD}>sE3jI9ke~s zUKnv`m^LJYh32-Dd5ae7Bq8y`1rgdZ+i@1u-i5Y5+KZ@t2yHpqE75)zYD-dI&0V%u z*S;#g$UDNl)K+Gx9T*Z*o7`KXNVK?knwO2XF zZ|XbPQUyeq*v&abX=2xvl~&5W%pLXa?B;|#81gfaYaw41F>aLBkzFb37Ixd_>Dt*1 z`9Xw=T~}y3p?w+c52-!Qn$&NjU5Iut)T|vm=O+fdu(@pesCxHqmfHF>_!e`#QWEZu zdAPs0c6v}75SGiXB5S)k=FJ@z!aimzyD|OP4Z`wb9hfh7bv$#}vYV2>@TaoQq}vlD zfBMq7DtYul&saJwjqIMS6+C_ETm&thST(y{m@S#zTqW|zHFVBT)$X*>7S_``HYsRP z+Uw}JRP5Qxf8zFk!JWxv!g86gKU&f|FJjIM&fSK=zx-m5*A6d<sE9@Z@I^74|h z|4*B=uVj|N+d^r|JbD@t^?f={PgCkLuIDw~j+`EZ#OmV*Dab zdcV?BVq9ROdQhqCQjuhI>+;afbhW< zQWY?}?Q@3vhk14>^BHzG+&Ro!ky0SZPwj0eI?OwgGGEf>9%|CMD^lts+B7v;%16wj zSYwsM%$~{yLIYW7m34%$-zsYe73e-B+z-4@7(P1H@abV@Ds{U@n{eN{{XjU0L~a#? zLx6V(8_7WHcAF69TenieH0xBu`!tKPm^QbONO_ZR1@HzTytm5hgm&m&B{TyT5LT0Y zR(WZRV*Z-8e1{rXZ{0LB@+FP9T_D^9R1^9Ea|vevvkAun&y7(yuA*5CWU*B$X`}>r znh?fYmAZ>cki1JH9xNeo76Plr$L|C0bf&+vaAo*8oULZl;=VKIW-lLNn zPMdFG*Fl7rKO<3Zbb-&IiwX5K%Ui$(!pn(c6i1fPEca;Bfn2^dw+WBqQwz}rUPkv* z66B!^RHBQ+N*|HR52TZW%eLkyjlg7E^A#aHwl$xkOSamY-RJ_hqe}+cn$06pnZK6J zQWsB~VKlN5_yJ*^jJofm3lyQdhq{Z<1^yY`-D4D!#B_3hq|LW>ljt?V%byTVMHe^` z-H)mJ61u?W(cLvhv0^FBVnLe@yGS&E@c2%`p6CKQ_EI;Fy3K?Rz&dnese5mDDt{W5 z2%Due61#&&z9$?2yom00>gJ#eJdN%)>V7voRl&m&ZKcg`X=Ekv3&Oe>>h41q_%XU4 zQFkl4z>Vl`8KY?QrIQP#&9}CYXcgh*Xu|i<1uj81in;=Hfqz1G^B9F4W|>8s4x35j zMtFP^;S_X%4(M*A?l^RTqtV?!T?@8EJ+MUB>_;Q9>uIDr;Q*j9p1M-%J|-LhtU))D zx<6Q^D)a~GDw5FVEgD$~yhd0TLEU_Gfm!H=Q}-0Qz*Ka@#wgMj(-M76n{S1Y=rh90 z>j?Lv3*3orD0M$V7q}kXkTHsCZ<-~THXTApw36_6Frh!Xz{TjUrS3v>fp4MvA$4b2 zrt+`S$qm4!D~-gip^;Yz2LO5Ken8z9(FKk|cQti~vL(vF60M@mzBIBD*p;v@h`Mbu z>H;4T)~%%OLv(=^=mxT9k&sTVh&JB}B+(VZ%K?Pv(FLAGcLjAb(FLZU`#yUXEuvWt z(Wb-uBuXSazMN2oE-)6|_oy3*FEZGpb93*r z;qEEvAxCRj$ZCa6$S;~JryqsKwy&N+>9)^!Fxbswc{hpr4VtWDHJ#_P&o#G&o!2!R zm)jIbi#2=3xpq%^7;?1j-?2!gKQ7WHO1FK+gJHWR3Prse1YKRVEOC@og>4}MZKor- zb}%K^7ImlgLL}FEqdfxco=~GLL3>QY-rkf=yS+PQ)A}RIb_Swszd@9(08zFMh_W4y zDBFIJ_kyG@@*mAj;MWQMMx}%JyPE$Ps0`08zGb$V(w#)gTz<>dwL%Q3cju zRKaL4s=x+}DtI1@Di{Ms6};ej2vN3vh_aoAY})4$W&1IrY~Mtbtt~~__Cu8IAw=0$ zLcR|2*C77_@;`?j9h%6rHK@E{!~v*BQEO0n7U-iMMXf>QS)z}6)N*uVR2568?G{ay z#oDqu7IhNp4AcdveyD3uH=%xl`Xy=_YId|bwY)W#B|4&>LRF$>q2{6Hqh3b6hFXYv z3-vZ?MY+?u&`6eg8ipE<8i6W7jYO5Au1DQ~x)F5~>Soj^)acNoV-mG&*-&{e5C@QjYS{zC~6HV??v=ckG?p1QVb;kf1X1Lz<;Tr1Yn+y5`g2806doxfai{*1mIai zC;>PP@^Z*OgxnSKB*_2dYB98+o<*^uE<_DRm7%7i7NRzzS`338bs=gns%%)?^4vzY z{+Si66+&j2jnLUUrGzT=vb_RVA9mOB5*^uHYf)gSHJ`DqYFkjuH;@-Wz7q0G$lrzB zVf2x0RRgu=3RDeh32HT}0o80fX{=D~Q2D4Hs6x~g+ts6xO}i7>v=@*~E2b#hi_R2f z8;vO2>xi;ljVN1J$UlSpD&)%{e+BZ9aR>7n4+q5@Lp_0d1~nJ;66y`qGSs`MwWv*~ z?WjG}ep$$-tw1*IYFBn$^h1>GAw=2wA{DSWb7V4;<5pEBOT`@~UA^ZQM%;Erq~1WP?SCx?w$nlT#PPZR zG;O!@q}EEvuG&P2yf-OJ)|;|qpQzb+JnU9s*5PL>osQlokFotbC1+jatc(8!>muig z<~-5=eNS{raKLZ-H`9yKtvT}n_Z9QgITsFhBXG~Uz~A+az{NRoKCR$UC0wp4cO(4o z-Uue!nw1NuT>7|r{q3#yt#$?k_{}|1{)Yn}NnWp&ASQbxrqBfL6ZXJFN7XkNID(-L1+}lmKmpX7iSK)rH@;mtJ zBre_YN5D9WcNBcffEj(d1sD`Kx(}CihivUj_GOXYS3;_(Mq_z;`Q& zWkIqqM~l(YVr9X20EHYECjS zQ|uO%u{PQCILPL*O46z|>EorvrV1ZZ^FV34LE2v8W9mri(5kPg>mTbL`c+rn_j{~+ zP}$O^f89oUMIG0s|I#h;nmXyRZkfb5(?)tjt$nOZbL%)B=kr)MP-6TxPWrIYMN;bW zn(-6u_}3(N-Pzd&X(wiL4j+$AYVnPu~V`O*aMB2Nm#l~l4g)gnuvmhdK} z-bzXcPp|_HJ8rcHOBb*J)BJ2fJ5~}&6Jq0Z=eMYcP zEzRPBO*xIUP$;hC7-0tR8^RFaK|&Yc=g?9nuH*o;)0Va@f6Iq$?xoFT7}-rY9=MaR ziXw3(+X)W?KY|vx8QQ5!TY6v?DQ(`QL|jQYVLUK|&=a_Z&=ME~Ed}CARzM3}#+Im< zPHr|fMKsb2xR_8)dAO2Agj;|M31z<0=EnYfCSvKsnkUPZkY=q@^8zg%m`-jx9sG6Y5oI~ zY2ny(F?R`OCx1t2!{cm zC+q>VA#8FY!Dzy}Kx@Jqz)>@T$E)e&&e7%pD;kjlM-qMx96`7XIGk_;(2{U9&|*e# zd@jx6O`G1sXk;F6DB*PA5JG#PIiWRhFkye-Aj0;EOGDhSL<4E_!9+Hp^#H!L%WH9hK!Y)A5pBd^LNzg%94s0j93N*eEY^kDI&d{c}fkuu2+XxQ;TM2gn^@I{& z3t=Fznb6yDX-J_5T}4f_Ifq899}`XkHWE$%J|Y|e)DiXpHW0QtEDbqBvy|1*=3NIi zOIa=94PXsnF0h*L1n?o@LErD%>j7$5b>m>w9fKWa z(+;(=no!v_=F=@$dEu{{7T2E%W!LhWV^5r6A7HF}rV0Mv=k6`%^AitJbS)kEFPLjW z;Ai!M`)smY_d0f-&pubo10_4Jw#qz1=bAm^T(WDk+GF2Q{W})P@Z%yi{IW$_1TPhT9W1+)p6C3V8tJQz5s8e4uM#w*sbZMz!cpJOyCdMJFg+u^I7O*Y)& zFS;g0c+53VoX@h))Ev}2)bptMs25Q$qh3M1hWb5fA!<>BV2Z0s zFDpV7xPVawQ^BZ$X<$^rt6)?CAB-w+bsaabAepTWsy}Kp>LJuT)O)Bs2a$3d>MT@$ z)M(U0sCk3pCg(Kn4~m(NIumss>N}|3sAAMW)U~J*)F{*)sC#n!#=%#+n|!r<-y|FE zc3ZOH-ZLi~?k3o9FTjTT9&ET%ApaEdw;&%6Ib6HlwyHN)w3cP$M5As+jYa(!Rff6` zH4*g-)I+G>q8>+0t#CRgD^u;C7Y4R;r8xEEo=eGfL=6Oaobw};%4 zT)Uq@el^!`t6+%I9n z^@0s|B5b((V8gvkHr&0-AcqZi+{gk?<`~~mbtEVz0rEdp%D)focx*4ffm(=q6SWAn z81)uv32G^78R~6RE$W@nxl_qkI}0}4NwDFLfem*zY`7O;!>uA4?(h%EhCBCF$e9h7 zIj$l1h5Wn9);!^#f8sJ6K-<+Rw#+s6G#E=BQI;#Kv-D({xD`K!+WNfv>{i`Q2dc6X zb7@;;EXK8-8PoZNAxg@4<&&AU=|B)Ay;IA^_7;8C3HsRg=?HGn!91~VxYLgDb!O$z7uUGX581(#x*tneI$Lrz@?fb@5tq)kbI7w?h z!7gFRqRCf1KiU0VGxq~#?g#C^xqoHw3*hIabA?+2?mFOZ1MX44Jqdp`Pr~2+FV%7J zh((<3b~X14#N00sbI-cpy`82o-7k>O6>bf<>wvorxJLo^B>dGp36BS=Pt@@rKVgPmT|jH)p|Y2 zq$}vSH(zQ@QyHb|!+sx*vOZGzF!a^PS34G1n-XG8@2aJrSE|0(`8?1kuQj^7+99+y z9f&n8R+~Pnlzy*sf1poVYjk|I!_(TdKUUR$P?9mI>-T$X+Jl&}HmNlYpyma#9{L?D>b9$je6@F6^b<5AjrZKdUYoTPc-yeQ?eW0drjFt$ z?d8L&iw?$xWTw^T9p)(-g!9%>0F4XDO{+Zw z@naIR#9P(0`JTb$E|hp{JVfqU?M@osucPs?6m}a#&RTu{P@1guEjF18Mcx_@k&9Nl z3gX(G?Z<*ovGGeZo>4^O&E%ZbE~4?0hcp>7Z-WlgWXC?F$#y_|1!A(zYF~x;-p=-U zYiKfGe3*vDXJPzB8n^m^CR;4xs|_Ua35ZWXOeR|G<>;Cqf0}GZ0FB4cxJwF+ z-y`F!Hj^gXUr3W>Q_O4-`D^t%-Y4-Kh`)yTm8H@Z`;N154;r^$PUF`2urFwQ3i)BR z8)>qV0-6lTw?Slh)!Q#4aoJq<$t{S!t!EZnX~E|Y@*Rw$$z!XZ9z{Eb_on$;`q5$3 z55|N;-lJW6U7;BZDD~DjnvAyk=@RUq$DB1IQdOP>A2LZ0#orniljBx@CIpgNNDzZt z54)|FkHhi2OmhZN2Ci{2*>3e`f)3TNw+b&#z5ntD&p&tk*zS*?^V{y!QQq$O)rpPw zS09K7+C4jD=mm$;Qxq5*xPMIeb^kE2<;o)Z1piBHx|QD(jsspHymyhh7YPpm&qE8$ zf%f9gGd(7qNj1yxVMn{FTFg#2!<$e86cQc*dJ%2|dJ?VxzC-8%To7GzY4?LY-kH0| zGP|GbxS1P(WXH{14J12mrZ14}xS4MQ$&Q=(I&kca=EC!j^BqbNmTOO8xupopJ+_k& zVY&7|gykNigxpeu<=O)gmV1oSaZ6cPuFJGT>>ll@re#=3C!Ci@_&#AY(4TM?P(;`h zxER`8(k|*(EVQ_8r&y&B(c-*JC%hl{5@9%S9H9{SA|W660-+V~c|wEl`P&hD7Z*oa zkta73o?I*Pw{wIWY$CiCP5+0JF@t$`GiTlxm2 z+SXDwZt1Ipfk0<;DI2%+Wpsfrpi8;9r6bYZFeZG#61s?b(+T^Zr4#N>I1cz6;XM^~ zjUEgS0riCbz{iB+R6Eb)I?_eda*&pp0-9 z@MFTBz*uNANxRjoSXgn5T}1qM>4dZBgsp&Q2@OK(DhW$~rwJ9nQ-u40nS|lO^S4W7 zbPja#~pFcA1Lx)hCDx)ojEMsz79w=|5<;J)g%X;f~3JTAS!wzGx!))52R#wU!xlFw*;|DfN zum|n(Oz5%PFTCK^ZT2x8nZgg)aVc!swBJ1g`s>+|Jy7@8onhy4%l;%g@UoAe1rPRr zJl#yfPFBx6!hbzkveG^^?yU=VNj%7sa$BBxd460~mXzCaw2hrtMcgwl4^~xFS6>z? zi!8mPrSJ9GmWS=8Ei<37zQFvBAv+_-f>nEYPkqNKkD4w@_fqq1>+1(*xFZz3*dS@JcN(H67jEAO=E9xZLpe}so7Yv_OKZMnL;a?p zm~&@a&Sm5*h5QxBtsox&c`wMjB{iLGVTqURs6EaR_eULuYK>}(YL7Y@bvo)y)Oo1y zoLjcALGsw%iKizQu0;fM;chom#xa{@4=r=bcH30{Wl&7axt6OLIp^;f?h8f!kiP=? zNXYv`-jn2;HWgIdF=#S!?x8+JtwVi;+Kk$U+JV}&ob)|W`=Sm&H7}nuQ%^43u@TIL zdvUOGKC?;o(T-=n$IbQ3S^IWY%Y}>_Ub*21p=fV|gIZ;-GMSbsgaPbWb>67v2e{}OU9$WzMG0`wis4;P5K5;X{Q73yl# z4^Y>jeu%mjH5fGnHB>)$w9=9MxLW29P1{n>QeDflTUZF}<8lKFwKO(JSO~0CPwvy# zBAEMh?(>ijBKf3`NIoWqBf`XTk5L7G0HX?Kf>8ytz^H=RU{t{$!Ki{c z5&q^{<`10_Q_uXN-{iF1$jA{?7#<2m4mt@-_T8%|JL%jA=04p%PMOStX@`(J8}bK` zheGZK`Dc3GOUfXM$NoR2FE_k-n) zGUUTZegtxF$WtpO9n&if%#0hMW%;vq%6c;6YD3s%v#nmiE}PsIX8OHYVW<;|-qT51 z?43?PE`;13a!Znb0{PY4WovcqEW=u%kJQTqizD2bZP8I_qqHrw)Use)!?yY@K`}k@ zTG%tCXQhF;cB3HAhFk=>6Xe5_rscI<&&YYc((phi`dHV_?$LaGBwHkLggd+TCMlCx z%$G$iIO68sy6%pX}zbqu!mpS^#wgYB=gP)cvSOP!*^e)DqNc zR0FD6Y{BMA!(E{$N7v47x=MW{yGK8WP_c_?n$m|o%SLG(*|RLRK0YYsb#)87x4(k? zd&sLH4~Cqt^f^tg+s@cjW^t9%_GlP#p9W7dZz(gH4*M}9_ZQbrCvFyuxNxdIefg`$ z_-Hd3UD+RlUc=l0lt;iK(z-=2W`7U8(;b`Cy@gxqR6s6ukz9wRsGB68pU zov_n=TgdJ;_VuuvhdGehy~Z5K>|RUvYiIXbi9C|sYqbIujI``tV}|8_An!b<$QJCt zBItvUvfGaBz-~J>Kf90E{Oq=4^RwHI&ChN-HviwtI}N>^r}vYKh-)G+`hV^!Zb7&O z;d8glPhR@)E4n*4(W z_x`Nof~)^`gR8msHk5GhZIE;CZQ$P9@VkF+!++zCo+mdmaZ1kr$GNv}K8^p6yJbpN zn`WOsQ$1_%yPm@(!+aON<{U6>;;e3;rfplhwME#tZ$y6J4CfziW^|w0B+6RPKNeS` zQiK%;m!?~11gZl|R+n(dt;4VRBH&W1xtGpye|h2l^1}V)B~Z=%Ek6CXek1sm=!$|} z)2-tI)f{r`@I)7ZQI%dSmeS^b5XzGf}~<**l~399GYbhQkF_tANAc5FsV(Y?vaE%fXkND5`9B*!tLSVNSkx6~ zO&4Y^GiwPbPqZ&hiwaL))!A$bbp4-=pH-l_!QM3`s#ki$S&Pv{S>1%8OUwoal>bdL zV)CAUp(x54D-2y~78g*y%ic9LYIb_Vd5h7-f7jGr_y6aL@#zgY7Kue!LxiCsv-tt# zG4`(VsK0Ms@L9Cv9}coT(xR57H(azxEY6xF4D~lF2q;f@>SmV3;-V}wVW_W}V?cS7 z{ppk_%k+k)Y}yG!#b(I?<$LT;r$%|EH{@F^F3x(&re*pnU$b9Qf&$8S*q@e1xuiGb zS==tlvJ!^+nLTYYEh;3v;j+c;;w-)}beUOwK=}dt(@)tvXW>?q)k~;fVrCOizR5l! zC2C-L!&5fL3-wFQk^;&nWQ)0p;85Bjizz=?%FS%Azbwp6$^-&yB=f1P{7I(Pj# z_vgagdxyCX3UePG=Kg$``%7W&6T{r6hPl5M=KjYp_dkWX3&Px>@;L=DsS-Jv7XH zeV9d4{#T19o0jc<`%LP$p8iew#}|(%w9|x%7bOQ&?^%5&^|esVzV9{HKnbkA~+BdHmlJzMfC7AKV2?GG1!n0&Nu zPw|;lg=ch2{-ebSx9v*8#SzIz>-V&tVJ{r$sn74~lW@n*Dnh(D`DnwQ5z5qT&uIPo zx;|gc)$OrYI_G&7>hnkW6j$19iV*Kgp8IIeJf(BK=fc)}o=@>zyX**YLh{_kJ%LK+ z%bta;`K~_2Rd(GZ;?I-kKHjrKd8%SlnAZclNfPnlH)Zkts6C^?{G&sEi{#t*-`*s-Tf(+piw+?D6IUfe(BVi(!; zv(CK*7F{$iE-CKL`*OW_Sjxq&GVim_{RFZunpc(-_vBTs7h9)X>?V_(bsi+J=&Jd{ zlH%UHu^Ys;DHprT4xDu!Dv)*6{AEdTU!LCvv3<(L96oi~U`OdhWn!F_=M)2%5iTzV*`pG^&m->p}P)|+ak`Y$C6`RB> zQ)>Fl&Yer0Dj3&Gb8pEAYu=Gf;^35;0kZOQsjh-Uy)?~B${IKNdD-w9H;JVw{RYW; zWI4Ysn9^I*+t+IhZ_;M*mXv;jWwu$)GX?3rHN$ zua_+^ZFAGv@U!B*DZC-Fzgo{r-&98rSPm|%d=Ah1$q57r+gD!c!p^4ofO_E zSxk27YQd}lntb1cX*~WG@%^G$H)8McU@lk=XJ^~p)yAec2s(^r)6I*hYu*$k%;E84#4pKtwz6+>Quhe*%r%Qd2_C%g81Y0o zZ=CExPHKW+))3A6qJ()oMT~f=oHt(fASd;JAa95!Oq4L6XNVEMCg;5*>yw-MxnR~% z%~nyu+dTeO@gL>939<>fsRsplLpA$E2@81PTg88p^In$C$xZ!6Fl(6RTT#M0JjGVA zK+dz1EzeCoCdeD6IVDQ)Pf*YOU*-3f;UgGO&lucIm#a7rk)YxS!&uu2|hf-Ht~8n zZ=$SEUg|l)tl^rzehI!j{&w+4a-NfHLSAaFAaA&4q+fy`FMPXrr<~_3o0FG%K`?8C z=4HPGF;B5wyjRYfBwL=BdP$HsLi4I$!ZMy=yZAFX?-f~0Ug}lBtdW{G{Sub*_&da3 z%XyP!-{hs<5af;2Eb>cO!3*CZPLcDb$S&li77J!sY2Nos2;?bth%@Cp7ukcn)G|Sy zl_tzDA&6(#AwDbTO_lXgr)>63Z2C4Y=!oyA8NU0rw>Q)jSC`>6NLqnE`xf4(V@SC&s<_hBAYHj;nt;sN7T4d5QPo^$IsyApm>XJ>mWK;7^ z_m1Wk)1&z&W1PxVJ721AG(}D|8Sc89^d&wmDt)qhd&fYPf&HgEgt;=~;@p&1)YsI7 z>Z|Jel{eJ!ZTdHDe5xz0BoRmA>L2UQxJ6!3$F=F_*tl0$T1t%H#%Ukx6mA_?)Jbi6 z51W?$gG@iP^!bxdYh0wwb9?T(8zd}O)zr|UoA1?eU3=JF+!`mf>DbLaUP8gDMYG+- zUK=Ej7RYRidNJH2saqhMS)^v^s!@`M*G=aP6s#(#y6)p|*}R9vruu3rQnfh>*h07# z*i1;ds=nGL!gqj_sM%mssiBcGz-q!{K#EpvJ^*|`NTI5}KKBVFz$(JP0mYJi*FA%MZSK*g z7me85C7c7KOx5OTz)HdizzV_k4*#NvrxEe@-s?EN@8-#BIzbAYhcztKt%~xm^d)oB5 zMkAD`>g#irus@J;Pn+9W2&AtMg{n4Fn5nN1C6_i+oT{%SX@dv$FFr7XPEJkw;J&o$ z7GO`p*}$%Z2vQC1pk388VQ?Ga7GQI~V(;lRiwib&G}1yJ6^u{K06w5@2=FeU3$Pqo ziaia+VP#y}S+<-xmn?%R8`XCiMkpKAcRY}?QGKf@1vQwmQGE{sDI3*y8IZD3eaBzi zS=IxysA%)1hV%-;cwh#hCoqlB5||8aK536Y3q0Jf_`n1@x!KtKf<}4)6A9H9NWYJ8 z3s6Ql8~8D_z*x3KV`-L*^Q4cVkq}@Mp$l*WVGAXm21^Jtfa{N_4t;i$e<6oVQ};i$fcffSDF zy9`L-sJ`P>JIit%X_k80ys0F8HDNrkiqI2SNoWbwLVJd^CC~zIniU^tx<*$KHm}i0 zFW_ZD^=Z=Q6K(4}j|gqA=l z;mr)vhZDvFL!bq&ffg9VmZ*eIPMuEr_i1Dc(4TNNP(;`ZxR_9Vg0zdE1ukSubc1Gb z!RFgE(()aN<`HH9=MaVfXA-&qUxzl0w9^@u8~abK4?4e&pBQC&(CAWg+L~pd?wHDF zS*ZNg!7SJ`y`qL?q1NOUQx@v>Gzw3(TBc^-+V5MM-4gJ_U~Av(jOOTlk^uY(s7}vcY~m-t0T*A z>yjA1GG_AG#%uQSUZIOm*;;fd@St?mbq{2M9$4W~c!2{|1cjqEvc$cOch<4+y%`OsSq|R|p^I7M++f#ai3hJw;!PGg z*S%nc)_lcAl21QJ@-HA?0Qt+I7yBl+Hp_2o!|6tQr&*!5*&>Z~ zt&i~NXPy|svPkr4G}Ey)-RM2Z=GFj{y+BK1}>^PfB&w0OjHyTPy{kV zGe9Cut3jwN+ro6qRk2Y~NUh{Svqn@9%fOHVDnrYHT2tF370|&N1qF0WOiB~c5$Q;Y z#^Z<}k2Ck@x?F0v-?ppPec!EnUjP4Ve(&=+*E!7ja^|=iZ!T$x?3ZFIEs@;|yGTo9 zEaDF`{xRdi3Llk9z}Rx>pnWN?PC96_l_u$+Rca$IdZsUkkjmPC`+QuZ z{3{2fBxbuM_e5N~67e03pJv=#yVl1iRqiC0lnK%-YFju&nnhQZODpX8ygDh7ZB&}1 zMAlLpDL3Bo2wz##2N=JV@m`3Jc@6QQ`G`B7Nso75Alvikc3 z%AMqv;w43-eF`00$kx@e;SG=~!SFWpdIR5Vsb8UZ< zb+24L-Uj8Jg}>qTr)wUHGfhC9Xr%nHpf8(WeZ~^K<+fa>M;f^rzK-9S6?kSCnVI$=r{Z*@y#C&002` zUjzNHjlYb_NK*0@xi=r_KK!yg+m#RX&X*Uv9Nn#vTkwW{1ueF&i(Vhz^`$YhUUWZK zx~JDePdz+*(7uKpr6X@^zCEZ{h-=c3vm=JJdVZ%fqF6OW-cs;roNvi#G_UTu+@q`h z6tVhK#Ny_wKX|Wx5dO9 zrD|%an)>V5)enLxLG2|_dkLJc=MRFn-Z|K$zNl-U-UsT(Kz$UbPr^UUlW;+(W=p8r zn5i~qniA%z)v@XaLH!`8AB5}pPlQ5!*$JJGDPgY39HL1HHD*>t=$+M}x*+P!pnee4 zCxiM_yuSWKIH8M_pGK6Q2{f5iRM+8(ZUXCZUF*fV=w&Ua%-SJvnXP z#K=`SeRPk0`SfH>uLq3DFJ?@7;NgcKIO~_Ru6J5X>!h-R=jx_ZeR?eVTv?Z>)=v^s zFPbMrwWcLTpND^|b4fZW0qW+FF^ryY9T0xYaOmmD7#lB2~l0RZd?5!o*chHvnPcDyQp# zFmaXB7lANwmD6=eyJ_N9!^BlmVB%K8#8pyY;#R}NRZ?n!FmaWX8X!zuC8Zh&6IV&8 zO4>~mw;Cp{G6N=VHB4M(Mg84HH*6eHsW8 zS2;#R}NRc64ht%ixK%z#5%-6qDNG6Q;S zHJn&w2JF{rD6fh=vSDK4u7ioI>_EjVf?CkB1~LGM}j3mOuRT?1KhVgCbze?Io6E_Sdt}=&vVB#u+ zi7;`Mvv6+1VB#tpi7;`MIYgMa%HTsuyJ_Nv!NgUHAlin(#8r}sFmaX1M3}gWJrO3Z zQUu913?{CUOcWD$9ZXzhEH`1|DxHZiah3fLZNp&VDzQYExXM@}OkAZiQA}JdOk70| z=Qa!`uA(Et#8pNTVd5$caBjn*fO;ZKTt!EOiK~n>Chew)8wL|sISbJ?3?{C!kq8r4 znL~t$s|+T>#8u8hvJHcYt8Cntw3{Yw7))GcGWWp5RqTl{ag`#7wqY=Fm1H7JTxBv5 zCaz*n6ccwHOk8C@MB6Z!xJoP$CayA;2oqQ7OoWN6?1yg~1`}6_C5nlwg^8<-i_C%PtN)aU6FqpVX zGEq$2bue+2vD}1-t8^y9#8vh~v<-uatHcsv;woc_FmaX6L@{x-FmV+ZNp&VDzQW{akVgUm66d0tCGmqrP;Gm^gx5ZN?aNmO zzV_p*6JMSA>dM!Fd>w>WgWIT-4Hw^-YtGcZ@b}Gq+ph^XY-a)NsFZ!tr#wFw54hwl zr^29)}i>w>KB_rt>tgL-`R zIPQ|XmGk1^PLa#Iw&l5e*yB$1?wgm%<+U2Gb$KqYs`n*%D;uIueTU1tw&lTLHDPfB z_hfVoh!!R3rZm4(cJr3kuha(FZnMny_qeIZH7xFlJD>aNce?3rtgsa|ab}y6 zT-+Jq3Wi-7?wB06r&*NE+qa3Vx%TEXTTx$cst`f*ZybAYY=d#<4j6yQ@d%E4FwOCK zj(xVJbt!tZ)UM^_deJstnHeRT-M|1>ar?Srta%0Fw>Wm=_-2fka{O10hjQF4dFtL~ zu`>gE7{vDdf$baZKC%r-DZ)u=^GF&qLpi!*nl3r81IU>`>TjM=OS)5>)qSZ3gxYI ztq|e!zT9R}J(ISH6T0?xjK|)L@l=l2ay*!6ju&(MA;)(xjpEog(b+a_vxwyOmw;$d z-|kEkZ!oQIk$8g*-73TzjE|`oZ}6+!X3-3vXFQAXX^anJ+#$Isw^@ABJ=?@2U3*uW zm%Nqk6=IL}%ft8p$9H4ApX2*D{+i?w zD?fKun>ci3+bm+%y$}#B65V}iIkH&JjQ2!*-b%!GGk#{)yFO`K<*nFOh;w=(uUX{O z#%-dduJy%uKgUfR-;j>+15Ecqx?euhT{(V;X*9~ViHT>MZV`j-wE(N!_YbE<%VOPD zs9J#Y@sR)!?WmWxFxmETxAD4SPs7z0CkZ<$evae!IiAaOf289${+Q$EnC@Tj zRB)SE>6_Cnb)M-(0am%)=cQTY4UQ~|mL+tm@RK!pqdrwWoco&#v+`eH+`#y0#={v$ z18uW>Zt~M%+Ac^7l(#aVLOvx!IX=YkLX0~*WBeG$-*WsC(;Po%Y~H6m@=uyfyytVK zgy|uVnRJyw{wMXp4%lxfeoJ3fyf1lssBxJ7<4}z*-A#U={2!t(h+Qg82w|2p&zllT zTK653W18YOOR~;kik#}K*A_X!SAo;yuyr{*<-DV!7wq`;1KPC}T_aBdYgBjDFYVO~ zOL1faywysWr^S$2)8*r#55_0O=mIfyG+fqS2LHY=m2&@970az`N|(D@A1pU`sBs34 z+RdY&);2&;{g*+xZk|WJv!;YLz7_f2R~5^5S08*u!}hmP%7f)osdsJ>=UmPvpUqIC zMHF>?uvI?Kru1l@ItK!A<*&rs-;Y&3UUGow=T*fyuz@Q}c_H#qlkc>ER6sS+aKg^Tx zKesffx|^!IUDvwX0<~~SEnHIl{{MyN{518)<*(x(msf2N_4Zb8@11&Q^@E^(5b!}z ze~?=Jf%4z&Ca?~woS_SQBH^~>+1-A0*w%Z^jTxSk_Ak1-;#AG?eisHLz42ZBW4CYg znBX&isBVJg+>f7~e0rApUnBmA|23lhKhdiHwM@M~)%){Tey~9O2Z8^Ee-KdH=GA}v zRR8f)eb)WYKkL+{Teb1`YU_?KS$8-`Us@Awt?_G{Wi790^ zKXQFu*8P#2@-E%q`e9z;{jDG872eb{ zC75pHl$f%z(zpEl>gmNspV?BMdvId%^x~Do{lG_wxxg;OY@ktt>=(=u^<#8_RWBYK zR=MtjjLO{X;-Lk@Dwh(AfLh|WKn?K-(24jpu;qOmb{J?HkkK+?)5PDU>~^SOTTM7F zxOt38wf`^R6wa)~W-vgWm+(Zlj z&L#eZS>m6W9r4Vid!E=NSGfUK>Hi)scsCmJGQ zgsbrk)@Te@gZLoOhUf>Z2u5Huuz;umZYJIrTRA=ftF+f!F8Bi{TyQ$EKky@BKj520 zN8rmu2jBvt{TSVvefXelSt~2DWfiV{BXAfoh0{1plQ{)O&UDa?9hZ7&SmkS&jeiZh zmpf({TsO+c>^S^cod%b?hByj1g*Y7OK=cw+1{t;m&uV@~?j!iLx;wCYZf;V^J9lA? zdUG{qVF_%x8Z&`CxEe$ot_Cnw?xT*pkGf*E5Hn3@xsP7P3c1~d`{+hobzkBQz)nQ# zQ-bwg2v`Ig<*I7e;66HmnR6RPSova!SkvI>@cD z`{I|Cxd}_Ldpl-5mku--X5cP5Cidp6QLt-u-vBQ`p4EK?%p!gXTm;OPOF6S)!W;+P z|0%qc=aFeT7Uk3ixoQLPByb(E7`T*JBv|{#^y0q_!xMfCW}2heJ!txY>alC&X*B&D zE;VYHT=n#FU?}k{a60h^;1j?axs(^qzb&_28D`#?eQ@R>-I|@am3rb*x6H>?cLok4 zT9Pph$Fu=B4A?5SlFlEu(mBk=hhg`3_8Eq(4Y-vc(dy=5CDst<0;dpzfeyq#L1l*DP3!hqI%#5f^ z#xU$lsm86kCL9_XQWId(NS&_jm3H3V9v0WOTZ(yG=NjDPxb4~u>b`RtrJ(nGUJtW$ z!-}li{x+{3H}tsZY!fA=u#L)9utqG{V zs#SXCl${36wvC1V)c<>^P2T2_l}@cVS^LsmHNH?{H)grfPKs>}`Sz^0?SOjQrL4E@ z&3fCLP;Wbl^|m&sw@qdj?ns8aAl$<6z}mH4rLK03rKX=o2NHj~?t*5tZ#0-O5XDPLn_EjmeO?H&7+Y-Cs z(r>E``cv&L={}d*+psuqsk-%)-Nk*dJD$6x@>b`c*3BhTYHr20t=+Z2f1FLqs4zC( zdU|_BoZjiyS(fKyrTDgOcm9vka9iW1ljhrKuXG=&xLq1oCDpg3{%N);S(X_=(b9c;$<9Vf zZnZ%xgr^6^@O33$<7(I5Cf&7b98q|?hPAhA9B(J{)zOX2SI5C*zV2G+f4XUy_XKIb z9p?RKzCOv?lNwxY&<*Cu z7yQRb-EG*Hvb)?l>YC3Xv?-c}pb%N!{;lC<82#XTuax1Qed z5xxeuSSi4j>QyPdO?H%`+mg3rcNBJ~Ct>$UDZI_ffBcO1+Y#A2-D2$u9kTNOB4xJh zyFF#MP&#h4L3f!W<*pl?;wA4{>TW%~*C8Bu%C3OBHQ1ddRk!jS%nyFR9Ql&}xI0p| zhQ;-k8e30qX}XowkapXw{MFKEo9sBzCs5wA6y0ir{*18f9@!VWKgI6iN!VSm%D7#c zYLgwO_>{_ONZ+mKw&uu%{^LAS!eyPM%huC7Ga_4-PAYD*^1nq`cBe`0t*kS4r|-n> zkq(L9NTsc(w;>{1RzsR@Wu2wnHrX-Ir&PX!QhKWmT5gV9+(Fk3nG@u(n;Oz<%-*6$GJX!@}3#~&>SEo zx2No!q}Wy)v;l`!j&K#Z@7cej1?$hF&T2Rw9;t?lx8mY_sxTm(to~N9naaWj9f}Y_&m$ z%&jl@ACijOu($`M*4ESeJi@YjGj|`yZVwH1hyK(m>8$@aL{l`&|DZnj-{X(l+-9SM zut?eJTp(e~$)7h)=+e$`+BX_ym75#q;r#moHOZmII~km8KAs?lugcMRm=Y$n?g*Ac zVChaa4;w0jUHJNaYu@^~>oTozSb9}}dAdlUXAB~I?pq{pdR2{RpnXfl2z8eygl2N& zntbs^WDpcVs zwO3&7$Fco!>^xo<5e}E6XW~Z zzqP;T1^wHb`HH?!^BL=z-?F5?{T--Z{paW9fBt-hX!h%a)faUQ)cZjF7^sf|^-1_g zc@mZdo6PA|jm5gi5RI?i+0~Sg7;2OzL3RAUy(WIImVADAOUaWRzt%oz?NR*Nzz6gj z+TPz%9d&l`p`?WmjC{qk>CHb)9Y3J)$*A$;KM#D)f3y7U`WpY2x%xjP)up?FzvW-i zUyRgyNxhf;|Gbyf-=w1cCY3+TZ&Fde73#M_{q%=eYRZT;Eut}%h z458}Hp#E}R^@DKT>c;AC5!9;=-T%Bpm!STlNc9&*sz&*BZQq$M z;fij88tXibrP|ACDUEKSb*br}hi$zUa2|m!ca>_wA5LnA}^X_e3O00x@uh?b=~Tl{jG6IbK}#l zrRU1DQIVSxYwFD_e3yM|oY34j)ivi_*_5c(jfti8=9RvdZ;gS?JHwYZ4#}CYy!qhY zec2N=bz;h{%t;hSHr3)QowU)dEw!6GtW7nUsTm%7e4B?BbgO(@aIbIU(1QMz3k7q1 z8-^C#SvfJ)Vtd+psZi|GRLk!p%(@%4B`y}zsAV-&T3h1lz{ChlU*(h-$>}0YU*wb+ zva&M!r#U+N|{Q1~pOWXxaoQLUlPKjxpK9A|goD$!Ut<2uYC3+5f-ol=mXMwAL;lx)s zg__#3gj3=RoI*}DyartQ?1Ab5??KFq#pXmDs(BSSoXE5EAuh+X4rkFU10E$t0yF0x zsQ&R?Im^`;vxWsY)COlUgaa%1wnD`QU5AUyqe43md)5=51Fj&>1qKsm1IG}9frE&% zVk?KO#aUWrpV zGah)9I1ZRed>r^T@lU{o&m5@k&n5c3gju<`74T;@qj3IU;yu7I#Nog}L~mdRq8G3% z2#0yf62)VQ4A?Z>i9PFxcL0|X2LrW4`2}&Z7{uFvPQ+V*Ewc_(N3O*ZxnT1sOjpeS zU?#CY@NJ?aa3RqiIFWb@aJZc1ah&C9d|AWII5eIXZ5QA?VkfzaUdF|Zp+MUKdj=72 z1a=@=p+%Mj;?1@J^N20L^~9!_%3;fJmZjJXGcoC=}UI01~Yk@5@kgW!qh?PLY zj04qaYp_H=V)Je6(VPP=B%TFMBz_MZPCNtbL;Ma{Cywh9oW)Rr%>o*+Cg5h`31B?& zIB*{E7|@?cQ`VjMO-$wZ7jbbNu&F6TsB9YWD_|b60Jxs`C2$4N2n;6flOOB^q9jYvq$TM)SOx6Rbsb>YZ9>V}I6Xr;ZZ zsa~~f*?t&WX@f&yl3I8EwsT!JWfPsw{3Zuf-q+(!=QQ@svKHpVe^PO;`Wl12kn2je z>@;V$uh})asT;OGnG<~M_gJK}7U;x@znds4`XId6v>V~Yj;0se6<+K}da-xHi!JU1 zFSdYQtP{f>5RPKFSH!rEDO05R@}@%fQoG?Vm%kGp_mQ}-;tzheSjrzgYIj}m^md4t z(UeS2)_lmN3H+XXGF0-e%hZwKYOzRUK>HoSIv)OKE zI~6*W+I0{&R@yH`gw4u7Aj+&ZXb$5e81K(`55`5DEwx**!gxmXSZ&ZkkzGC0?-x5Z zx!Bn!T$(~fj+Hh-v1X-(Rdm|$xHgeyv+{3J5Qiu0nf?&t0~zn_GV#^&55nWTbL$Rg zrn#3Ol7FN>i?gv!!-6E6dl1$GssAY*zk3k!ZC+<+YL0 z>-!?(_cJb{+)Ir6GCq*;HyMA-XO4KXrFLV)ew7ktF=Dgw1H_rt1`RVu%8j=+ z0xiGed;;ah6KOWvZB8G=^B6zRcm(6VjDHy6A+{_kY73{JqPAS>b)ChWm5N&NVWpzh z9EpnB2x;Ig7IhXCwTz20i;7yrr!$^$#{08~Y*{36W+VL%xu=9n!K&D?rFMPd%cYDH z(ri}#Au(mOLC=~a<;L5=xR!AdXC>}{_}h$svoH81bEMo!V$RAU&G113r&mf%wp)={ zw9+6g>TGyiC-G&o@;jF`NdspL<9Un+G49Q{W8!`L>!ii@*0Lr=8}ydBRqmvN5zAze zX8ZWbjW;~SHQQ~Y2(+bkWn#@ry)NSqF#cD@k1+lm?V#JGD?q=gp#tUSWRiVcq& zD5k84%Hq;epp`qRJYt!w>5D!&a^v04xHICJjL%|xds)*y?S+5-!R+#FZt~;V*Z8_q z{6_it?!vslX*h}EwMBl;yRO#Zxcsd5;>P$2`7v;x)_wKz6anQY2AcwSYKID zlX)nrTYnk-=||c7a4*v+!)?sR*{*!}(@(<79~k=Tsz&c=Yj6aca=Qe=Kg7iztrX>H|o-g?Mf5+YR{O`gZv{k zlSAUdjjKG(RRQU4+0O3z{H)-8{}hVUB!?R>R0R}bI#-S;%9LQm2{}nUj$ML7M&ooT zILklB3bKNmbRMM%KbX?n&y($}4%G$u`%R_Z4C<%jzvjshrO}5Q8>))4olRN6ExM4> zgep_II#d@#y&2RGg8F1opNiMjp9sdRvPRv2(u6Y8f=Eq5xY1m7Z?>~KR2M|O8PpGg z`eaa_ir3el2vM3X;l}!^o!QREv&x!v(@GO6ObgVZx*+P!pnee4CxiM_ysrL4D9kEr z()pAol$*?vnv`&3T~$Q3vpQ54M7j*o`mKmU1YX%YPeDUBBr9c4!?dAq;4~u_-3K|mK!47&z-vA;hXzCymC<0r%#)z za&(5!tg4hp4!zy=wijB4emt)3u339F9~-yplL;q}WXeyC%1?!Et7@ESGAn4UwXU(Y zrj{-%u{M?jS}qp&Sp1Aif*YoUTST!ih`^6O%M%N6x?r&U7{j4C)Qjv@Ah5xwK1`|@sq^Vi{{5% z{VK{beV2V>+}hmuglphMv%%N$wK281@zcbX&aXvZXzBRL*49UJY?q6A+vaN(^|rC4 zQPkV>HAltCz1&-yYV~ayT5wb4`qYfHJ-$st3+yUa2=4X0G_>Hh%3#4<-}>{`@7kiR z(ra3G-Ye6lvo{ZsU~N?I)ZPKjiee1J(23&bB0D(~B~00&pu0TpG1rL<+N8Y2fOZC58dx5iqQb ztvvh@E-sj^Z4CB|A+7)pBEAglK#T^K(ZG!Y<`I|1R&GhbS=M3G5P>~QiTtWs;)|GS zh_r#7h-|HGfjev9+cM2LP`#bjYY6h0v}&IRzD;}f$NEn z0ap+ol_h!;XVGHQ@G$mhhz|jshz|f;Aj}$kfhM94&_KK&xGwlW_4l-1@5Saq3brGG z6Nw{$!-;nT`w;H}*1?_C3(w2bn`zY!1;!JH0Ot|ifd0fmKzHImpbgPg zmS`m|u8dZ#Gxp>Woq+3!{eUZo4!~eyU*H&GA6cSTaTX_R8hT+*3$5CoKohY$&_L`4 zTu1B*TuST=)XqFmeG8YUBQ}R)kLD&|AL0$bI=HhM3q4L^D?LtPGw|)e1J!3}yw(_RlovbMNH-4CAhftv}(^|&kABWFqrrQa15~wIEbhK zI}l4_Dz_}cS+1hAcAJ*k?YB6KhIj<%BuekY6obFUW*x2C!@#4&L%>YpLEziO1HgsE z{lJOS4piH5iSn@Njy;CGKpSEXumbL^VK=aVXaH^|eh!Q$X2}wT;^Km_so8-&V~Cl+ zLBw=m2jW&>84cXefO*8tvP940EbFjo_yl{F5;p?1#E*d*;$MMIMAp@|z`!-6$aKEt z#`iDTe!t7PFxPsqsf+G3blb7iZ9kxHtG%q-o}q5LpMLHe^mCo*=lapljpYH(_qFS& zkJm)l`~5aimC~z8Q`GQ#NUyP%rPqPKU3z^vJNTpDLweoVa#?z<`R!(Ky=HRT@3BbL zmltVo&Tleiizau0Eoxc;xwL*Stz4ywLZa?nm!duYJex>_Ke#gZepBOwLT&m-sK}F5(`&O z(L1kBeAfN77~hTYMvlEXKFsk5rh6d$B*#S@kMv3IL6J3xMItSf-APHD7a$Fih^551y>ZuiLhlw!9~0;Y*|roB`ylC#HrxU z5bxJL#X)ZLRps*T_ncWQQgC_%#vT|CkH`3Hj(2eEiSa^?zvK9Gj)%Eyrej+o1-4oF z7o@dT8?=;;Z8jX+Vrj4y8(3;<<*hhE$#s{yT6yPGa_y+(N_DLmy!#^#dBd^oOvm?5sqJC+8Jr_Z)JSayz4^p>VK@AOv}Ue{UMJ@>+98E+2!KNNv-=Pp}01F zGdgJ(b=+97sznzSI>B+q)O#H!{fEcEWq9=eym_cYk%` z_J!@j)5sqprgRsccLm^o(nGJl7xi1A-j3?0QGFt*Ps08BvK>_sp_&<{gySk+ z&+A}avrTjS#174>8%%FuWBkYD2#C7odwD8NJ zm)t|2lm9rX{=236&o%15TdGyodS~_DEq~GJF2B&dSf~EuhWd{i>OXF%9|X1hSS>%k zuK#O}T6U|J{$6$Cv2|-zqruN=jJBS)ZE=mhR4#?Lw$@gY)ZhA9>r1T{q}R(5bK^wU=<{XSH=apt z^}X>&ck4Gb9X`xxotslAb+@h-UyC@m%`F$jxi#11iE~??Q@HG4#tkj!HhH*jn;_V+ z<-1KD^R^X69n9$3QoPAy^R@|5&3+NqQa>?CBby7vxxFy7U|6M7YKCAfuq6dp4Kxue zfd=A_z;(oPz@;u3E$?sITAAy67Ml~X$M<{SaN-$YAL4hwx(^UI4LnLb1VALQDPb}llUp{ZQ>`uh5a*H-osh4H(=8rd$QL9-H9IoZHTGBigywC z09Zg=2fPh|>W>B*7CwuMbHwI&9@-0d_(O!ca!R~`Q=YI9XBkhd1s+ZrXxKa#XE}?_ zVJSHDG;j;QY7wWz!<@d4zHB49LUD0DxtWGN3GX5QF|a4`eNNxSbTy~M z*EwB_>8t%R3^Q?->NVJ0f<0lx7l75tm_E-bF^JQ5FnyX+;!~Wi9%vXo8yEK{Y>r=z z&;!83Zv*e;lz11XZ((`|r^H)1eRH5;-ZMChJvN8EiBM1AmLy`?y5hJcT_8Z(z^2z@EfIoW71}KBvT8oW^6i-7&-9!6jOS%}=o>jQCez zbsVPeaY}rP)7LOv#VPR>PFD^z)Xl=hMPPIMN`&SE561$Z<&-#+(-=$xI3@m>(^m%? z+l#d> zF}(=vNvz~_8K&PmWEdJZ;4X^7=1J@cBOU=(M`C)AQ(`WsOELX|Q(^|EO9mP;XJCmw z!RGiS2z>}VycoEaQ(_XQ5tzQlDRDWciv}7hrsFI+Yz|w5P#AEF4mgKX;tWn-!gMmH z#POWIi0N2|49z#VxSrhf!JdSL*fRpyljy5KZ^L8E0TixZNTO-ZeM4Gn)dBCGMpek9~T#tx$TNw7`-#6`#UK1uC z+24?`W4C;P*0O6l!B1azts+kA2EVY^;K^Rwo4I`0(9jQS0?t8@^{bZay!La&orn0_ zT(%$5E!XTC&y{>+Y+J%42(rI%mQ4|Z6!|K7LB$u*=Tzgq~q6FfIEi;xMSF8 zJCu#KYgvGMn2z$ZjE`WP1-NrqfSVU<%wVIfiPCWx8*N8HI`$Zlk|=s68*SZLfcpUp zaE~xv!MKib4dX5@Z?A+t{7oM8;Y#YmjV!>8Vxz4e^x;D+!0p@%`f#7u5bwX=5W?uUk z9Nq42aCA4a05_P8wx83{ok>UcZZ_J!#{%3Z7$3qo3vkOAZ(@A;ne-3YX!~b4x@j!H z)v*BApN+PjY_xrkj_w2&;C{mRUl?Zru8sw`1*?qP>F7>lqwQ8U+6KVU9p?c@cPtBV zMY$D6_ai#G-!dM;coyT+7$3&CL*g;ow$-$47gL|z%|=_=wv{ZvwWn?CMBBD6ZQGu- zZQ~f<$9S;MSx4xzD`?w3Mt$}U>a)qTZ4a^0b`EUY*J<0HrJUP=wrw2ae`0(iv~5qa05=r2tp{yeJ#E_x#@iTwrOaDlqwNAT+8$y7ZY&FM zC$iDjn~k>bvjF#NbE_2Ko@e|e##w+H%L3e^3FQvq;@AFzo^=|dVO*~Mjr z->h>!|M8nEn>J+5{V}Ff@JaRW3+d`#9;*V>zc{NO1oeaP`~HK8x86C}q`s(Ypxy`S z$3T4)s87N_%#$!ZRHJHTs#c~8`Gr=ddUoo9s85Ds^~rF3JsDJ6)|8-1f~q8VT}y%s zR2f{A!BrVt{!86S-7dWH!H8;U!TeeMXS@R{aW$QNiwKiOWE!)~eTefv&siiv5 zVotRv;n6K+HP)(VzxSyX=@Tyt#3@YxKFY2~n*Z z)NWd-67*8LY2Q=3Y1M98wVPJ$rrl;>-|R_LtgaD6tufLfy3O?&m-wB6pnG^M?p z)?MwU6vK^qv##52)14TCN zrj#{danq^Dc84OXry_el!(9-zdD-|dRoL69!uFvG+YKu0xK1fkL<*%jyO1jEUYfJd zFg}8DC&qg+-i7fFiS>KxM1NXF74|`@umh>W_J#^uNpm)t=B$?H>^(GRQy71e@u7_O z^_kPDQ2Gb+UMZKN#OJ8O?xYGkgDUJ@RAC*V!oE&(b`H(iF*IlY#&|K~VT|7!;n6cC zODs>Su$yVlme8ENKy!8}Rajq|v#u~_J$f=TR+VVve{=WdAii9s3go4LUosKQR93VSD1*pR+3XNzdg zE~N^)kLK(gnzK6?*D^kgaRiHQP&$v74{3Nu%%RC=Tn8f7b7IS$~?dpD})t@fyY> zBF4F(NmuG=MTO0zIjhi|y-0JmmF8?TRoDk$&W^j4ahkKkY0eI$IeQDu+3x0mG3>-0 z2o=_zD(pI{u#>354xvesKS0p74})0vm+UQpYidG)0{m^bGE}O<118Q$54g+D^=Jhp~89$MZ2w@=IlJ0 zv!iLw{+02GjDO1bB*xucj!DSL<+G{%L7(V|>NGKkTPBxp?p8<71$` zmj8y=pMLy&HO{mN9<1*Vc>hD;j!uwPWnJV!aY@T2LZD5RuI#GDUq*lW;dPj}jrmCT z;n6(Xl?)55wF_K3-LU6@?#p+TJl^L1X@|em28YIl8!uD^WIGpR1%Kdat_qmzAE_xi zVON^)l0N?mMn9O+BQ?q4##J~r-7VYM9f$2pZq%g}%Srlb&zRDKdm0u440oU zfAl9qNNGZqDLqP~4>vYc6=yq}vVvQ5>QG$}^=42%27x}>XSizDqdHAB1|hys4y*v(rgJg)>rM!c0Qg})~r*9 z>Vl{@gZe>GpA70#@%s7`p{^<-+qp2StV!onnow>sM`}{Sjp|Tc5cOtIKM3lRL47J- zSAQbB9&T*ZsW0jpsP}>TF;E``>XYyf^CXPSc1{g9%3r{mbShpC>)!#g! zaZ-NNjbHBEyLPk9klPymmh(m0F!#;x_WLSyP`{>n=bI+%9`Vfsu9|!P_F1E{=cKJE z;s3M$pJ+XYc#vif* ztrxRw%fkaLEr~g;v#s$tmWGvq(bnUo%i7vfEj8lbR+OC!hJWiG6?yKT+iHhIwSJiB zT5o>acUh6qtGO`^m9>w!=A18E6xI4sqF?=j(i_YZmZjcM|Bm(Cr5pb|)sk6S?l-&1 zHrmy?`Uk(ZsOE{u*2YW9gsGOg(z$-Kr!J4WI5D|z@esjRqG~55-&0)fJA3M@QI!*u zClznNBc23)(BnkZ94^rbY{p@aYcX&!@i_1~Vi9mE z@fh$i;w&bBP^+Lx?v3%W*9anftT_TdIFe5d*BGSqMb|vxtjU=(E7N#Akp*h%k&XVxHG}Shy`bHZMo6H^?PrSw++CJ=|b!Tzy3>MdZ#o}56i)-~PuC2UW zT${uL2H^mmzs|@1ymR51xmnNreKY>KYeN6$f|nXko|a}@%Yth%GT5o2*YbVsfZoCN&Z1Br)U_akew?8X? zCZ*Q98Sl?{55~JN-U0ElmyJs(wfa$Ny_HgHFV?|!h19C+2&vWo71Y6c(t&-C@d=FI z!T2qVcXP>n1(xcpy>*AP^0$AtxLg}FjZ&)@rB+AQ!FER-?AXqbT8FPd{3FJ{WjuuO zQH&4pvG0O9*mWz=?|N)6>R_wCTU?_JT1=^RG^JKo*1_6BYPIi*xYMhM_oV~dlMZZL z?b_RX#3_}^S}9h&FSqV{ZBSCJPgC;R+c6${GsaUnUd!=dra4~B@rNAW!F0F8cWBOz zrwaQwsIcjipuz^YLxrvEn_??(#Rlf=x|s46^3E9#WBhZ*r!(&5bJnKt(Nen(G-q$7 z3i}#W*!@spy`O zHkamX8O+)A7huj7-v@Kn!>ANP^>wcoB#-jNj6%J?ph z$6-9S55^}rzL(?iOmi%KwUU0o9Kfd95H{6Lrf;jEZ|g?iHkrQd6ZCC2!M6=yQ*8*F zYA3U)*1-7eeZfzgcQqzEPVtdzI@`BUuIA-^b!W6eK^#xTc#b{BQdcYE=Q-9g&GBB2 zU*MSj?I`-U(r+vN?N?d(;@_Ut28n-L=b0}4ZBuf9__wl%ccI@_{9B2Oe=BkEZzV4N zt;Ffyilr<5Z4Lcfk$T0yHOQS#OIQ5cYHiSakb1ojL+V{S7gDeIw}|(L11$cn#KpfY z$;!X%-%2s6__vY%;@^tYEB>w2;fjB|GCWTF+q|rN@oyDvkodRqnGpY0;^N;*d=%qO zh+p<^&ufFkzm=O@{M+Va#~09VEB@eko zF71rhmW--^Uu&rS#{-gCek+GJ@$eS0VbdB=uUaLFZ2A?~y|#DYu$fjK=K5fHu7?`0 zxb9WnEw5`I4!y>g_8Q17_{v{E=B;SP6K2VMPi{5KVEspSA_Ie=OYpq2xeuCHFTeOSAU(nS{tI)hN!h61Frl2oIgx8q1qCuek;_zT(vJ(?aNi4 zgnSZi4K>bFyL_&u%jf^qtktb@#$;Vp!kx=cuWB9DYhQ;u9-BF7wBhW@^1AdP4U_ER zvchlHIiLUd&6Q0XGUxsn(v>m8LzbV#Qfj%B*HkLTtaR4yvhEACG-gRFt^6M;s5M!mJfcFPA}^X_ zd=q@fx^DH&{?<69x$$Y&(sO0nsK`x;HTC8dzRSKfPH1kN>Y8(|Y)Vw?#>CQk^GaXK zx5mKco#D$HhvZCH-h43nV#^Jmcvw%=)TL&$uFOe{K6oM3;@dW~AiA}sc9Vy-sU|Zu z!()$c^U#8Bm2V5~^=%wl(7$q_V6Jb&(1JTFC#G6#Pg^e)4y)9pTJAP%+ZuT=!=`2b zCe*(Yvw>TeVyfqqxP{Xtm~P~hn6k3cxBR@jVO!#2>{*RHw#3(gi4mB-$|*6D(?yuR z$SE;oWo7nBoF!a`Jwe!0!z$XRf#JlbIDHX;$2lcF#OXpz@8@*kf$F30qr>$sY!<$N zJ$C>n5O3vl0j7?e5_@qvAJeX!&OcCX!?Rd6%As4sv8Ms(MXcsD4AZlm5>Im)ifIw2 z#KW&? z!s%R0mvBmafzvrMHM|B~`s{(~0jRmv#A0(I4%NI098Tm}`Vg06T8Fb}mI03vBY~N7 z4^;p7uAIfN7@P6fV^{>7M|=tBPh1FeCoTZm5W|5Ld|RQhmE+gp;_|SmnTI{=iO&I7 z5a$AeiL-%Yh{3=?#96VG!`9*~Ewk}nW?+wrI1OkZJ`G$)3;-@AP6ld;e*tP{AE+LO zi_<)X%|6(p`7^NY8Q^%}QQ|mYCh>9L+r&Qs7d~^Kx<8lb5p4Qnk6{eZo%kTohUf>Z z2u5Huuz;umZYJI*OO$|%TY*i@DC`L)-UA#%91a{r^ageydI8IVaG0koQ9RCKz^36& z>{&;=1Gtnp7^o%Q4%85D13D3J1-8sOP#w7zOXPyhqqA`S0l-XRf8g6hN8m!DJ#ZrN z7T|C>%i}nUp*J>du*YBvte6Sx0W2We05=nF2F4S+0Ot`q$r8PciyMPYO$Y25M7$B$ zfoMf>Ygr%yZNNNY3vfNLDW-DRGMr^8HVq9ddL>>2YKRwrPQ+SZ%M4_zfhJ-l&@kgb zb=n#%(T~`C8+$b8fD4IdffI?}1BVmO0Q(TX1J+GHP`w0aF_d7lfTgo0;AY|pU_9|S za31j((4Tk|=uZ45rgHp?xVR43)D&V**)-r+z&v6Ba6R!$;0mG<7);zJOSAxI(O}b% zi#<-nJ-`+%rrAIfaTm})`~tX+xD&Wkd!YJMGL}e>&578f*$x~|%mDTwZUfdmjldS* zQDPb}^XUWCpW-ZrzhN^TdkmX^^N1UO{>1e_cj8At8)7Q3VyYZgzID&y=tp3~woXXR z2`aCOus<4-FP7!T6LEB1`%;eeq8vMia%>6ZSQF*g2FkG^2YA4nH~_`28!jfyHD_x7 zU4^M8nG=7# z!1mvrpuN&H=nJ{7WXn!-cKe!L$x;7eK{srFGAH=h@3BZ{EteOm^*1fj3ng}AmK*J) zVpbbu!xCDlsSS%8%@W$KD4`w6652aiLfZ)?v;}Oebz-;!!ch$OiWt`srLtq$K|7os zv>&m9_Al(9^smM4W3N@)`R}7Jv(S^;NPBQWo-v`(8jTY_5gL= zIgF2Byg%bT7-wbeiWSB)^lul^zrCOStus4lZK3PxSy@}b%Gx&Sx;H6{#nxKE_(O~j zWW2Y_M0U`6vx9a3J7|;W-#$kF){PyscF=WWSy_9O@db?gF#aLqPclB#XEHlzHSD0> zK>v0!{oBu|>rSDr>%k6Md+558ZJ_HK82^EB9pk%e*Lty3))6M{V0O?BVh3$McF-o# zq&>(E+Bxi?9nN@v#(O}#UC;Pb#R+bJ#(f$M|{1BN+E({KE(jI*b*2;h7M)ms zI>ZN|UZ7yJ@CXbtS3oxu)TFX*a8tgLNeWo;+ws-0=K#xS18co5^>j5{XY zM_u(+>Z)(CgZ3ahXlJvsb~tp^jjXIKV`c4P#vfq(uZ$mI{5i(&aq(vd?Pu(ueVQG# zTiHQd%nsTR=&ETWVYlkoL0iCh72``7&td$#h;jF#gLW)CXos_db|5=wSF?lm5Ibng z*+KgvJ817`+_}(89$}2nVtjj9(>_?RBDJ=AT~}|#Ql>>Itw?fLt-${30qyVSy_}r~ z^}#!!l|BzM^cZB$&C)8YnS2GlZ2N`Pi(;%xGeRmIO&b)ou>pxV>k{gvbZ1?tp8g{G z(8az72w5VY#6_)al3|m#cu8|g6(3fJ1*iHU)nF|B`ji5J+9|CE^Rt4=Zc2y z-y78d{BLpq+rRJa_n>NY{`}Na@8tj0J6RuU)K{rupehEM(nJ4+N~R9gPlrBO{dB0G zj_cx&iLzjmIlZc}SQiiBn9ljyFWuPN!4xw+f=t#-$3ZvWE* z9VR{gbi;e|LQ89oyFBjt=Wa2_hrD_2?o;W{6joa*>ryjEpHv?$38Ctv<+^yZsDDVR zck*@rcd7I$M^l3OqOO5@AE+M#^--Wc3I8xpLiLxusH&=}s;a7Lh(>j`_38)VI{zT- z)H@&7mz~s2GbPM3EeO?Y2{rDhQitk-s5gW9K~SFz>QnLh`V&F^3tf6uM2N=4l%S%z z4p(#&G)0FR{Ver<)^h2ZwftZk-B#yiZQT@TscngFYl&{Plm}YQms)<1omJsE;^2;H z3vR0MvtDQ^jjqiqwOp)lwKkZxMzygIK(j&f)pPLUDFYaIHn=c`xz|GH}(^>>BLD$Z^69CR7B#mutF zvyb)sY0tkL6xb(wdT0am+d^iwS%zMQ6S)~Nvu*xi&%YSVvRUalKtI1Ymk_;nk9|+= zy&=lBn7sc8t30Qr$GGd~@3Y@hoZDBsGstF2h;o&~dHVTZ*>5?KdyjVK9Gl}I%6p#E zGGnfC7*?FyL%Va9&8QG1*7MZ17$^PwJo~F1&bG-4QIb7RWyEOp^9$_5PUL!OcXC+d zkW~EB#=lIo4~_QK#ktPfoxwJXLX-s0Q|U1p{rvV}U8v8`8~-xFVT$Le%$TM6`Gxk? zCvrz?ch0rB6r%jYFzTLn{zKwKZU=3|OdHz}JY%ej9&6l60YM2YkCNsk$#ug$klDbDSqjkwC; zyPiIoF?02`hwM{MX`^y$M`Y_5S~# znk$NiD9{3SrdEw?eV*6nbv|>>hjWf%^O{#$;;Oq9 z^N-kh2CK~ye2X_aq$RELNUlEKWBOf+K4t;F#cw;LX;+O*uFmRlDes7tXYgH$+a1#O ztqMx6&gpR}|A@0^@Eo%$-{QLzJ118k?%|quq^)P&3^N7vu>7I zoNw`a4k1aaCMH*Z)5G;HMQ<}N-{L5T5bdg=$<@btq~{&!=~;J|;x>nneX9bJtH14$ zo_}PdXWeYGBH!Y>6dPLP7@o>8EYC3<&M~yeH9VDTSe|P*oNH+Do#CnP49mYW9RAMG z;-ulJlZNFd4Tnz}TAVUGb;_{(l;Q9xLyOafr%oG|pEevmZD?_3-zOdeZ(Uyz{^;>f zrcXI*w{NN1BcWs2M)kpApL-j05 z*jH`5b};FnM^^3ehUr_1>$woZIdy*9yD zztJf@Da+$(-SNI&mfzb&g{a?6@V&9|rSzoZ9<%F@J9=4OwaX4sZ%y#6**HHvDaYe# z{c%?>%OCB`Le(E7_}+Y_?t|%*8;+0n%D-keCRF`t!uVSoKTjWa&f{Fe@u^<N&9KJ0?WWW#Y^ulx$TqoL|A6UNtWtVkbr$>W^ic!*c0qTC^^!qkTo#@B7^ zlrijz$K=N2>%8*yc4NZS-z1E$-{_Dr?5fAP#^djM<=5D)3{#&>7~in*#f)LsJtj9D zkN3*IWp^}8ou8lyFlhWThE;l;YdW6hm0xSuDqLNhFurl)+Zn@dcuY1PKjD>MZ#O1f zeJx>p)5gy;hTZl!XFPtK29MRI<2Ssv80`we z)r|@9rj7L(NhXgr_hq-7vE@E{t2fp6C&u5Wu{@O2O11jFY>OFNTH1TQsqUB<-$FC` zP*Ph}n-sww#<$WeIh52{)uv_k z(=)cTv$tBV?w=Tczh=v!q^_#fEwf*qv898(=W?}uVti}Omxq#is@k;5_MWk&qy4t! z>fwp;Z8Z6ZlB`s#TV*epvBliJV7b~QF}|&){!o&Qs?Gh`D`srzVsEuV{Y+wfJB{Vx zq<*T^_h-L5V~d5o=L+@s#Q64_(T9@;soJ#8{%FRQZuZ+&sQ;Q6-$66waFU&Bb?fY; z8C!bT7pzcEO^i3wEIFJsRMnD9&jQqaw&ePwpFI%Y& zODylKX>la!N!7r1*==T8+S=Q_rCyy_-bG`3BL8MpFMD<cqjl}kDw=-5@GJ~He@RdW06Q8T9uvafkd9hca#n`YIKVK1ph zbjW^g=9IzqkFHYhPVCrSv-8NXS5(OzvQ;yu*x4^!rA|of*h6#d$kNM;>yxIa#+qf% zow>!qK6RD)K%#w5&9x&*(^Oez*-K|`8ES7>r9PBs-%Hc}Xwpp8*pAt2XKrz_cV4aj zI?>)zGx%tdT9wtY>>bl9FJJAL9Xr!ns`aY<6ATw!&YIc`wb8pM1?cLX?J7|4vHBOmHt5sLKWcT&9e8xU%joL!%`;g|P z%%rud*$-qpdRvaQ&t9YMt@Z7vnV*>yt-AU^wyU@0bM|JD>W8$x{Wb4oCcUegZIL~} z+wui__ek{+t?vMhHZw`1x@wU<-P>}!eN?1+nAUfo=458lR@LmT+5X;^6YR4i)sJg^ z2Wj+~NwKP{U9-cyE&pO~wpRVL*7sq}1ILm+QqAs`9qn!Tvc3CS^$S|x!5XJyNxM{6 zyJg3ETmIEPYOVTZt?v-cOUIHvQ_b$4z1Q1vvVHbi^{ZN6JI(xKNqbdSyJx3+TdM5M zqSW46Uwh3v$C8p%vwLLccw4?|?;fR|tMzrzXpbc&tFHFQzT|B=)jldpy+G^hs5yBo z=_}Rjp4pY&mecLCqtr{azC$(oV@c_%t39)g-j*}$&DN<`Xnh~iJdl-iL^Zotwz-d` zcf9F`64!S3y*abjeXn~qG&*l>)n&z?tkSjmdhd{&UU4I{N~87lJ|X6oapST|-__U8 z3YlOT=aE&a(bua(qAla*WR-5!*Ut{gv5X7KDvj0G&j~T_9T$;R`jNi=wU7zD<2GfL z?$X!49unOg(r)m|Ml^vPzTm^}Zn!tm4jRl_u-!{X(Lx z;!3khztY$HhvZnr)n=8Z>+1tT%=^T()s-I6*S`@mp-)^-U1^rSett-FpSVG~(&PI2 z1tB?o;zsI9bM*BKL(Hw?#_38=>FXDTOt6mg(3PIk*DnrVo+`b<;kEt75`9wBJ?SWE-9EF;v5~I z(^rg2x7MYU)CDS{vLMREpxg+`lRrc8ir{qX+?0~~Kt)s*M7bE08$o$8C{M-z z(?1d75|>RmxyU*CzJ?)J(%$U9{)tD%wGA9Q+myPeD&>0RR?Bbw`dQZB+TL>F!Qm&L zw0UXkqKCut60giG(En%ucOft>`ECn1=M^ZWrGMr%GbL2i88VEerpDW4MqQP$K~kSL zbzWh$DW-;6Q(Zw^czsDmQ+9^&TIUS0cp3G@jV0OPrut1872*2YB4c$~mC0C;kYUP3 z`|3K^WT{?FKc$OsogNzUd5jdTj)5=;?(>^mp&hCs8j^%c7 zN##e<^@Fn=%gu;Yz_M7V6~Js_8E_Br8Ze4jYMYw7q~W+@xeqp7f56BXVhOMxu^8Bj zSOhHD4sRjwD6zmcH6akQY{O=H9!8cC&jCG&XMoPcQ$Q=?cR<7Y*ewTG&?m_-e0PG( ze*&BPFyeX~_#W|V;6h>+a1t>S_$cuRu&d0{60@XdV6$u+=06C`CZ+=S5WfUQ5mSKk zi2H%=#C@_vzBsvl*mTumq!lp%Sh5xB=fI=HJ-{8rPk}3myJd-9$1I-MO#c`o&cu&^ zR>Tj0hAl9}0t<-m15<&H^!DwYXGjC8}U=ERP`XwGs!RbnG{jgEu&CeWN% zZkd$26tnpAt*&6Cayv{Hfd0f&RCxf$sS=M+-3IShRJYlto}P`9OT=c*R*ZZCoIw15 z>K3S*sS?*y-3)aN)y=l4W}GDqn|n85BoOFG^rxzUI-4qSI@OI(CsQR(uuO8E#3kB* zk!LVsPILiAzXx?VRiZuBccJ#DO6(&`G?q*B4n{06Qn?=30q9R`Ni_y)!)B<&8^FqF zsMo1R+orzfgC)9*&78L}k_VhX{Eq56s9#eh9-Kdr4sS?9_B{|!0i6Stv2qWf1UtsiVsI#aNr&3)7^{-Tk<9j8gT5yTp z!pPGYsay$s9OzFRMs)?$AykPEQC$wTH`V2~sgq{lQO3-6p8S zYG6(n)E}va*``K$VU|nS+#8CKb3jL84%HB-SyYMXRF^?brb^t~Gs(GZCvLQ*82K0@ z=EV1b(MzCiph{dvH5lq!REZ%ylTt5X7XKiOEWk)*AaE|wpXg0>G1OP75?`je2-F)|7`f%pj31yCQRN_>#&e5k#s&bLiyzI=udo?>T6KfQYEgSItS`fVEv#sF1fu^6X;@QI$auf$F37X$G(h?n~4JE5l!rCm#Vcs=rPPJ)>UWLgTOK_fdJ;6`QBfD*` zl=Ir@=AVY%RIb^toNKV(nJU$--(r!z%-|xmG2PQ5O-;${a#?#n>Pz!lx+D}@%zLwR zzo&QS>a;+2`W+aY**>VUu&x${yohe_|LCa(?5Wi;E+e1G4r%S*pW z$$ake5-Gdv8XOzq-m!J;pdyP&lvR{_Qf>qJJ<6|9wxZk?@@dM!m$iM-ewx=A?Wgwb z(0)4N{#>gf3%eDiZwEwLvn=&pmZiF*ELA&@_O7&dpq<^SdsgV;S(d6o`>B%y+E07+ zMEmIpGnA#aX_M<&WYLvnsqe5X^#tv&(f%0iRiDsv3#*({d}c zpY|}%l^?ei%ThNUt&uAyhux~zXkSdbGws&2caHhyXia`f=8who<(}TRt3z%(IEA47 zbh9+DhPtn_L0Rh6&bf1nELyQFwLQyH+p#RQ4a!oT-lAO^SjBGJcix)PsDQ{P*navD z+fTcq{ZzXaWvO}3qAb`6D}!;}|Lp5`){6|1SNSpDHxO<_vr?JM<_p5CFXSj}L? z>I_z_K7xwX$-Q!eM)g_F-r0FjTA#WX0+ZR;*58#p)xhSl!Bs z)f`r=&Y^uc?Y(n57g_XsyEGyoatrN$Dbb!`#p+yEtUiW{)!V&uCl*;mv10XGR;>nO0$`ul5|Fh?;vLL^c1<6YG@pV>Slr>PU1LZbQ9tFyi@OSehR64k5A38==wbNTphR zzVefnKYspoc&o^dM)YqV|5?+SsfG~O+x?}4L$km!1=^;z?sCez?X<;fKL%muP;15 z9J4rJ)9VyQtcfRqorvE7o5sVC3#=gK01JUV;SKEEDS!JIoSY8+zz*0og4hN)j@S~| zmT1JTI!qYY0E{5s?wCLA3CuE*n|h4Y;;jPtt|`Q8P=km+07nvw>HQX79#+b?>kD6h zR8B514tK2=0_N5ON<5TzJY%$FoLK7jw8NHFELt{s2^rY`5OL6j06!^ z0Y?&-18a3KgaT8DOXwvordPMV@Ea#A(Hqz-&4S+-xSRMIa1L=6a1e0@y~p64O7F4t zg=)^?flUvNOak^KP6VFMgx?*wi8zj4;uv~~Zn8w3c@-Un|8a~&5Jv#V5r+ZW5*>lM zBk&HPmpD+Cs6DSDZrWm`_ApG=z!ah-Fo@V4IFk4Py@%lKMDL;Xg@Yf#61BtT9FE)% z97MbiSegNUqr2d4VjXY}@g{Ik#`?lzLorJgHqWQSUk2PnECqTHOMpFzMf4tow}4*a zd9(cOw@%?I;^rxgv?b;Mb!qS)2SyOHfa8cq=q09`D z6%3yPQ;46^OWaBCSL+KS9dU9WV6*f~_}>TaCT<4KA#MN;BCe0(%m}f#*};Uk2Pn45F8~kX~YdEKvbYPL~Y-T#Q5zX9LF(y@73s(}BAE@V-hf zak4DYSMeja%pAal=>@=z>;A_dkt}6sP1V@W}JTyCnj@^ zua)yUWi#?p&^<5G^`Q8M-(rz2{fk&u#v zVt?@T9$1|w(b#Um)9W>xJGe+-XWED3!qtf2K1KV-w4b4U9_=GsGz`fWFeJN}nc8$_YKxJn z)y_wzRy7)#+VVcg)N0HT!S#$l1b08}muS~lZ+1aQc3oeDWM_9qruHZ^wbz)btz)Lv zh)k{1o5<8|evkV5eHbBGr;W(e_Hsw2_QU{WYTI;0ruMx^L~u_s zQ|n9nDB8EvK9Tl8w0DbXeGHk})eOl#i%hL{2Qsy)myxOU9gIxvxo*hRE?bKT?z6P- zqWu-x_s~AsWfw!TB@D?fVW##FGqv8x)H)?0Q@eQzGPNBYkg46(1DRT%C`53-r2R7O z3uyl;INlL)*FdIYvzd;qU^=#e>DX|lV-F!6o5yr)Jkzm(Ovk!29qYh!Z0`~$9pbLN zW+Co6p6S@JOvmnHI(8=GuEUv*eV^&rT-slwo$1)IOvgUTbnJ&&KA$q~dKPh4)jY&q z%bAYt!MN)-ren`C9qZ3@?3c6`(jGuN)3H7J#I)DdWT#}VDXEudQkK3^uB7jS!(@>b zxMawMH#*i!9$|fQhcXzuDIoHB+CQQF9PQ<_2fAbgyB|;X`Fqmw+)Qj+Cx7hgd{;Q% zoq@<9#w$Y#qF-q|_R2k`WSe7TlWTf<b>O7A1 z7t^o*UQ_~)e!Au>;_r7(^Uqd^g(?Y9XXRq}FG>F9DVYN$bD;He{v&4&dp#T2dMwgKKQLwz5_@34xE4Zw*%!bz5gYD>HX;+Gn8Ll3zR3A z^6wb`_^+S;&nK8qfm5=z@}jJPavdnQf$}I&o`k=fC!zB7LCUwLDF1?~{PWho{_~dd zWKfEgYsi@;#I z5S`If6K>2M>Q?0zR#WO`ylKcVT^pHUJfC6GC4@I#t1{|4o2m^(O*gZ1!yC#XYR(Te zHR2saDYS7=Xvj_NO{a#uhEWZ{xAfax)6eTVH`Kjk<91D& zX2Z_uhBnl_Vv}*LBq%iGtj?yPZdZ&cKF0J>jOnu&)2B9rp)JpN7*AHU`XH%s zUs0(9Z6h*bq=R;1c$~y-e`=z=!_e*Jri^e&k=EbLmd?@}XyLPB2W>UbfXdkPN?-x8 z9GFVH4%|lk5xA^xlHq;!zFx)VB#gLz4}6q(1=y8%8CZk%Sl3Iy)5MFwebz~ax$J$- z$7U2p($53u5zhkMiKl^f#FIcXVlJ=@MY8GN+NMrih?c~o?3K;N$PVH+z?DQD(1&;o zIEHu>*pGPFHg)J5n8m;{*>sE)5YvFE#IJzchzEenh{-@t;ukQ;F?Z-fK;`>zDLA!w}aUE6G z(Y__UuQM=9C5va5V#J@g09eW5*|}7S-c&c@uwJD~e3|M7+tf$ZIJxJrIe{ItPXcpT zJUfai@e!);VwQ)g5+9`cj&16^S(v2-( zSEcuLG?$2*7cmme4%#z7bK(iA>)_9%N=&25I@&L!_tl4OQZsRD*0&%h(ZK|361PPC`G0JHR`O6)_Gb+p}Ni88rFZ@|<6BmTsez)BX+Hn8lK zc!OoH{_tL>O1whVPo71dSfV^^PGAS^cfcH9_`jw~JVcenvj?aW6RFOXXVI&eWfwLb z=VI4b;9hpnYN!&UslEooYO2IAs;HxVKchuyQ>W1Zx_#AguHi>>3iS57^4Bn1+m+c` zJ7#OAGh6#D!?>wGg>g$zp<1qEPwjf{(62eI>3&UuvUBb&l^W>c{<_aH-Gxg?xE}CK zDw#4qb$~>BzxWk68x6GAbe;5)P4&LufI}{P_t)UgPB*R1Lgh5;ev=~F-!yX@^Q)JK ztLj}Tow%B?iEp#t$5gX(m`Rt*Z90zUt z;7eZ)nA{@QIVICk+E+EIHZD~cEedG1rnwc&s}A`*#7a~PHmJ5|gKBFwsJ3L`>T;w# zzdTfPDJ65pA7)pl%9y`P1v zE0FedIE--UR@x`h{xI#`Xz$Q>-wMPxXCAIOnUeX%<@z5zy{EE4btoHDd$B>aBhsE@ z+putTCF~#4euj2m+DFpf$E8PG#5cFCM11q?VZ=8pFV}zX>Ai#vs!y;%)rJkKo!Ow; zj)kjl!QTA{?B)!IMpkcr$YrSHR@>!D7*m>PuXuW|uTHDeZ0-+vYE8PW3Y$cXkZLq>Gls!}N*JxjYk?O)P9 zjrO4~SIv+SZM7O1(e_7cq>6J*alITxRy87}vyc(pJPaApb(YA8UhN3`O4^^N{S(^H z(e4{;Z-tC#awlX&%T^;J8hR9w(j&$7*FC*Usu3w&fQ)F~Xhcfwt!X!heO?6Y2Wh`j z?6d?K(Oyp=BYL85Y=GpVJ0l}{IszF{{n46lQ!*Qi>#urx-^YyTa@wDw{XyEhz&>dW z>`s|JotP1gV1w#2Y*2lO4XO{IK{a&^8dTMpC|n)ENU1gLF| zPixR@e!)dfHp?Pcj{8f>k5C>Dd2Cn6`IJXdo!2%1<6|`S4pGevsVu{_7tU+#33^`PgT2 zzCG`T?o%Br33eqva9j9mQs(2EwQ*Hx8hdd&&3Ny&7fwKuFMVSR_z;jn(9pE5Tj+&}X3 ztXg?a%>y1J`U1Zt`T+}x{=f=i0I-SpM##WEMdziEwl3X2(o$Eu*uCTE^aM}uqoTJCU^~W68fote)1+2a zqL^!A*hM>kqn~bwD_Ufa=@`B}AUWRdHVDsNDM2PTWa_^)H%AuF(j(R4QX{L$3ycqx zQ19f_0TSgcl=nL8FS*&d$csuFxpd6_%+~zLxq0&VkA4i!-f+GRXBM0#m=G!9a|dL? zf3h`y6!i*B7`MX=Yq9g4NzI=`FT(_j@h)HCU2xd@G1aR$n9niaIULN-ZOx~@7|zGx zlt1eVwDRX$g{l-2F2sai%7kS&yI-<3=W^v5O!jHQ8I-Xr*bP%Q@U-O`EYOBwf?HgR zf42Vpf>83cO1{>*`Jz-V2IXS-ue%uh3Y5H^lDAVz4V5l8C0DI{!N4CqeLhNQyi*$Q zlusr8=|8C>m1;^=mr~XBNB_v0(uJW^!YGw6N+pcajHEmXe_v0+c?I+RocH?a_E#K8 zwwAi03xQJ$q7_kD5anV}ZUp7Ypga}-P=6u>CtK$xm*fY!6hzM{(EB>a`swynD5A0; z%Eh4E2+ET|c`E+xPXyCjh1t=2zj>+kcOFkQwH)#8%r|}AEwv>fODb#2Iy$v|>zyT` zM=U0320iiP8RNW{QzyML<)HjmTlvRqp8~zM;{WX1WB)UAEB&=fkMG@<7+*4-4{R(9 zZ_=3>>thTt;b^739pTn^yK{JbZg^8|M&mUpwcQlnQ0mrbOmQ>mi;RJ97z1wMRn67 zY!=nM6cM+mZc2pLqPkZiiWb#Pi*Q?1Hz^`x(Sd+B>oi4!p4@(88w+exnp{nTvjZAK z8z*Us8Vomg+h^3*7EhcKW~ka1mt=p)wPA2}hw}FX54+Y4&hA~lQ1FQB?ZMeY$|uDc zTUD7F_n8@Tc2E3G`fIl*nHe_kwogr*xa7FtdSGraa1B-Bn^c3K22&-zK{fE}%01gB zNTcq)Nt$VSJ)PBp3BdD@1NQ(o5qASUh&$*d#?d<(-fd$7&nKfVGdp@B}c0IGSGIv}b@% z44)Nb{^D*4(J@5Z4RKj>Vn<*!L$vo(B{m}Q=`Jmhxi`O&oEp=#l?;SRns&z=S*5@m zs0MAz9@|Qwjy1K{ff2;3z;VFoTC>zQcFA=YSOo1n3u+6b3v~q6=;&-YZ|8Y9?;XU~ zfh&n~fIdXEVD;8%dDf4H4ogk6gO)lI!)CL;u6%QgTuIx9;#Bp+i<t^=M&oiXA)ZjUjj~)i*W^in602a z2CcB=n84kK@MG(O_-qd2v+aNri1$%te6|j;&k4W~xfpBR<4#D@lc`WfYOhG@v~K4l zDS2fUAcN2dE&LMse97Mc~@>4Te=;;l!sO&cKH2}9{}s(rGT+BJ zg!%nXVA=ik9bvl9DBff8_^J`fi+DfWcN^RRnsqMQmJRieOtg&s=62s42);!7uSS%&v{#KgMvc z?ik*;Lbq4?XEmxGE&-Btk``M}?`hR(^WDqMVn_OaV`ZA^?JY&NxyaLEV>UNXVw;kA z20Qk$!j222&(_oXrw-dfn3n&5M_m#a(iEpzkE77=c7UX`SXJ3Pq*?M{(t`2#_-M3e4XaC6VQdH}p zl`h)@12ocKD*;dGtkr~6PxH=^AoDcu?_eF@8`hU#b&?+20|Qoficw1$t%KGt*!8Oc z=cLj$B@;Ea8r3Kln?egKsjKz${-HWVE;+Q=B2z1`V$G5|+my_Uu=a9+^}Pt)RY@aj zR8P3XU9?D*23t?>`s$Dc?!Gp$6a6D^NtvyKHayt%%K<&4v^FKP%@r}r@Chlh^^dfb z@>&O{RT$3d67!gp)H-M*f?ZPw^pNgaX=|3gT8-*impEx_mKs}WYu1NI+^}D4uCz77 zEW^E?!*JI~4EM+IiT-_^rJmN)d$2x4GIi2g>mRvanra=in}X914Co;RwkesjrLne^AwllGLu0FC zou#_gL7NerE=wmBwX)77^_3dcOfkPJ!?sdY>)><@!&w~eQ=*mDT3HQgs+Dz?c3O=} z?cye@A*HpR-dpsIa)CV>Ya_>;RdduqE1k6m2FP$%DXI1J{usk2q`THX@~6I9snC{= zT3Ki5rFGDr4-S*nkh)q~XQ`;wsQg^qsi28Jnh_|)ri<&&BNA(Fx**LS=Zd{P*&u<=Mzf8Qij8oPeC^^q zL~VaUBr(OiHt2cT{mQhLCFL5tN&G`D;eGzSEYDT+hD_EEEtR+LZd#Du96ps9c9?uJ zWK13b5}{3%Ea?6!d7HE82-5zuh-m2CB8iIb3Edt` z!)wQ>La;-fqx=cXL;2gLyk~O`mHTI5*WTD`9v#0ZGMie5<1NA4y^VKjUgxF7kPgbT zra(KLo}rwmCl2DA8D=h9g&l4k3Hrti(N|f@e;91eFy7+6F?9Z~$nY!=wJ+a**u2E& zaY|qD?Qh|z_F~S(T)#3L>oo4t;P@pLSANug_csTWn~$ma9L4l+lDB2@XY)Nb#7swQ z_|D(+7oBCyTQ@Jkubl1@*7X;s|NmEv55iCH?tdD;{ZZQBT5fJb{yiMf@8ak4M_G`D z%A)%V{=h%pWIvsfFjW$!O2SmR5tM}KA3b53_ox36`#NVO`zSBU8YtI+avLa*0_92g zdwCKnk#D7?L}@9pR=)e7AX>Q*{$MwPaZ}>5Df#=IKf77%fBX2)n$Ao$ zgt*@BAKJa&QiEp3`FAGtUb5Ni@nyTFs~*|)hyCF6|HbFPm2ZquzA;95YDWLTo|;OX zu(~WGXn`~2btz=nf z;|DP|xAgD*yl=Mg!x*<)`c1BtRu3A#sp|Sc`VE^V*ZYQKhu=0d?zT4-SCzyiHSW%s zC{?pRmCS}44duJ-%@Sk6jwiJ=e81b?J+ZT38^guj_ECv3p~sUt7|!fAt*kXQF&Ud7 zaWFgf%j(g)XGW|7ma$2;0+>xK1MVSS14a=`ZBuiXpx)01o31}#WDKzc*pFBYY(*>r zmY^BdwGeoeSYVr)5Qtf}u`@OgBg=^AfS$xNKxg79pcU~upaCh^^c-M8pCrR@*501L z=04_Qj|1N$ehpkm%mPj#W&$529szchSz5C8HUpbw?2J7K%qFG+_Yl7XMiEnh^N9O_ z?!hiC)Jnp4d$P7$eTakAPN0 zCRq(gt){c|wSdS@*HoY*y?uKpIY*$4^KPQC(Q$a2o0!F%SZ~h&j;(7|nj!;Z%wC zRM{`vpDMABEYVml(L0#M0wa|ymF)oZC$^*-149FHoBqTbz)BX%UZ)yuoBEy)mgq9W zoh+5j15O}*N0p_rUsEL>q8f#{4^WM=P0jYkEPJuJm;JK4fR4mis*&((s1l>8u7SFm zDltqtU2V8T?3Z1H5p$w1Fq-|cv#1iMQf0sFU#SwuOYN-%mx%qcPh+H#rLvC${fWb< zvQ%~mRpLWbSt#3^>T=uENi%SAcae%MuSUW%hhf+snUxK*O^x!xESIpkHx#FRjxkVT z4psKcW>F=kQ)RzwGF9SUN!OO4jWwG6vL9o_ocKO4n*FjHs1nyv4aPgZMU@yLovxQK zi$D8i7ht3^5T?06f1)?l#ZX_RN_?5>BB(D=U1Xcum4&rWVl#)OvZH_#h>uWZsqDj4 zi4Rg`9<~=%$-}x&#S)ogb1(a4+W;MjMpm{4;9YOC$dy=0mHo0;sS+>sNODf$68XV@ z1|#Og6ToQp%Vts~rcs>-?-x{w@ja4KKjRXyU-l!6RK5<=R-ixeU8=7^T}zd?f-3rD z%a;P{o!_`r^iEBni<#+kX;t15$uX(8djP&tJ7{cICT%6F1?m!E(y{ODskBK0c~34+7(&6NBc?IeQB3Stk|t- z@9c7}RqnhZ3&Zl#{Q=CxN?uTsuAbh{R;NjYYQNy=QlToL*id)h_Oa*F2b`0vY>~w> z3CIRSJ}VJgNwU%YO7-UME&(C#9VG&rK44etT&p6B5=q7eL@qg8la-QrNOG^zy(vjp z2d81dm!v|~lJ-utOEk8~!bkG3(i%$p<;&Vpl5^GM^>GOZb&r=oZ2Ew}wz-}~7TJ=M z4T!9eaBNCu!{sGqp5EcrX;PtzSga=RLE0r1EB1D{5zm7ZCt@RgofY5bL**=qF6 zy0T~1hCQ>L*)uD4>6sO~^vsG~dS=BgJ+oqG&uk2PX2-E-Rw{g@XI2`2rDs+ef2C*k zCVFOF*)wayo>|x>5X+ufu}jaa*x57dDvKnESoX|LWY6p%_RLC!uk_4Hg|GC?O5?Be z%*vIt9F4!do}yi1v0|5~EPH0f{!`DaTuG9Pm9u^ZWxT!*p^SI3WMtVhD`mXWGb`P_ z(lcA`=`B68VvnI+!m(oSPdj^NrHuD45^nYM9->DXuZCs3?kMB!I1pvL110}jWU)gs zu`HSu`x~@BPJ1lv6KQ|AubG5l10p*~#5E;z?G=>qj?<%z_hXjvzKk;7cnQg-54bHc z+9Hc6+FzvoGul09j}IO%=~yYf?T&Wcnzd-xm8MxKoMpU+S;i|V zS+PGtyQE{K$a)>@k7fBpqbJwtYxLx9o`s&=b;Hn;J6lq-MHWXTDjN{_dKPMRM@fR# z(>s>-?`VIGcFD+!y*KP*-qyV=aaT|8J^DtulFkK($(1zE#Z9iH5wUUU14c+9w#Z_S zq+|o6Ubg0RO6CIEQ)$0MdjRdD`gWCgY(V4#5_(O^Tqi+TPw%hwjdCUZ5F92~(n6OE zx$q=5D~~YA%E}{*_Lpdnr#+8$$;;|Bl4kvTyfOYLwjcLJ-1Tk{Wu+1dd!_LhYh|PM zAp6>ry|P1DH|xb>*$np0hO>s&cm;*C|89rB#oXera(8*0N|!9Mqw>^5AXWmMXXWOT zR4hZY=wFpRqoa+W&0u?|x` zfukwY<85Mah`(rUj?JCpel&A3dAv)g7Q6Mvw2xt~d3>*bGB#%-x$CcdX%HP+G zU>cLRz07x8e_e}%-M#(a?DpizE~{H@7}9T_G1Sj5_DL^`Q7so6UTC>s@sD4e?0m(q zG-|?*H@hZVC-^DvO{Toj6?~KadLY1G9d?lIk>zHyQ zC^y2L-w000);(UgvvkJDBo?Ue7B+U-G<74z)=1J#-HFn zU?_RvU&;&jQAB6uyAhI=uU1lS1m!C={y<-;q0bKtNw$vj(@AT)g33DF(M4eLD$oa* z>cfq38I4O!`jMu_nD7Qec-`ru##>TBYto+&Z#!lNo15HBr!&GvnHqiw zH^xAal2 zVP|y#4RzCO!hbB87}~fqCgYaAb7;>ZY!b$cT}&?ZognO1uoLK~C2767V$fB58X+m0&nKB}Cs4zo-kRs(aS zigwQ&%yJc*jtt&j0`BFzo})_4q53`!Hj64TohlD2SrV>(I5~4}#$zO!Y1@y1=EV1@ zGHttoDsdfE25;YzgzF5F$XsWNlu$n3{j4Fb+?}xX_F^v2^%{uo; zctfMrZ&*U>c5lV8NhMQWuqtpqcUuymdfnX>+FIv&U--w4Sf`^wfiCWD{%h_%;QB$8 z>PG}zZGzkpGyb10*t^8cMW~H!I-o~>clhymax3}B@s|;&d>C;`iQGz@QX;oDp@`hZFmfw#N{QTxT_U$)_oaOl?bft2ax3{r ziQGy)Qfg==PPzIr;*`%;OPo?7w-Tq6$Zeb?sM;e=DUn;TOXODU61f%oF4`HnjSEHO zHkXlGiBn4CR^pTrxs^EOq05L0DZpAK z2l+^e+zw^rwkIRE5~q~Nt;8uCE+c&zUM=ZMiQK~eAnjdfZ-?|HBe#fCuB(7`c`7r9^HeeL1`s_V;O@Nc+RIccYz=TggXGC`O#})9R2KL~he% zk?atsEbopuWe+pNDYvacoKhmUV)v*0OWLQ=&d6;LBe#-|l*nx%Be#`|+}0v;n=Xqq z3~|bJmWWec?T9#~L~g|{kz27#amv-55vM#IfjFf^ZY54B zky}Y$-iJ7)L~db!iuMO-?*jXzHLx>sD{)GR+)A8MBDWcGB|U^Vr9^IrGIA^FONrb{ z`cfjdlD@P?oKhmUus=t8f7%(jEnwtUl8Hm~jdCSvg2QBy++8x{N*Wkj#K>&`BeyAx z+=^Wyw_<;s_E_2{($2_j=OPQMwWacE$5&~j6?W&VCtv5`^<7i8?%*p^TCRGe+nK;O zpS0Rs(Ao5K)>DyRU#K6lY;9GXr}s6 zeVtu;jHmZ>edtAtR#8JRHmTBpML zT^_ye<|5_rY=n8eY@(sgl~b%hdYh?|h&$5D+ z*;|Hd8M8%J^yjwbjBIaaS>eor6T#qk*2kh+bRPP2AH#(IWc%A^GUH*g!}wava0NTx zk@P>w+OO~~IPCqH zVo+`b<;n10@>Dc+4IFBh8aS@|lL5~ft)9ET^MlXNI2(T<_d;oncF?sw{Xa?xXdh^O z?c;YM>UZv&bA457AJ=4Sn}X;VKb?Fff=_{7TTz!67~<=!$ak|Q%C`jTFZ^GAOYk3Y zeGR4y(HVy93{!2KG0~(C3a>8-FjePfG!=T8O1w-J3E_7tJK*lb+$^K?GbYZY?V6O z-$9+NmDJg;|684HfKq4s?`mV&f~(Zo{;%b`N}a7zXDjWuN}a7zXRFlN{+a4*tJ#Sw zdG^5gyMAfTxK1`;_g|{J{a<=?-!&-l5!_ z6AQWU3h+2G3vnx9chnEgM} zGNrV0{BGJglplriqfjcNl*%ZjGKx>aKY2n}`I-RbYXX$72~ZvaN@Lld<4bdtvLdCI zNa-aSrF<=j^0grI|ASv7VH%TnFuweP^(*%s>|P)6-~)es=G{Y|U6}ao{@hZZiKjfC ze@4D|xBT%_&-d$G<31<%jG0-M@;U0?%V*1#FI7^Wp32knKl$|ZDNx>Bt9%L2FMbJ- zBL22_hw?Qp%GbCkU*n>DsgkpD8z{HI@9H)v*2YwIks5qnG$Py(4DTZg~+WHw&ACI5GoR`WXCEfxC$+;2h##=_US!-r=)q zALA_U*xWQ6yN&~T5XS&}65W93ABDl0UgAjLvoI8n853Cg9Zt>(o7)%*yFx7{J~1ZHBNwxLi_K{+7&%DfyM9i59O`!BXyDt#QNU0l56kb-SwR=Z z%Mw|Sz{nJgSU(1Qo;Vyhn)oPiFmV{rlIR3%FS8uREQLd{d25)=Qs@Z$f#?7{OSA_b zBiaG?6NdnI5(ke7oO2u}_YO9!~wvUi2Z?25&Mk^JpVOjalq!Z zhcIGIv;}q|J_u}bg24t@LF@}GBw7Q%b($5lfJ@W|n_ptY+6wq7u{UrF(GnO*>;+sx z>WbJWMnLYKa|y9}?TkRdfWiyp7Fi?JyEbYzy=wwgFBfwg$dPydU@ku@%taky$|< zxI`_nX^9c*7Qptz`+)UBp_*P6yhbzv^NCHsZ-&ka(!1j-GGKE*MhY8%JBjtcjl??O zDq<~gG4VD~O}zDV;GBavxtFlH{U%19BGv$%h&OM9Vma_2u?+Y*@j7rj@fz@L$5}xi;pD7;#O4x=SeF7{Ctd|kA^re-p7=d* zG_eFYSZ0aj5*1^!J4OmG16vb|fVUi=UIP9=ECik*opWZu*n{~(8+EUhuct#%`Ko)nc6;-h{mSFo`F4Z#p0M9yk!sP@8-DTfy)9CirdLZB z&3(D?Z%nXAjk!a?rL9p8nN<$t`l-Q!*VdFS({swQ(6L z1%NbL)7%Q?Rfl{Ys!qG%;A9azy;tCvfFWCT0Lj+ElpHn~6H{9qd+b!QTA{?B>O=M^irM*4utyaMv zN&9of+Lwbb$s!GQsS0(s?;cw#p|K9R%cRM5Rp~)#ay?RWDJ9dpc!}g<_f@CWI%r>| z-GTO=w41?Rwn`ULTz}cq`%raAwS&{lU{_frCl{L#_Y=KhJ4^9v$K1BkkDe1--;Q_0mhMU58%cys_vd zj_*hN1F)M#!u~exFI;hY4@JYhUO>_C_yH&y&ayz!@WRMa=_Nj#iC*GaSI|p5Tra)E zPTOdoK>HxtyTV>Wdy8W}PwAzXSob4uTtP4KbiMQvJ0+rMc(V$<#Ov(QOFX*=dWpwGp_lkm z+Vg1lr~Lr!Q)zeXyC(`o!-dCCG<@RnzwUN??zoJuCQx6N-l0SfXh7y>%!Weklt@!}cZUCEl!;USg+j(M#NG4tj}CJW6|S z*t@yiKkXxF zw}Rb3duyG~5flwOT|v?C=J_ZZ?l>An!@K&Rm)Iw|RC(ER5K?!<^Ptksz_QkY2 z({7zR^wPUOORO!xHNoGtB*{T{2v7;Ab??%xX4d6dyk z!!g~FsKon}M6B*-PmSj5S`n4-EB+X0eqR1Z!moGr?n)p>3FIh&93_yW1aj^zkYkES zTs9?tgnM+WrFI|re=uNuryhl!3Y;JHF_ljGX7`qp7kkXLElQts`BRUHbN|v=fA0IJ zD-f9rozSH9!pzv{0!&A&J{|MI6Cyr1$LjB+vX->m+7epylO;{Vhyl*+G( z%CCvauZha9iOR2u_x5XIfwFtFU%~JFK2kzmzip^XSx;p>{d7u%G+DV3lpEpqcOxiK zJ0)uOyNcQ=A#mlERBlP-mUMP4h?Y|KeHC@m>Z_o#4tH`9RGH>E8;iY+wWj(Sn_8Rj znxWwh(nfnaAiQQ%xG~OD#%*Jmah$P8XNr&Ukd9hUn{m=pJJH7N$C7cOjUUIv-O@+7hMm;~G}KMA3IDNVVrb*e zn2fR#x9cV0Cv~RJVoWdEm{MJhokK5S~K6eOq6(FD}XckZZ%>?EjCwcY%wt%=`aS^9YJ!A|8-fLo)^qG}J(-Tr(FB zm75HaBH(Byf@T6LFq)x}3YIcrrc|y{iE_#TLqR!>0!nJ)5a5WUcmM$poSFGwpO5iu zyT9E{t=IGSY46wbdVQbw^}Rm#HTQkZeNV2=XFffuwg^1t+&ChCVAV2#na=ei@}H@i z8Kdu7V`xh@YB?3_Ilq5>)C~6kFJ0qSMgRIRVgqnFu^y-(-UYrvyaSv>yuG=s(kVm? z?J$hFg&8Yi9k36v7TAGU1FV}4?M+}gv3hfvn=om{~(S4_rzt0(ue80be8j0DO^n zc5~VJF<8YGL(emqu^^rX_9T7}Y?}%}A+VZw3Rnj04{d-+&*GgEad8^x1A5@l^~5f~ z$;6Jpu0%Z!)nLJZX5e~ay>apE30P$;hjo}~z)J=2Ra1!9&t1q z&1DNmi;D};VrBtnegF<9eh;iHfW812OFT|3F`L?g&1IdrN(P4K^Px`zZX>1u-H6G+ z{=|4{^Pt^FEiu-(c;^UQ+++^F#7tM>E}-TF^q&IP6IH;;#80RtMu;sMid9mMLm!Tr zKw=nhEO8C6K?6YuFon2+THaUO6uaW1tv(7r`& z&gL=&S8>D8jWaWW{fRSx=d+=A1#Tlwrj|I7TB3{CA`{+4S$O4!`8~_X?_5+S3_M!GDv^}Xky18t`v)H0;7%t$< z$AFa?(6_n@j3qV#7ZC3Nhi7aq%Nd1LYA`&X4*d<_Hew~vjaUKfPt;L+1lkg6 ziRX=qciugNyNJUxnCVJ91=JjdJ`cE_mZd5$G2CJl`L4OD{fy9HrvBX4R z!*>wu2c{6erk1#e+V3`(g^$F=eU4$}A?QB?#uB4}3y52R!-<=zO@($NwW*uSthvg1 z4Ba@h7TBMt1fEZUeid*VF_2o~GHQwbVv9;}aT+!B?_g#v(|0c;V3f)+4FH{Vz2^W-e*g z?Zc@LhkqGV;#gEKUZC!GvE91(eOU9W`Ktd}Fkr^36JF%%0Hug2IWsv{siScBBL_lv7BBG zkLB03!eg2E227K38<-}m`oUvqW(1GrjxcyE&r$A2`60?@Q$EV+iV;kcoz}rL**y!U z$q&n6n#`>g9!tA<@K{FM!(+K|06dmgj3Hl3`4q~(qP&Q5-yqo_m?qUdVVb)MvNZXBMj^b2pwhWPVF+0*GW#8Yso;;tBp=-vjo%6DdH5yyHM;o}rXyC?yI?cCg>u4wkC65I-pOW58P_5sONeE_OVySaYyiYDya- z-3-!$Abm1OpNfC1{~|0Xsq=N*wOEr}9i+ApHlgAGr;-S%DQ$>!Ge{4D^vUphe=1&3 zzI1c;*rK-&ow~ZOTV>~`I;lEVTz%|~=QbEF?JV8VQ1GhXpiita(yfnvt(k7VWbcik zEj4o{_&Ux}TZ}4+*tS@cudYy()Fo916$c!a+KD)BT_Xmo8iTnv{j4dtVh4gQ838HPw@OJzpuHbZ@+;f^QTEjKb+D_=Dn zYOPV~^E28sqx5b5hT8KPh6WLWTVuFv*tCD?n3pTwIea>3q0>PB=PoQfe7^DXy4NbU zh-J5 z#IOyvZ~2yc8};`{ZPkzPNY!TMn2l5~`DOp#x3rmFM(b?{tCs*YmctUlvdnsUjPou3 zRY+ABrTCVsY)g~EJk(3_&HRcpZ9N{e8DU$R80M&6qA|Ov&9v}H^)U+cEq}n~D)o{= zvzx`46FgEE7&Z8o@3JjT4tv1n5N&2BkD$3mCcfosY@HIqx~glBn%!&Gc7E#bgMX=L zZzhFJR@WXk8&aG()FWt~QKWDA$F@%G&5%Kne;@oy1)JVRGknX#ZJiRshO29{&30)s z`+5ZZqUkwJ@hb{-ZGqXY;>^(=LGz6YeapAoIwglK_@`!Z!?(Yp2(vw$5Y}H^n`t&j zn`z_`BxgEm{ejWV>Eqtvw< zY=0B_t7~`Iw$3-oD9-#XcsMa^thzSW?1DCPkVlY@k-u;GCff&Xo-(^ooayKhw7{sw zw|uAV;pDJDb?pN-yLvRvHL~I8&HpeVoo7vx^(c8$=w|s+b@B=nanxz+Kj`e7qZ=~}r-(ee^946kQ z2W*;nG{IPHhn`CS@9biqxxmoSGWbV=56+LzhyHsRFNOQu_@}g4EsvA`qsS9J>BovYzbAI zjo;WD^+tyM4Yz={yaZ48`h6SxTU3iP>~FdiwdEc5EN-yrq*Rp0Pi>9blwp6%ZI(W- zz_Yl?W};GYEq-cS)cy?ndbc8dUa4nsi_Kc4qAq@_KI&wKeY4y8n24>#8A&Z}>kN6f zJh$s@N|cJ$_&7sUQ$~`(t;=Ki9p`R;Og3n>;_-yI$5aE3CUugpdo15{?)Hu{kJSp} zgt!i>@kf)o%DZ&P|I^&gq*HPtuG|5Q5u0y{4-0fXtC94&K6XH6lRvb+- zk$35s|I*y;-DHE-D4t4)dt9~sXi{JKx{mp;&)wcb=CMX0ONi^NI&?Itzr0JQeDAs2 zjb%I5D8?kjbx{=`O&TO$*D3$qx!ZfmO4cZx65_h5nvNz}%DX(C|Nh+Vy=8;mSNu64 zuA6GWv818$b&uzNGIzVF%;SB<)P%V1s`1B?hReHj&i``m_9tXJ-dFrJA+CqY{aBKX zd|l`Kq`BM8WF_w_-b#owQmr_aG)ms3%Z)W-Q}VLs7Msh4u2m=!3XD}dkJ*ortGeX> zFt>Q1%xA4)aY8{))sbWNX4cAf_zxF{4QPttYkJHDApxZ^;TJBCjD8yw_CoM*MOn2MIR_45~}*B zUd&8-MLw*1{xGir*0OycC{zi%f=p74`>GU~_S59*?)l@q+=t6ZDh;B6!8hhW~!Xbl~;~QbRXGSbrrzlJ?9;lj>Wxr7F&@=xlFZbtU$?Fv76O0F`6j}C*UveOJ1*NNHDfkUCy!(k*iJe8@=3JWVhEV3<<_hsyb)euaP_S z&hO^!{-SL3hl;L=##SopZ2K^|x_7?0xBEodvJVv|iN=3YP0F?pmpk;yf7;u9k}UZ{ zMgK(Op(;hT{U*7(PyRS>_sO!`A1W*pjh|A5W!rx&cQDO=#oK*~Y;?F{c%rejYEQO( zlw56^FZXtLl`RWbj7l^frpn2--!6CPoBy`A`!rc{xMFOg@o?4UZ2O&Zb>I9TZ}%Cp z+u;hAMB}GbopbEJkUKn)|Dm`0YqHTFDJCZxk5F0X*zb|6pU98)cAqI*_K{*nqVY4T zNjdgk%N_dVf937|hAjCbgc5Ok~{Rzzv}HiTb8^*5twK^ zN_9EM{)k-NKflr2-BWgZgF=~T{H&^TuKh8&gL!^8A9pX==#7f?iNsj!%_XV=s8x=8$ z#$!}rx%Q{!4g>RF@o`@$8@)*pn`r!;YEQ2HIk|dZzTC%sk!;x}MSP;MgDNN2zF6)s zDF1CA_rh zG>OLJRn{8&%X0PL{AeHdWwK=vio!(W=T(z5_SfVN7WrTKxG$F_M<~uG8at{K8vAOw z^wneOYpv4PTBWbGN?&XJtzT<>^nXEL`U?Nz66q^`(pUU`@2~iclfFAFeRo*;V39sp z9=#71pAtK@g;bbvyS_dnKG-yaQom%&wAR#mnADNTnX z{k;5MFrB-?Yh#zM;!bUR$6-gCW`6Ra(ch-@Jh9ndH{z&=<>L8vCYN^f^tsi!$GFqd zKLtqt6d?Umz@zq00g^Lc`r9?>Z`Y*1U6cNH?a}+&HH~yi5x?)R`A8v?QpltfGAV^j zI!cd$^cXx+kAW0;Dy6+XaO$l-LtUXW+%UAd2(P97XGdm?zV06#nH9>GSVOa?{%1#~ zX8mnTk(4UDo4WdpMq$Ow@-*mmhI--4+-7Jd+|^z3c;siFI;o=x{+ zPhDC<^fOh4+J-t2b$V78>!N6iR9fn{UUo5r)X!9P)=qX&xUUJhHB)7+?J96>$jzCm zNm`Aw!aXeH`dP!V7K6SxETrzge?IrkQaGvBly^G!!F-*i6nP0JXFT5>NCwE_W|zQ=jM$L%4Wd+vy^ z(qtr{{*b#(+#UD zSEXbRW4j029nsEb+kx#~YERCT3frm2varh;ba-?I<@mIlXUCc zj)h%yrpwk;uJsQ;Cel<>vgc7ghVns__oBQj<((q$9=$EJZLA{tRB%t$eykR()~vRy z&#_Km71^gkKaKT`V?MK(sVYOJYP1<5ST`CWg7r#gM6h;Ri^SIOV@Pa0&Is1|l#ii& zAmu$N?*jSSwVF#8n}qfX>vh(fthZR}Sw;A%(CAq^mV>*n_F(PBYFchL2??&|Ly_QG z&<6>wUAiN|b;}1xaD6Qkfv>W11inTi@YQY_<-;lOOL-5-`-VaOai-6n+E$^BW&N6U zAM1YBc-BPLWY&YMDXfQB(^!wxMvroGX;GO!iyF;pZbxP{w+#Tvk>VpX#ivDUMinM9t*x-IfxPqP-Yma|@C6%nXn zwu!YvHn=-$AJze^R;(jf?`5EhxLA|AR#E$~_GRtI+Mjg*>mXJUf-01jtX8Z;S*`1$ zr!Y6ynz^~A%*_pFZf-VWcIRF~%&vVMVs<}e%lVs~$Ugp}SjIY{ZvzJ!$Cd37SC z*De_;z2&qI)TE!}JV4pRPwTe|XmVMSZ)+$!nxFLNbkP+NRgGk|x6^Il*UMC`j z?JgrD*nAlxg$u?bQn-r+B89h5{ugzce@i})JiE)9qi5!BW43LKS-qc&mr zfmr@IEdS5K_Fdtj4_E$YM|jPJc+m;m6`s@mG^HrYUp_JI``P~9-e*Rmu%k=Lf5>5$ zHUyub(!=$?`fvp;cAQfZA-H142Z}hb-x6hk0bla6}r(Bi|vfAV>ebh@I^@+ZY(jS@r zNDqQ~vF1_xM!9rKlG82pc?(W~G2N3SZhl2t{rsz_E9$rtiF`$D7-mfzQB zBkkw!v7eGjK{6>kQYHn-J|{hr(jzH7lF|?Bq)M^tQsn&7#nOWyJqSNa55gb)K}fD{ z^p)(X4{T5Uuii6wb8GZ^r9Q?*uh-YPDGlp&`YSQ|dN-vAQEgMUHko9!ZBf>ZHMGXG z-StMQ4K;P1*Awq(R}P-=a^yZutj2O> z>(?63m91Nb7@~$44h}JF8e-T##ISRS;m8oftVqL)k%reI4O1cw?vaK`k%l)S4bvh6 zJ7veT?tJWSo=daiW6$Kfv^W|@P2mHY!g-Q*ea^Qv1LSl$I{a?+-F^!9-5c* zcwp^J)pM!KVv=N;7A;#9{cipcE1bDXLse#3)1CaP%-Ky_75#7K#>&!`^mkSiho#kw z$RAm{e1>~Kx!$`( z2Fq=t^gT#pAieP!q*pc{Is4fh@sb75xI+{1E;OG&vlg126kRY$x!I*y?gFI_kRF6|52e1xFKnL{ zFRro}nrvvgLgN?@%~EKlFT!$iESLPLSkB@cq<^FIIY?uzR-GS%{dI-L6`Hcs(0l~V z*fDs?&#_$FRI%KF1z64z(){g^o)l8QK6s`2?>8SAkCn!*!;v%J7Rs?707nzw2lged z2HwU}V?%*wiNV0+1;;O3-!68z#0f8wGg`cU319CZ@p*Lj5XS?fh~t1^#IeBTM2Cs> zdr#tRPr#|3{1jL56>u8yb9T3*8_h0pGrQ5~e#maL)heU;;_dRwzy=iMHQr~=pi8ZNjKaR#tr9=g+jSwvUhZsHW+TH@q& zRr^1_7BxH7)?RFm$DeS)7DOvxPvVonHaiF`fz`wzz%rr*@TA>5|97W~JE&&_F1R#W zY|f@lz#o7;i3RL#L^qpV;$e0-p!=<|9qd;wBn`3qI?G9T^NvCJqE{A({i15zT-ziBAAWdmX>y5c5!4;So&3*NL0I0o30C}a0sbf03EIGEj~=swXuDJ6RkZlY9N za2PJwfw%@(pMq`(P)%F`3?MG2mbjE!_2wgoY;hB*altb^uutCtM-!8PeTfOc+iyZ} z0C<)d2TXqR_=Rs&xQTwiRZg`Fc9Ptd$ns^%6kN7>XGqDhOS0)at8Fh4p^2JkW zb+XpjjEuRJWwhc33KMN|U)`n!b|+^AkKL6sW>p<0ayc=G69JrPxi@i~6GJgkttt&t zoe>8uNckx@IXb}A&uPQLheFqdKC5C59;wMqZmjS-@$=GVXCDHi%Uk@MTwVM=tPvNw zx9pQah2B5f9(o9T{l^z{3%XqT}4JliI0KOQ=)V@8Z#W!}9twAsUZSZ&KS|L`x4 z*2HF5@4Yu+#EFrdIL3)#op?k~PB?I){N54wCQMr6x`t-7+9p~yw%tm}e*a=azRq;e z`?^s|*SKz+7|MxHIN@<`qB|#sbK*-*?6^14BXoY}43{PkZ+UIYS;OTD=WmX_@VXUcUr(YI^-C)BZ>)g&drC<1pV+}DL-g9f)Dpk?uXusSA?d@#8 z&Gta5**?Vfl3Mq{!IovFJJ#0h_V8X_8}goORj>3&zwpb)8cy3LPH1%g&bp|pZZgce zEmu|YCm|m60mNYx_lDRybHPWoA@90w?2|sjFMNDv!wFlvR~nrUSr6;38!ilssqsM+G-{VBzLAznf8s}%Qu_?7bH*BhPFtOI)J7NlgqUfxor(moR$Q)ap- ztR~sRJH9p~z*T0JUg#HoGP9xBHt|i0jUaxP;*k*F2rCROZ@DBay1|~MrhV7dZ1C{T zt_@l0T40_&O593W4LP=UipKO*>s(`9|CH>{C>{gx7K(qMcp$`HSqqA5LzcVx4oZ*r z3m37<=WG-G8`HnDHtVHxOUceHZ@I3Lj}P`NGj&{Fv(Ll(8pRe6AEY>tVw0E?Sq&#` z?N&CXAF`frq8po%U0dFAMHTHFtSdFGSYNZl!&_e)vdq=^$#j1|VatX1eTsWS-1`#5 zFG1|{Vd20_EjLx#iNQKyMHinx9^QTHLIPdm{*+$h7d|_?q0BaMV`F-nwYrZkFeUqW ziYG&C6b|uFil1^G9bU8E!~5wv@eED1PPg<6Ps|n%mEE?+&{XR#eesmdyVO#yGM^Ug zQfit^@i>ZyLtIC348>2xbk1owE6li!q2F20dO|lNB|G9$%Qcn!^ZKNOZ@UF&l$v(hP_xa$+qTB=prxxpD_rZyWPUQe+d#J0H*=QbADrMvirznI&gv9&wVs86+i zd4SGR7|$zODpcn4gO#PGXE)YFdU$_U*CuYS(Gahp_%y`>A)ZR{JHe`fI?t5sSrsie zRPsf^$}-bcn`+`cyc6r%#O>vfp5YgMF1O*lZDL8I{yS^cAczAf_J_EI;$wB&mjoM1 zO@~I*h{rv*u1(xAEA8uf>)uMF0?q-1|y(IP$y-h+5I#YGf5LcCDZ z5NSK&AFN)HHe!4?^%LPTeGn|P5#~{0LT#k2){=JH3b<;6>9&oe3zueFXPR&|H0S!A_2MJ!>0gB}a(rzhlzxSnU$A_7;OaJg+hX1=8q7B%%SR)l_52X7*dJLqG0_l_Rk@+N)>|l}| z?02?<`IJaLQ^{v4eXvL$ERWm=%it2pp(aHOO3{LnUt98POMdM?ykGlZwd4bkd;leX zbRU597E5ojM*6H%SNwNB2u>vt3rgyI9d|9(Bv%KiEeh2Y#Q{=N+7RhxxW5O%&^KVL zzc$Ly7-P5FI5S`E%B=a(%#EaRO+VGXM0>w=6zW!^1Iy|eJmDw|vG z#L5hHHCZu9t(6&tp?OJnQ;An`PF9G`!F9L7F4eNXXNb{_7DKOb0spTE4l3tAA28hzn1L>YkKL>PW_bkwc zcp7L#ECkX%n|{(NZN{?ZypdH|aLPL8V`ew;1d#q&XARJY-5lUVVis^H@t9TGs3lmX z1qRvlbj*|x4+GPP-vQ~MO-}``Vpk3HAbtyU9F){juoqjDgkfLII41ya!wKtr0C<)d z2c(DA`5WLCcE18H8<^DcDOO3}gCR|{>AQh85T$Gexq{)yT{!dt@Bm-6 zh+X0-c0Yq4mtA5yyF4xRfF#GoxVT;%#$hG`2HL8>0ecZYV;2V6s;%r2H?j*aZPf<@ zlG5g4m7CizT!|S!;=90`Dsq8EUtwgAVm zOMI5yPtbjuUE-7Mer%PtXdYHE!*Jxs5cL8c*bMB#E>RDU=YdFc>wzPQH`#@6w(5#` zlH+)85r?$VM!-8;MH_7|B5kx0@Xl7zM%#->8*Kz^v{k}JnP(fx>B;`{8bw@SP1g^LTqaQb?PmHXRBWBpX7KN7uSnJ`e-9yo~@#fwil5;+K6}2rH{53kv`f8_-Lzyk2WovTeJkj z9$4Rx*b#WsAKhjZy2M++n||nCXP0=1-NoXw$O9Lr#c=v!h`tA&@&z7emw1%jMd+ro zOH5$*9r0Q8CRW*t;mCI&+66qY5U6687{Tt_=&oaz7|QMf(f!Qu*r^tipAK6TW*Y7^ znN$hz{&W*VYaJO{tGh(4Niq0JghO&2|XeR<+UH5J|i7aYWM2 zXM*iSCfI(>1Y0>1Y)3M|)*K18(Z-Z_p}Z3UZ?h=BMtRW1#34bUwZcHl`Xs9r>z`PM zvOdLX%{q*AIP24_BUqmaD(Hbo+I38@J^MZqY?m^@_AnD{=Q6?84hgpA1CU@_U`#m^ zY-cj?Hj(mD%9qs22Rpfl$VXPW1({Vogv=_pB(ut&B(ut`$gJ`|IqmIMI70-DvR+{o znYN-cjP+&K`K;?$_p;`)USaLhgL>ANdqhTM-cI%p-^sd%bwBGt)+4MrtS4E|v6iu3 zX02wuo9UBY+bY6NkFsX6X0zt99%s#CEnq#x`aSCz)*o1lShcls2d50NZLIRKWLEh& zGOK(%nN|KgnN{vcW|ccR4KqQK@9y7-SxvOj@+S>sr%SY<=mXN_a6VwF9`K5N`l zLq;=__6tVR{*?)~GA7t=LxQdOR3z9=9fkzkmziLjOnEuw?@{hVc?{*RI+;CDSR(>| zS!b~Zu&P+qtVOK#tY-bFXPw0wz^dvOxsZ{xsf?tZ!vxy|B-lpFkzl(~h6LOBOt78E z1lzAE*HZ3Bc`D^^Q9g3Wz73ToI@2`PeAW`y8>}s?MjN3S#A?Ip$m+`K!MbRpW-udZ zH#3s<1QKk`6-clxut$RJIwshjW#H{nCfGVr{yF8RDPKtW7|I7m?#aC!>mR@jl-qV^TR$e>_Cx6E zgO_&m;BSqfeZU;ue@@(Ozm|u}(*0%hZoBF6z9Vq|m9TwNRx;$5F}}?8-GwyW`)anI z#^3Ln_BH?ER+5_ktLdD-c!;H)mv&zA2H)2Y1o)KLsV$@;?SXV3NRNT^Q6PO1J~E$# zC6Ybtk+X;SmPn^0xaRxEg`MA zc=VKrPAhFPOIOc(;Z~-3&sW`d4mjuQ&=Pra{;~yc`w#lWN|!!!b&B(k1>Qrl#}3N< z$>@nCnbMyor9Zk!e{}or_@mo6=?4s?A25&%Cz9dh|A^s4Bb}%8vqKO6vqOp1<|PqQ zk@i5k52VLH`Y4b-2_KnHLh%a|QU7 za&?+BnthSFYd$wBuKL`myH?TA-1wrU@_S8WbK`F3&@-BtJ9P^}S|?d5&uMgb>XM!H z2O>T1)R}~|eiNy@UNJVLbnFYQTXe%;2)XRi9P-#-RfejDrWx+~ES<(h(KJIDqu+Yj zMIX{QQ)OsvD4yYNHrKLktDzkcTo z<@VWHHw4dyRES_lEi-6Cbinh-m<=fbZX=!tx)IM(ODvoi5Oe!Z)NHK=d9xvTm|0KE z1u}&;Boo+`-E^SF5!&ylC8{R|cvfSTu^c91rU8kwA^U+T#IJ$Op$*vs9Lw$()Q*RC zC$;0}H7uO&DTdJ)F5t{o;Bew*U?t*bLpB1LL>uxUwd{UC?YMajowgX<~~kCSo`O zt601Q96;nM-H9)t+k`_cT!7bz&cNc)^8)Wq6|0mXk5 z0?eZ=LmsV`d9-E7qt!Bxw#;E-KkUMz%|7Fz@Vku*z%nZ(!TA^8%f@MJ59f$^zJ*ur61%Vz|PHY37Cbqs5&_4sK9KmpQ3ug8cn}IutO~6gWMqmiB0l1i0 z51c(}USN?c?xMRGPQi@D9pHH4ZQuyvE#LrR9k4sG7T7d$Uf>a|Qid#A?PcW4mLZE) zdya@KT5S#yS+v@NL}bxw_YjdqtBoRFeJNo0ceuDU81AgZ%u?bNpcnBn@HOI3z!!-X zKs(~4mjbq>VigMvXP0B9C-EY%4I!_yb--%k1z;Jm40w`Q3Or&vFVK%$RD$8xn6dZ~ zxSd!G3@2)VD~RWT3yDQQcd^PF+#)2>YMDq|hD2H|6KTtkNULQcZ5a}2wM?WfLn5t~ ziL_-%q}4K!_IAwC6^8K7QYzdVW1J1)I|WQl?nA5Wa9U+&(JFg{-r61X)&^9-TkET# zw>FaAS}Ptf83$CWsze~IFxD3Oo%nf(kkp4j)tTJ-h=WJO3$%(r+J{)+e_l7b+|hB@ z9t6_j%zwjLBNl&NBflyZ%Mt0Xzh$lPYw6;;nk#Z!+V|`s&r5aY<+g}7GJcOuYPq*b zwZCnXMCxLPA+D<{S0RtKauxDun=Xhv+Mx76kw?3$Mr5k8{S4biYr6fCtj>|{G{Pp(2>T{|vm@b~jqVTMtTBDF!|0nGO5f~u z%D<=l9m*XjA4GYtAsg0KPS%OES=4>3X{`CIC9F4CTUd=gfN~J44XY!o>j#=AXaL@EF zO}b>aA4XVnHyB|HY~Y*iLf>p(`er|-Z?=HG*|+JNJxI9+<+hafFYK=~-9q{49G~TN zt>wt2MP0$ViZz5)$-0JhEo&I-de(5(4Xm5$qJ3b5HKuQN7=5$5>6>+@Z}wUGWZUi$PPz!3g^@eY2zKo3)~Eb}N0e1@z5U!Z&OF9(=P?pQl{-X2nxWxfkW%Ry5^$ zy#5b{$X*!VNU#=Wya&MuoX>Muei6@7e69riv#@3*70*y%q!G41;)HGd9xmNw*CZaSA8Vus;nyAn$@D8ZY#k+=#(#%RLn~dTWF-D?HWEv} zw<7)C$|Li8E7Dsby%o}rfJr|B#{Vcu=1IvsDVY)_Q{uy$5`Cn^KaKPm@_*zrMEslG ze|I$STO|>Tq>OASBU^e9qzA$Az+&k^_#;0EQl#sBMY>8Ez`qPYHpEvqR=5}{4Z()8 zw!%n#>skNww)!2GZI?6jZ7%v-XZ`gzEi>BIXBbY5)hQcdGbRM<>u>2?+OCXhP`2J} zi3x6~$Otu*MH=oXBMpDkobkC~w{q}=14CklWL&M=H$=Htqb#Zr=y|u%e`V{TA<8c_ zp4aQ#R<<4-qTH>~U9SsV*?MG%;d714^*X=RjaxGMeme*Q95p3O~+WbfbyIE(1bu!f*{)27ofShS1d;pZrUL%morT) zcXKhMiy>v2?d%^RJ+-cCXYrl9k)KEEiIcWq-LkZl%Gk@;vEyQ zk`Im?8wTY>;#%NP;u>Hlq7qoK0NM~>7ID?Os{OmL!zbZ>^?(aE^#~Cz+|>OH*pGZEpf8gqmQviws6^cz=oS@L4*xAwI>la+|)KWTRmXI zO|2%vhMQVOgbg?Kq}@FKcc)_O5M^7+DBDfQuPtSiZBHVjY&RjlwvcYpfLz#~A6l(y@xoqDpgIc& zj;EUV9MFMi2dvM8z!unFyi;L#`+FkMwsfjEB~zS|10_~eAA{Ngs3r~o1`zuJ9e|-H zMwULwQyPp@+O)=MmB(D1Qg^D4VvWvJ6FUIwGtg~w#mdAcpqscCLvc!*kY-yd(ri;2 z_lQ%fPlvjiYT`9u0P!-=fmjZ#KY~*_DemWO*rjg~>e_Ra)vB~PIHhw`L*jRu>cha3 zKsE6MFo2i?94mGyh`WSP+tOfhN*8cS>NFg9h-%_NpaU@xSpOXa`+;g;s5tsnp3+pD z(x&&URt=hsQ~HAHLs0Lenz$VpK#T%95I+V6id|aDT|%I3sR*=9$;K%Kq+*RQs)=iW z^(p9v0M*15zyM%q;mFdfD(uovh>-2+XSHgT2To}*)oL8LkZPg==s@%W)*pmmHqb=u z(jx8>a&1fF%#u>R!6`XV@*36OLOl(rCQbnc5GMg0fcoPjOIP!hf^kZl7Fe}3br@IE z^{2yw3NLAj*B5RQF|{uT`-y1UfJ@6@%Iz03NQB%TX)J~LHn%c2IePwB=dmKdwxsS* zoosJ$Wa0YGO|7f<1`5AyO7X{7pjuTbytqQMAmt~a4{*hD4~4D^eO6g6S|v{5lBVnv zaUwt3;zjQR-*uJMhKScSs6E~lmyu>Yzfqj^p2$I$T5u(PCw@N92S=E3eZHs>o70;5 z^V;H4zx{PIP04;oCpNIrKh2s)cz=ggnp5l2+js53&*taNe!0zgRvX@y$e-7~chSFk zVmDOsW^9OI@z3v1L7Uh$SIe=D4fnax|N2d-RGD{dm3M3nuJaGKJzCfwe%#6p9^NLk zw{vV0yEQgl63Mo$!Ao7^I)+sZ$JE0auwysTGlLq{? zx5D9+Iu|IGP(H!_OaRBfOVDNj^ zmLc2B2L+27&1yb4*sQB=xX#*vbrx#?tBO_4TEtq(6nl7YtPQDGMGp;*Ibz+VyKaGh_!PFcvTcp_I<^}B9U4Q@Z?pX~vu<3@>siN)BUdQ$bwhP!EO?6M9KGEOJ`)qB< zQtMe_SqYb6kzLn*0cKQX1IB~)wR86t?C!EFsC6u%G@nD;gQEuM;b#3ojoAuWTTvj(=c5ue*@Zy|?k|^^zz-vTLU=wjJuzM~9Ucdps)&Ogj zxz69sdqZ7YfOV01%=p}f7#q9ejrwKQ!v^S-2eO~8Xeo?}RsMw;4z{v@HBBTu$<^8@PwuC znq#E($3$n%g3P+M<-&2R^K|ph1+F9J0dt9`fL$ygI72P)*7+#y@?hocaD}Ep;QxG; zyvPR*+aWe0u=cKeN^wA(<}Z1|jX4YE+eBp9Mn-KFxu$V{6LwV}Yf3~g;N3=;Y>O)V zHH<9X$KkBH6d$p`B{p+(_wsC!qu5Ug`@%DNyyzRP@TC2Gz#(BYeWMhwl7qzDc8A(K z^se4dnUW?}5QqIp-z!SHQ=)>#*83=b5!Vp}GcHQI%fjY@ShpX};3Jq*#b<_axni+8 zcwwQOby)agZ7zJ0dhZ1OXRF@Y{!{71! zq5hpfGKc=s9IBQKwI#pqs%}#*)?^sY8=92*`txm(87=3P`g|AtSx@~l? zR5pz=R9hOZW$3d!g-Y2JX;SHu-dZD+8P&?V8fD9R;kV5&RL3g~qYO1Z*L?0I-mSY{ z5!gJgx$#cjs*u*tBVDdmh-BL>&Y?eOV(!*$an^qsDgM7(Nb8r88P_Umnj6&CmZibDbws{W-%=GT zGfIdQ2HK7-KgG&i6HMTxZ7GeFZAgd=$xG_d@Ci-Dq}+o7s&wjGUNB2?OyL$S z#>@|x=|wC6M);ze%`WjUyKvD~eakLU7;4kL;TFAvnJ+POb0P3kpdaxQcHc(#BX)`J zv%3J@mB6MM7Y`f$e5#~Q);c4`kPX;d{GkX+otoU2akVzgx1Ga$+mp< z_wsEw^MIi^Aiy=i$@Q8=;iUyB^L`!*H|@h9+_ah>FNgqL{nCe8;D27XpmwK4;Tg-Z z*?|GD_CCzX+&gTm!}o!*J7Td*mVx3rAAYUu_jKaA+Ll&?wC~wNuI0LLcc|tYEcTl> zsqNk-HU6ee`stAMy2m1|kKR54C++Pc9^O4`gKJdUPENWsYqJi84SwO%*zU)6XS7vp zFJ{|H~@3#-xl;6bc5td6X%tRAe3SXZ%bVBNvG?|n_&#ir9K*&^9i)Nff+Sr4-w zWzA+i&RW1KqHTr#2Uaa>DeJ|HiQ|GoZ`me}XMLX4k=2QH0;@Bt3+oH4FS5SGI+69y zK~wweicGi8?N&HhXS(cz%H96qFJ|5rFZ)z^(^U`et<2SRMXs*-Fy!h^?Mr!g$Zu1= zhVnmC{cL%qkz{bj1j{x}DY`SGRi>a&|^hH`*S#x*G=|SNDoBATnE-!tO2YlRyAu8Ydx!(DfO(gOe42v z-_A+New6{S&oCfXg@D*-R|Lcw4?{rgu)YY0-5p-J!CyFOAzwoI^OWzRd9_v zQiP-qVzps)WOZfrU|qzzigg3)4%U6FX{`AlX})E^Z7SqXX|Sg&46{4PjeYnzzHdYJVHYdUKN>rvKYteLD?tl6wNthqr2cDux$cVVXO z7G~PM#*kVWGi{@pX?qfxw&u*VEf`HXGj01a)AnP^r&9h^o%|gqr3hzbl`kT*%6-YK z^2KCUxgVKT?oVcwFL4^iOxvLhsU5(O+ReU&*j^t5HSnLpI{P2vYWp#!_8I-9XW+HXdE-AE(C!m0XGkuS zU?05v>}Y(z_}Rbb)V6#24#4pG=%nlZO8o66obA8Q$!*`1N_g^iLA#Pkzl{F9pXQ_C zDg56tg#IS4aQp4kelJS~+u!EBmiF`SKOrF9OTWv#Bz-4S`cCGf^_@)V{gB=d$t@tc z1^!FCz|v)^tF=;AsPwxB(t{v92x^~_|JDZ~ez9gzN!^bDht(DmO8fAC?k1=)SXcF$ znc`Xqd0J_(&mBE+vuBv&{3I!Y+*!+qTZHHJlw!T{S^Xt2k;>3rKL zeYL-#_I!pRC8O z%5bOQ+6;Gng${wVh02(=t%?ryr)Rj&nj6!)Rnfiv*bMigxiKwU6@BUxMb|5)`Hr$y zpP>x!(ly=LRvZ>`S)^ZT$2yC6%n(Gv=LUPLi9UPFWGAgBs;D95b zk#dIp>*kj+@PAK5MZ#o%SG`wz_E! z^echK35CG*gnu9{A;M{^n`W==oj~#C2y&~$EEG@c;fOsH zPwPQPrFdEo#M4$&Jgo=fX{#xo)?*$p9J6@PY5C1s8+_fBEs?nc_PAq@`5fSDgtLLq z6V3w8AhZWgCbR=S%4Ru>S?XqDvlH2`b+*9UgnZytLLRV`&<1#t@LAwd!Wj#K)>q)- zKE&qXXRv2G;dJ08!l!|22(5w32%iGJL^y3h(6w`zh09ih5r>&-RS`Vbt zR#Q5y2hwS)DV^2>>9p09PV0em+G>_g8~iRU(Nt`nLT;_O8So3jDZm4SlYw!Brob(P zlYkr8Ebg>K6S4Uw_S8)PE+iZeoI_{~v?hEUIFax%;0VHT>@F(C#kD_&B^rx8^@K*i zZwL*6X9*2}S%hPNe|frqp>HPa1_vwa3s)!a0GBM;c(!5!eK!Eb8Cag z&=L*B=49+K9|C-o@DX6oOmy{cFuX%J0IVVG2cDm~Hn`mdcaaX8C$Xol7kHGg2e^+= z3ydc025u(o0*VPcUk+M-1{b#sn}_dX&r5_IKs&;FKr6y_;NyfE;1ELf%R$#9<}z%zu+z%L2!0uK}30Vde44gM4tXZ}4lw_uNX6L16JcR+W-+rZZd zZvmetYy{3=v&7L7)njua_SD@3jv!P4JNf9|0Ny67170Pp1(p&jUk+-L;^MNfdH6c^ z{E@H*_#t66a692O;3mQ<;2OfKF9*4u#4L-k>G3W0%qP484E4htb*HLHxeD%Yu%wHXMhTpepVduYMkxmuRB8}Al zqD6AdEqUx_*6$Na`Mb(k!N-#d1jv@&+KH98YJM6iH^?9gJ*)8Ox1J}F;!Dj zVydQ-iK&`SA*O0-MoiUos-wxM%B9R}Np%I)AgU6oQmR!{yQrFsCOy>^RD-BWMkmc6 z6RatjU=ztR`#X4Mlb?cTcDFG+v+Ev(XSSF;vl~c0kK`#N|2@f{A^8Lgo9HIy8x>G> zp(>*4Lp79YJk^6#)2Pa*DyS-{Hb<9-)%P%q=QgT4s4^EV>+Gib0oA=!lc^q}`U%y~ zs4^QZ)2CC-tk3cdiRk2K`BC+!8bEa;)lF32r5Z@}J*u0j22l;B8WQ4a0pIScO{Tu4k+_$o0~;UZ$H!ru{76~5-U&KSPk1#$50enGxnA^CP~$+w#f-)^!iY`(jn zhRt`~c*u)Meuv~CBzGeDCn3CNQdHqCzEsnxwov8Gpgz@fsx4G`&r+XiI@K1cJR6HE zyWrd1R0`iNv(Yw)yjGKMHw(U9Q+N1wFYsXVjWL1EcX>SIStMsJS|;B}@>3-Da9lB| z(o$|6L{&mnO0|k=7gZBeXdI}npc+I~LRCt&$~5VDGQmDUCfJY2Gg|@AY_izVGu*|H zJhR8hV%ta-+btx2k>sC}{4&WmkbI7XOG499m9dDb57khr@l+2|O`|HKs-UW*+DuhP z)gZBa2bo|?$TQmr&#dXY@XWeCpAx{F?_{wJB+u+iyQor}jZGkHxk!cjW`vWOo(hu|(W|G+;1uu=(C3Hx@hE49Dlgcv%M>pPh$c z7wx@-yw-5Cipo1+{8f>6RLxxUf~sILlL}M_Z2ced!6o{O#r7m-dKttlm1& z?UC?_-_Bh9FE?kV>R7wMYM7bv4Xs*>Ud zOSl)vui^zV_L9LgYrx$H++)DK3b;4nujWnY%ek}ub?&VH zUVk^|a^#*P?m6Oq>E+k{0~efgl5^v?do_i2B z`Ed^d_aOYnQ{uT`TQ1nP`~h!*{sL*^+(>PIs$AbSpgnIX*WJr0=()GYa-gYTKo_f) z_g$SC(bZ8faA&`|puf)3!YOh~kBYT7>g$tK`uoa&0d0S-s;^CN5&1>=W$*jdTc^%H zVUcQ4aJN06Q)@GS;H{*{)(0*liW})<-rm-)(UL@@(&@;KbFcHOG081HoO(B_r~Vq-LiV z9)=OO?dEZw&&DPvvHK1|*9^t8wO=gN7wS?YgX-JDdhKN!-Qd8LAhE`-7 z1jB}#r$hj)N7r8Qq_z{sc}xleuIvt^3rV`=+>Pg#vYbWp4rum56ARO=08zHJk3+L0 z1k)8_x(>w8nyVpwkEHP13Y1o%Zh|vR0}pOqJT!I9(7XjrE_}8!1liUeUc#n3@gAmw z1vk%tq)m{%K+@;es%IZ}3#uO*2n`&#c}EaXd-xVKPe9WIm#qLXwzV@b-Plc#!hoAM zjifg}IAd^V6+2`BG@Xl?#y6ntUn1#-b2sKJX6svb z8Jdrv35GRRhE&>GBWP^j#&odC<~1W1weAw6?~)WARnaThHGlTnfU%e<0jagM6kuya zNCCD9NUg1<09zwM3b0K;YHckA*cuVC0NdQH$Jh!xRI-Ekx4W|Acj0*ctw1T^9bgdQ zZJ+~TJ!vmOTSwZ9ADr1Ri+${KeQ~Ne>)2JyeFwOQ@NHlq;X2@Q!nMFzgkHe$>(1SH z{{Z{Al(63Bk@Z#y>unxcZs*xPzj+u{d*a!QO;(fC~s`0jCk#0f!OJ1U7nM7(b?k zAAe_`N1g}Vvm*F!^A;1rf15X-5dPadJ|XRDCs*7=2(7K9 z{8}SI%CAj8Xl*U!*BTL0er*CmYilXL)`*bh*XA12O;m(yx55Q?oduc$rG%4#L4*^5 z4up@Bwh&q)(iVPjX2x^4iH75XXRXEs4+V}Vd<59xiSEErhF1vtfH{P{z&)PlZZz!2 zO$6s{9yxE7aNg#T^HvGxZ5}yqm2lqXk@Hpw=WQN2ZJolHUBuPa?xZf^HtGgjg*JQOCX%_ZYnRAy!MVT{ggHPH!VF;5 zX$aCtOL&~Lghvc&4t{@`-9*DYund*B;Kr4}i@;(+1@H*rd0-S_InbN1G`fYq2{(~B zjJ6`!Z}W@@VZY7mhoe;l`)yt;A?&w#b%e0r=3OL&{Wk9me{F!j3vME0*49#dtq~!` z*CrsdwwB^+jR+~eHUXKnwG>}#M9AW6bN_S{Z=#d9_GP%>uCIWLfl|WPfI)-{fewT( zkv0d~`M{288*e0?+cGyLx}djXTF{Mz^>!Cu4fBVOwjmH9wi8p$D!o2FqpgJtx2&lw zCwbjmr@73Yt8707OKwsnhQ$0Zkox*T(7>t0&Lkq zwVQHpu|o&B;LIKZFKEL39bH&}ZTBxer59D@FRT6qr{voG!ztbP<)`$yiY3_o3r^`m z{|~36{bi@rBrzS@Cmh-r)~R>#9TFiwZC&+{#J?bv9L&)wZm|g%0F)6S+o~X+Zb&r zwdYWKDYYk%dIZ#Oo?X8}6aJoyp@BTfKW@X>?r->Zwpypt*58d#Ey^t^ys7(Ml584g zS!X;gN_|A+wT{F_5Pv~p2NI8j_~y-=d0MAa%#f>^o?CMFrtX%c+B__^)>sjx-Xrn~ z)r7z6l0Htp)IYBOZ1;J7){7(_4e^+Ih^-)Y*-<&6Ue_Wqofei_#}aMTIU=tQG~q!m zuEz38|F~sE-8FnW7p;@bI_6Q;`rMM)B%Tg&2Z=u+@dSuJELwk56TZo%WrBRBf85cc z?oxi%n_79Eb=4Tvq}-BK^|}U$kQe4zYkV+T9WU}aNn#U-ZWVx{kQ)W=0$w(b4w_Ig^L>K}K$r27ir z?qhAlY38_vcq56IK-@@TClWv7WUxzZnOhRmpksNZpK1r#C-{s!lHD8BmQec`wP&Cm zPwivW{u8yIMO(3}@~Z~jZHcK{SV66E$1e4Lm~H#tb#dj%J=x7s+O6Q*VhP8=m zCJSmNu?XV8c!)QW*cRe%O4o00?{Ah=dxYsvTT3RX3jE_*OS>~fUg6aCMBBs^ZKE=@ zqp7`y)YRrvJE8r6cUVE4anx=#drCiQ?+Z7)~($GMkvEBSU8v=K7vW0O?@xh3-& zb*+-*^$-tBfcR4q&xZH_iNDqI=E(K6%wwx|&MkSXQCG>&x~3gq_mTtJ2dVuIwUyMK zi?)*5TdA$0_B^NYiRvVgS4n&SCYKBI8ArtgJC zvey!cza{Yt5U(L|t9F1aw1d`BW~to-cddmR+_evaTYhxcTEYw4(1;A$u$644T}f%o zbK1UXpI`a2PA8a+s+r$0!nYa(2P=C$ny1yl)#?v_ zE3Bb^D;o?Jt%B#*hb>>?94MzinLzecOxTDCH^El>x3WR67klrt3bB6$W|)YwEcPvT_W!hB!iWd2q*c=^pZ=w>KifbuYumoQ-yCJe-cr`Uu) zB^&%SBT2v>5~+9pZHy|woSp0;QDzOiiy1sIf3E`5{=Il`4F}JMbB}QDk^f5f2=^ci zzEA#h9erE|43`0u=%?gj;J62Ydl0w>LHgTH1)HkmzGTaN1C#p(CKuMlg>`Y3li$4M zky5`$F|7?Fv`bHuIgs9&L@ux#o0z z(b13o@X_l>-?;dG(`%Vgfx4O)*N%|OQ4#KuOW)}nxLKG}_M89f67FxrxR03o_e1}O z|9+^wCWv#2KB!alzkSX0p2~K${&wU*YC->IeWQBdcIv>rBz@=1$nFe%bAdi7vj2EN z-*J6clK!@{zSwi1>ssVM_qZliL7zIZSHS{r+XEtXu>~vvx4$(bQeUZ8d*AWCpVirZ zw=uYPUa$6kduVvyCrQrVH!k`yzc#hAeb0~iwE?|acgx6Y&w#9%@4Qz&C zR^AF!5H{&nv-)ze?!g}B^LKUzPc2}o5U@@W6 zN|q6XSq@@TUX4AWgjGNhA)K=<0>aBcGs3TdIv8H%mw?Kt*}B=snJLTZ0ycB7$EgCi zhwvOQkPzP4mgR&cz*&Sv!0~LBp_oMu^K45q%(C(`Kn0-;m_~RC7*7cIY>N-!NuUd1 z4qGB$T--ElI>A2MGK??-*a+vW)0elMA(#nhCKp87-(C} z2w`|_(ZRhbPXQ_k4*_LBThdxg$ri*OV;7eQ+iVLtXvY$ggEo<7AqVYPLUPb1!ZzDN z4%)GV%t0&Lidp>WPz{*B?Jz{wf&PS-sY@qNL0!Tk>K=slG<6SJ$*!!!#bsji(#P2I zIdBQ#C)7QFZZdTVKcH?hx;v?xY$Y?GSt77`Vn6l-0c{EWsVhNu9d!v;QFkA@E2vAj zWOBA(IV};)vn{V+&sai7U?R-3Ewiah$fGXIvn@|imvAauqE~5&KExhl>}mS|I0ooX zIF!0c==LU~OL!01mWb|M>Lyyr_IP87ZesIN0`^n`mk@qU-QDP(qb^|~b>q>^qi(#F zOyPxDPGIxIF6=o5v?WZTZXCK2>JlbWcPF|r)Fq5C%@$bF62UjyLKfPwgk+&jgm1Qm zEVN?@$wHe5-)sw6XvY#V3$4tUmS_j|yo~wVqJS>|{R!=<`#!qQQkU>a>TXAO3U#+z z$(FCi#XW}2OWUw#G;j&wBh-yVR|{|I5<(5|QUto+Q#Zm&7Vn8!Zea67IQCQlZ3!JrMS8;Y)!x`ZbtWeb{*;z5IZw&gSI8B2Hwmvn@NQOBgmO zTXqAp_y=RpyV%nf1bheRPv}M6&FH>GUBWl0`yRTlQ};b9*?13J+>6+}6o@_ZfJ+FU zqwc%tK0{r?C#bs#T~q3AvXZ&1#4Ka6d152>j0D;e4oJ`qK(`BMOV~zTe{{d2F5wN6 zY(Xw9kstPuhjuI>d1w=1oNXZw?N~zc&?dq-+d>}Nv4qS+EBg~I(L31lDdun60Q?x} zPxuja-$r*AbqU|6?s{~$0(-{Y%-6qoN!iZpTbimb1RSf`$zn`hbH-Cttqn!huA->g zixgEWqikDgBVt!u$|>9S0~#<51A<(F99{01S2nEAUHjuEbG<$cx@_i=Ppw7+PPZZZ4ZBT3eU9cKdK_^gV&j5J|tN%b&CmCV{?NM*Nw++u1^ zr1l83CDit#wmG#&k$PxS9Ocvgj`C@rrhM87$fr#ngM8ZEBalz~9mUy3Q9kW?lD|!I z2a-=E`B;*VvS{AkG)iTxqiXOz*o>+TRRL8Osv@dBR70u8Q$0vE?fvrfn?2u)yo40? z%178M3$JC_uon!F4LfoqvSG(ZH600v`|xbXH@PJjNd7j-=aAftTRm6R6D8mQyozRy%E)kRL!Yc7kTf}^s)TZ-Bc5)en9mjs(YzQs3ueWnCc;_ zDO5k9`YF}VG{PB<&MeuHs_kRHsp8;kB%@ zfa-Fp-aE^uH1u4|EwP~bB-N*>K1sy$T)sxMG=qWUt`SE;_SC%(sV<|soa&oY-Ke^^C$B(0?QR?7(|$J*`Lx3*pEi#2Y0ptU?K;Y*{R;WC$#0RI zPjZU0jUxGZl7HWjbvk4~!_SgY&8K>Xs+?*8)k3OgsTNT!rdmR^lxkVX1-q0C_83w= z?Hs~;Cc%H0fq z^ZNYHwV)3Es=(koZ}6q{+rA<@skyh3E8H4z_W}19aIXUHP57&M6LP-=!2K2g_getm zZvp(qe+z(181>_l5v!%<8GhwH%J%C)`5bcV@c;29(9g8$K4G?I|H}2+6+84J*BMri z*>PaVJ9EA^aKGcjxt6$B5cdlDH@$+mxJvGaJGftU@Zo;dp`80whyV6pb@=V4 zm?!y_dn?8x*7 z>3hrd+T;4pBz*_#w$9YwQ!VK4z8A^*Dt+@L{Xnj>{`OM#KLvevJO@;!36m1sridEf zUYW3{@no4>EB|Uu!>af2}d6Y*IqT6xD3GPv6(tFWOxibIU9fN~d``c9bsg zbnGnk_H^tnjq-HtDLvxps4Fe@bnGu}^mNphKC)}Xgz?Wf{C@W*!k6r#yhfEiw#$0L z@@J%v>3h~2ta-ryOpp0nHdE3=|)q#H|3PE;376yR9x70vUl&x|fM z8T-G2k96ZjlM^*Xb3}RT46gasf6QN*6a9cq|LP(mQQjJs{#qZyug#1$lWr_FdC;cV zAlJ8E!mrJa7D+cMO#Ew#_@cZAY$oz+v!VskjpZh7)kWr_Ja2ghn>TXXtN*<5lL~5%l4=S~EUJr!i9%KzjPtGE z&Ueg={;Q_u>L30W#cG2j-}(>vj@i+Rq?&Uk7BxlFL?LVct{J}c;6GQSR2PjGg?Je( z^{tQNJ7z^smugB({zo%%13SNev{S0NV3JZ(G)ok+&Y;q_{s7-GCwlz@Hw{D~YYb-k z)<^U6GovR-HANW)9u zZE(0d{&2TJN_Tupw?S%md}_DBC*AR%bQ}D!JN}Q|2A_7vf7)$uq&xmdx4~!K@t<`Y z9PN%j+HG*GJN{U=!SU|+KFuwtvm$eqdzHU$ zu9|&Da{D5;71|0z&zgFh1!0>@r+;8y>L%4zn0mT5+60D)lQInN?OQ0fKkw$yQ}K+a z`)!+?F!BBj!;XDox&1{qX-~yGPxmI9jxcd*hT;8v(Q^B5+#GuU)bq)z6}=U%o;7!D z7KDqx$Z+l4_odvv%B`xmVx?zIvrSaEI4i@oYu`n={dKn$x(Z*(4RbRy+ z&zcUKs0i^l8Lqwi78lsxbz9M2k?vX3X;T~_uE~%D=p=px_HAxe{T2D1HQhGDBE|I? zu6_Fw3heK>tr)1d;91jSvmjD@C&RUW-G5U&oo(BeOl#$}TjCB3Jo`P(>+sH>0LsuVoglD!*JUlb~5y|Aj>|w%~ zM-;}Z4-Dmrwuuch(}zf&FU%e#963bs`B6r!xUbt4;b0>1BXR~dDF(VY&s}Gp)l<$jIW~LiRww%qLDI7VnIdN`oMak+KQ{J>Fu{iUBq2%yc z``JRtNX56SYo_qLqr`rh7mOrl&f3otnv7E1T3s`hcO*)@IrG9;N!?j{N1`At zeAPhl&YA;!o-A6Nm&uzXxl@$wAuKacY+Z9;CQlbFF3jYaN**oFUL$XMqHU`I7PCs*nWf1!ASA>8uvN8oEY)7OhYq?xY*uL zC^b^#t#O~r>xdDnG7YCnqKoY}2_42N&aH8Oo;NF2+>~i(E;(9kzgZ|9tEgV%F5m^m ziq)Bh7Lw9p`z=C;afM2Y=& zp~GW}(O&K^@n-E5kIFK%l3176M+>EoDNMcG7w`giipOOcJ}FsPVjm}TcwF&}m-|9q z&Q9^9EW>FMafy9`Q2MxHo|pR~UdK+cWtQPnlIRlq4}}iKir;y;zs8#tC!U^VXe~Kf zV!ux)HC70{++BEqapIX-hEGdMOY9E_9mXr(_Htj$%ZU@u%`%)Wxm{v^SSTH@2=Q`X z%Ik;|J7*a_BNGK;4Ed6yrS>OBqPe~&k7w(6{Ee~*YIZT7RP28+DWX->`R4GQ-!Iw zyEiXzw>T-w&|b2z%>KO4VY1>GZ+9^-XSaBNmfvF(&XF7~v%e~oPEiQG-FWjI%IyUe~$C^b`rc)JJiIugVMS%&i@Bg*aTg$`2{JH6dE@n$88%d-rh zmspqE-xf-zDw4h319^do;>s+;7bFYI?e7R3%oU$|yKm;@B#N(P844uga{E?h+x*ph z>6!cfIrmX;wgwGo|Ja`Ct9{YiF8Ae`UV#k^YIz1Ka!_o%)3C^{=m9 zjqTPQuxi@oyEY=#FK+KX*XKlYzWL&{x84#fxi7JBUt;0D#KL`v<=^xr7GD8(AT9&) zUy=dI{htNyADg&;Y~ud0iTlSU?oIgXdJ}TFQ`|Qcxo;>Ya$nW;kopD zGK>8(Cs(*N;O+zNG2mVW+?(*%@+RcMPPz0~F8MZuOa0{%kGTlw-+ugcPOG*isLxjr zAvJeaCZ_t8vp@e>_&3+)*5tu&2$kMPFmQjazQ@^l;9kG>d_Y8J@yv*U;-wKfPyK*p zLI2fp&iW(HeWjLtEwPr7JaiudBZy*muD~+jl+bi#Do3{2D%pW*vp?^Io^2_pqZyHs1+tv5A-CO%c%^x^op?@t& zpI#pMO=H2`cGZ2Y|2FL{)uX@9==)wZf9IHw_K7sAn2c=NYa}R?7iKj zzr<2ZA5njQoM)q1!f?3y=5d~n<`N4u9j&fD&P&rQ3GW@Hj?}jl$vW=L%rQ_`9Oub2 z{$Ul_2I?YUTPW}}bqTYnyA|C(QJ3&j>TWqF4@_BA6CHeExx^#nxTBciIpBK265w>g zLST~sf_%~v=8;ygR&{j=%k7iZuyncnc*K>;t^s`ruL4~NuK;ZbzX2K$Rsx$3Vc110 z-IBnq;z>8wEO8I2KYV*H!)1iGfG-g?0__MJfL4U{z{d%1eh@xs-Whhm1IO5koCv_R zcL8k)+oA&%vY^Z3%KZx4dNHm{9O+~L@ z!qB(R$)BIiE-t`uFBAS22My7G7!~lvlRSGb`hXyob03YF|`G+we_g&2Ha0z0{HC4`qxOp9BR~pvL z^*iPkRBwc^(|mV2!aEr7^hFGyVAF%MFus3RwS9`U$w{SxMP5c0<%-JsmKOm5sAMb@m?$4x(Y1%hZrz-83v53zyQiN zHJgqBSJqOY z0hDg4w18OQjoE`qjEvL#i*{>Ox02ZtH+LQed{>466mNQP3I;5o0qZaz0m-KMadtTO z=SW-%G3A>cG+EHakH>8(^TH9{!~j1;o8~XXfZXXAP*s8f6mTjs#_R$TFC;OtP4h>P z*fOT&;5gh0WyKgk38!XbF(79RW}l4#ixF;`fA%??&LqrURs=CcoSKb+c-ES8@_oJc*HXnm?b!BS~ENLHP33xD_bm^xzN- zm_`GJVt^5%PV;+a;&cX%ve}OnV0KD5J=p&S6Cd%!?Dq_6aF9=wIwqgG<}L=q$M zG=GNeT9xsBc4y`mW59|$44|-6(M=4{i7+4>1N@M4ntz**bC;1g7h*~~71cr&u+5irbpFzI~3{vdVUz{5#vb&!?1LTlwnz@*M5Q%FmlZ zOgsb4JEvAQ__Q6NLD4@9`VfOoy4{;vdAXU1^ey`w*@){lTL#+=J{h+#)vEJ2$eE8Y zQ>ZnL(e*keYW?W}N3WH2Ra{?%!#6(Q(4Rim1V@rP2a_$Yc|8;Txe&|mQxN~w@LH1otHjszU=OI6cKOf6DFp_=# zmy^u;(thS=_~)TN@uBCpziv20VqLhkSyDYTJ$F^y9ESUy--FV;v!ihj{!b!j=!pXoRgl52ELUUl_cJcho8#3#zVa+Vz z^(COgaNt5<5aDY;DdA$$5-ua{2x#BTyfCI}RBlP;>hO&&t_Hw7;03}$>KdYZj=F?j zQ`ZRHYU&c+TC}apwfC;1 z+95r|KW;POTwpZeJm5aU=YdBFUjUvY6adN3s$#c8Z0AM3U8s;@F=05ckuVZCY$pWU zfzt@1fC~ttf!;gCMp<%p>pa#h6L~!jba)&%5g0@`87L(*CoQ2BX^o+^&bsha)wtY} z-+T45TgMtG1YRIqP2H!_eVe+38>u@T-4N;$Zu4^geR?Xp9ZGxeNQBFP=7etm`Gm`X z^9la|Tuk^T(1UOV@5-)D1>f$3uz=kTgqgtc@#tm)XAyn{Tuvwj1`_50_Yj^Iu9(!E zEAk4?ieR@6VJNVQFcN5D3PBWb1z{{{3FAp?s+j8C&u$(2D$CrGr+~W&dDNYS?riE3 zI#PEwy01`|(3QGyx%RTR&O7M^>~Xp^;{GArI@gEH~2r2E~xlq{bos3Sh@Ur`4mJ_LOY?Wp`P#0GCeIYOOlA4Cr#DJaza}$UsoQ>4*ffsGU$gCj%zq5`<#MW zHbZ$D$~rdT8BDke6J}t-pO6jyHheggPEe*oS&0doFkv7jJjEu|;SB#yHu(GcGcm9L zg8p}*S77+hZ%TjoiTakgIEe_l;s?gRxjEP;KX__C&dsHja0|j^A$SkIFu0rH*L*YV z_A9Rr;tID0+`GXJfM zCGowV@#p(+zcbl7kNc}e?ynlTzbEDXo|OB0(qF^hlde)GvVTfG*&5;};E-E~pLG*- zvp~~G{eFF4sw$#RudVYOxUaC(_v}~ocNPrvI}h|8_Z+yR8enmz_hLOGbe)xv`i%nv zw+r<56`tJ%T4g|_wzE4@*LqE*@6kI+oL;pQSz6w2PjE_fS`{9amZZMle#R-{>++;t z?dM6U_uF5ybZ&0Uaf+;lI?Vpl#BX>sL(+&STqi<2cxNQ~p zQv03sGZc|po%T3Se@A^KHM_68U|b~Ip?A{FPz-H3lA4`f=+rYqVcZhM@T^n!48@Zz z-VBSJI`8Oj_QQfJCkw6)7TnALSa5Z);AX1fyVb#hn;Ad|3vQ+wzFQqExS0Wju;6B@ zx14JWOp&ua$=F=F1)>jtl_9{L)Fs?T-C%S>s7tt!xJl!Y?tAFIN?k%H>IS0g5ZmH(@s5owa~y5*uqWwV?0E_}j&LeLd(tLtT+zRUo^dq6cTx4OI3C2XKBEVsJr)Fr%3UEgzUvkv0o&S7(@FGPjF zN*`bzbqO=6`wqIFQTWpK=JPRTkzjM?28a@Y8E*q)s7n|@UASO%LDVJm2gXAn zi;Zcy^haErH#P;)*t38T7TnBfgxi6`2qS@wm_-l{EGA?Q+!HC7NXYzkn$%^XI! z6xawCtza>*n9v1ygb?1_%qYS|Y>7U^EFx^mUcnv#;mbfXLRfDzbuiA#oPbI~N1%-G z1>iyNb8WYhu|#m*W(H!9zyY|Na5iujp*?UsA&j?~9k9&`Y=Kw2&b4J@7MTq;)38T2 z0~k*T-)*K3p*7Hja2n8t&s+!im5I zgyY!~?Z7N%*pxknJv#VgWn+O#LPMa8a18Ju;b>qeAw0L4qSfcxCeRWM$L1{T5ex;6 zCwv6h0hg=*mfOrLgnhsq!d~DW&vR`J`>{mb*!003863BnE`%LG8^U&=0ihb$43De~ zhTBX9VRLlLrLDNQBiIz&!Ja6>CZIPV{I;132pfUZ2qD@CqT!wwXDE6~H}&=YWBP zWx(Yt&$SuT62WVmX@fnovp@sF0$?)?x3V)p1tF}qnQ4TlfboR6Y>E7Eao*SzoW!05 zggL-zgjv90gc-obx1jwJSWKA4mgpVKauA!c&#@ zZX6hLsC(S4eDlg8{r#R%K{pcD+g*J1ka?xo$A{+$Qc7owHU&AxZ|G`h2{F0iTUOJ~ zJ64mB)9CJ+W4^vTCwZOoB@Bq60p`!M0bhx-8{J=5hnP6atOqw;9}ZtPQwplO*a6y; z9&Uoc<9fxYTS6oQc~)|q`7fC3=vUk2-hX71ndtLyoew|PF&(?EJ4t40!7pBu;x?S^ILi#NH+yc1yjE$#G<>_~LY%acWK&1WFqhqiDdXhU>qbJpAPVv?NM22H zf0EA&;f+m6l3P2Bs$8TpPK#2A?92@+ zr?WFBc^%2$CAo~`t3obJN@4ql#Wb;rcGPdV$G7teNeOegV2btvYVW1?I%-cwJBr$$ zQTrWgPeHplraZg8r-fPHG+|x*EdLNEouqoMV=7yfsVSB0RK`}WXR8w1l*7)vxT7Yw z0(aVkd$y2L(3F4_zJbP)Q+U~6KId$3H9g(sH3QD zh4yl4n>J*{gvhm$>IIITY*n62naNJ&@ybbTRdzPT2gG@lbd=_n*f;bvh`h|&!`k^- zi6mb{@~22{47p8QxobnuU6I!_?O~mKyL}<@UWuuTqh~m?%%)_>tw)ZpbW<7ciEBy= zi2J6b<7#e+FUjYT{4mLvl6*SJCnSw1?YNj*64TK09dmuRhjs9?j)cg2B*HfwRbei^ zGg1QN)>RWK=cd;dpFfCA*SMr5)@VR<-AAC8k10c9~C` zp#34W*HQZ|w2x6ci`xFwUPT*j)HukiMyrM~7OmZ)h+mYNf>G`sbVs@W5_SB2KK5Fk{&tFAI1bhC( zj?Q5&hO<&E*||)v9H%mF+}#u#5VwWoFOvLIl3ynI29nRQa7k!79uW6sS;v*!lD8Ur z?ufiH+WXk^R~-_;o=>nAdVQJAZfy^WPw7VHieRI#_NU-?!IW*dh?`~xwa z2%9Z{2AR<;WtjF1dt85hn?59VT{JWShn|9|=HSRaG&P+i&Dn^P{3+q!;%>%jRCVI` z*KjHxnCfRW2Tx=0s{V2V4X!yY+~9$@=8tz0w;=SI;BK40e&=#e$N%ZmQ6}~F6>x=H z1MWWH9s}-Gz`Y57HE+VfUjE3cWp5<9ImJFO~6 zR_Cuj*_yKO!k*DjzN?$@nQO;$YYNk@y5@hr^!nu-_UnM$PhN39hR6K@%Kbk{CHDs? z_m36-@xKPzSk3uCI6nyI2jTo6zXm@D_fu$`Kk@(TpGVx^N&jm8PMZ5DxQ~MS7p2_4 zDCPb|DZL3f|10Nz{aOCkzcNh!tF5r|Z_0Cft9$45nuh21YL~zkd&bG>ZsVx%u*>kn zro#`*Sz(zmiL=6TR#?so%N_*I3d>nx4FsGOmb1eCV5sG+u>ZT+_I0ygrxli&Rhbo5 zKvr0m)i=zMC9^Us>|wIP2Eqy(Ojg)SWQAoJenTK;R#+w;1@RA7SY~ZA4q=w23&T^G z$7#X#CT4p2!_6(MZ9?r4Xh%_-Ibm6Q3bjX~T}soCLYi#!=G}zhbSAY8(HETpc+Xdj_AkJ_%(9*=e-wH>MbdumTW zds=k)>-DhV9w!^_AIOILENr;x6Jf*c8Uq_{d^Bvh7s-bE4#{&#zLMm&B%fr_5e*CJ zHgcA(frWIpDJ-P3V$lA8+G1)?Mmvz&pHO=PwWpw+L+#A^EMKzWI>3gTZU!4}ml15Z z2C;DMCKSW9TR}G5CbHqaNAed)Zcg&CkjKZC-y( zwH;)r9Z~{A?eGTpZ-=)-9!2t(Np3~*$CBod*VTf&u8)(~H4a`^;X-&_TgVzKA#1FX ztg)L(?nH7cl7C3@*BsXw!|S?$yslr6*HuVfS6lMBCd2ER> zc?ij!Nd8F(?-_Vq9mwlyLta;N^16ORURM|Lx*mhqwR$w2#NUe{3ay2{~ot@ec1mG>OHt`4TK#@g(LHP)Q0vBqSLjVF0o$OSuiT}P7Fbq{%6 zmzBX9%OkIAGI?Du!s}|f9$wcAWQ`p;1=iT{39!a~NOD(_f8H*92VPg-Iq#lsC~UX|DI&;U)zwy zR;JG-BW*KzKDUy!^9ETx=aT94XSUgyk=v|FLew!JiT)H!L1n@3%&uK#1JcVBd{&!~L$NwM|# z3o91C_s&O>75(fB*u~PuamqwzU%|jX+b~roX0>vKTLbPs;2s0+RlvOoe>HDHE;)ev zrnr*(ra1RaaqgSq+&9I4``=SP*(y{fa)nz1?mpli1MXG8y$OFcZ$cmCCO-j}FD&Kq zg;#Px+uVbY$2|x^+=K9&{SzTXYF;UA=p!d!$j_aG#$=N^P|?m_s?J_xCP zsmTB6;dKE22vU@WW zw)tkM*$g#6T?()bs3dFw$_VcQ4-$S447JEsA3E+9RBzs~S3K#)jHT`j?*S(hwgVp} z)Bt;yK%fTRA#4NIjI9YidBsMi@kdOo+KYv@YTA$ut9}dUPxuCPkqxVUow|fCQy00g z>KCXRcus!h(5jl~;N;~JkC64xiy7_(PAB{T*fbB_-N567J4s8pgS7M3szxlyV9QW| zt86}q6*&V`5XyjQgr|VA}dyN0->yGq_%2o2@%Sw zG5H1)T1?3f7`vEVoY?|g>vD_=7>%P``~;`{_-wX1a}gG+8TmB^^c`TAZ{`f~6-*YO zb%i*^O1Gl&euZuR#aV1XF4AH(U6(N6ItD0TzyKE-(1ZbB9>VMiBt~4Urt2car%CLv zplk8LJNrCBijn>rP=x^rA7j947%&%kv6}BLU_dek9JI&m3rJi>;$(;)owZi={sH#! z=OQpxQ>DOwAPf-MVt@>RuK_19z)yk!rS>>?B*tp0Dj;4#;%6Zih|kFn*t10s_zVLU z@5O-a7%&%+v6`~;7%&?H%$~-89HhSn>?QF>5WhrXmKiIWhTB_u4g-uaKxu^mHZ&j# z1Na|cK))SM2cfYVX*tCAk|8#SI1Tx)0fB}!bDuxPo;agK3^;`WbCDXWIaY=NUt_?* z$rvz=26$n1qumg1Au(cOHOERn2v>OFwmg9WqKO!A5Gk+$%P^od4g==U=^!^&BPqe` zi6nj;VlxuIMB-R0-FL;f722P}=^!{(6H|-{%p6a;zq% z2x3>$>;P+5c4sO_V}Jn-u*85bqcFe^19A}^s|h-b0ncJ~<#34O5eOSFj>Ov`=0CSq zH6fYZ3UiSit65iw0i!YC;3F6?j0Oz2u-OwLG2qTjoIAo}HR}o>{(e8ieJ^+MBXDPi zA{I8F6$AXjG2kc$Mr5i%HDlV-I#-X1BttXE5M1 z3^2Qo0f98&0tPJJf&o@^I>?XJyqXX34ial1?(jG#@3h68DZ>DMFb34w;&c!ot8tKF zfENZRn=!x#fw2K;B;E}1VG<)jR^xE`gYfYlxD{T+fP+mK(1_UAfR8c2C=dhOF<@>* zr}K`w^Ap!D8awPoT1K@r zT3KnlKSFHcBv^TxRU4{iR1K)=MCdnDRZ>+@l~GNjdXQ>7)lgAh{{_E0ZtQSUI>bq; zUs27WnoTu}Y9`eTswb#^Nj05n8aur|NpN}x-@<9cQw^o+Lsdl8g{pw64OKI$22^$K zbP1?8^xHcIk`8rGt}OB_(0ez9m*s?9d?mj!#3bWD9P2jBS>Eo{=$^mM_Qrb0_-n3Z zy4~yBKduQ$ZRf3;Wv-r;QtIrhGDPC!zf+BKZ`~XA%j$c6pQzox4`o*xQ9GlDtbY%^IPV2fv;^M6Nz;9J);%dc5Sxo4Ok_vL2=OP_$*#wx_lcwTGdtqxQ=;XFaZ! zpLW?jT%OTpJZrl;O;+;zo4UKUb`z;R0_{L*ucr27YL7%ahuRydZBFe`PR-lZqk`l5 z3%jFaCGX$Vo%Qfqpy|J9oAsnNV&nem$HScSTzHSlEo-f%!&T$jjD6mReEwO;KPCBc zl0U1xFh*`!XB{&_mDI)zy6Q#2ahuL|ACZ;h-_(8M;k8=R|Gll9oi^gV{ic({oKL%4 zFeLd%$d^Y!o<;Inl5fEV5o?2_YVw7rWo3SiPJv}(?_Sx<|vXZWwy7L}h z;hO$iwpq^Fh=WfqYtYb+#yV2 zqzY&=R>r932FGnK?mj3hk=N@kdU(}q`oFWy+N6yL+%J4Stl*SO%T&3l)><+aa#1Yg zCrN&TR4Q@O4Y{VYSjV3EUvaYSH|LMbxIEwR||PD$-PK!M{?8D=gYd2WGt>$SMI^$ zYWo{)?JBeboAxJ*!}NJ9u2vpd%i?NP&TL_Jt1W|BTrK1;lKfMWUncnmlFxB+Nl<$R zv$)#s3>k~7)m`&oakc%;wprEMfzA7?eZ%ypSzN6=vW~^ostVdzTrK3SB;QK%0+Qd< zy3Uj9Ypq|Ms)}UquSB(TFmvg4r^-t9HtH%pye_o&H`&@XX$J!Lo4yyOXCL(oBsYgV zhvaKW{#Bzc$;19{er(lZIoocsv-VbQdJs%m?uD-fU(%G$k(#g9HcU|_&I;R<;8#9b zo>wMqH1u4_CXAVRf_-tec+$1%phNZXKL1!g_#NvalIF2g)g|oZX+E7jn~CFtnUge5 zRw8XI@nFYfZ;;k`>;)2Z=x=50aJ~Ze1x0trAG{2H!S`Dn<1UWDKA@mOr*SHE>{O29 zRF-4zFK{Y9AshU1WE0N(!Atp%U$E_9FG}SmIWF$fBpk1YuGo`iW$#95V;EiiOq|d^ z5dZiAA5zmG0nKuWrVYeJ{oFRK=itH&enecemGeY!Hv{L1DF2UoGk7cQq~=`V)_}VY zxW|Bd6>x9DU(K74{jl+M?yHR4m)lRaa^LCY9t6(iQO-RGzu`X-vZUrdO0IBgz}*Mj zW5B%%xHsXi=1s^sZ8(F$Z`NSI`Dgq%{|x7-RB}eLlpi02g6g0?FJ-$zKU#Kh;{4pk zF@?EamyD{nS4V9OTYc@>FQjip^1rzHPA4xUWw>BoZmRv-kITo8>&w1Ao_}qWS&EqZ z7oh)H{{nRI`z3?lllhPOx3}EME4g2v8~lP5cQbG|1HS3^?|Fl90kvE}?ZXAsUeoub zsv_$2+B#2tpCWZYt56SgdFlr&BXu1!_4fiI`>qrW)bCeC^edd54n>CbsGarqa{Ffv z3@9xl`ukOpy3X#%o`R&KN#B%LmCxDGm=9$~Q`3OTJ;((*6AeuR#a?uD8kxQuq-k>t25`}>Ta}bo< zD1%a3$cQi^DI&KSkvlW<|9wBk-k#lOQ}@|_Tj#ayxA*z}KIeDN`OP_}U7OE*R^^v7 z!>y&>ML$g$-qZUam1oel7N%tO)#sOom1aKGdpDJ5ld*{5)4exSd22JuLrXJ<^;V|x zj%O?i?Qsn@F#ByrE9|#YN z#O$}dhf2`3nwZ&Jc8r!NlQu`wh)V`x z+X2Fpgja!Sgjv8Z3HJa$C)_w8v-beal6RCg-Do852%!z|6G9_k3SlF8Jo63{DuD+H zpCdubCsy)}@6g4Kqs=$4>$8NH$$r~33|-(;=wiYyn&l0khVXK-mHhZBn&l2{+9lJj zHH0T|)CzQgm(eBjZBq%lz&vzuTG`_>odW3MMq)FKM&ihO+w>XXNZ=uK_fvN-y1?D& zlJ&OfgYlX2aK++I>i(k%TA7YuhvgU7((9p(o?1 z+d*gtY(bZ7woP}&Wjf8l5@GWOjl{*$$ajPzfo15D)3&JyU0^P{G1UEPT&A3dCE7)s zU((1r;HQKwwM`!A0^dOQJ?hRk&vg2hE^Z_?ooOVF+_g z&!Y>Rgzg6Fj$unwge6)}o6pe5I^aOUmO$$ENU00FPuQ}Ky7$lp-aW-Qhf5xZEXsWkoSp5IT>Rp} z4HD;=)sniVV6&_K3YC_3OckF+J6K_d1++u6v?*A6g{jNeUHoy=?CN8o^h!xb+^Mtd z0DX0jHNl^bn^f!Mlzh~c*<_;W=!=zM>P?4H6gImX(X=xWHv30}&5lJI(X<=UUXJ#7v=L34 zh4y;1Ezll1xp8~_*+AxhZL7&){@2Z|Lgs(X?X;CWhfvy46iUlOC~Y=EY1bl@_GN_9 zehT?w$fpOFJwti1I|fr;EDNY*d9fQ1FPn>a+2xcM>)=4~vg5{6ylj~<f#5^9-T z2Kf!h*J}imD9Y7;BqhIk45j2(c?2cD-ag;PLT)>5Qc!Ftl3!gZ`Bm^6$e)FL7|ESJ zAh~sc-!2Meb(l|~tVvTSl-1ajLRnuJPNA$UqLyX2dKFNH>kMSL9)SD}$frU+2J&Y} z{xGAKg|f1YT9)_7GHO|J=yVEYWf`^Q$f#X~jM^+@)Upg$mQl;(ETfjmSw=0B+d+vt}8!jx2(6XZ^vzXqHjS$yr7%le3IkCPzjs z`=mZ8YWqRxJ6-GCEgk3Pyod#wnwGQnd9?XxFQhh$sAcV1wCAF|2x_zk6#Kn`DA!LY z`Bm^HCBHWPmXcqkV<`DmxQmisUqVo9GJ;~?g!~K0mq0!p^0D!&i`&@eyHxAkD^2or zE@!c@X65X|k4Ae1+FsP&f%X?@`=c#{+MLuE(SA=W@TR=jCOe9km6}stY*h^9#kLny zysZ9KcdgKOJH^Y&&QrXsKm_>=$j6afh&0-lO8nxqx$H?>;cU-t^zr5F7GMdr?8BF$ zy^`9;(B6P{GTQGzJ%Q9Lpq8nRp}odgicnf1Qf5yfly(_HX=MndRUwo%fI?}TW>F}u z6rr?Lkhen~2Kjky(s~M;osSIK@d%r}KpC`2?^3%2?KxPkBJQAK}_D*HC-`MaC`vMfx^|z)!VOXv7$JAUKD?qk1O07aQ6ZC7;vuw?oIe}c@x%gzk|%#fd5TCw11o7jXTg^`joKVD!sX(yRap$L4vsGes15Fg@JQJzO6kzGQUw1H8T93CUIovh-brZcMkt! zYM)!a$+pt_={gs~G-ZBQZx^$`-fO+eEU?Oa6XuOgH@NgpQx0r8l9HKr&ZT>r(zGdp z;dz(NY0BrC{1_Ivv^Rv`)VUg%PqM9n<SLtBX)+EB`&twauODCN*r zB8N7Va%d}&LmNstw3VwUhc=XQXe+1AUeP)Dja0Tc`DB@Dgst@~p%N%3JP!PtFb0@I zxE6Sd&<&VnB`^1%%dV1gXhkWML)$?)w4xNsq3xg?T2Tt+&~{J`ttf?ZXger}R#X`o z`sUR{c20}voUXmNqSIj^J0}-dVdovl40B&@-Z6He&r0)-5v2E_)YuLki{cddloK`s zDH^t;n$VnbXeA~iREOtXWvlH+3A9d;ETuDJ9x#G%3Xo!GGX?>}3F|0Nb`dj~rO-Xo z0^937=3m`%jD7f1>1YxS9ipC&CTSu}1>PlG1^j_QQ)+Bl2xVeF>BqEJ7L*pFNvYEOQaZDNfe+k z#l8#&?B`?>eFOM0;bk~rlaey^uC^IQ^5>7)XBo+-&}23gJS(>%Gy+=gXu2HLu-Cg1 z>9dDN((JVq6?>R+XDh!28WWxe8WAFVww&Eak+_lIeEkEnu$tmVqBvT~Z|JJ)DQH$Q zi7*v7j&K!l4B=G5Ja&phaf(CeyoAdyw2Vn&Prt=LI@WkPti=Gr;Xn$Yt?Z_NR|^A6 zTdhR&tc9Lo7yGF1CFYee%Q2Zb?ZT|&5kBxa zbyBLV90j^S}tkVq^A)Ao}r0CgQFmS+>$Y9Fq}NmEko;hTg5 zfNDamEp=-MYk}1ayUw$9meOkfg&mew+ni*3$=ZtF)E2 z)U5u9*=eu;RD9RXxcRU}`K^?PuG&BOVNVM)f1JAbtH;2VUF`H5>UPlIVA%cX=2Pbz zrgb4~3A$F{!oJ#`=l2O2M*lT_SQZi6zh*!E!Zx@W_x!~o{mBpeIE!>l&z3|ByYaMu zmexx0#1_ZXrT*!BRvP{!`G;$_G^c3TP4;o?RqHPH8)7fo$_57~-!NUft)Ah~;N*}* z!PCx*)~Ynotffzv3v-I3H#av*1*1v4^?fG3Ut#MojfUqBrs1@kG8;1NN(Yxa zG4mC2rw-$onbvGK{njR_?5i(o?Ebz}oJ9yvKC zqW-MVccUgZ$SrMTa_73}YG%K+l{p93$gQ)7mTy&CSD<#Fnhm4QEY#NOk2=HbW%HPq zH#NxZ1I3uy?wg&aejn6F7-E%^*hY9A|M$$3t3K^+nrxzXv}1PIh*r}q)I!v&sCB4q ztO|WUW>#Kr-%n9L(+H+9<85Lks$e=8RbT@~74X2Q0$VU@$a`+?=E?EvqO}EW-`YC( z1UH!{FIpEpxUh}g3Zh__udO|d%ctfP#W7>9RKRymxnU~YQNKrc|6)+|944YTSgNnn z4i0N*hm|8}2l!!K*y@ZZUzJmIhFNf>m5$CS)ntcdpLCrjMBtF8UO6 z&DzQmgY&+&HXB{;m{YWp8EB<~h0bbr&JfQbF&i$ya0m^L`=hhjm~wVK^R&6Atv!GX z2$>0%b=?RnfQtyt#!`1NA-giK;3R zlmgd6OL+gDblg&BcCF0*%Fx@{!@N8wr>KQFZl!`{&gyD%zsi}-TN@JO)?}aD%5II4 zwrVoJ=EcnVQt@fH})GvOdLsKHau=M4bP0F;m@^#HO{WprsRAT`kv7Cz30~S zQgX_==wjw-wUsgBE4w~scFieT#|*Ag!8#I??^SsJs;z^XhKEd|;ScI$wZUQRcAivj z&u-_s?%PtqyUzLSc8;r06#8D$_Py)YG$+}IowK4%X)9}h*n)|FV8fL(?CzB8e}+tf92I{9M5=N)Cf&)UGx_Xa5D(j;kx zQbP7RRb(~`ishd%kEzyf8gswqx|K3NZ0kq=y#2+y%uLEGg46YPLjHVO6%( zx&YH~44nEcI-g>iWfz^!SeoAkJK!9Nkxs=MtJFg$dyUTO45n`PewVI>V_Twjf8NwbJvO89Zd1v!@79H$avD8fCF%QF{xymF_0@mhudj0dGMf9B(Gu>7Qi*(|}b~+N|a-_U#mZr?6}b*Q&Ub00r0P*5om62!l_Rwp`y6u1|5*X?0y& z!*z+_T`}PgqVhW(4UPGR`223AYo9K>&%|)cvaj1x|3H!7BaaHdA7pRnwKr%STg}6J zQ(X;pDY|ABF}o_f-7qs_tuJ*{hl*0oWae^;A-Pn+MMt$s>-F@N;O%eueKr_|Ucb@w8#u&!3- zm37qx^(>ZJ8l3v3Da#Fqb$i7FYQA0M<#F?H-(KJEJUSWeYZUV$P+Ybi!+M36B#d z0#gY+fk&VPra(J~vvR|DjGB)=J@FHOZkRoGq{eZ=U^MHkfQ-J5K zdhOP4VOObR7SvjAHC=Esu!gW2SWS2dc!TgPu!`^m@H*k)5vrh-S8e2)IDfkKBIfAR zj0ENq#;v99SLg!M&|O2_&(H-P+R-FG*09ezIOj#W%Gc?FgMhCQIs#uI?3_u0mkD!# zbD$;6*+~<2e3KBm@g2H2M8+O`mBwL}4IDzJ9ZPAkxx;Bj$8EI39Wuh!AT#!$3yBNK zHXGPstjgJP%u`YuK)%`BVjLlecBmjXYz;zVg>z{KC+u*W860Z^C@(fQ65>FJFOis~ z#s*$@XP&-^vuKB`m2`yfXorOq7@PYF?clhIb|@*M9S|Ekkx$~85Ent5WYud{MjyY9 z46ixMXoqYi?SS0aDqGs&I5}tovuFofN{`Jw3$X{pr6fjhY}K@R9hdgfqEEpNpVAH^ zC_XlKGwtB`2JLX{BJF_W*n`$I`;iqi`$rH{er)a>{tESk{p|M6d5w0Ek~Ovl(Xm1+ z+F>Gg*iJh%Q&enjy91s3%Mg=Iwg%a;LJJZf^t+IE(Sbd2f$M39OOzFxE2AA8$ug_i zQ9?T)Ja*!E+F>-gWdoN(Ou4bS8z8pb(IhmZ+fq_YJ0Lx_Y7FfVLpIpJMYO{Svd!kQ z1Uq&*&(rLZA`&A$w(40D!!sM`YOHd!q+21Dl4Ell$d>9jiFR07NIM`u_8^&NgCj&V zyB*CQOVP2pUqCzt;(~-w8xh@^2#^&HqaAve(+(E2LjYyR=89>D93$GngWR$;NRSmi zP2#N(kAQf)RqwHLbSqfl2!m*c`R8Z{M95Ag+iY-~56#|3rptwt9-CWBCRN8?<^m)R`-)=qP>~-Y#D{Ete8>C*rqnDi#o7HSfT(>{cQ5{*8Q*$)E zte~ppifxugDt}MO%dNJn<{Jf`a?4@uCTg3ZeHQH#Xy1eS45<&JeH87x1+P_8nBHHg#dn4N8&@N`@#R6y93DnY&JWkV*M&L-> zaU?ahD{`paY)hxR8SQGQ(Y}QC2DGc#c~#MQ#Rkxk77OXTzLC-jWYG!4`cr!}+UL+t zM|&-`uf9#{47884^ZF9!^&K6_>=d2A%Q(_P9O(+RrC(9o0`1q({swBabv!!Vms$H& zo#pIS!-dU(&PL(h2F2yAbzZqEpSu^kN_$}c=Z?w6Yma?e6Ks~gKV}OJ@G+ozIB*05 z@fdg&1LMD-JyL&&UDeRTX2@E6za%TTd2g*-#Yau?JK8bXEU=s z+0L#lPc#ubtnZHWnqXi_L8iwx<_B^znqADVt4fHQ*BU;(9>l;(x>(}>U<~b9ZxAu zm+NZnWP=6av#l$hYBWhLn#>w|1y85B9x^?+tvzb7@7N6e`ad)ctgw6|T70gjaGGoc z!~;m|0`V~3=!`ptr#AM705 z1SvPHcMNabBQJUp;;AHVgZN{J$B_8Lg3PxB;c~a8F%{|-Q@6!2u=KtFY$Dru3#XWcIWJd&Qb~BA> zJSZ=c`i5>y6f8~)WGB6={gSuun-EVY@e+uSLp)abm2YTJ;yBN=R(5;rYOnV8T`tR$ zySei!g4pd*+|y#`kR?!8v&h*-xxDB*h=nBH7(?Rq5ZjUX+v3bK0$28_m^Vhri|+gC z)+bgjOS5b-ZH#Fz^!5#xg`IZe&8RS8w{%Gldsh@dJdVVsekArK@!H+uI9b>kH)DRq zB4)-e>1nWYC>6L?Tdy47$e!LAemeG)txQX4F|FI(e%0GI8R8d791Zamh$oQvkA7Zj z(hN7OvnMpV21TDL=_&X2O_%A}!uV5r)!3!v9qoLy*YiflwX=t?NEY_B zTiNUi_EcIadT!e}+!o}s_tK=sM0wF6KOK7{-%Imh?KCx( zNguHwqvE|^1t{!}eHP#(aiH;-X{)Q^yxm`~k~I1L;d-{8`Qj_t7Jn&CWga^=cqisK z+oi4edp6pAYfV*Lb;yQO0g82br`b-9K11C2Xdg))1Wptp&Ed5uJLg)GDr9WFL zd?Q`Iny$TDZ%_?PqAAwfm{<{&VV|j!U-S zk}YK1&A`P-{0GKJaKFvY{Wkm0<+s_nqy+A1yR{r0&^4BFxIY&45(*~!rEq?WmZtg+ge&eH=dk}uf|3u(^uz>TZOSoU| z@c(6c)U%qopI}gNx3~5`>h?B_lGxiESf?2EJD=AMnI{-$&$x5<+~qR8U#HHa+S_~P zk*@=upOT-q_~sXhFHE>Qac1-D$u4G)w)o%vl=f#F^4o#DOB*VKk?gNxK9+a=B=?}{SIWxi#)OJ0S-v8T(! zQr%FuHMH;Jc*}O}9+$8Rg?&%g63dha+Ji1(*A$jLU1{;I?b_EYS<0;82bMDH(;XjX z`P9DKuDzl9#ZrT&Q@hAZe^s68D(;RCx76>w?P>_^SS%e}xxiKIwLSFyVySiIP=*nq zEsLeERVrM>UXh{qt{Tqwl6N)~-q{ZF&WhCJo$Vm+tVm7X*$(o~iqzzt?I7>0NKM|^ z4)V^5)a0G*An&Y5-Ih>Y?;OfD9cVKJ0kc*>1k8>CB4Bm^5COAV3Ybl4p;>By%?Z_> zPBhCU+Vp9nk+Z-?!V|!Igol9*gt5T8grUHC!T^?7d*G@k3$VRIn_e_xd7JQc;17gz zfOUk^fVT+818WI~vst#&ENZgNcC<53sYp$>*^b*lvdwmU4{_sB7`Dc{j7uh1+hR}-qQy-2gz(x%T98nFOUbnIiq%(9D9P%N$F8JZ;u zNZwh|0^mTxp+G&eB8n79lIt4OH6=s-(EmRV6f zIbV^&m8=2*#6Xp0l7#hAsDHa#)2n9v+ZhFQ@y^2bWt2or$| zpasr@7RdavhfV0>6l9N;%%zbi;4H!gKtAD6AlYR_3dG1xhZgt(TcY8(i?C@$Bb|tn zCAX|72RNQE2soC|5jYB3GQ EGx=6mry-z1})Jr+FXT^rwOM5pCYU$KdgkjvZ7RA z7vU=41H!5K3Dw2+G)pUOUPF8=S!G3uz%`3Pz^0PVI}006(s_%8L1ApU!l7Q zn^$OLDDX0&BA4`Jlodq*O9&SL3!nw&8L7NmX_g$M&3;WILBLaljzAeWG z7c{wATZb{hHC@uAXPg5=+;$I6cFeQBGq8N3+B9N&eQaR#MabWQd=})BARh_&(8-M~ zUN$gVcdo4>r|5kaB+K$QHM#A!vgd+pdZd-3oC8DMc*B!(@~pF2)~woeEen_pjDDF# z(B>3<3i)Elrw5lklN^+1y@Q3!s!gx5WZA&z4J<-7rzn>N&I)~(YjWFc9UOvdx~1b- zz-)+HnK9%;NWPfm%LYcvAin|mdW~R`b1Pdd7BHJ}8qEZtm8}Y)Sm0>)F~ZMLP-Y z7pQ#%ZGW^6p*@w_b!dm6{c$kwx5pL%PFsglkP9KVg`CCAs!jJm{%x_}CT*X_RwfS)>!Q?I*AO>< z`((>J>k9L76SZk?Onp=!#m*M8Y+n{1EA)+oyby9<$XVDdlaGs^Q_{vh{sgUauQX|e zb9tWi{PE@N!}dZu3GJ2CE?g{0K)TUcmuxucr zXIZ{4%bOMYp3?TQXQC=NtOwb%OzsFdi=<^|4*6h(Ux7BaOFC|Yvpu`JCY7@r#Y)k} z?x<3M+vjHrn6|;f3(Ao;hAZ7uzNE_onEJy z)Kh`X4Z4Osp)AXlxkHb$<#F=pWk*kAk7u*sZ-o69#@^roiV3vWOSIQob~`v#bkSZ~ z+Kc@&pi0L6aggozH^Tme)b>&uJbRzS>DbwZCVRAYf8yg79GKmJEFAYyu|Ia!gHGZx zOMjARBYU5)s9C!9lXNm?XlZ^@vwvBCCApv6Wm4>M|83L%O!VK*+|9rx?NS`|f9M_J zUlrH?!w3C8Ucfp2t2l!@cQeqBn{ZDD_e&4lFFpK%9t6(imHqE?c~x?bR?gANJ#pL< z7w1>?%Y6{K@;|6nmY%GBbMQC94-G>;{dj=&@U-jYX>a$2xO5cd{oy%nhwb^3Qx3m) ze@6a$9qwl{mX|5A>-?&;vgWQzNeKHsb+(0NRa|_4;^)^MR~08~<_fn4+r4lE%(Q?+#l0&{{kmFK=BKI5Pr%32YNR5(|_C_l>T!6e2BZf zxqlDv3;yHJ|BKr@IN(t&mh5NbPBnA8#r=BMp~i4c(pQ~gsAIO-C|!JhZ<}R!ug=xb z5ft8C9@Hvk<-)lhNZf(ZfI!V=kd&8o8=Prts=drYoTR+ zW1UH8-xu-u4>qWu(k=>1d8&P%;cn-EKYHo2)b-3-YZ7j0VAfh)C`+g{bamD;&uyD} z6|>cD3w^LyI<|5u!}miqi={7B)-#9g2cb=irAsPPU38YYhSn7C${-h=m{~Tvna8Lj zmRzttFx!R#JE>%_8!fd+`_<*`Eo2WuBlTFUDjW(yzh$YOn!1ayp~Y!c zG0WyGy0|E8R?x@-;1$B5z{`XR*lJ4&qktvQ0t=XBa|X@Q2?Om}8p#2EO&A0`Md%2W z5q82ndjeYE7tod_RPX205`9LSQ!(-}VLc4AhX_-FNrbC_d!Yp;Kzkvf`X$T~Lz{`P z)kYC|0wV~`f#HPLV5{8MzaKAa|w+&0^cO;gn@P;VGi(h!XV&l&;nn9wlJZ(8?IJo+DwI)b~fQE;ERM) zfino};iKh23;Zp#1qs#rFv}F$G{=Y~;Wc<^ClV$C%?Uk$qoDd98AfUUNNFbdc~xBz&cSvLE~ve^j(Z8MGJ02>H{fVT-9fwhF4Fwa&) z3sgaSHlf-Jmfi1Yb1Fu@A*_diwu~?pc!6*gun1b-4p#`Qw3p~PHtt@DkEe1A|X+!}p?E%6lpp z!pl`!-Z9lq*l9<@PHO`@?K0SDFTsB+f9Suhga1|m|7`+xn9^_1bZf9EzqRVgjHnW4 zx7B`I71wM21*XWInZl<;*oTZ+rc|!00c| zwJ}ST;O6GrLSH*gE;A&K3trYOO)`dj2;_rEUI=*u19-^M&*A2AOwvmR=4nIY^2$VWr|4CI4Je*Aq!8mznmSb1&9$~(@S zth{ALm&fhdM$c;#@guEH@Ewv6lWaS+vcH7)8$CeTC%wy$t7X z1LT_^cY@pka+COraQ@zfmA3;{-Vn0#Cb^LFcef=ufA5%(^LNlra{dl4BBSuITVxa- zq9vp72avxCxz*&gJITuXauGRypSwlQ-_crf{_Y~@Z{=&`{N+s{=Wq5Xa{e|#9t!!Z zkWYd9qu{dV$;!LKl&rjqqshuEgOzvbEpq{5Ry&Asu{1xxk=1!%kCr|nQ~t+BUA2_81nG$hbi|PczD-9o((y(+cLQw%B@^Rrrb1pGUax_lxwt`JiH@H$iw?g9eH@8ATNU47jlQm8+Vf__Z66OpNA=T zFPU;3lw`^sw~|b`?lZ}h%bd2%!`lY=cF6w=^3Nc@3i%pmDeSdE_+?L(v|Y_9S_XTq z4E9TuI$E}MfO@L?6p;pw?iHV`FU;9dgpw0C(Tawfz{TYy~5(^6PYtx(WcBP zN~-H-udvJ7K6WSF4Gv>#`X1zSA-5=J@z_+FWlx>@j3+x>3I$(R5JR|U=TGVG=B+s4EDio?Kq z`?u2mDcFNjC40=$ztVr>2>!QOhv6~q_e}mISMA^R-}Zkt{Y%n+SwH%t`~ATE2ja|` zRsX?WMDEk%ZtvzU*N__*zf2Rod$?9OYSWJK+3_iefVxNpk|s^U&HbA?+2?mpli1MXG8y$OFdZ^F}D!ZsH*zky5G z<`TB+e#r^jCj%6xxR03oh*wo<|D$4fx$NldIxah!yJ;2NgTOrqaopQG;E^7LF814j zRdMCnby>|Ea_jJuZh|~RdUID!xWUy>&SGfe!}WJsS?X+fyTY~al8@n9xWO`9*Ji0# z*%|&KRY7KCyXX9eAU0B(No{$;KaKp|Mx5;= z;q2`7{>G?NDLY`TrHC3cD_vg=I#j_}BhD44V*d+qc5VRaLMkTeIgMV}50UeYPgXw$In- zA7I}*(}i8dW?`~OAOBkOe}tFJ!m=XO{PfWi8S{K-$xZ`x-s&WH^6ueB6*Da`b;zeM&imYCI47EBZd`xyoL z*T&lB$|C=^c`3#0e^a#j*B-Xb&5C57;$^cMRe_T*c$Lv3HbXKZ*++QZ%%!q`eNxMf zEd6UEY#+6`+=$KbBxQvW`*5G6Tr_i06|mc9g;9!s?H=2Z%t$ujBR1JB;cMjMUmIf^ zB8#-o))brNRTeyAQ|(`S&^9D1GB8_n$t+J*!0w`zMvvIctt^PKeUj409=vQ#p;;Jv zJcV5%BUk_0DBDMED$T-F1@^)&u~EK%ZK7>oW~5KH=Fyt3>IT&7tm<{I)ayj`y6yG4 zPwI8&>vgsDx&e1}R(Ex;+|`Nh>bBq2eR5ZK{;sa}u5Lhs&ZpPo0TfSd9v-I<2Uf8#nF~pXHzM%x*6|z0B*HP1_c+Pr7l_ zzR0tDndhvI(hJMHR5mlWidUr@H}5-omVe4KyQ8#nnOD{E^=p@Obd=s)=5@nn&sOoq z^xZA{zCX*CdrCS>HOsteY_4tpYeBXj6%hqru#qm{{F|yJbFsqeN+uL^Fqa6q`SB8JCVn) z@T}-5UFxH1w2256%hKID_Fc;3U-$IrE%oC)jm{^&;|~|i8le2`a<9R>tZicR4C6sk@j3noLG}RU?B!lVd2QRomKnxR zOC!(mM+s&PRQ`Us*KppEy#XanY7$%G;ibk;zb$8&q!Z8&z~lkHCXxia<8$xtoOy98OBCZ@p-0EK25+2ncwweUFyC0YOSIpC=d?q7A%izwI;}8MEGRKG7CNE-#_}dKk3DSjy{51lP5y~`?>Lp&`4zVi3eWEm=kiSk)F+!OuQaSPlMTu)O z+$Tw63;FK~JVq+ZM5;Nwc~Rnq40j9Zi9)_aP%%<@L!@%zMMR0U8Say%mkRk?1Rf^J zCXwo8USX8DJHy>l+FZyF6I7Te`$Q^N-k_c00W$aBNJkX$-xqj1t2Fjiy~3NfQ#@Se zZY8xX;_nbtJgc1KtD47)*eM<*bAL{{u!z4);4w%4i<;%PE>Yw3w1zEn_Qs$A-;a^poriydU{ zFGw#H@ec?*Ml1b&RSS8A(c(EW_o>q6B7U-kK`~;H%$+BVE#_wmJj|43zA7)?ycqFnnY*p@L@_^GP+_LL z;j0qzB4WfFWbSs-OU3*%0uOU#ldsB~R~RGSEOWP)HW%~r1Qq7WK3|m&Z_sY>cA5JO z>4*}3fxu&&(%4TW;?3JFj+VJQNNr2_C4!1^%1M4IKVHOc@rN>ZzI0&;zf|BcUdi)Q ziFt*)#rtLMGo=9~{L6xh@k(bu)hgbgSn($^_ZOwHCHyM_j|ob5KhsrGBclyogw_Oy)jIdZ~neUEncM>F=is;1$M-zm~Z>N}EggHG+zX$`C(Q zAa78d_`J-0wseGoe@oyoNx9okwShM;PJB`3K1XV+;NKBcOi~{5Q*Go$#EHL^xzCj@ zRPgT!JS>!HeyUBp!Z@)?=1w_@zwqDUkkJzG$``uygcZYxZzdOvm>;CDxZg+s9 zQoP&dknZ&0rw{S*}MrSRdM#SIL?P@!EyyTQ`vu{WWp8E!P zHunwiwN;$kg?kXV2O*Ao5PsR7Am=LX`_jpe_I>H#Yzy{fY0huL`Ar__Yxck1+r}`p zDa^y=Y-ZzA>Rk;JGe&d|`lNb&$Mw0rpa1vteV@Jc#b;g`=i!p|>s+f6R!?5EU<0h_J%IC zzAe0akwKG~uWL^+=nA_#?G3#t`upjR`cZx+lU3*-@DikU0TJzApC6@Vj>jHbamRN>gQ?S2Bx#+)$ z?;Wx;{C@A#pQraN$T!(mdOtMc#>$uj~&N;8dm3kX}c z5}rX9n2GKd>VAnX@Kba*UufBwoX19zXminK5+x9p2NUi@7q|`GAnFFA3tW$`wlqT z=0Uo+3$(e&pG4;f%hwW~Mi-cY?i%WTjxO+HbXQ+!S$lwHkl;;2I4d(?FTzDqa}xSp_gCGCdOs#oEB8&lg60QXsC;AAz>lVjqnKYb;1bX0=7gS(kw#Sl>ZlvI00WJoCy3KVXq$vTnMXx z&V+K{T*8BX7g~Nuq9vM5n;U7wX%^vP;ERMafqcTzz!`*XzNEDyyy|2HmBMGa3#)NX1RXVQq%K*G_$ zrwH48sH;E9@G7v6Fbmj2xX0&0%dJFOqE6aeOC$1jLN{O=p$$+=XasB}Y+Od#W4VWW_`X9<-+IpJ~O*Mu>^9JWLOba8&P>2!)l<^i(^rvPPygMjIT zb#IgQ1YsfYI9sAMG|NHSlz&bmTY<+2g}~1Uoq(SbP6U2T*y}~RB{N*FA2hqwHK9%7 zY-G4v@0!6NX7#LFh)yj+bm}fdr|lV}g7wqyXc#b{4NdnnXsN1pS04sn~N6t|f) zoZ>c(2UFbUv4Iq~>9?KIIln$f>72`NcHb2G@*$r9`3T5|LOzJ(b=wtNZgw+m80!0| zJ5YC_#-V>M_(WZ#vjeTIV=3O6zntqO{JE!4&S<_CAGsZa+`qo<%pi z?+SfaP`IbVOvoodJ_7O~B;Oc8^7H5YHfZ{ob|dO0)F9N&s9RA(QNvNUqeh@cqDG-c zYm%Nr*yku@gASu?(1;Hx8}#)8$_D){qC};L5_Ly5=nIgKhI}}pL?cNa4f*eDWp4$C z-M5u3M*VNpC8!>#o~Qy;FVweDg{VtWy-}A1mzh(v=n!Ly79G8Vl1N7tQWELzT1q0l zpkYa*4q{3o9XFGbNXy1UK7!2;OzW@Nx41Cd_`S}x&!qXY6Jn6MR55A*>Lyf{w9536sIjQ~iu_(cnCe~%Q%(8PM(7YL$&1Kut#d6!jSDm#8OE zGjBPZpe)vLo|MH}WuySZ^(tv&S2v@s z`;O4}0FqxXBl&d|hZ{>Kk@T8O9giF zU{AIrjl~o<3x0Cm>5mDbX)H^cT_ekq&bDY|S<+Q;?JRmaK+(gZr?dS+S@d+3EU%4b zR(I1u{(-zdr_`Hf*hJ@4(M~&Eqgj4Zv;TaM5Q|t?mb;zp$0E1`6ccFHm*^A`t6G6n z*}o_3KaH1hA-FP}dpQzle@c@JR+aSMpZ&KO7b?qz%F@po^gmpGexq{DpY`j4%jD!T zIk`+uE|ZhXvt+*ZV_DUE#y!2lp+^`eE+JInVVB zd48f{+v=ANeLh;YNGulX*ne-Ay|ZrO#S1yD&j#N+`npMvDE#G%)!KsXr?@X&b6-CH zwS4oQ`yDp!pOa49KPR()z5kr7|<+INie(K4@-J?Eq4e6&uSkCyY% zaz0wlNBe*0qqUgbs{ZgtAFW!(`Dp)Fb1dhh{b#OU&PU7nXqoT!ANXifLfwqVC9~>| zx*N3&)p$JmsJl^_k(Trm&_~^kT83&oak6qpy*YD_p*EuSq8dd}eQ>a4D8&!8-QVXF-9>Fe)u28=?LzHCed-n|pGF;qYK;0U>KN2# z*pFX;d^E|gLav281oGc$1%GtTXU0TS!JA-I!CPQd!D29~;J?ABf+b*7frs<4vE^)? z>vq-01V(QzZY$0yItMSWFTA{&@bY?*m)F>qyu8QENbVOy@~ez=0XygT9LErFN!2Y7kkB`+^C(gre%^d$1~M#Pbq_jSlWhr9yvCdehu>foQZ zkG3KRp4=yJuRb)p_WRmSlI8Ra46!|Ad2J*Q>`!U-8z&#fj{9fdZvSaKhW!;jS#gyN ze&tF z%Kdg68kG5Acj!s$w>+-A61ZeR>fC9otAF9k(f?d=m-&}Js=!%*|EC3*%YWy>!8!95 z_oa01i`m>4vt_^dFJ^P!SmwU5+{}fwa$&7pSnDH%wf^eA+x(vz%FTs~a^a#}xai4W zcDU%$D()lZKH_YPYrpn)-R=NIrGzWo8gTak_ZV=m0`5)tvw0J8`S1QtT>d+kXfNR& z1nxm-4(1+&U-pB*Mb>h8y^osLtIN->D-UB?v~5@8)$!`?@9o37j;MQUgTiz^2EApz zzStzcR}rp>$~UxGhV^I@^Iz_}7-(vbhjK`b$yBy-JMj+@D8QHNg8*e?(XTi z^A%UM4PB{o_50((PuBU|?Mj@h-xn8tqE3CcD`&3$a9ntLo$KAM___K$afYAF)#O;;P-++Amz>#D;COqQ(k^5ku#RvFu$FKTP)%5On6%Y| zg}^GS-V>5DY-Y-;)!0&2t(vlGH7CeetEQ}4jV+L}YBeV)pjJ&;wHjL>Wz}jR=u|C>4fww;8JsfQfk#5gtovI zbSb4)eFt4&4Z4(4tFAy7czH*YV-}szl!J6aGCIg0U^-#l0qUM0ECe1WJOccJFans$ zR%kVykQ6ghRING=$D=q|^$v7_6jiG^L7A{>3A(^_grTDrdP!<~Cr`*!*MIY#*gP-( z6FNf5tBa-HT|NaZ)-fla8#?gj^*>A-KBHt@on?*T)wgYSPQG@rbN=S{7JTUV0h?s~ zOgf6=`-G!`+X&m}D2{aO^;dx*gjuUD)ZE*@Ochz>%not7c&3=46X7Y~T*9NkIfVOw zvk4=Cj)a?lv*vXiyY!&c?ncIbwqlnKurt5$IpIR!$LQ{-ZW6k{1ayyi4jU=`>v9W~T5smNYha>p)$1+ z1%@0kbWo1UsH7%BfFq!yGB7iu%)r3R_uQA!es}LaB=vn?hxL2+?|T31UiW%tt!LJ= z41Qeex;0A28fHFUwf3FiWzKvhgt{Vu8kHG~&psd@+1Scm8Y zf4Yg(UhLXS-c!_DfnMM>v+}(UFSDCyKjqT8Qk?Db^+1ZV zT^*bsTxBl1HMNX0bGq<;0pB0K0I~8nQkH(UGVD^S?l@@;bfqca4;~Pu!$mQ zU5^r80j3gWE;xJrYYE*%-_upT;7m8s6~bqLmkAw#mk5Ufza#7cEFpZzV~6R)H%^*H z)>TDW8e7}#-PDDdyMsqw-x}g_VctpGlE9CTM7bsxOo`TpQOa#CYrCQ<%w|^1^2Eqm z-#MA~IA9hINTdUPa6X~s9SC<%C{`C@Tggs5+p#nFitU|f%T{)=S{7#8aj`6m_Oa2WN*Ctt3MY6*wF9Qz7OfT>?1onJ($(}N+tVR+q2H((D&N8>0yWEWIJwrBE|8vZc})? zGgH67ewy}bNm)0MILpzpi_$(UelE&GQSL!y3Cf`;+o9YG-Ca}SPwQCv>`ONcEU9*s zCPw4zGDJ_owtYqR%(B))Zow>TU6s92rO``c)riuU1X?~nFg9`$S0-pWA+ zsM$JVTc{J%4eAB;gD!(cLldBTp@-L%q~0*F^jW?ph9%WH>nYgQN@ULxD$V3cEY-88 zayCo#T(4$^+-+xcEZFuu+TTX|GibL(dq1@IN+~#_+Z7&v0eTf$1-%7rfIft_Lwn>> ze?RC@s2$WXH)OLW=DxGbi+Yb1$?lP&6lQ@OB==?ktbLTDm4o(gP_v|3-&`FFww+jQ zxXDsI(LN9DqtQMD?R}|zWL(KB)rN}W`SYN!LFYpkKo>y+p~29l&@kvqDEn_THp2VW zll}FSR69`w6Ry03#mAZ}LzIIiZ&Wj9sY9NQIZJm`8!5d`_0R^W8miUoaTocs`)P!Hg4{9KLdmS6d7ISC zDtb3h$DF15YD0}*pivW}b#_^!r%>7F(EcRa2T=R052$@?KDArdWNy?OS=i+!=m*ev z=w@gFbPIGVG!dEv{Sdkhx?O+%X?YqsaFxs|`g**YIZHG0bTw`w~t84%+fr$n%!lV z%1CzGB&f5)S7TrqwM)@1L%Sc^$D`ef+V>}v+^aEEQ<7~vON~9Lk7aqD zi$tCxuha>0d%0t?mC`~v$ZU(6JyZG>>hg}~_pPP&O=!@NaVxg?etu-!o#m?VCJ8W=q{%Kisd!$hEqZl3K5l1NXng+jgA9twXpmmyB5CRQc8|J zLMOF=PU;w))Xy6`qHAfbxs|fD#-eoD;$cy`Y^|{OsY#p%!bT|M3ziipD@!7ItZ=2!2JaX_f>Fz3&;H}9QU_y+>;PbLhfY`+{+%gmpyPVd*EL7 zz`g8&d)WhLYnIh=Zvx=n1i-xs;E(F>=bm8P6D%?4$0r!~vWLIA0h)UgK&Tt{CIGw% zz?hWo#xH+Re6*X$>0tQj{?qzwh{!9Cu20?n+E;IEf91gT;4@86mz_D$E}V7nJ@>ma zb5e6gAA4WC{D!a0E-kcZS%vn8h?5+0^YE9v3Apga-%WTU_f>FT1(ztyB?@zi!gvyL zS+-o3ZRfIV{f$3m+4>vrvMgJcQX6S%%`qBG`fK7=g}61`)RNOy>)CcIT-;tKHZ3={ zD@?{iIc@buD^v4vvA$kus!$qRb*46xhr~nXk?0Y7D9Oiuf0DO-&b1OlsJd;+IVG{h(kBde4)L7Qy%}~l+&IKrmR`aPw!IByhj@q6 zy<=KEqfAQA>~yuLRiVn2-)F`sm2C<$QOPxg1~SCT8wo3bD#C2wJ;J@fJA~0Aq=rup zF;|wyZQ6XD_ITVRoD8fX91Ofc*hIEkkL!e2fR%)qc2dJq8bw}Cn+dc>evNP$@G7Af z@Cu<5@DiaJu!OLl9J2BY4%yzTT8qc4@@Uh8e736nK=RqD)&t3Bs|o^=&sH@HNIqND zNZ=WV>ZM+vV0QwcMHUlV=={E~3hFsb2V8byA9Hoa(%d_SQRkPNdbGhhl~J-JHd`v?`l zy@XFuL*r)-*{j~Bi?gQ9c{p?c;l)p>sW+;?Cs4(JdKzUOP(yez*&+LI2#s=^HpeH^ zq1OqI;!{ge1ztq;6KW_#6(~m)rzNwIx`ook^~Yu^?MWo}tm+HG{=iRACHJgq2dcm= zsFIOZwZTT3y_iO6+(n!3)1ENkO2S47RhOa)3`BJ&RTrQNd=1qd4%w3hba5}y=DZ!$ z^c>;Ej|ius3Y>`QcB+m+75F5o+Z?i&Eum2?X>x+ zz(!QbG^@I8Ep>YqQ-n=;XcNgetAdBNKM)?;L^95*;GyjggoiefJhUq2q0Q!DiZ;{c z*ED_@@N>e(c&dJkDsVfhA5e8Os=#%qZgR+O3ZRRNqRn}msA)Oj#f^k-qY7M%Y8+Mh zr~?0v>IR2wCyeqUZI0hSO&)|t*Aq@f6*wN%byOXNDsTjH%SYpbFJks@}AcX6p~oT@*u`KhT~q;AO%_5mk#(1?Hj}P1SEv z1xitU-yu755lzvTv^np6YWkG$;(LUB zHjzxUDrTb1&c_rjr_H`Jei*PTVPiN|TP0Kl-Y0Afqv}0WfiPA$7v8aZy z>L;crE*dOup0q2;H9cstP%#Mnc7IlCp3oU^teMa*jJ zb}^AzZDT*71NuFS16I-j$Cngk?zpby#YT8_Y%>3AXK=?m*o1Db# zjXg?cGr!`xI%bz$ai)pcWl!E{VeZ<+8WD5uxkQn>*2dkQ*&EH#-jmv2Ur+5BXs<;3 zat(jDyC<`2LHTxID1QVP%C`qY`A>qOdM35p(Xn5=HJ>NB0!wt{t50%>qXIP?UF}9tQ)E+h&5kBL99UtVx2@mtaEHAh_%q1f>>8= zr1qI;{{rpbqkS3Lr@Bk}m9SnJv=rJ5wd_yzsnGe*2&e=qgO);@p_Ud&=kl7E3-%JU z99j*%3)Mnfpk4B*vk!D2)CTGR9Se2I59+6FV=h+<=s@UT=uoH?)COt`wS(G29iStj zj@sQXBMjCNVX%V`1{;qs*nG;4U5qf;NeF}e7}>FN(LNgOgAp~0_7=3Ssmb^h3Avv^ zKZovzegQoIJqSGn{Sx{W^lRv0Xlm3PCxpQcMHuX6%8p%IK-sbRHIyB@1Yxk52!maK z>{w^CTT=U~1ZqEn_M2#bSIb|BoLne>5g5w%2SfRb!BBnx7|IU>L-|4Ox2+Kdy9Hse zg_IpT24S!ggu$Li7;Lb+l08`_BRkfH+PiI~_IR|vg!Y4I|2~TM403XzsZbS^Hx+eg zDpUpKxuOnDg{q*uX(I+F)-mtyNa$qfEa>adAm}P6i?U^%A3^s+Gog9VD@?C%|0lcG z>N48ik|$O-R5hpe99wIYbG3J zpHTpx?7usp!<>2b(cxtD>`aPmhZ9vxrcrXsXFOhtY=;F-4x6eHHdQrTt&wn@y1{k2 z53bXT?l1nVOAO_V7@QHK;-|mo=gb{{ zWOGNIX;4Hjr@f2HSFZ^#c+jtG?XyLeEY~ z8a?CAu7|oW=Bq9GyLbF1;*a*)n}7OU6?gKXMcjnQf;xUF_FMiy&izt28N0ZJuI7y|GByuJCNXm1C^+H#Yj4 zu8B?drdDrpi?^x4-lPy4H|4Z7q?y{(_7`)+ElSgaUE(TJjndd`A#OK_4HYa0H^rnZ zI-I1u8+13QzV=Sg1MS^fU8{bkz4*JLq*ncY^4)sY*N*B_x* zEf?Fj?-2B8KIiQ#S#007L(s4J1gi$v8+HhWHh<-9>ZLXrLadtid5iZfEc5YTv3)VM zEC#a73aBK!HiN1agu8&(2z`K8&61v z>irhIK-sJa{{|Yx6`L8fM>n0Cju0LPenl7wJV59Q{0zO%Qtv+WKD$Ks&OCp%xtlga zuxAJ1XyAv0b;0p}CW2EK+~;5;@(S7?;uQ>g!C+7k(UfzTB= zlTb&2urV_Tj{_+@wk(ox;ok^nOj#1ye=eIMyIHh3mJYR}l-n{JAV%o}e2%Iubf}#t z;a#8yVfo}Gkq_svQK~4twhZaDRg_*^hV0O_?=lwMng^x7&)uPsA* zZPnCS5r;0&#Rbs#`<|gauL7qK&IC>-bOBBxbO5>#4g^k|6=8LrMro&5*o6~lPXll~ zVHMDs@B)xWcnau5cmz0(aNndQkq7DG?8ee&JngX?L--zWG~qkIQG~ugN5YqZPZK`N zM%jufqTt#xN7_?G!L?;WffQU@)&oevwPg<}t+tASYs+o{DY&-mDscF$h|xuKac5|A zpDpdl01hMk3}{2R4QNfc7HCDd0%$oaVpjo;vXC|x4y8SFfkOyq00$E~0|yb>0S6NH z0}dc;pSUE_15;!{n|CQe)~-KcIj|q$IiNY=37{F_SHQl6d)O$Bm?Da=Ekk^56~)(< zA-=YX;%mzgUt2}-wPlE}t)lqaGQ`(bQG9I~;%lqAvb*RsU7Q1rzpo4J83=rWunW+{ zl1j_86R5#RSPg6^yaa4}KEf)8Mma^B3k|gA2(XoKAFzdRD^O1u1Jn_Q0-FgJPFNCI z>P2_aL)v_q_Siijd=}V5I2L%H&<3a_>;u#gwv1mAd5T78Q+OnO%JI_aq{+2FoEp6_rqdhBtw+RD)w+LSa-Xxp}tR-{- z);u4vD~m?4qs@iYw5K2N24Ooz!Y))2HUO^^RspLBF90hEPdP7%48s&v(B@aP$L&GoNiH)dE(@^zag(A}JAo8nn|SOL`+&CEP7UzW=kBg{b4xzp z8TNsi&iq%5H8%89HUAD9tiZF8U1#UVioYvo*VS5EXy}-;PL3tH{9=3Jn>oM5BpDt} zlIGV<(kd_WE+f3w)I}=?`7u47KkP=!b?1y;QSwMHUe{!G)u6p7k3-oEU)= z!f3k(?cbq&DcYx^-4^ZrM;ZSD1WtFF)W1u|fMCcUgG^jh2d2d<&-=Hs5XS@~_+w7e2I`j?bo6z}CA1EK{ z3ta&9gT4h_2wfC)-ipk=JjnIS8!U0LoJ$BJu|BfZ6vv z%)WKx4Yq!lyuov(quq|$ne~>n2cZ3%+Ll7Um7#8nDiW{BYL7KUg}PnOldzX7>(U)r zVTSM=t65OTFDZwy)Km5v*+s^hZ)JAsTN94{78@Ne=QY@gS1e>F2CwU{(Vs5#K6B$n zu`pm+tur}akCUPH`Y$Q|Gy;2`HAJygZCPz7Mj%7&^wi!0Gu?PBQM|uac~2iX-FPa| z^l7c@luSg?PC>1 zrhY6Hw?&+pBITWSZ5^xVEBc7x8CU&S#W2w-hPkfIV-@2>ucsJqwChU7i`-IT_bk-U zC+}@I*>LriK(gWLOUY#$PBvV<1V}bq{d^$VaP^kJl3C4ro8A>z$z8mCBdYh_-@(uU zs3jZ-)DU(7stL98sJD@@8rbk*`+T>B?DH})GI?>s(+Eq+Y8!r-Py#$eI3Ktly}%Uo zlFc@JFFT>z@3N5tF!C+>kXL~>31KOeY?&=N>4Tzx4SY{SWgtCs*n*a?-t%SPTdm#(^uK4dNM8sQ3HDPh3ea+9O# z`pP?BMm)JDF*IA)&0)iU`%g95pMBW7v_0(Vv;L09zrQ>#qT1syi)yTdQ`hjtL0%}ryQ2zhqeHi1*aw9DfGQj5@%L$z zPzuPctf4&(l!{yV17RreGOCn{TUm@MFc(!y#I5`m)x8eUSAyR!9$%SGn-?e*xAIHE zxxi0RrBvL?-KYXTM3n+^D?dPWw?niUMv0}(BNUKZ8A0d_3`3Oyaw~&T1ujCB0&*+o zqY9j7BXxZpQ$zu|m4Bl>{ebR-TPYy7atf+I9;y_OTlqAqz~O9)Uc?kpKyKwA+S5R( zxRregLxEjUrBvL?R!VaX1>PrYphVotd#ENlM1K@SQ*?tiFHkCOWf|dI;CHA}DsJUj zRDq{arGVVZEL0O5q7{KO%2C=pLIJsz2ML{l$*595ZlwfOU?Qp%kXyMCRbZ^O)YTqS zL;<;#@6w)rKq28)3dpTof-3MWR4E|0@(omhbF8Ju2VsgRAh+^)+S5R(xRuihLxGb} zrBvL?ai{{HLX{G6D~F-F)*<@!#dL84X!8Q4;#T%1oC|ycRZ7LJ)Ki-4T%d;V0tMt& z-a$3iAv(dIM!8O#M<^h-vXsynco9_!$gM0y6(~oQ0&**5r~;2#NnPs?&_bht+{!O# zPe0%%gj*>fw{i!nz%8g!KyKv*RDmKZ>GA6{N+<>7R<5Ky4U~#oxs)&z7>FvR;#Mv| z75Eyel!#mT3aalqL=Rp_7xx@(UZ7Om%4vjiffG@sRNTrjr~;ovl>%}rtx;X!5bgCA zjnbbsk5E8vWlut9ppi0Xk5E8vWiz2Oun|=X$gRAMD)73c)b%)~hyrpezo$L@faeLf zQb2BHKB~Zzs8T>~ z1*>j0<>n^g00$f}n+|A@R5GhB>n;jA_v0qHP&9g;m57;i&zs4Um}9Z0 zayD};u2-`(+-+xcEIju-+TTX|GibL(dq1@IN+~#_+Z7&v0eTf$1-%7rfIft_Lwn>> ze?RC@s2$WXH)OLWhNa=YsHZgCks{`JH6JARW{$-^%F)cRxIxVfvc9=GW{{m&ZD8TK zAESL9+DD^(2-^En`^dPGSE>!n(>4$K8gxE%0dx^G5E=|!3JrsjP>Zn@{c5HJKarMi!*G3Hkvv9=aKt z0Nn!J3QdG2K|h3UgKpQKe_Ec#!k7mseOS73yqeiZGxBxJZTeP?fw@g5YGWQcyX?_3 zx2g495i_TrABFb8)P4o+TC|JM{+!nL?;_^^6poRH%N^$rQMxJzxouW6|EFVtj@d;e zHHO=MfpfJn%-?rN&+MZ7H_$!~?L(@KrZ zMzY%`L7mNvt_3>g3I49e(C8Pq6zwv!`=Nb2+O4R4e?rN<8UtLq?JUIlq&}8e6c>p+ zMP8{B6+Q4l>)KX3vyD3NxqI z8t(c9?$EZgHLB3ZvPlXSd9r(NvOI+)G21BF`foz}TD1QS?O&k%3fh;7B*TMzeIZ}+Er+e5amR9u{_&-D3BrXdtk4Qx>Zatk;DV@|2I;jOT{4oswv&N2uUs`K! zrEIOq?CRO#sYrat)>>#$D_d)_pmw&_Dl%db;+umI-+$BIaZT-P9kBy+%zVqwVHxxh zschM?@!7ItQ|OTvC%FA3wm5AOTmUSG+*zLK-ba`xiK_Dh@mE3|6UEwM2r zr+u}lR&BhMV!WSZ((lSKTr)jXnu>CaSNx4v#D)o`hn}W9e`E7Cu~E0aNj=(RV4Z0O z|F#OHu{up`3TLsoN>h``jb|t8KYNq%uIApv>7wavi#FN6tABM<%DejY{l(u`drxok z-ITIgpU_`?wc5%q_G)$b^tOeY#CJ4%`%k z?OpYi6lq(nauZ9xt;;EiEtWoExO0f-l(Pm||&fL)jtT;dJkqR{JPZ ziD!1YTGYBEBEY|enJk;PG9zq&zn(A#s3QyoHWMxcJ|vtAd_XwEqCDo}m9g3BN$)Wm zr(wq-UUs?#a0_8l6je8%3KXFlN!52z1qwH*OOYCXPKon-CIc4ewwgk8DSQxz;slXQuRwzfuExK&e_IgAJ1b+wqDFM zTeb`NwzCO+fQYWO0(w#vCfXR}&+Z~WZ4BaNU!aDnS+gSQzI(TLyvmx4vh&D3s~SLf zkvy}i-lzhfK$SeRDm{5U=K(c@7n2>b4~I+_SVc6=VUuH3!Y(*MO?Zt=yAkz-yMT3s zKEPV^5_+VYxrHC}4z`M@G%v53dWGFWiePr-*~{p14+GyJOaO)uE&~b(y?{XsHQOlg zHfBcHHcM`UbKLhD@M zt)As$_i>@Q?iP5qF?Khb>xGEBZJ;pOg^0VY0wV7A0uXVxr+{WO*GC9TRJr}*?ta8V zSNqJ0@X4i_evwSBre zA5X?wReyAoeOA>I-9RIGJ&%%oR@F>69@t2jrpir>#VH~4mQD#i+M{HiRl!F)9ta=p zQ8Le};G-Q6gpc+pnP)`-RuMmVrJNtHO1F|`*B@Yy5ua1^&0g_hU$Pajgz(x)swxO~ z0gDKIfO!n7o!CS#qGxnn_J>su$Fqk>cGUs)WhxfZN~s_`3@j&10A3?p2E0n>MVOOe z=62-(t+p@B%B${NX7`a9T1u#;{w*5r0-*w^AUq5_N0(7INSKOgdPB$%f0nvw`0lW(V1p$$#JR{iyJ3R&t0t0@?xhM zmPatV>eL#FbXDae*mg65ZLJV&I~hs1VMxMlKoYJ2Nw`yQ4xfLstyl8(#1O4A!Yjhv z>#ki%O@^NowoH~1`%S0tz&9DEfPNr(R9T`}EAx3x!HT&3kah@ z=10=?9bZyJ&fL!6j;Y^8@*dEro3b4r`@-(;^9wvq*JBDjp8u|rT}MoomI82@3-z%F z>zLdF-@KX=bhXp7l;tQhvaglCxAX1n!Y*&JZKGh{&V6O6B=vUAT z=n3c<=s74w-$urllb-8!Jbxw2z?GEscQ5Q#GW&SGh^5a;tOvN;R}C7xu5Q0y;NLW& zcfHQ{PEHDocVPLn&MuBo9^X0^cBke~&^&}SZ)dyb((a6LQRn+6dxymboM}48th7-c zCmaiVl#D)}fAU7lO^LO&drBp9($;o~`3uUW|%;urM%D({?92pC#X3ij03bw`sqc`Ds~Xu48bYk|ep8`QT*xm|eR^ z;edHKAej!hIs5oc)-WvT~t+gKOEKES-BgnfW@ zatb>O7k5v?c$XzCBX?n7v8GLxoxi)fr93kJ**rR6{i6f=(E+g$Ua7;9Q>q4KZ!Ai$ zZc#~gPjzQowHxa){Q|FRL=j%*!;?$G;^Xt0%AH+SMtNjA2KO%sVa`r8Pp9UfO|1ET zxpPJ&?Y6W?I+xd!;1~En(^ezdJ;OaG%aJADP6%U$S}M1p>`CRG1E}05pUT~})IF2R z?0*vMan27i*S6i0?4ISG^Q~jgfhB2S@h|5$9rg~Q-QO~?kIVddU6B|gm1S<}K!?^SpIszI|h*RjueMJrnEwPkEF``~8_nyxy# ze2M0v)chqiv)!t3v|CURv_RW-o5F5$PB`8kS`r=>zqX)huU}vw%Dz+%wxsfBC@)3X z58YHg$MzIp&nm6;LU-o954I{%hs9SHG-dk*zOQX-lvw*y`8LX33aPvf1^oL#TWk<+Uh(j`BP1 z^M_IEzQUj{wW3vCbDl|NCz?^%bivu>T9o{RV^7->*W>w1SURo5I@DcRIVf{$9lPo* zG`mu>mYQ2`XXnRK6Mwn;sNp3kVetctnhueBw(YLOdZoMgTgQVayP$j#<#(w(%8t5U zMY)v9?0@_S+VcnQLBNu6bKRmX^A6UlbeC@SFW{v%)Lsl{e=X~vWb`oq43|vc<>?9Az>|*{- zwsx5dHWCKd|4{sfe4%U@!+7Ql?eLyz>DWR#b{Gw~j6G$T`Ssry$yHjL&3vOB_BweJ zHFrYkA7(nA(nvYGxDJnAeJh>aH9Dbhsb2b!hCixiuGQ7J*n0Z#g>?$7gOp?~T>&*#2kE`7P7?5~|jTEW?{xaT~3&U2w)Tqsx~mk{^=W+50S1Vm;^ z-;uo4>%siLDc3B~*dM&QeBKNB9y@pLe7K9r|%`X?Yr%h*{Hk{#>Gk9_aPtM@U89ccs;qU87$Qf=q!)+%G zw=MrL+_u=8?)w|-{f&+O#%p2|+e#9*SeP0-+v`kv3vo+@zv-^h;}fyrevU~y!6Y>m z+u|8yJve&l8=4Pm7>cQa{wL_b`5%WdBe*JErZ6B+t9G zC9V1d598NKId^MAV%iqk=iI5aZ`HqPZ~DF{yfrI)jec~F_nOvX@dLvXU-C@l>LzBi z-ISBW5^YnA9_?cl;x>bZ`EXm*nG|p9(aPd&RUc8jtp~;1s#a0Ftw%G9w^gxtTZ`)^ zmT#+aOEEI9QksbQmkfpEft>)96Q)H|Rfa0?D5~#M^&qOirlJbNErr*nTL3@VsFEL~QNrJ$@wd|+H3ilhHWMPd*02uM5URe9 zDsUyLu&I7P82$Fy#^E2cDRSFLo3GO-ZW{>$$9Z9$hxSG%lxQfsTxPs6O7*1G^(+b_FnzxrOE{`_dV7%QAgznNT;e?sMVT2z6tqE5FEeT%-4k4V(MtOxs$sS0XX0#{Ug0Oxu zVLw6z(2Vdfun%DZuovMnU=KD$YiWvR(WYBB+A|W^g|HjYM3&83e`;ta%mW$-_XAtv zRO4f5lxW(_Zl*nczz2kG!25)@Knd0h^)~G>RK-X6Mo#Ti|Iz1H7?v!V2I?!ffETgnNNmgwcLy z8!II=MKaoao%XnWLpT{IB^(S)Cu}0Kt=mz;E5KC3M|NA9qOWK(f%aq{B3uSMK;v>HDfVCN{~xXY8C~+2 z&DKj?Ie;9l|GD))H@x=4bIOeG$g?Z%i~;x`*D&Zx47;ueMO$^u;rh!R#Q&oAz}8l~ z!?C}`BQdx%b zYLx9!?(IIRYe_E_g}Jtl1=Et*_IUo^nRC`JaGXZOa%?T5D96^!-Ja#M_Dr^5$(h}# zeLvdCYkNF@IohYAeMD4huVmJ%g7SJ33!$k{6_nQpb!aM71?BZc9h%yAL?$!phLhoz z1=D`REV+JxZ)rp;PZH8L*Mn7~uGy*E=oisMLi3QVISGTZW+C=8)b#{3vigIk9 zc28j$nS+wOSw3r@lF=-mbweG?v3&>a)6kxb_P?Wj4BCHm+75Cfv+N)*s2_A0G#Z)! z-3x`$c2G800j+@6#}$c~d-iz#8t4Y-2hc6h51~7tQBiY7B>Ts(^jgyMP;-0YInXW8^HB3AQHO4U zo`;${pbp*QFk;yUbu6ti8kzvz3q1_YhAN;H(0Zr=Y8Fq&+CrV;i{{j{usq)}S`o|h z-5Evkzh3Ss>@*#dOIS?u;F1vKppW9~Sp4s${3bSQLbOjq`#!XLqkS~mha~l2##WXA z3mpozgE~T;q0c~PKwp5)g}w=02!-=j#PWQPMp2%xkGnrxhP>nn6kuCoMFF;TEYEjO zK@-dK{jR2kg_$nZQo9W8erO+$b}MS%pHOtKriJCwHbU=1o1v{xBeZKR_4I`Hh4zOI zf?7g{)w&c#QJ(J-clrt^C8x1vXj9_Da*wyvvG`wRzh&{iQ)*jS{O>1P5sUvVLHpZi zpMv&b)INDDwSQI^^cC~J`UM__9)YGoGoYE!W6sX@c*rFzuXu6v@b^QV_YDG=XE_b3>dhqUd(LNpRcGRAS_IHY!wjRIv z&#$)KhhN+`d@}RMGn5Lh%;wxfbcgMHI;g5H%>Hdn*PD8?c2Cngc zq0#K=b^VGj^zeCoS%t1)&Lp3gpO(wTr@vC(G{5-y#ka5R86x70xWCp{&HcSK_xIMF z{(I|RJ$0Oil`}X-a86&&x4`)pIN!pb-nYR0nJM>Yrre*I+Ht-G&bPoNk52p3Cy%n< zi2iv~*|^X_E_9H)z1i=rxrM+j1a2W*lLZOg3OV8CfV&U4WxzcOxF_N7=Sf&w9^qb* z7*e4Xx+RAeWi~{~>`G)@k(&_iX5bbA_hjInihr(u5j-jq**|ZY4SJy)hul2;qMJZ% zI%X$sK5S}BNr`Rqh^_O<(N|lT?rc)FJQTMZ#BHrso^6fxCZm1Z^%AlEZV}7B)r`(L z)ux*etAD5~2#;-TN%AyY@b)ySc9|l1c78>dR;=EVc&PS@)_Zl^WINMaMLFMTC#-IB zvNJ6x%DJQsU)|EcEfXmI52ifNH|}WU4k0DuDHbhkYN@X2w;`TuQuEen@zMVs4cmpbA`rD#hF?qfiAdM>XPX?BRV!+2@sGsCnyT+LkI z0A0?8D!-!(ulDc$oow!|&?h$xcz)3rrhX^F&SWXQR$ufv=lAjDF)Xe#dLv8j%$hxo zaNVrtMK>PoT$rVErOg=Ha~${{VI*)hp(}6&p>8VmhN2hv4tl39QSX`S&-N^#&C%Gi zn6T~{>VJ#y5Rgw80(=9#z`vt+$`bW67=^NNvyhD&P1(3v$i|JPY}_nl<3>|9ZWgj} zqbVCV3)#5Ql#QE(Y}|@jvzl*zM;GTpQMr4cr#%k9nS=v@&k=S3Vn8h=?C$lTYBg}i ztmgS8G|C0q^mC^@r-1m>Bf#lY-3NS@a4T>cVGIzb6*_rI_z!c~6xmLtJ-)QZ_8G#L zfl~;d1x_X$3!Fq~19Tzm!$vtnqf}5dZWf|(D<~Q_3(>e06pfpOXxs{l#?3-BZUsf- zW+584f}(M=5RF?gc2;w6FKg_%z{6;K*6crDtgr zXWI08iuTw69SHjYpCoK|p$2=x2H*(7Dxe+V1(zk^D=|gGY4Zf_v9%@q3OI~#5734% z9%xPY9?**L9X5(Drf4W_zDav3h7i6098CBOa1fy*a3JAO-~hrNKnr#k<F>l11T3b>k^Q1akI_c5_96@g_9R>g>_Ipe z*qv|&up6QC#3kWj5|#to3C~Sf60Y^4yU0MB z$7oMQE8ziP3*kUF|fz$(J4z)Hdb zV8!#zw`Fv38ML|g2io%)u$*uku#9jm@EYL?U@2h$@apr;^N-Oeb7|9$l5w+U0Iv`_ z11}TW0WT5u1Aa%?&ZEOh7)F_TT{L*EyuLN0+CRq>R9D5)aE1BV%*$FHAIZX6Gl!}R znQeChYjC*`eA2cg@Z+i|*W`jJ71}TsFWX#;1J2@rZFE4kqigbk2U|n5nSLvO++;zi zok5Dk4GC4V4=`nQYJi_UH(1Y3|8A0PO*A|6&YjGo!(Oqy6K&bb2Gb_db#{KNz;D@g zNsKHJw`0yaITj`2hFtwECh4~E(ImC~s!5`t%HA5^t|BpW88Kz4oKGlO*yN1UIu=(s zP}5#5DeF$<`CX{I5M>*bd!ifV7?d3}dwPqQlXgpYxdpSdbyfCambSHOX4w7ew2nD& z`8N#AusdE8!wkFDdNS;qqrE5EyHR@{+V7%0>PF@Wz43u_hCTF2r~~vV=t$_(P)Fz} z=xFE|=ve4D{rSG~B)Q|p9?IFuL08tPnFDvl869)rp1fgThTX-Q7-raY(UW1B)>~&{AkK)UrR- zr$XmLBcKwf3|b0phFV&roXgWOE9sqT1GADgYhsv{RHP^8sfUO;Pq*01C&(RdTPUrR zgSvg7X3o<-`PAOKhT3~-seJ?5pGUic$FdL9{^ZalO@Qu&9)@N^70?Q3J=6d-i>IS( zp-%B7b7~CCN;*ax!>pt`_2fMD68V!uSDr==T_v-UeiW}}R?H1}uSEN|`qc4qd%0tTmC`~vNRgo46dvDDpkr>_)*3^#U!Yjqu5r#d zt&e5Tl*J-Xkyq+Ov|CfV*A{AbE~NHhwUdkVv1HE`d6GR>o zTm!S*exhw>YqSLIZ=-z*+J{m5n+0awa z9OxPCp5>w(vggYE$)2m6K=xeqF0$w96lBjeFq`Q`Z97||cl5Dj&qe!mwA)d89@^h2 z(j^@K;-5@OGh}SLG{~!%WuiU~GHWM`lTEFeaFoRp7Wlt~@Y^gl%24r&ouNhJj5Xsb z65nhqc$4CC6ArU9SFM%Le>k8cp3K2!rOvs_(f2F+n!R;( z#yR&rZbfAgf1oD^_fI|dPyJuwpZYAB9ru9z%^#55J7~E7^5Xu>i+iwe4;HuI*Gu=< zt3FvUhR|(9MIwjXJp7`YpvCkIq_9nyEg=lq7CH zl+$*|)a-B6dYbZ>7x$XjnDm)3s6}aduuI&o^KYwA8mrU9rf{*LUdaZs-JkKyqG91v z5(}?JO}W1GBY4D+92ysY=DJzVIzRXxmeO6=0M%laeQ*+JT~RwW|s zcUImp+A^z>80`%!?^x{}tCCo)#>!i))mxQ_UDgD4Dd@hr-;j}G=KuZtr)4u;HU#!5 z7_!+pUu-OYzU(poFEg%rnS<;*;b-N~XT}AaU9kMvd5YiL|Fw`+mRn#s-qSigF2VUN zVRfLHmEWV1Yf9(0+h3fRUJj?!m z(}aLT&pC_DHaQQMEicOr_^+U_3@gud_RA8O9T!$hoGYbqezN6{S+w)Z3NninRwp`F zX2iM4mKRwzmgPQXQ75cUcCO5fiRd}Nwp%f~GSnS~3hw>qE9h;x-`3N5df<=Xm1 zJ!WyA^U2J(NSWrM<@NGhH@~P5Gqte#F^d*5%^6FNvfN&N`o(7U!s_+TqV%}OEtcnw z_R}vhOA%IoM%)CMrod8Omdn2I$1Lu37G=hT%QP1( z<>k5TD-JeeU-e@a?PZ!g%h>UV~onsn5s^kMPI zMdjC=xNCH&`23>sa;I6*f_Kv9H0(TbYLd*SwE63n%U`P+cAhyU z&GH$gE55zRrpoDXv>+l))wr|zl=P&}L0xh4A{(VseY7ApO{L!1MJ_$1ksvWmrQJDGE_WH5u8j*)$MGN z50j_7*|V*9o&O$$9<~c)S0e`%Zqbg7ayqEjyphk=FV2Y%l)Y zf6oJ_y|IGt(^6Y^`sPUMeKxiiOZ}ad&CV6Eg37d1!_N0|q-vj@#^PN6J$ffwvEXJ} zYTM2|InpMdjmF~3{(D-T{KNuPT59{w6FE|yPft^EjsKoDr@dmqgS7shc4ITe0$rN9 zY3Hq+N$ox|Q?cIP*W}bB7MRk^pOEx8J*f+S>Jy6Ii+#KBCa)3nN;mH!aXdY#2VeGt z!g{f9H{Pl>0*iF>u96o{PwK;;+C?#Dv2PDv<{E)jx_LK=;Pj+^d|4O8w8g%?cui{r z_UY!`C2^-G4dhSls(5L!Zy(;|wSv*<<~<|_PEQ)jmvvR}7yFv=R;?9GNH^~(DL6gJ zhCj8N;_b!0{dk#c1+MAly(G6zPqO37x+$U-`&#gt)(Sk+&3j9FoSEdnpW0pV!D8Qm zyvgeXv(wG{NF2{ha^%apD|RpT9n4#`PT-wx-dFO%nMq^$Q+p`BThlWuM% z5uBOi%$N00WG(i!;x(-k_@|qjmv##e+ZlgG>cW4qr=ocA9vhz9dcoW2ynd3e&Pbo( z7xq;Auy~IxFM7RTc{;DZ&0FNjL#SxD}lkJoxH&>?WJg2 zTyD?nwn4Bqea-+$zuZaB^XK04|{&2rv+?Y6lhIlyKLFJYtLa=LJsg z1j90fBPA>HrHTC80~H>DHZSqa;ssA-2%na0%a?BF2MDT<=p^Bq{HuHIk&4L9PLMO?J0_joy?V$>JpbejAmLLes5b`A33Zzngu%+T+pv?lF zSAt+^hR|7(Q6QD^Z(Ay^2im;FOGpr`%n**3Tq=-$%MZ3vGzQu%;wcgY?`H@nNVEk~ zIsdkm!Wd|?m}j;{ur5P5Q8KVln#&KiR`d_D3FLWg5p2#7x=36KrG@<4)`}59HcNO3 zTLjxPgp(w%7D|ix!8VHVK{mlW#TLQG8N$hu6@}7^{M$APk06`3d1hM$pJxcCNVXM9 zFY|+kDdq*)EaiD^6?~l`d`6N{C@tmR9;R3nWFzDyY!yf|gi|G#3Z*~rgKZUIK{jDL z#a6+$8A4ZyworPVf7@0O8)UPbXO<|)%@9tL3@nn?@Pmgd5`%13^1KoS#Tmk9B`!tM z+x*+Z70E$1@A4871(!2~(H4?G#6YY$AAyM8OZtmczYumYW0at+U)R;NHK@ zJqdqbPeLx_lnXiKLQXR{KL8hU%DLnI^zOJ?L4{V@5LF&=Qs}lwW;dZCaaU-OLdKPU zi#cg!@2^!9AFX<|$9I0)Og#t9eBtRnsUg==7Z^ky%}>Yd{M&P(7@roSoy(aWdr;hg*NkWUb3E?J$TOHg&_+7o&iTmmO_w~~|_kD2R2lsnr z?)S>v@0GdVV{*U8*+}jDbw-fx? z-%hZoB9Zxrk2OSvx^c+O!!NoCbd;K^+a)%sJ=+6J%&2+4NNH?Qiw)U1#-bc!g}+H( zp)@HxjaNL|jK@9Ot4mCV>NfQ*Q(JAgxXM(MV|-v>xvK2{ZBn+km^?gM_0QXT+3!y} zlC(d`$KL;5ty7HXNK*I%?GX?8l_FiMex|+Wz1q<+ZK+BA5449pVy_gbTlKT-#rJ9_ z#8mzt_TB|9$~tfV_k2RdFa-}Ik)f#^BJ(&Sly13(X=N&gN`guz2TdJNK{8Xr1DGjd z22`eG;sH%CQBVQL)Fd@^lyHPeQ8|t%=fnSVT`oOa&-3i2_Iv)V-LKca*!TUpuldg0 zU+x*#l{eRb=c_+9^n5<}noDJHgEu1T^2?+-wKmnDle*N=Au&>&>QWnAJ|?2Bx(wZ^ zZ&}w!cWNoRQ{S>icWNoRQ>R#?JGFG%=(^@bbyA*M8Z|m(<0SofXK95CHcD-v-jZkl zUL1mHCU67sB5*wM9J9oXVcM7ysif2EG{~R8ndQV|z~RKBz~;ncpiYhK0cME_!?Yd+ zSY-eY<8h{JFhV&y~I$rhc%Dv2m74IY6r0mK)91BfU#)t8|wGLOrVfCeayqsqfT) zyXc|JLMN&|9cQx8iK^d6L?^0#3z08iJrSL#`lUp4qUz@n`w!E`evgZrg2O0uqUv8G zq7zmB0ui04dM6?}QS~-NbfW4XBR(@sYk3N*)Sz*666#U)1w_=N>a&QbN7a8%L_Mnh z5E1pL`W-~nqw1rcof@ze7pLll!%&=2p&nH~pNM)?{R|@NQS}pus7KY0Afg^sKS)+t z%`JKohqgGAWdrO$L?^1gDG{Bh`nzZx&FTicMnos7{yeekFl|pAF75~pqtJ<}k0+uN zRsT5=ov8Yci0DMsFD9ZBRX>~9ahP^PI#!v4!%3(|)xSbSJ*s{P5%s8gdm`#l^(rFj zQT1(zs7KY;JTo=GnOkIz!<#4{RiPeLe~E~CRQ-2E)T8RZC88cxzm14`RQ*O-#gtAVk5bW4&&l%a2VAPXC5P>6II`k zh)z_!35}ys=tR|L6VZvPKSQh@sZ6FLN7b(;q8?QrOhi4Z z-j|4aRQ)8!sR0+zAga2H!x1>6LOrT}5E1pL`d&oTqv|^mQID!`Nkl!WzQSQ@z#*)X zg-%rcH3wNG3!SL?^F(x_>eGqnMAh#jq7zlWg@{g6{d(e!q1v7YaB+)q7==z${cIvS zQT0=Z=tR}OMnos7{skgBQT0y5oT1tc`>~1&hm%l`s&7L?J*vJ2jiZxLkE$;qq8?SB zMMOQS{(BHWWd#fDK@zUfgNjOGYq>+ zv{HB4KPO-MQS;L-p&xa{Ui70{dh4VgweRUL=|}bZR3-hW1q0R6k6JaG5BQl6IF1Ko ztyN{bzCgFP{E~hBq37iX!q+eBuf!(=$P^QAwqckw~#59}B?S^5LbG`pnZvsv`` zWZNE%5#P-CCB|nlKA7=tfpN{FFDBcTHqMx7urPZ+S6cVl94V1ry%ksIOU2&s;)Bw* z_f+6y>6)|9>m+{Vww_&^);&YZDe&mSP?Bat`zBefFN@awbO5-m* zq-~=UlWilKXShqv-I83X;=6mKL|XZ3ug;f(zQv5cz_<BKav?D3+#NO%efmdXcp3)RaC!$5cX zkbh{@(UL2PX|HF`FOr7H;)7DiH!kpsY*HUhQLw9B$LKO?AvMcbXt3DMcoyUDGM>cv zb-Or7?xY2Q&az2EG%<1~Sx1kS9#8X(o>Kd{JXgwPD^g3O zT(&_@g_O%SG9msx<1a97!+1Nyy*|`+&Z&^PS94R4+({n>O5LmeZ<-jnlb(#uklN43 zGQ6es^TS-Jd-Y8#k#^X@j9W9lhVj2M{#3WVp}A7P`gvN3)JwjRQy~SccBUY?lQslO zU#rzfjfdQLJ)#|@_OpG4rPO{hp3V4N#x;z`F#f8h<7O0{E6dWlp!HZoR76XX(8klc7j8K1(q6XRBh&s?SJYOIh3 z)itJSxs$#Nlm=C+X&M)~lb(&1!qsJ+GR&pFcvY@6sLnoCA`Pk<#y?~H4C6Bxe~$6a z;aiTCNQ3G)V}&%R?l4u$opdo!3Rm5HG%j-E^^caq)p1=iq(L=lb*?n1USnL#_#ws( zjL*{a=$av&rrpDGr2@5+u0$$O*BC40BkY8!TJEIlfs165=4evn#v2?hjj26Uh;L?m z0^_?Gzig_`v7hgwc1}=PXNHCQ>f~2&&C#!Y@UK5feWomvo9(z$7AYyVyy%r_nqR&$ zFTS8$Q=NWSuMO%}o3lWk(L7}KkOWoC@|6AZo4+zrJtqE}htV^8x(P$kFl0Ov^jAKv=8gpB^Ld)0re^*yLyLr5{)GV<(_hothX?PIVPkf8doCp`$qL^sNH4p zC_L^o7Wc+_du@|dhD)+&kx!_>Mn$F`f`y}q+E6MR#>-UW+v_V{> zj8DTSN(luyM+>raGA?L=jy#Ax!=yC`hdgl?_pD2IY;Qd@?AXijUNv2wuVJ3yI1XWe=45KzSP|9|g)M z;h*M{&?tZLk{^7l&{hYj7bUA)3}NzPdGePsW&D4>Cq45gkJA=}^?vWlis}LFI&}Ex zson34+fkEWQlW2O)jKpTGqFih*xa+nQ>)Kj>U;O-`%b_7D6IVKYJ5StUK>>Z!>9Lt zLiRslToK}{Gt}I4sjUi6G1QfB616rlq_)aXdp)DBLON4(U8+k1>TZYE-7ycT%Cwdu z)PIP#m8t$ASL$*cL!=?Ku2BA~rl_`{&N;&QC2M!<;nusHlYh_+SHxRULlyB>5pNao zRuOL%@m5?@MZEp9h_~ZKynXT?;;l!#BHsQ>n^qBT|Djg@ugdZKpDc#Gr?U`s*4@(# za&25g$hAW#*S3IM+n;i6Z^*U!rZ90&(!}k;aASmn8EzLivI%_Jm#E+NrBC}gecCtZ z)7sIewS<0a)f)QkNb0vQQNP{GcsAp68P^oMnZu{er+(X!K5ZBJv>oWvhEcyALH*Vi z`mI}g#;MbKXa-!`UC8%q85IQ846zs7hk&A3+ZY1Q;;x6r2@N1t{F zecJKRZ{6&m-}+F$9Y_5(iScWUYZ*UO9O($3wzU;}+8)$zyVIxbM4xsIecBV$Z>K}Q zjii3tx-;X{Z#OeOf$`nh@jmcr_0(_UsNa@Szcr&zyPEp#3F^1G)Nki9PW?8H`fVxo z+m*|8KWD?Iy+i$WA$(dZXZW-usox%>ep^EQwqY9d+a}a+n^3=9!uU|esox%J7v7IP zZ8!R~kI|>bDWpZ!@Xi&STt}aT~@zVtj;Vx&?gNVf1OY(WiBzPwPOR zHWEH)NiL#zfEQQCgXvOJ2U=Spxx8(Y5P;Z?L(hdMW1#peOg!Qw_Bm#>Z#w_ z^=6#ZMxVAlecF%c)1IP!`!@C4eT=&^PW`r-CG^{m z89$TmHIF`R5`0>>$?$1?sNY_oep^NTw&^kGx6P>EE@eEGaZkpn-(Ii^A4H$_3Hr2a z>C>KoPa8@7wsl|lv|Fj)8mZsTXZ(4_zhL|<^;MbmqRJ&bn4fQyYw6$>}wHLVkCRpFQBfrSNSJxSj>W4?ogsOX? z9FH>LQSz%0GUMg9A|!bIPr>@yl05kqYvbf2HZy)F);oZue%G-6WgIHTvr#s_V1`$7 z_b8t9{>Jqi+l>qGB6L_~2wx7bCmb(t0WXr5_S^f=z*$>>W1kL#pPdCjcstKLxuknE1Lgp?cuK% zXusc=k?S=&fBRDw{sxQu!DmNwH!pGZ&iK*H?3nU-;-gmnU`=?`KTnizvGOg}KDwWE z%Ktb0=lcJqmG6i0{ZRhZRQXp^pCf-tqHD_BHHq@Y-y-1 zF?hR7oA6%noiPy|^gRXN4=x@P(NCZ2JZ-`U!TDn%#_D68Ypf5}6~#zJsdLRV?G%rS zb<-?MSC5_`SPl#(mH~ZkV#vo~I?fpKfcuEIfLn++f$NDkfJ=$Fz$YqDYo1tKSf%C_S;fPEGX=yez${`G@O$DP}(p6Ts!fW6Tndw!Sp!8LU!v5}`vllSup)7(mU2$>EdFY2Tx?{+{16)p=4jfMO1U4s5W;Pw!H)V@DVwC_Mj>VY) z#MgjjX$ZXnOeBr~1`uClmiPj*scW(-p1~Gra2T74hYkdK6Q2Y2Bt8SoJ&J%Gv&5&F zJ-Q}qJy+?DLrb2q23|aZd>7ybq9t%Vu|2ayb7l`CYbIONh<6bWo8ioGVk2O4Vy&y7 zE(Q5Y;BsOqa5(X{*`-O^0Ae<<>=3e9%n~m#duUD81V?Pq zk2vhfGd}=x4&p9 zwmmCo`>=v`GAn4mX9aB%D`*pptf1Agvvv(1&>auZx=PRLO;tvYcjDB49Il-4K-*n0pUf*Z+qAyF0R2j&*=s=Yy}6HWxj# zHM5QAw&k8Z;99OTHZRhBjl~{%lWOj5Qu#w|($5EMmo*5t6|Xfhts`q?8^e5ENb~hE zn6EzUpdCx|)eM?!1U1?I3^zx(iea1L$QF=YSJ91~PB(TKW!G(#UEL_VI?#=^Vl^$@ z*j036r_+s1W&9@Nfmh?Zv1^uYtX&Iq&Gx4o+lR8Nif-&$y0NZwV|y@8H`cBd<8))U zzpsm?yQ#>UZ& z)zXbU$#?S=*C{B8{7CpRMWPk8{2|zY%{vCA23cgc9l)HnUr0JP>^QoyNsLcR_j;4E z>rQsf(v59xhpyQkbYr_ycHKxf_6NGL?=YUgINjLR4vf={-MmtFD+gV(0hC=2vTK%Z zY#iO#Qo6Bbt58kbhHh*ty0Oa{Ph*^JY@AcKIh0*rI94KEvrkcWT}RpVB)ev(qic2~ z-PmJvV@nuc%=q6J|B~@@jK8Ca=!~vecgn8&D7#Lk>>5wm^%A>geNj!DPd7G#Zfqvw zcNt&A_z_d&EXb~_=*CW`8#|1$YcI;Kk#u8E(~Z5sYFfIntLVl~ryHBf_zYdi%ET{! zrEjScJ}td;Tw$wt4&T2kqX7oH_n{WL-s2e$%QEKfLAVV*BMLU054S~`bSu>Qv5;1A5?Dd*@`P&Fi?3TC~pLLBPfcevImOdsk{vo#Z&nt{BwO0D$1>* z+^X;MCZKX#wV|#$#-(OTopC@&h0(FDvdUvo$;GyV1rkgD8}ikhND73ZvL ztIN!Di#*U{>zd!}xkvvXznb}6Gxa1N6~T9(mns4Rck+9S`{B{*n% zc+nlxA?HOu=)x<@M_9Y$87+gWzYaItF(otslERdK9cT}9E}m_2rfohy5tY?c49;1TEYUMD-}&k;Q8 zT-xho@BA?_wdPmq$}$}C)iJftChgu8bYhQL)v;K+q}`6hWZZyzu0 z`iX3jdKnJK;GyadfPINvr9JUIOiQqedJ*s(F$lQV`*`84jj~G8d>pRCnWO;VOyWGC zD{&664{^>X|sRnK%Qugy;?QB2EJiBYFY56Q?Z8cZkF) zRnzcVCgV&daUw8@_$F`@(G9qeI1cDed;_SScD!&TE>8VA4%_35`c+`bRNyG!IpRp* zUgFEZkBNT=&Y60=urs&lMI5@~Owur5AL0u@GolMH&kKPez>`EZa6563Y*834ZV3+6 z18~NR*bg|2*caHH=mcy`bOahb@i2SYqLo-B35Q9&ab^?oY2ZR)51>2oDWID8B(Mwd z31HQfHTLM=Sn*(POo5~g~#>EZ8p}H~7bSE|hHYV0>5j1)rPy%cL@ zpMiaeIl%VBtH6>;#|sx=m82{jo}7fI$^>pFUIMNpUIfl0o(H-T&jI@o&n(R!H5V7x z7>DW%oH0%Weh*9~o&;_teg|Aa)B(MS>9R$$v5FdpNk?&}3-K_p${o{WU?%Y(Fo}2o zxQVzQxX}H0;ZG6Rq68d{!5Q^8z`n#i!1l!5z>+r+*a&LaSPCuxEa`o_&Lyw7z50kAP>v6K0Lqfd5E^vqhmteLLu!rpEPQ;q10$Q(7Sb{ zcRQWlZ5F-TOnSGa^lp8Q^8p{>0ZF#%=q-1`yiI%E_x$59{hJ5EE#Jf+^71VbvA1sj z11<2&^G+|9mwz+7OO9F{{mbw{@Z~Ny)Ez5jF;h6M^TF5hJRsKh38$v=VNNu=LPMm_4)`*hA}Tu#g_wE&id>Ln|h)^w3Jnt@O~|v3HUl+Di1$ zItHVM7V*Xz5|7kVp zMd_iHK1J!FmBvKrp_TY^jCW?d4dcxazt=-6HGBKbY zq0M#olpfj=`*`W0l}!@YR;03y5O}4BR^rk_D{<+emALfKN}N5kMZxHyEn^SuLW70$ z&>r#+l^)tFiD_#n@ScFc>ogq#uk_F&-kI?>=)#pAT8T>!t;Fy3(8^Uy4{eaE^w63o z+e!~@bAyHS&@S;0l^)t7iD}Y9d)3`jdT6B*QhI15E!t;EH(mADh*?4gym zTIrz`fp;y8T&EK-a;1mXAa_#V=py#e1{f@)hgJk$>7kXl^w3KD3&zhfK7(=g&@T56 zl^$9Vc%_F{KFg$sR_-L}p_NUN9$LAR`lH-ddT7lJ7Scm2ap|Fzxb)CUTzY6F&K}wr z_RxyJD?PNa{-M%Cdrp463yoaqp_MyHdT3>n=0f0=9$Lgz@O`C+R^rk_D{<+e{m%Wi zUK`}2c1}=PXNHCQ>T-A6KKR%DQmrb>WTbjb#3I>_JLN~bONuQo%8z-^FJGA_KS`~r zPQNS9*sV5afjp~u$m}5rs+i>|`@8+?ht^1rQ!O_`rl~@140!_iuFJE@9grDT zcT%T%yg};^o@r2`eRXi%itA7GzJ0QbdrqclwY{mJ{8&V}Hpt60NSz#So2)YEEev7) zKB4})Tv<6jQ$e zF?bqhtPqT+uEL8b8yC;-=Q1(H2GyLNN@)3VClxw>h z!i<@-gVbUEI#a>GWR)(_s0@`2QEmq1ji7uoD4&Xt)Sn1D{dIQ>_9v?@CK@ZX6AfW` znX`k{%23%5#GXb~ zKgZg+?lu=}R`pY?-OAnJ!6){#s`@duZb?~P&0e#r)3GV19P<0b?8!fxZ0dE=A>WKx z1k8)Zv;cULmRv!&ew2e7|{sqPRs^2CK`aoC}gvMsl-g1 zq+MF9vI&RDdYoBEya043{s>eP&jPy;e*ji}iie#BW_I0E^<3;OS^pFc_u`E63E;=X zz z4$c%tA#@q&M?A|ZU%&}YiAOozgzN!MH`yeen~sayjlIQr;#>EW?W?v4tH+A87w)BU||@hw>S;6 zN&46eTXYqNr&r^Q9yp5l1E;GnJ+LL6#E&2dw zhT=@&65wEB97QKTrU*JsP4B#g~KjKLOzbGg>~`C^ei z*M%;vHU}NHKIwF6S5m(1MEQ0A-?_P(D6RPtg>JOa? z9teB+`V_fkLjQCre4qvDpEtAXise19x*yZc9M(zhwxq-J#wwMjquh1wkUYRUT3rh!+IY%es( zSSS+W)%iscZcQ{rSr(h#%RS`o*`fGgfNOrE=rX_1X@^U$*vGeFxFN#M47bqqXp|uW zGX6N@tr%|_KH*4-XqRrqno8)l;bLYs%@8MZ zKF4oyY=!Yl%`o1`@!K4CW}4$~Ii6MQ))mU8Pg^LP+MD_UP-=W2Hto~1;caYQW&1!A1%3*nD!3i ziHuKV+<|e+ZY4`|b2*H%=( zJH_xq7t#xLh8HTX?Jl~uVg-t8D~6!Bwqgr5p++jMt;ClwK9q4A#_8IM7b>o;c%kCj ziWeG6FZ4xtq2k*5)3qHy*H$!Aacw0ouC2tywUzisjMKH1P5nHrM0UToNmCVJ<*Jb# zziyEs<0BkD%ke81i)t(5Y>o$WJep~a8>V}`z&hB^VUxPO2AeehX~?G$k7oo(h3g8) zr~T3)pGLE6_BF=0F+P^@-i&t$pOIc7n>x{SuskAiyvC8Ht?YOx$5T0;fbp`988Y6+ zu@A@YOj~079mjJ`Zj+#_<~u-Hjj)8Wnz<6n>fLlGtF<{$Ru@xQJp#kkZ3^ShFm8po zJ1c7Y9rFq^9TZu0s%Dqm=$$g;yYV2N z^`~Yl-|0@e68Rn0=XA+sjvOmkL&s<@ih5xE#lw(pQ`AF;Sjl zMaq8Z&i&sWP~Rfdhl}((A@=^8lG^%yO9y1(k?k>5Gst6LzyZ6GuL{>Jqc zIEj2x?8*i1g&$uZHz*UYFN;sZz4~pmehH=NNa-$BN_^`pxa;4g%Ddw~sbk73(+_MCO8OKo9BNOeI>NL{9(=9)|0T|?b%ouM|{qxPmW+?Gj) zt$AH(iuLKbMHRbTYD+iNIM!Cirqrbt$$z<27aD4dyl#5kF`dy_R_ZGURtDZRZE;RM ztGifP{*txfmQfuXvi#>!!6VJu-U2g|}j= z)=hh?G+w4tVk+;16xXJNXr~w|?rgZUH2B(>h)MbZ&eH_5fn`I0S-?c%C13#YJhQ|z z%xb2V4I1qs`BONI)!?DWf!@S4U{B&K8Cd0e98S{U%poG5bq8@UrcuN}z}3Wo zz+fU@mT%vw0hdS07ODE<%mkcK^#hI|J_j5`>d>z zv7zd0G)`pfi^@F@G)XBupzN% zsPK_&qTnc!-z>+(Enrj3V9yu6CFj@C7bTbpwa_SAk852H;(LOs@d15wn2ji9Z3;iJ3#Sxe2(q zcpOGu#+lEFmw+D;^}xl%i@@2$3&1JF^Fy`c_hFS+a5(8loEbtq2ec=i1*(W=fNh9B z0Bh{2d7V-Nv>MltpV}Gl z${%8_*DpVBi2p$rTN&~buJeJ{vN#tk*L6p?x-9CUH>py!ebFDWNoDso>FUF6QeK2r zBTYmDbj!NGm%GK?vrX~Axvu#Qqc`}4z9==b_VFzPCm*mK*D%91G0j05XCvI2X&kdG zG8tAe+!*1dhrOOe$*hwFN@gQlYIcb@+7ux1$kynj716ef2&L?#{haY18TVm)0OMUX z9h;+McGD7+%$`4jlG(zmD4Cs)lG*qnD4BJ$Mkj5)IXY=Owm`fKJ83(xleR58X+w)6 zpG3**s>e_=d%XopW|w?`lGza~nSGiivk~Z|bsC9I+Q=S^w`aU1;*Hr!8_M|Kv*TY! z$*jH?N@ndkpky|o6-s7jE=9@gp`$37^<*dQURu>}GH%bfCF5p@=PlI*v1Ilz#APvU z#dEfDg1CIj3gYsz*6^IiEQ9Cl#7^2z8UKOt8I1R1yffo%!l$J|K~Bhqf}BMK*`EsX zKq|;xsUWwdg3M0ZEsS4aynyil#xGK?S)T z6=ZhOc48-OJ9g5xLMN@$vcNbSD#-1qAb$u2`4yJT_GZbfB}!)FS5ZNJi3)Oe#veo6 zjGeTr8Gkv)>0{WzRxiU29%&0Z_?QLk;5nfvnHASoWa6ppqjE0U_nwh|ZFR^nqB@69-6Td{-p z(+-{tJJ@MA?BGZ@$i%DcAQMmTh)&vJ?4%XjR^ocb{TScR_(aAXx@}(x&o_&n?`?X% z3+eeL!}Ha9!1J|x2A*$!D`>%e*h#BmC#?lLX;(6SEbx>Q6x?Q=px}N?1y^)iF?Q`( zG8+kF*Xes0yH?&Xc2D(XyffnM*-0zDt;9z%{*}q?9hA)a^h3$)h0Z9MUAP)0v+2iB zGCQ4}wENIW8=r|zS~ow&2Qc0R@hZlf>b#Dcs^!+m30x$bG+UD*A7O){J>(;-YlfqI zgoWjb!YRV7h@GDqE5zYE%lIwE=P|BkT$SN?W$mwov3YtNFSqX{a_IfwPhyk)TaETU zyxV$Nwgcte4v<0b|4Y3~ynrq%W!Y|6>8=>{+BhAw(jnAJDbt2iVf{_?mnFo|&WxYT z2U_wmOBuhfas5vJuZr)#ae?bM<=-g2|HcLWhb9{*e-vcK@1%Ci3#!DX{GMU`%c$R* z`pZ&`!%Rg#Rc?j^FXfH!AM-{~6gx$+`_m|P%C|!KRw&-L;(hZEB~yGsxn3LOqjpYE zS!afY`|9N1;Jq^cMB@tUqlMF6JeR+}(T(kqiyD4+waeD?vlb0cb6!91+rj-C9;ozGmfrB4M6Ke~9Iue$#CDJg%G;NO~+U(xcP^ebAFn^w7Ll}|9Y zKjm**Q+`QBrt(WF{<6}#B5C}0Nkh3A6n*Pa)wdM&LQyXi_2Ms}Ug#CgO!=()%YW7> z|2(4n^N8}#Bg#LIDF0@!d=mb-J_&dE>Skt|E^7}as1#K8;dk8xRdtucQmW2{)Mogn z6p9)rEjou)65*-_kHDD#;)}omM0%}dP(_1> zV46szks1J;^fye0JU2CxooimlCPO&Lj38rj7j`7dHimQB-1IBT|Wdfk-9RiAW{Z zhDas$G2%1Bw3er^N)3fm+OY*h+Ob(g+OgjgX~!NS(vIChq#Yae?9_m*bS!(}T0?P0 zMLTvrk#_71BJJ1-MB1?D~mDqS9mDtaTRAN6OQi)wmq!K%u*m0P4LpoNOgu_X+V_zZCjvYdz z9V;Dp5}+NcBGQg+L!=#BBO0nRx5ykX_$J*`+Oe02v}3;`(vJO>NIP~Lk#_7xS;dxH zL?w19&SX)Eokye+JB>&sb}W%f?2AMyvHggRsCnD|GmPFdI6{4XYqJ~N(_8Q$&DzWE@RASSKRAToLsl;v}Qi)wp zyfIYU^8hYxF%F}s#LgyCiJd~E68jpFO6&_nDzQ$)oT1tc`>~1&hm&Z>wjt7vt)XyA zJGOvGJ2s0*JNA1b?bt*1Qv>|CMVZ*5Z8)Q%9lMc8J2sR^J9a*icI*ry?br#j%2;j@ zmDm??CW}gJKO&V_TOyU%4n!)kO^Hxq^><;%mJGOhFvTXfAh2WYxm^E0Y5lDAA5uS? z{YTc%X8#fOv(|rP{p`bT(!KiG?1!wMotT)`?rMA!D4+U98vmaxX1Go^+Cwn4vV>rI$_#>Ovt|%X+b@BS`q7b+ z(}`)P7=N4bevEfvyba^c!_$vIFug97yY8OzD441tn7Va?VCrKI!Sq6N2&Pp_;G;IB zkJ^kr>QcssG5(}xYYPabULQa(9dr~$x=&CrT}#3AWeBE`wh&BPw})W5wI$+4#^*Es zJmX(5{(4~C;}A@>tst1XE=9-fj-&8V-=tu=i-M^e1XH~oeAKv(jGG~TlJNq@7i2qm z1V#tDwzi7)mW^4KD_yl8X3sCRck<%66UJi2$~cl^Z;m@-{4vL0aXgdbF5ONpgT?Ag zi}e64Rs$^7_*t-6^#ftC#&w0os%;C4)s@og4#qDtUc`7{;K**!QeQHMmb!O2EY|E) z6zSe!k#04Lbe%$Av06P3i*@7^j8l5;OX<~y7VG1bUR#^ohCxfsw}F=0@iAzrn?8ia zI+hlz11;80uvp_)!(w$C&UkmmDZO@~#kxMttA|NCUPX$Pg|=FtwKYBs)vpd5kHok~ zdyLO;+@Ir7Oml4F*qP&3H60(%5cjpq3KZ#fp!*s|_jLr_*DZ8k$IyN41^2aM2gElq zK9=#Fj88B{jzeqfu?}c$ou7`5*SFBxDoU)3U+ReQMvmX+_)Vrc{+8oe98YB0GWnNMyG5TvsSZV%$^zuV|H0r7_(!-AlN$T zAlQCN!S)9TwoW%0pU3!M##M-)3(M{4|6OW=@t^-=+-++vKY*PYp^+cPZtH$~cR~3; zAB2A2i7@djO;a*WrmG$ku}<^4oCWfO-I{XCi&*1G%KmQh6W-x<*NkmjHE8B(wQP3M za|PwyJ2(D(w@1$GA(>%Crv1^ry0XBD841RPnw{R6rXk%f?ky!VKA z85bm|VtjRSQfAqBn4_OmvRaDdYFvp|kS^7( zfM0&u$QZotV7!nrE|-f}|9ghNtng3Y6$R_RH_GndU8>v<%Kh+&-vr7(RQJ>P>h=}vPf$r&&}Hq!%&?i6%23%5?NxO7ZJ zQ~hw!X%`3I9ur}!Z!WkbxNuCwi+Y`ywM&CaY}5*=`2iJa60RF zq1mUSWQ+bFr*`fMhy3oFaP9H9;KsyVK;tKv?f|9|w*xm5w+SBfv@9L+ipO-z(td3& z1&=(}ORi)FUg(;wan|kiOM_qJH<5bm{gln(6VCxmfEtB@`|)~TVGNQ!7KXMTV9bmaI0+d9HJIDhBz14m-sHQJ#m&`ahgN^fsM(h z9P$%7?NR$~l^bCB_wt?8UKlAiz;NPOU~}SWpzag`CxFX|#{{!Q4R6yoSiUwD)A#U5 zxgSq&z>5y#izd$6xTm)1Q`#xxPu`iPoigAgmWjtQWha0;fQiIyz|_mTQ_ zzUXPVz*m7KQ-Py^=ZGVLdxkEdQuO=*^S) zM+-m1x+}1lAMt%);c}a#k|~2__cYkD*i>xfK%h7AIbcuXGr-)V2-qDP`R!mllt8>w?7ZlsP@d(=&NBOS(b zHN$faCpH2$C)TQWG>1TH6*3TF3B+P%r6^4X-_D?N@EUfm$yxhPt-@o-$DXw`mB zq*eP7kyhfqi*KtZ*#p&Cae!wZPda9*%2sY`o z%X=lYi$6^?PAK1;;j+6#`c!B1&&dz$crHJU-Lfm#Eo;ec*}m+S^I0 z%m*B=uVH+E6puSl&c zt}$`y{oqd)C0xS0%MEqMO4$XI@c}OEpY|iNP_2&M65gdq{ww_(_dUi5Ba>|J2h9`H zzC=50&83%W!p5e^H>rC611!U*^vuV0JNp$D>8tR1!hiKrrq})6>z(I%szG#p>FmtJ zw2so+8sXMhvn$JD;d{CJiY!*jS9j0$#Rs*nagCxc`h`w9TyohyzIEW_B-@0B8S;?9 zc!->C-2|sY4|{bl)_iL_u2IIv?w&n?5yU>g3q(g?$HoZsWtKPqINC4t=HZf`Bdp9d z7aC{mb@y~B)+E_>Yyunx97h}uj3BxKFAzsF+f=f*^CPS}XfpglCmit_Pwm$Xj$(+{h(Zrg38^vt?@ z&M7`P&o!=Xv}jvdqWId!YXYx`=Y=L(She!ClwVmkYug`{v$o^-)jw-(;v&cRzXgtz zp4ml?PA`eNYuJBE4r&KDpl`Nr^~tBCYBt39?8|b>!O4|h(Kzei^a{U@;@8pq`fA{n zZ*6nVMdA$zjpElW{3>p(O!o0BDrW;i)A{v#em&2xS^RnpU%y+Jm=-7w za73h|rqnE>d1Bi8BJW1%pV3(VWYI@DX5Bq?#X+-N?K(x9`-R#|-K>4Z)uc2u&L*XO z#;;%U>sNSKr1Z}IWRbc|w@2LG2z`Hzb(TfmvfRz?p5oTdb+wbKS-;TLQZH*C|8Ai3 z0jRaZ4Ym>dn!v9Y_*EXZM5<`rJ#QE5HJX^8EVhe%>+V@r9Q3ZMoprR_GX)~z+Q&=d z?6wtx`gpm}Zp|zbw!>$+lFy+r+dd#kGyl z|4kEX2RkMj{LlKtKtDeH?jcHyzO=23_NzJTZ z=nj!`?c*Z?#X2k%`BwUU#m|khINwmmE}B$5w6INu$qO_?Zb4- z#F33~6OA^@LM`g7yXSYN>bb5ygQ8>nLi>qDYagE*xafdwN3mrS)3!1!60N*ugm0g- zcPa>6w8!>W&7gV3i7M$#QPrXtF)r1hwUchya(0Nc4M9=hg>3(?*7@oNSGQS@?%9;j zUr$iw6%TmhgghwWOF0i=RVsseU%|pF0!GL(Ig=!`J#d3O?)QzaiMc6HT>r}6sl6T~ z%al%%4%Ev5;&;Ad5M6Y8@CNBX{TD+qSltSe(*CRB@faT48IPSAgvXk&;J+No?_T)l z7qX&=)wZ%gpJchraa^U`L7s<8<>1NE@g)BggpbO@`m0&M2bkk!-nG)OkTrUhi+qm$rX4_ySVOnF7~T9Hs-$?LFPg0 z{jV?bGIwItdEDMSEINtLRf#n(;;9ZKyY3X%R_=y}>W0D}zPQ;Qrhzk0J~99KV(K^f zzM4%l@IAV(NBsBKz2G;u%0n*q;18ESVjq4-{`>Xa{|gG{z5I~($fNY|ILF#=fAuDQ zsCUo9?95$$Qa#N3?jhf{f7XZlD2+U7rG!N(VR=+bSmJ$^+gq>P-pcKL?~S1Nl!{oa z_>_uI`Dpu;N*j^#IgiizRlYjqi?RpGeW1Jzl#c@ClkiXUNf;!*sPzBW|5SS%Eu8k^ zxq^X>ZfyUsq|w?V{SyWa-rcwEv_5Onq~MhEr{4DK^4;-WMUMyG+7jBV^24)V4y#CA z*1=2pokYs-BvO7Sk@7o<)XLwXmA^y(ANL+BzZOyX1+mI6h*f?;tnv$Dl~2My*C(M; zs`|T1RTb6tpHJaMYUhTx`qZ5% zYW&%rYVVYckQ2A9Yn^L*oeZh0x)W^5STui$xPQ%6h9fzaV zA@n@(^vA$~oD!embStfY27H@S;#-_9#ng>c;;Wo~V3X8m3RZau zhYlYgmLVmD3~V|q`8#TN0fHO_>+hciupZHd+JG{ZtLy#s7Z z%;$6wraxQmNh;rhyC@ikmvP3AcotX~gy{)RiAOnIi0J`NiF-Ju35$#S3WuW>AoLmV z^n73>r^Gd!24ealr^NR-4X{bdn}k)gICKa=$Pc(v3!Kg=aWbd#FdfG!aTKR>F@4E$ zkNONQt}PEWI1@GpXPyJLCE9WNE~Za$O6`3$Exc0>;Yd_#Mxgo*oWODD6q0g z#Sgbh^ITgu?B*)ItAD6HCD&$hzeXqY+juHU3iI+9Y~_)HF8A=)#WK)l$4ERkev}6Q!Tl-Se5^gC={YPK>u)C}W|9KX$RXQny+mg8B)Ze7th>(dsE zv*Vhhpf-sGwbxisTgrmkU=-BGyNIkB;r0aM?HF%?xLSNy|4`ebUMq?4qOOHpeJ3pO!r9BXZN zu-0}wYi;e=g4+=-xZ}(aPhuPrY+{<0@k7NT!CFhLtrco*d$dNaZFf;%{X;v6_nMft zMif_f&l9Y*oz52AzKnNfyba=;8K1!T?(BFU*4l~&E48*=P-|P-2DP?k;Q@uwW$;CL{`n>mi-IG2bW=zL!Xn_k$>K6+dxB%6^e$ zJA}+$FFI^(PVdaHvDN8g#b+&Fxm}!6ljV3QvyMCEInq5Q{)-3HOH}9YJzTzl>Ty*f ztj5W`FXk%@&C9Sx<&Od=v-0f!AA9El7ge>t{k)>0sHj{-Br`PwG%#<0P+3}Gnt2px zR1`#05j1ne7?`}EA_`VIY9?cuSxItBuuxELV}g*H3L+wsPR4aaF2il!^*qJ-pU!*E zNv;3;R%d_C`TY8>-+K0%*^51!(s}lCQN;HO-|R1iKYRV6#g7JlQ!H@b*tS0>MA$Tp zr|_@Z;uUMp;2qpwyUmv-e!V36h+iG>?24sE#lY}<+7;`M9WjkYtA*8I)JW$DN9n=RMUr{f== zEAU7EY%VL5jB|+7Qz)Ud5BGKv&|RC_ zOm}Uuvbl1kNS5^yM%t>@MlVCFjk4v!NWG0H+ zx=mh6LsD@_ON-hNaQxfA&*DZ$WW7Fn+vL)nSxdK#?H@4u+T!Dv8}{p_m%f*^XxqsC zUZYbMD=s&DsGCu`D=T1I=3p=9n#_q_&b667Ue5KI>%E-ynFqX_n=;eAoLe$Wy_^l1 z4{hnxx6fl^UfH_e;~9tb-bR_dwhZYzXx|t8?zAwX+!R{`D{YyLgNaf4vF9TeOSQ3S+n=; zpOn4+D~;|li^M1V<~Q%iG23YW^B_MhHgvvm`hRLXoB#9wnpM4JUGDLJ9*MDj^9$1A zLw$|Q>Zkn#*=8zxJJ~_~oEKiM&Fvi!^Nq*) zm29-X8XIbrxcokw_OfHX#z}r9D*LPPp|Zr~*=GI)X+Jen-p=@+!M{}e+;mD@t}(03 zPqUUC^D$oSR}x`=H7>NRxi6sfe+K_j!DhW*NtFH7gwUYG<#}e61!)sx#}*m?L$m7e zXTPGzGaHzn)w$y$5o*ifUy>XZM}Y=|23D~kBg$%)mc%?1{v4VDEiFpl&q zdB@)QpPQ}c+yDDXzmhO}=eW>eiPafqQTb_oWP#qs)9$;uD6u-nEUF-Flq_(eah_kv z9((76(EDu8%}+Cy1^tSJh3{>?0%cR#xZ^+JME9hhq@5hrzKW@W9CwjHcZxVpUrT4MO^5} z#Oh45l>9VvS%bH+mtVYs|EHp0mE7@zWNC>^p=8s0>s*J{089h~H zBL0~B(E2mC=2{ln9uD%A$COv@EIAQ>-2IdKGj($jPF?M%$zL*mKjr%11 zna92M+_X(r`0kFetJ%3YCH|~?mj29BUVF5*O$y)rF?M%%hNZ-xb5A#_jX&?cu<^`P zFUuco-GY5TkMXPB8J7}&$^BO2nYmt;<+kC$zVR`Bbvw_c#9wh=*mTC<%d*loJJ|Q@ z7{B_Rx|H~9?zfsASGXST-mtS%s$+@!nC3H^y*zccqe6T&G2Qh$hom~*bWdzPv)jwF z#&%_hZ(dCI#+}cnI^K34({kohFV9-rgb?4$G2NSX`lh~?QXxxhIdja*v);BQ#J4!6 zd-KlFR7airnAS6=y*%}{qm;hdnC>k*52iZSx+k`t$@lVXvR$e4t%~X1x-&D?QSUy+ zaOMXu>yW2jU1&H{>1Ek!o2~S1jPWz<)TPF^y5BOKY4x&v$jejBoF; z@S$vzd6w<%+}`%>7VFne}VJMwy$ZdUwhT`lkwd=7PiYCG0(EI zUH03){bT()s8*beH}SaDF56|EWfwc+wZ4zU`gK&jb28r4V`2O3sq-wm*}1LteLU8$ zlPd0HyqU+X_StjiS$4MzU+e1_>(^Oz?qqy_kA)qw{pVSl*k!NveJa+^NToX&KhWb= zhwPAfmc8tZ*ZDph>(@oq`&9fR9t%5WN6fP{wR2nN`%8Ii!_gL5|`^Y>?GrR0{zOTjl8LL*DiXY)|t5bH$JWGpc*|n>W_gU}j z6T7v$YUe4(Q6BQn+279d>~A+?z3 z(aA$@lwCc~bD-UY^}a!|m4T zCEIlVo=5Ct8+^CMM)y{YPm7=I(Yb5(BlGt>YPWZT?~d4LQeGkUw^i}OkbNri!s$2Ho<`+C}=M(Dt zMQlz#)rmAm4-YfrvbC3QW-pv?X>WHp)HgA<+)P!H7C+nL6XR_8e9Mt`Wud+)vE}Bf zcIol+Jcf49-Z{YG1nJn;t5Y?C<6mJZ0yz$+sdl$69qF-7(O^tY`N3^9!8q4s7zRjm;UTDoS@$ zc&K`2-<@CJVpqD!w)p`ijcM5OM3F4c8yh>0eMxHC6A*&<@q9i!8~tcd8N)@Ep*(&?uva{H+3 zGqf%`{WOJ1U$s%D_F0|&6~)xPYV%C(B%OY`BBHN)Sf=(Ro&HrtZeR7-Ozl*ieul!N zpL%kp_Enw!Z;Gk?)b5$uSvvhpMMOXKqD<{;I{hp~Za?+vOzm8q-d$m0rrwmP_15V< z6jROAyE3&4b$U-lgqiwKrgn)=|C%D#Or4ae_1EcT3KMg+CR6){PCr{Q)m(i!Q!Cf$ z=O`k~)!Iz$TRQz*MXtHJK2sZ_(|ajQEYwC>+I2epJjGNCwRx6yqfS3x5n-VomZjaI z(|ap&E!1PPv=KVJkHW-KJvmGJu1>!|G1XG-o~2dk^uCG+OZB2G?fW|YLPf5ndUcjI zN~d3>FzK(}l%@Shr+-~BwZD2-mi7~!ez78=zxq&?_H&(ni6XbZIw?zgM5kY>FtJi= zvb6C!y`N&LmHKj)Hc_WvriidoYqPXp>-7GLTq|{bmNrGF4^Ws4P#bBqX*&IK#nb_6 zbB#7jr(dCn7@!`e(Vo%i-%#WZP>PAbk*|JA-sr{A>M2sH@0Nu`W#VX_EUDM^qHX1v@1MXr!jJA=1SleGsHOgLGH? zOZ`R|P#jTOxI*C+5unjkj7zcBB$YPErKYqY(#0Ts5TrYUbXWXq{YI#*IF@34IjOW! zKD#)gtZ+rJ(~$s;)RZx!=(mP4-P%4QL~+ED0fXbDi(Up6#cRyLK{D4Uv;dX2JiQ?a4$kZZGE z>H2}8<&Ij}ToKdc)qGhUV%SvNa#`J4o$P8r2I~(#Wu-rq8V4)x>V7PB3sxMAjH%Ua zb4j_VS>4z$*T(gS(#gTiA4jTdb>S`{7c~Km4RdUiKa@@jZax^<)OoY=PE*HEW11(Y z_I&%y9d(O~L8PxXG&P9y)!S7U)bY)l)Se=iRc&x-8lK(0{D3+>`lO3~c(!TzdV!~0 z>W61PQtl%#&87CX;d+bGAR;~A+ z0?uNWIF;Qu(VfID(S_ZW=#JS`?sE3FZE|c+4(%`#`37bl1@ovs|U7bkZb!)bmHodo7B z1s-FU7|ZSwbU$U6xS!p{rz@Afk5yC{j$8~;1Tf}x;6`?dA?z+fSI#cc9~cfn@}`aD zxgX->d@yth#mq$Fdf;Hz!}5^z)?hRU>~u{I;@iH zg<+X5)}I5+Cdz<^iJri4qC0RYaVF4>I74jF4xHRz44tN9rUP*ruyg^sF9XwwZomV? z7lG@Elf@RjgH>c0CO?N6C*rd}E8^3@CLah~fQ3Y7U^4M3;9j58mEZ5i7LCJjC1#w) z0A~=N1dbv)0{al30M>XzI|6vY`*dYIR!O$S@GxeQhXccj!+=YPLx66?!9ZK$AfPeP zMr_e0oLuRAtZ$8(bfOjT0MQb-o@fsAA@&1KB=!+ov;nJFVVK+tGfne=Ccr{scVIHH z8*neN3owY-87P}~y0R~~s3V4>Fyqu7*oXKKu*M7B)`J2s5SxJs#75wIUZ*Q>?7|k+ zW4IJE$+bW?Vhzxir~?`ktAJ&5p{)RB6U#!&bKkxvh7*&- z7A?cc`C#aD6f+Zv3BbX`IA8~246yVyXukla6Az0mT7p&fVwn6XW`c;H0A<9FflkDa zfL6r)z$Q-|7A0_bYv&K@$9{j@Ixo#|S8pZ1CSp|2PGaurKIX2w0e# zxuUApV}lTU+SU|r^S<%mmupjeK14{V;TX>Iz8Cmud&FU%Abj<9q*WCHUAbouxYkQn zwNA5IeveJ6{ArU;rT(T(x@_;zG0?7E)Gm=&_fVc&QbzylYi_IZJ2;OlG7W!Qdr;=x zr~3GtZqefuwuAU7ij5#PUaNWT`kI?E??vq|BUi{%Ka%H7ieb^l_XL! zjSvNUc)j+EfUqJ)!QNpMY!IVhT@VGEZ-XdUyIz!cf!uZj-4mm+@uVLtdr1~G3nlXI9@+!&$1E&l`fa)aXttK#UwIm&Rt9KdC+RS)XCG%FFX5Q+< zl=nhB>!{6Ik*_<5@vMCr&)Qw*F_C$zgOIms#=ONe)BPNsY? z<)(;dwF=XUjNF|WK0_Ixx`TPEFEMX*2=Z2MF`jij^H#rM-sG}7 zXYH^>vyOSI6PdUA5%X53J9~*MX*lv$6B*CClzFQYn78^7QLsb9$?<8 zXBOgFpJ3kV`^;O-W!~x{%AcgXKjK*jZ$mum9?D-Sjr)#yt4o--IvRPab^VdI8qU1c zv&>sv!o1Za=B-|(+@JEXlrx^yI6||bR4;B}8MLqSr1M)_S zTUdm4m&i-j)MO`Rd`$Uwl$TL1r`##Z>-dmgq*<25Vr(LNHPQOM@R$e^72&DBLj>zj znXRg28YcMJGKkd{Ii>es{+{NF!~Z#>^&Y}p?HDdAa!UVmIO?yYs22PjOE{OSnB%>a zg)$hn1WBv++HMOpoWKQ`)EdcE7~jg!)`5(N<;!Rgs`@XbZ97{gZv67-GQ5Q&Sm$f5 zdoRtlchYuZQg)}5-RUD;3{nQ}Pq*y0yY4T3ul!M)TbF6_+btn9Fd*l_lWGU51zT$tp2#~6p?AoGH8g%tdHp&{|iLJ|18VZY>^{$56 zVng$$;?_#9R-L-FBtY3zT4kvC$uaAtY^cZ+j@g@$!ckk?ax*g3P?XvN$LuAId1J#5 zr9b#cj#-H*$E@U-6}CsoF)KM{|5%RMZXeXUw>f5QCCBW4w82V_*YMXEDS3I`j5eUmP{qbi1N!VuLorTkRz#=(j>FsX&k+xkS zQuAkHx3nRW|M|bi|15p8{XW0ho+ue2d#9rGhHT42+d}#VIC;Id*N{QPN|!q(4kgl>RV%S)uenxc3i&^kgOJc^J}DE~KYi zNKd(to^tWmf69d-(OSJsv#3y4AeT_uhkLpRiVaJhT7PtHtw>eY?`_f8v}gj9`fykM z&Bzc#m7zH%)le}~*}O|xr&TtVd4<&PRqBg-YL%(YTA^!c4L39v#VBhIi+==!)Q&XN z>tck}*5_{A-MHEncXhW*je?s$ja1*&CAfr~)5J73ylj(NR@yVT`Ljsn7m>;Xk;=o7 z%0rRLm`KC^NW-U*hL4d{>#7fK|DAj5xvCEP84lo7uKI$6ax<$QuIipQ`IW?W){HSYtD051@ufeFOVf$tGN1+MHL-}F9KNjZq2 z8)i}t0BwmM0*#4kVA&oB_5rhrdx4KYQ2F7Y~g^d ztTL5Y4a|)ilzey*R=I`Yh$tL-4S0mFdWl_PF1sH z@jmn)15Jn@u)7D{9qbafvb!7I4VLlA^RPn z*^XPZ1;fuV<4^nuSQ&=y`|J|mWp^{WTi7M8V|UY_~0v8Y|B+9VK`y~L@vN1>w#m~C5~Ws9lAr=B@SeFExKl6i#lv;ncSv+7HZK1KiCnaXY(#=x%10_%^$%2PK!y!76eLN34d(A9zF# zT*xkQF1xGHoy9J3D!Xr@JIOrW=^ReZghOY{M6ATjlRy)q9lLL!`zX7_0qm|ox3Acu z3~teK47*{*pV%H)8Gvr13SHtIV5L90Ke9`_!R|6~FOuQp@-dvc45Dv=xqiUY>=IA1 zyA<7H>=I+yT_Wy9uVIx>FdVT2qA1{z#XuFi#0Yj@M|UH;#1M8DiS7rk4{2N4jStWy zRI6Q-CvyvRcApe%W)f{5Cehk5iFPiNXwNdbHkr}2iKU3HE!Qx*b~_Ikj05Cua%Z>O z)_FG;B`x@Q7{2&{&~33#kmkxY@dB;CF%@=U15#l%J#_o5^SrOv<1H7x`yhC*$6agV zU~!rarT*WDNZ$$-HsJwqccloZJ!mub+G@G;18&bxhwT{ine}V&Nf#~3n{jyxC6wYCw(44oT!5-(noi9Mfzy>PDmg9qS zB*IGPUDy90^LC`XKjl3rH=?`)HCyVqx><-`%>O*V8S}YiOxS&Q;?ML<#m0z%zJjVqR!r7B+^GMERa4r zr909`Cv`^p=&1FOe@OXvl>1RWmhu74W=47D#io1LYr_M=E}p8%OvDkUQ?|Q zDTfn~KI&nE^wIL3NFO!p0=d-&$or*1Zc+kySoQ8l5GT5|H_}IMb;)xtHeJ6#dpIEM z#k87>Ng0oo=zo-XtEv^X_6}2!KDv7-<$Wmc3VDZ6$ipaqp(O5A#EIq)NBXE;KctT) zcFP-EY`QcQVWlV1YR)EQc$esJ$-EP)6*cy8uTgGKxjE&=ke7vO6eUO>Jz1@&w|AJ2 z^ic~3q>tuUAboUWcchQb*ogE|hjfIMen9!RlrN@yH0Av%?-A*nj`Y#Q61~WeEUIo6 zzPtdWk9v$l`l#Okq>s)rLHelECZvxZr2G=)6_l^0+}U|(Po$3?*rYua5LS?0b0I0C zxt`)Mfzy>hmk%yv=`)qH$!fj0eP<*kat5^sl&#==s~SLZR+26 zv~%CIr=LhP>Y}KBOQ|=y(fz3|7k~J!Dn{nrQ`fS}&F+zuRR6G-GwLtf$8Bk7{d$PJ zcd=JehU1N#EbS*30qKBs_ z{lg|?*5}#BeM)gZh(D)zCdAoW^1i&$^rqWZ+mvZZ8OMR$?SL8V5_8zKNB28+iC5Vj zf$sP0j&L~~UX^Vhm)wvd)+L?*mJw5d##SpJSIeh27CEZriFf_Hh>*Ld3en%fN7A0q`)f5SUFY0+tbr zfyNPe8%mp2xosVnB7VACf!)Ugcd$$RfZeCi{g_>1G`mjdep%Y&>vrZJzngWb^d&K# zaO7i=%6dOo^Af)|^SH|q@m;q}%}kL8+i*;*)X&DfKpuUg^zp)onTpxsTLoJp;hxp4 z*ttyeuf=WOK$=wp%@SB+k0M0%3ca>)-O6D#O-AHwkuaoQ^cU9Df0F%dos3=~l$Q{l zyHxxJh!_oJe=N8S3ua-#QY`pOS=(11wm@_P^H{+a2j5$(?c07|V1Y|`74gZFN3X)0 z5sB&6OYydkV!hY!W_~GaJN-*v31u1H_9`f!f^r`g%*BG@10|1Mi3R_Ktj$Q;iuYX> ziG%JNr7x}hoJ}l!i%;?)OFrbdKlQgFrLSX2U&oTZ)gyhYM@rC?f&>5hUrv@%FMfyA zi@*LCIR;3(E|KEMM-f{Qe4!EWll$yX^vKi zhgDrpEWIM1T^O;nP-;pWB3%s92SK_sNO#4*)^CKo#L@z}b76$A2KhNfEz=}a1SVQb zO=&}L{aTbjpi@ACL#FV4FdeI@UTwkB@a?Zc0LloZfa zZhiaXcQ)w{CM^0fw3E*jxx&xMCDGcZFd}l9M*Mw_PoXZZq9I>u|F`T(%rYsqRm$$Y zzl)&Ba3vzODLd6ruWpSs=vFKBr2&TKo~bQGUWQUHLq&|TxuVJ-jIFnALJWoK)@rSx zWqE6Twz5^1lv=6Oc_|xPY(nbAKhmpOo0T?hHU}cVh&&KE@~-Zj=5XZ5THQ{UluMei zjSaJGif@+&1vl@Hw5ip-=Mr*BGqSN^rcLVY($&GuA4a;?>UOzQT0PwQO;w-$DR*pI zTpoHnTUpoCe8|pFQdO#sZ$6YdO&D!|ve+tHo5~N_8OKJ3oQZGW^!*__x7eNnJ2zcD zWEUPA8GI(bThn)k4D0I+EeXa=xrb77gh!L^S{+6UM8GW=Bz-(d}@G$WT zBAy3Y5x)gC!55p73oINE-}EF+zd0Bt&@p=k_#W{za3wJdID?o097Rk6_7SVJr|CBp z!!kN%PXM!t$-u+JuYlpiB;ZowQJ@7-B7Ow4BGMPz1m|W7Ew6<{I$D$I=cIOE|9GcO@FGUgUE3Fj znh?7KBe+UOc8Se6G(wG+xeGKQmJ3JgTUf=PFLeVmmHQyN0`w=IXP0l_47m zn%%vFk}oX8$;D!rOH1viz^TOj?9x)Zn_c2|cImF&%sXKG>q`80OMan-82y{FYr>YEQFE zJjrf2);`8=_@Lx$Z>(|z!y|OpegYgpjAAzodKJ6G2zEE4yOCXDh;X#paEs`!eG@Y# zL_c5z-L(tYCC+A-?%KbxOPnH1zoy(Gx@(`sOeHO~PXYajj_lG>`#8JAN7$vEwm-XT z2PMy#hm-4tVJa0D@z zUAk+t*d?a0OLuJ|yTl{H(OL#CY6RW2A7jRZ_yI72?%Eyf61TETckKpti3;Ipy@pl% z>8^bPGnKT|E&=)zz1dxbH~Sj9#8=sU6Wy2CeREK9AKG=F#xR$b+Ht_C#3$ILrS>s) zi4U_&cdZ4xD+VRI&Bhj)V0eV?+Rnfc#8w(s1MsSKw6PK^*`>So7Q4i2X7Nr*+@fXB ze}@?pVh%8Z?%E7?iO1QcyY@?ViP2{9$)9tJ=&t<;GnI?6;QK&-;=Am=j_wwAiR;*f zySDr-px$cvwc_nHa%W@11#Lk78WCOkq!mrH@*D7v`eo8Y8%`6gC0(~;>AIEEb=yMM zt<@WFipsxlGn@`TQR>-T{-FNTzpt{)ugarPcu_N5D}U2kVU{W4?KhTggw^)JeX-?% zs`H&2BSNuQ^Y7xZb@e}9)poWI_`ZfO`>x8P_V?JNuTr^5oejTflV%I!;q|zVfpZ&G z`R$!Y7MU)6TYFHr3#*U6>1NkHYL{>qo~$`#wZVhk_2zHA$iAoZN zU!y!(v1#^t?H2)I6{l)0C1o^TUsERYR#qRcwU2w6@`ow!MR^y<-8N|YmaNgryth^# zud#QS9C%G^(xc8*3b!eyQLBaFw`-nLv1!5v?LOfTPOHfkjzh{npnMwTk5S&2@@|nk z(`v3IWlSwuQzi5MtonGpeca5zYhsgZovVV~%KJst3&XE*UXbtyhiXp$s0$wa$MPR_o~Duv*vkh1EKo@|P+9oN{-{qXVbd!aJSS z58mmTEwEaz&4krD;|8qO3v|M2?T`SgwZ&_&T2Ha3+zj%S;gFxA{CmpZ)OpN-ce;E8 zywfUkSgi}gVYRN!gw?wB2AtVzb;6k)cM4W(kNK28LAeFwvaOJh&hm-S39GfkX?Ul1 zFM!p0t0Sz|3oT)_PTvZv_2Mizv&WUfnH@#>x0Jt5`ID6QhkW8T&8wyGP9KJMI_?sz z*7-|ewYD1rtMwQwSgj9lgVnky3s&nlC{L#R8s!0$j~m!0Lc1#}ZM^{l?!P;r%`RKbMH=8Oz3puzGyt{9S3#2e^F3-YT+-I!ILb2Grw%gpV zwOl}hH#32&@P#9}6!Uxe9{xiHZ`;m_8-HQk5ghk5*AZ8vJo;XmZSSP*#Qx{%Y1?qg zpeh+uC4*|*pW2}M-|^<9uLetB4VJzdEPXXt`f9LrC;VgG38lD;dyl)2lu|-Wg!C*4 z=~)uevn2kk&ytXy5FtJLKzjDUIO*93f4OHLH20jpIyV0H&N)U6v!)ckZN0fe*NTk^ zNx5?;5BcoToi81H_3S$Bi?QohHWh4~QWJQ7eTb)W+LGGV>n9WZoaPor2%qNBioj(O zO8fAiFM|BP+$TpmqryM+b5Nu=FXeDbIh;}s=l{kd&9V}G{G6mB?SXV1NFM{~Rv_I8 z|1ft#m%<3~h>3)X2H}^MP}+xkxd^I|M%$9woM)(k@3pxowfTZqYnf~7&8pT~WlOz5 z7h|})%W${2RVNZ?l?~a&t&Mqx){^F?U51uvO8w=Qk*yU0hU&|yhNRS%+A4$I5NsFh z7u-D6CdMVgWs;5BB_t-&=B`e}(oVNgp4UV+HYB*TeiWJdW9hKq=9g_;%Sx*n8=ki@ ze2cK!LoOi~G{GG*e$JykP;B(HuRbqCZP;W0!~)=I;zeqS=csjFP(OZ}m(b^6c*q%to(3)=W&no~PXe`05FDqLc#K-7 z1@#xFVwD68%{dbTy!;gOhk?6@hk)+H1Jn}L)Q*RC??k!!*4>?R@;7m)!pvmiyFepi z1W+>$`Ypgs#EsMv*G-grUB@c*V<8I0OcHSoa5Zria4c~Juzn1*%cvzTrgqGN`aLh> zafZ_7j#RA6DG>t^RUWU4Cgpw z<^++i`UUYRboUX*1Gf>!0fUKrTgyf*Sbb%R*dpsOnDNAn^=ROW#3zB{iKBqSiH<-^ zq64t2SmhK}DH@4kt)p0_Xaw*k(H?k_Xa~$B+5(Rf9|s;J4xcDrbOtB)4u<<4!^~RZ zFyIQ}P~d#x5a4v;qrhi~gD1)_pT;Wo7|wYFGuFgGz#hbhfh`UY*Z?bt1A#?EYv5Uj z1*_lS77f7gE6iA10Y4-52ks$S0>g+Fz%@j3;9{|gC%32{hBGl!)ED?Xu@7)G(G)m@ z*c;f7*bCT+*i&3Z={Pyv6JnKpCYUK9_5hwEb_bp!8Uy2q-GCnwyNatQ4XbR!a84J@ z1QU&b%ZQzUbBLXQFB3ZgClEUT?Vnh%x*NBsJ%*N;v2F+KN_+^YABnEvRe`sOt-u0e z3-Ftf3s&pga1}LScoZ{5jlhFMJ#Z(n0T@cG2d*O40ey+J&&n5_z{yR=aNk|bJVUGj zIuP#w2N89^-o$EPJ7U$d^2^CsrDB9wWlkk#iij1!v&3@X31S)W3*wK!eZ${R4(;Fk`I+E+*ardJ=B}UnG7H98W9-4i~G0af?bY?1!16>%dOLVqmR3y4Qd= ziABJR#H+weV&SuLZ6Z!C4#Ry{F!Ld?0Qe3uAGnry8MuOY2{@m4@mab1QLOSZhI78d z%mm^Epgr+C(3*G-*n{{ju*D9C`Zv60-e|Itn>xn+OV+w1(Z zTQ)^l+&TrOtagiT7gbec8uYd{C@JHS>-uYmq(!?u+R1D?vfYF24rn*A{p@vz-Y`;H zh%{PZD(eU%<;M0fQqEWl-({Q#xJ}BKEmCb|-cQg-X-TwX0_-~ zX0@;)vsy5gcA7Ba8RdyOi&a==1*=#SSue5Hv5H(;=vim6%2`!iB8R8JI%+}dXarMw zUtmh_qp*%{HHCF_VOLm3(>K66x|s5Dlt)qi3gwSc-glsFsCJPEcV%^Bm9Z{m4Pp&v z6{cCCJj|NRn$23s`cpEkFoC{Zq8D`ot8mQ<-pab2bqDKiRuN4rX7{sx%qncNq7%&; zTN39N7$Quc%UJzcMK-PIEN5N8`UdMt);C#KvC3IRIIYkJ22P<_b`s692{g-=&@6kG zX4z)s5<4hqmVFv#*(o&3PNG?M6wR`OGT^Q4djsCu?mCZ&&Z#2JmsJ>N!K@z7lUY3` zky$+^lUY4pAhUYB=)BMrvBnd_;I;jXURw`(ZAZXs>#!SM+uc*(wcR=tUfYFzAWx_K zHsyhoyHLJA(C)D);ZXHsjb<%pwHwYptFX=rO*yOGRNchs+(g6XYWQcID2P=Lmo%@RmzuB{uSkOoM)Nm34^PgRd{CwC$e5* ztz$K_Kz|JDELJ(IiZzk-l11eBEEt0yE`>4pT{wLm&M<@77slZ3qhJjF#1h8f(yj0j zuc7>D%0Hs~JmrfiA3e}*n^yQ^WvokCgIL2^_p%E2tk5L0X0sNuma#Um8b@e0l)_h> zL0@qxeZ_CkS3I7+;sNv(N5EJ7j0QI3k179-@-oWhlsiQQ93S!v7i3v1#wM~?g}d{9 z5UHrbR@v`foUxhrV5My{U>?@fiQ5Egr?8M$c!=i`h}c?~N5$g@L`JQ!Mn_zP{qwN6 z9G(8zDBI=%D;A#|d9<+ni*Q$A`4=ZAEdPZOwZihhOw%YV|A{`q;t2tTaVa7byTarD zlD9cVSK&o2iH~}P$7LKe2dmtBvu&&UDVb}F@e zWu9&xy|~l}5dPvH1dGCmxC*IAdmvp0(#Jr$6-al&Kg^v_ddiIS zWC`iX5*q2@4AR3Hq=z&7Z#+QZCbYwYIt%v`Ma2t|7Xn;^w=T zQ(JGFD;r{zhDg`uTZd8`_NF%0dbR#|sJOK`*)@2avhhxFs{VG*rje};gXd Upx%idNj~hwPTd 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

Du7U&f0CEAisT@4~k71n?yZ)3^jSTY|#9}Xx4 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