From 6c1ac58c46e262f354eb325c28552db88ba3804b Mon Sep 17 00:00:00 2001 From: Christian Ohr Date: Wed, 5 Jun 2024 16:09:51 +0200 Subject: [PATCH 1/4] #448: start with iti-119 --- .../fhir/audit/codes/FhirEventTypeCode.java | 1 + .../FhirParticipantObjectIdTypeCode.java | 1 + .../AdditionalResourceMetadataKeyEnum.java | 12 ++ .../ihe/fhir/iti119/Iti119AuditStrategy.java | 63 +++++++ .../iti119/Iti119ClientAuditStrategy.java | 30 ++++ .../iti119/Iti119ClientRequestFactory.java | 70 ++++++++ .../ihe/fhir/iti119/Iti119Constants.java | 40 +++++ .../fhir/iti119/Iti119ResourceProvider.java | 81 +++++++++ .../iti119/Iti119ServerAuditStrategy.java | 30 ++++ .../Iti119TransactionConfiguration.java | 44 +++++ .../ipf/commons/ihe/fhir/pixpdq/PDQM.java | 5 +- .../ihe/fhir/iti119/Iti119Component.java | 48 +++++ .../camel/ihe/fhir/iti119/Iti119Endpoint.java | 42 +++++ .../org/apache/camel/component/pdqm-iti119 | 12 ++ .../camel/ihe/fhir/iti78/ResponseCase.groovy | 2 +- .../ihe/fhir/iti119/AbstractTestIti119.java | 59 +++++++ .../ihe/fhir/iti119/Iti119Responder.java | 20 +++ .../fhir/iti119/Iti119TestRouteBuilder.java | 45 +++++ .../camel/ihe/fhir/iti119/ResponseCase.java | 21 +++ .../ihe/fhir/iti119/TestIti119Success.java | 165 ++++++++++++++++++ .../r4/pixpdq/src/test/resources/iti-119.xml | 28 +++ 21 files changed, 817 insertions(+), 2 deletions(-) create mode 100644 commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/AdditionalResourceMetadataKeyEnum.java create mode 100644 commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119AuditStrategy.java create mode 100644 commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ClientAuditStrategy.java create mode 100644 commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ClientRequestFactory.java create mode 100644 commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119Constants.java create mode 100644 commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ResourceProvider.java create mode 100644 commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ServerAuditStrategy.java create mode 100644 commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119TransactionConfiguration.java create mode 100644 platform-camel/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119Component.java create mode 100644 platform-camel/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119Endpoint.java create mode 100644 platform-camel/ihe/fhir/r4/pixpdq/src/main/resources/META-INF/services/org/apache/camel/component/pdqm-iti119 create mode 100644 platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/AbstractTestIti119.java create mode 100644 platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119Responder.java create mode 100644 platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119TestRouteBuilder.java create mode 100644 platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/ResponseCase.java create mode 100644 platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/TestIti119Success.java create mode 100644 platform-camel/ihe/fhir/r4/pixpdq/src/test/resources/iti-119.xml diff --git a/commons/ihe/fhir/core/src/main/java/org/openehealth/ipf/commons/ihe/fhir/audit/codes/FhirEventTypeCode.java b/commons/ihe/fhir/core/src/main/java/org/openehealth/ipf/commons/ihe/fhir/audit/codes/FhirEventTypeCode.java index f831f25d6c..d281c2170d 100644 --- a/commons/ihe/fhir/core/src/main/java/org/openehealth/ipf/commons/ihe/fhir/audit/codes/FhirEventTypeCode.java +++ b/commons/ihe/fhir/core/src/main/java/org/openehealth/ipf/commons/ihe/fhir/audit/codes/FhirEventTypeCode.java @@ -37,6 +37,7 @@ public enum FhirEventTypeCode implements EventType, EnumeratedCodedValue SEARCH_SCORE = + new ResourceMetadataKeyEnum<>("SEARCH_SCORE", DecimalDt.class) {}; + +} diff --git a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119AuditStrategy.java b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119AuditStrategy.java new file mode 100644 index 0000000000..50d53d531c --- /dev/null +++ b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119AuditStrategy.java @@ -0,0 +1,63 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openehealth.ipf.commons.ihe.fhir.iti119; + +import org.hl7.fhir.r4.model.IdType; +import org.hl7.fhir.r4.model.Parameters; +import org.openehealth.ipf.commons.audit.AuditContext; +import org.openehealth.ipf.commons.audit.model.AuditMessage; +import org.openehealth.ipf.commons.ihe.fhir.audit.FhirQueryAuditDataset; +import org.openehealth.ipf.commons.ihe.fhir.audit.FhirQueryAuditStrategy; +import org.openehealth.ipf.commons.ihe.fhir.audit.codes.FhirEventTypeCode; +import org.openehealth.ipf.commons.ihe.fhir.audit.codes.FhirParticipantObjectIdTypeCode; +import org.openehealth.ipf.commons.ihe.fhir.audit.events.BalpQueryInformationBuilder; + +import java.util.Map; + +/** + * Strategy for auditing ITI-78 transactions + * + * @author Christian Ohr + * @since 3.6 + */ +class Iti119AuditStrategy extends FhirQueryAuditStrategy { + + protected Iti119AuditStrategy(boolean serverSide) { + super(serverSide); + } + + @Override + public AuditMessage[] makeAuditMessage(AuditContext auditContext, FhirQueryAuditDataset auditDataset) { + return new BalpQueryInformationBuilder(auditContext, auditDataset, FhirEventTypeCode.PatientDemographicsMatch) + .addPatients(auditDataset.getPatientIds()) + .setQueryParameters( + "PatientDemographicsMatch", + FhirParticipantObjectIdTypeCode.PatientDemographicsMatch, + auditDataset.getQueryString()) + + .getMessages(); + } + + @Override + public FhirQueryAuditDataset enrichAuditDatasetFromRequest(FhirQueryAuditDataset auditDataset, Object request, Map parameters) { + var dataset = super.enrichAuditDatasetFromRequest(auditDataset, request, parameters); + if (request instanceof Parameters p) { + dataset.setQueryString(auditDataset.getFhirContext().newJsonParser().encodeToString(p)); + } + return dataset; + } + +} diff --git a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ClientAuditStrategy.java b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ClientAuditStrategy.java new file mode 100644 index 0000000000..f3f9a4cccb --- /dev/null +++ b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ClientAuditStrategy.java @@ -0,0 +1,30 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openehealth.ipf.commons.ihe.fhir.iti119; + +/** + * Strategy for auditing ITI-119 transactions on the client side + * + * @author Christian Ohr + * @since 5.0 + */ +public class Iti119ClientAuditStrategy extends Iti119AuditStrategy { + + public Iti119ClientAuditStrategy() { + super(false); + } + +} diff --git a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ClientRequestFactory.java b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ClientRequestFactory.java new file mode 100644 index 0000000000..1e7ea5d837 --- /dev/null +++ b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ClientRequestFactory.java @@ -0,0 +1,70 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openehealth.ipf.commons.ihe.fhir.iti119; + +import ca.uhn.fhir.rest.client.api.IGenericClient; +import ca.uhn.fhir.rest.gclient.IClientExecutable; +import ca.uhn.fhir.rest.gclient.IOperationUntypedWithInput; +import org.hl7.fhir.r4.model.Bundle; +import org.hl7.fhir.r4.model.Parameters; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.StringType; +import org.openehealth.ipf.commons.ihe.fhir.ClientRequestFactory; + +import java.util.Map; + +import static org.openehealth.ipf.commons.ihe.fhir.iti119.Iti119Constants.RESOURCE; + +/** + * Request Factory for Iti-119 requests + * + * @author Christian Ohr + * @since 5.0 + */ +public class Iti119ClientRequestFactory implements ClientRequestFactory> { + + @Override + public IClientExecutable, ?> getClientExecutable(IGenericClient client, Object requestData, Map parameters) { + + if (requestData instanceof Parameters p) { + return getClientExecutable(client, p); + } + + var p = new Parameters(); + if (requestData instanceof Patient patient) { + p.addParameter().setResource(patient); + } else if (parameters.containsKey(RESOURCE) && parameters.get(RESOURCE) instanceof Patient patient) { + p.addParameter().setResource(patient); + } + parameters.entrySet().stream() + .filter(entry -> Iti119Constants.ITI119_PARAMETERS.contains(entry.getKey())) + .forEach(entry -> p.addParameter() + .setName(entry.getKey()) + .setValue(new StringType(entry.getValue().toString()))); + + return getClientExecutable(client, p); + } + + + private IClientExecutable, ?> getClientExecutable(IGenericClient client, Parameters requestData) { + return client.operation() + .onType(Patient.class) + .named(Iti119Constants.PDQM_MATCH_OPERATION_NAME) + .withParameters(requestData) + .returnResourceType(Bundle.class); + } +} diff --git a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119Constants.java b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119Constants.java new file mode 100644 index 0000000000..4c811c43fb --- /dev/null +++ b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119Constants.java @@ -0,0 +1,40 @@ +/* + * Copyright 2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openehealth.ipf.commons.ihe.fhir.iti119; + +import org.openehealth.ipf.commons.ihe.fhir.Constants; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** + * @author Christian Ohr + * @since 5.0 + */ +public interface Iti119Constants { + + String RESOURCE = "resource"; + String ONLY_CERTAIN_MATCHES = "onlyCertainMatches"; + String COUNT = "count"; + + Set ITI119_PARAMETERS = new HashSet<>(Arrays.asList( + ONLY_CERTAIN_MATCHES, + COUNT)); + + String PDQM_MATCH_OPERATION_NAME = "$match"; +} diff --git a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ResourceProvider.java b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ResourceProvider.java new file mode 100644 index 0000000000..a94f65a911 --- /dev/null +++ b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ResourceProvider.java @@ -0,0 +1,81 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openehealth.ipf.commons.ihe.fhir.iti119; + +import ca.uhn.fhir.model.api.Include; +import ca.uhn.fhir.rest.annotation.IncludeParam; +import ca.uhn.fhir.rest.annotation.Operation; +import ca.uhn.fhir.rest.annotation.OperationParam; +import ca.uhn.fhir.rest.annotation.Sort; +import ca.uhn.fhir.rest.api.SortSpec; +import ca.uhn.fhir.rest.api.server.IBundleProvider; +import ca.uhn.fhir.rest.api.server.RequestDetails; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.hl7.fhir.r4.model.*; +import org.openehealth.ipf.commons.ihe.fhir.AbstractPlainProvider; +import org.openehealth.ipf.commons.ihe.fhir.iti78.PdqPatient; + +import java.util.Set; + +import static org.openehealth.ipf.commons.ihe.fhir.iti119.Iti119Constants.*; + +/** + * Resource Provider for PDQm Match (ITI-119) for R4 + * + * @author Christian Ohr + * @since 5.0 + */ +public class Iti119ResourceProvider extends AbstractPlainProvider { + + /** + * Handles the PDQm Match request + * + * @param resource patient match input + * @param onlyCertainMatches may be optionally set to true to indicate that the Patient Demographics Consumer + * would only like matches returned when they are certain to be matches for the subject of the request + * @param count can be used to limit the number of results the Patient Demographics Supplier returns + * @param httpServletRequest servlet request + * @param httpServletResponse servlet response + * @param sortSpec sort specification + * @param includeSpec include specification + * @param requestDetails request details + * @return {@link IBundleProvider} instance that manages retrieving patients + */ + @SuppressWarnings("unused") + @Operation(name = PDQM_MATCH_OPERATION_NAME, type = PdqPatient.class) + public IBundleProvider pdqmMatch( + @OperationParam(name = RESOURCE, type = Patient.class) Patient resource, + @OperationParam(name = ONLY_CERTAIN_MATCHES, type = BooleanType.class) Boolean onlyCertainMatches, + @OperationParam(name = COUNT, type = IntegerType.class) Integer count, + @Sort SortSpec sortSpec, + @IncludeParam Set includeSpec, + RequestDetails requestDetails, + HttpServletRequest httpServletRequest, + HttpServletResponse httpServletResponse) { + + var inParams = new Parameters(); + inParams.addParameter().setResource(resource); + inParams.addParameter().setName(ONLY_CERTAIN_MATCHES).setValue(new BooleanType(onlyCertainMatches)); + inParams.addParameter().setName(COUNT).setValue(new IntegerType(count)); + + // Run down the route + return requestBundleProvider(inParams, null, ResourceType.Patient.name(), + httpServletRequest, httpServletResponse, requestDetails); + } + +} diff --git a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ServerAuditStrategy.java b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ServerAuditStrategy.java new file mode 100644 index 0000000000..bf01753548 --- /dev/null +++ b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ServerAuditStrategy.java @@ -0,0 +1,30 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openehealth.ipf.commons.ihe.fhir.iti119; + +/** + * Strategy for auditing ITI-119 transactions on the server side + * + * @author Christian Ohr + * @since 5.0 + */ +public class Iti119ServerAuditStrategy extends Iti119AuditStrategy { + + public Iti119ServerAuditStrategy() { + super(true); + } + +} diff --git a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119TransactionConfiguration.java b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119TransactionConfiguration.java new file mode 100644 index 0000000000..60328c8cc4 --- /dev/null +++ b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119TransactionConfiguration.java @@ -0,0 +1,44 @@ +/* + * Copyright 2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openehealth.ipf.commons.ihe.fhir.iti119; + +import ca.uhn.fhir.context.FhirVersionEnum; +import org.openehealth.ipf.commons.ihe.fhir.FhirTransactionConfiguration; +import org.openehealth.ipf.commons.ihe.fhir.FhirTransactionValidator; +import org.openehealth.ipf.commons.ihe.fhir.audit.FhirQueryAuditDataset; +import org.openehealth.ipf.commons.ihe.fhir.iti78.Iti78QueryResourceClientRequestFactory; + +/** + * Standard Configuration for Iti119Component. Supports lazy-loading by default. + * + * @author Christian Ohr + * @since 5.0 + */ +public class Iti119TransactionConfiguration extends FhirTransactionConfiguration { + + public Iti119TransactionConfiguration() { + super("pdqm-iti119", + "Patient Demographics Match", + true, + new Iti119ClientAuditStrategy(), + new Iti119ServerAuditStrategy(), + FhirVersionEnum.R4, + new Iti119ResourceProvider(), // Consumer side. accept patient searches + new Iti119ClientRequestFactory(), + FhirTransactionValidator.NO_VALIDATION); + setSupportsLazyLoading(true); + } +} diff --git a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/pixpdq/PDQM.java b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/pixpdq/PDQM.java index 427ec638c9..a9e3b35293 100644 --- a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/pixpdq/PDQM.java +++ b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/pixpdq/PDQM.java @@ -22,6 +22,7 @@ import org.openehealth.ipf.commons.ihe.fhir.FhirInteractionId; import org.openehealth.ipf.commons.ihe.fhir.FhirTransactionConfiguration; import org.openehealth.ipf.commons.ihe.fhir.audit.FhirQueryAuditDataset; +import org.openehealth.ipf.commons.ihe.fhir.iti119.Iti119TransactionConfiguration; import org.openehealth.ipf.commons.ihe.fhir.iti78.Iti78TransactionConfiguration; import java.util.Arrays; @@ -36,7 +37,8 @@ public class PDQM implements IntegrationProfile { @AllArgsConstructor public enum Interactions implements FhirInteractionId { - ITI_78(ITI_78_CONFIG); + ITI_78(ITI_78_CONFIG), + ITI_119(ITI_119_CONFIG); @Getter private final FhirTransactionConfiguration fhirTransactionConfiguration; @@ -48,4 +50,5 @@ public List getInteractionIds() { } private static final Iti78TransactionConfiguration ITI_78_CONFIG = new Iti78TransactionConfiguration(); + private static final Iti119TransactionConfiguration ITI_119_CONFIG = new Iti119TransactionConfiguration(); } diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119Component.java b/platform-camel/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119Component.java new file mode 100644 index 0000000000..331843ef5c --- /dev/null +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119Component.java @@ -0,0 +1,48 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openehealth.ipf.platform.camel.ihe.fhir.iti119; + +import org.apache.camel.CamelContext; +import org.openehealth.ipf.commons.ihe.fhir.audit.FhirQueryAuditDataset; +import org.openehealth.ipf.platform.camel.ihe.fhir.core.FhirComponent; +import org.openehealth.ipf.platform.camel.ihe.fhir.core.FhirEndpointConfiguration; + +import static org.openehealth.ipf.commons.ihe.fhir.pixpdq.PDQM.Interactions.ITI_119; + +/** + * Component for PDQm Match (ITI-119) + * + * @author Christian Ohr + * @since 5.0 + */ +public class Iti119Component extends FhirComponent { + + + public Iti119Component() { + super(ITI_119); + } + + public Iti119Component(CamelContext context) { + super(context, ITI_119); + } + + @Override + protected Iti119Endpoint doCreateEndpoint(String uri, FhirEndpointConfiguration config) { + return new Iti119Endpoint(uri, this, config); + } + +} diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119Endpoint.java b/platform-camel/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119Endpoint.java new file mode 100644 index 0000000000..87397bef9e --- /dev/null +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119Endpoint.java @@ -0,0 +1,42 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openehealth.ipf.platform.camel.ihe.fhir.iti119; + +import org.apache.camel.Category; +import org.apache.camel.spi.UriEndpoint; +import org.openehealth.ipf.commons.ihe.fhir.audit.FhirQueryAuditDataset; +import org.openehealth.ipf.platform.camel.ihe.fhir.core.FhirEndpoint; +import org.openehealth.ipf.platform.camel.ihe.fhir.core.FhirEndpointConfiguration; + +/** + * PDQm Match endpoint (ITI-119) + * + * @author Christian Ohr + * @since 5.0 + */ +@UriEndpoint(scheme = "pdqm-iti119", title = "ITI-119 PDQm", syntax = "pdqm-iti119:host:port", category = Category.HTTP) +public class Iti119Endpoint extends FhirEndpoint { + + public Iti119Endpoint(String uri, Iti119Component fhirComponent, FhirEndpointConfiguration config) { + super(uri, fhirComponent, config); + } + + @Override + protected String createEndpointUri() { + return "pdqm-iti119:" + "not-implemented yet"; + } +} diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/main/resources/META-INF/services/org/apache/camel/component/pdqm-iti119 b/platform-camel/ihe/fhir/r4/pixpdq/src/main/resources/META-INF/services/org/apache/camel/component/pdqm-iti119 new file mode 100644 index 0000000000..5039dcad11 --- /dev/null +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/main/resources/META-INF/services/org/apache/camel/component/pdqm-iti119 @@ -0,0 +1,12 @@ +# Copyright 2024 the original author or authors. Licensed under the Apache +# License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable +# law or agreed to in writing, software distributed under the License is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +# Camel registration for the pdqm-iti119 component + +class=org.openehealth.ipf.platform.camel.ihe.fhir.iti119.Iti119Component diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/groovy/org/openehealth/ipf/platform/camel/ihe/fhir/iti78/ResponseCase.groovy b/platform-camel/ihe/fhir/r4/pixpdq/src/test/groovy/org/openehealth/ipf/platform/camel/ihe/fhir/iti78/ResponseCase.groovy index 02a8df84bf..a6ff2ad878 100644 --- a/platform-camel/ihe/fhir/r4/pixpdq/src/test/groovy/org/openehealth/ipf/platform/camel/ihe/fhir/iti78/ResponseCase.groovy +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/groovy/org/openehealth/ipf/platform/camel/ihe/fhir/iti78/ResponseCase.groovy @@ -24,7 +24,7 @@ import org.openehealth.ipf.modules.hl7.message.MessageUtils /** * */ -public enum ResponseCase { +enum ResponseCase { OK(AcknowledgmentCode.AA, "OK") { @Override diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/AbstractTestIti119.java b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/AbstractTestIti119.java new file mode 100644 index 0000000000..ffebe2ae4f --- /dev/null +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/AbstractTestIti119.java @@ -0,0 +1,59 @@ +/* + * Copyright 2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openehealth.ipf.platform.camel.ihe.fhir.iti119; + +import ca.uhn.fhir.context.FhirVersionEnum; +import org.hl7.fhir.r4.model.Bundle; +import org.hl7.fhir.r4.model.Parameters; +import org.hl7.fhir.r4.model.Patient; +import org.openehealth.ipf.commons.ihe.fhir.IpfFhirServlet; +import org.openehealth.ipf.commons.ihe.fhir.iti119.Iti119Constants; +import org.openehealth.ipf.platform.camel.ihe.fhir.test.FhirTestContainer; + +/** + * + */ +abstract class AbstractTestIti119 extends FhirTestContainer { + + public static void startServer(String contextDescriptor, boolean secure) { + var servlet = new IpfFhirServlet(FhirVersionEnum.R4); + startServer(servlet, contextDescriptor, secure, FhirTestContainer.DEMO_APP_PORT, "FhirServlet"); + } + + public static void startClient() { + startClient(String.format("http://localhost:%d/", FhirTestContainer.DEMO_APP_PORT)); + } + + protected Bundle sendManually(Parameters requestData) { + return client.operation() + .onType(Patient.class) + .named(Iti119Constants.PDQM_MATCH_OPERATION_NAME) + .withParameters(requestData) + .returnResourceType(Bundle.class) + .execute(); + } + + protected Bundle sendViaProducer(Parameters requestData) { + return producerTemplate.requestBody("direct:input", requestData, Bundle.class); + } + + protected Bundle sendViaProducer(Patient patient) { + return producerTemplate.requestBody("direct:input", patient, Bundle.class); + } + + +} diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119Responder.java b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119Responder.java new file mode 100644 index 0000000000..789f42fc22 --- /dev/null +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119Responder.java @@ -0,0 +1,20 @@ +package org.openehealth.ipf.platform.camel.ihe.fhir.iti119; + +import org.apache.camel.Exchange; +import org.apache.camel.support.ExpressionAdapter; +import org.hl7.fhir.r4.model.Parameters; + +public class Iti119Responder extends ExpressionAdapter { + + private final ResponseCase responseCase; + + public Iti119Responder(ResponseCase responseCase) { + this.responseCase = responseCase; + } + + @Override + public Object evaluate(Exchange exchange) { + Parameters request = exchange.getIn().getBody(Parameters.class); + return responseCase.populateResponse(request); + } +} diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119TestRouteBuilder.java b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119TestRouteBuilder.java new file mode 100644 index 0000000000..92909a8966 --- /dev/null +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119TestRouteBuilder.java @@ -0,0 +1,45 @@ +/* + * Copyright 2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openehealth.ipf.platform.camel.ihe.fhir.iti119; + +import org.apache.camel.builder.RouteBuilder; +import org.openehealth.ipf.platform.camel.ihe.fhir.test.FhirTestContainer; + +/** + * + */ +public class Iti119TestRouteBuilder extends RouteBuilder { + + private ResponseCase responseCase = ResponseCase.OK; + + public void setResponse(ResponseCase responseCase) { + this.responseCase = responseCase; + } + + @Override + public void configure() { + + from("direct:input") + .toF("pdqm-iti119:localhost:%d?fhirContext=#fhirContext", FhirTestContainer.DEMO_APP_PORT); + + from("pdqm-iti119:translation?audit=true&fhirContext=#fhirContext") + .errorHandler(noErrorHandler()) + .transform(new Iti119Responder(responseCase)); + } + + +} diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/ResponseCase.java b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/ResponseCase.java new file mode 100644 index 0000000000..0e4448524f --- /dev/null +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/ResponseCase.java @@ -0,0 +1,21 @@ +package org.openehealth.ipf.platform.camel.ihe.fhir.iti119; + +import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum; +import ca.uhn.fhir.model.valueset.BundleEntrySearchModeEnum; +import org.hl7.fhir.r4.model.HumanName; +import org.hl7.fhir.r4.model.Parameters; +import org.hl7.fhir.r4.model.Patient; + +import java.util.List; + +public enum ResponseCase { + + OK; + + public List populateResponse(Parameters request) { + var patient = new Patient() + .addName(new HumanName().setFamily("Test")); + ResourceMetadataKeyEnum.ENTRY_SEARCH_MODE.put(patient, BundleEntrySearchModeEnum.MATCH); + return List.of(patient); + } +} diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/TestIti119Success.java b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/TestIti119Success.java new file mode 100644 index 0000000000..79ef0b4a66 --- /dev/null +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/TestIti119Success.java @@ -0,0 +1,165 @@ +/* + * Copyright 2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openehealth.ipf.platform.camel.ihe.fhir.iti119; + +import org.hl7.fhir.r4.model.Bundle; +import org.hl7.fhir.r4.model.Parameters; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.ResourceType; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.openehealth.ipf.commons.audit.codes.*; +import org.openehealth.ipf.commons.audit.utils.AuditUtils; +import org.openehealth.ipf.commons.ihe.fhir.audit.codes.FhirEventTypeCode; +import org.openehealth.ipf.commons.ihe.fhir.audit.codes.FhirParticipantObjectIdTypeCode; +import org.openehealth.ipf.commons.ihe.fhir.iti78.PdqPatient; +import org.openehealth.ipf.commons.ihe.fhir.support.audit.marshal.BalpJsonSerializationStrategy; + +import java.nio.charset.StandardCharsets; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * + */ +public class TestIti119Success extends AbstractTestIti119 { + + private static final String CONTEXT_DESCRIPTOR = "iti-119.xml"; + + @BeforeAll + public static void setUpClass() { + startServer(CONTEXT_DESCRIPTOR, false); + startClient(); + } + + @Test + public void testGetConformance() { + assertConformance("Patient"); + } + + @Test + public void testSendManualPdqmMatch() { + + var p = new Parameters(); + p.addParameter().setResource(new Patient()); + var result = sendManually(p); + + // printAsXML(result); + + assertEquals(Bundle.BundleType.SEARCHSET, result.getType()); + assertEquals(ResourceType.Bundle, result.getResourceType()); + assertTrue(result.hasEntry()); + + + var patient = (Patient)result.getEntry().get(0).getResource(); + assertEquals("Test", patient.getName().get(0).getFamily()); + assertEquals("http://localhost:8999/Patient/4711", p.getId()); + + + // Check ATNA Audit + + var sender = getAuditSender(); + assertEquals(1, sender.getMessages().size()); + var event = sender.getMessages().get(0); + + // Event + assertEquals( + EventOutcomeIndicator.Success, + event.getEventIdentification().getEventOutcomeIndicator()); + assertEquals( + EventActionCode.Execute, + event.getEventIdentification().getEventActionCode()); + assertEquals(EventIdCode.Query, event.getEventIdentification().getEventID()); + assertEquals(FhirEventTypeCode.MobilePatientDemographicsQuery, event.getEventIdentification().getEventTypeCode().get(0)); + + // ActiveParticipant Source + var source = event.getActiveParticipants().get(0); + assertTrue(source.isUserIsRequestor()); + assertEquals("127.0.0.1", source.getNetworkAccessPointID()); + assertEquals(NetworkAccessPointTypeCode.IPAddress, source.getNetworkAccessPointTypeCode()); + + // ActiveParticipant Destination + var destination = event.getActiveParticipants().get(1); + assertFalse(destination.isUserIsRequestor()); + assertEquals("http://localhost:" + DEMO_APP_PORT + "/Patient", destination.getUserID()); + assertEquals(AuditUtils.getLocalIPAddress(), destination.getNetworkAccessPointID()); + + // Audit Source + var sourceIdentificationType = event.getAuditSourceIdentification(); + assertEquals("IPF", sourceIdentificationType.getAuditSourceID()); + assertEquals("IPF", sourceIdentificationType.getAuditEnterpriseSiteID()); + + // Query + var query = event.getParticipantObjectIdentifications().get(0); + assertEquals(ParticipantObjectTypeCode.System, query.getParticipantObjectTypeCode()); + assertEquals(ParticipantObjectTypeCodeRole.Query, query.getParticipantObjectTypeCodeRole()); + assertEquals("family=Test&_format=xml", + new String(query.getParticipantObjectQuery(), StandardCharsets.UTF_8)); + + assertEquals(FhirParticipantObjectIdTypeCode.PatientDemographicsMatch, query.getParticipantObjectIDTypeCode()); + + var fhir = new BalpJsonSerializationStrategy(serverFhirContext).marshal(event, true); + // System.out.println(fhir); + + } + + @Test + public void testSendEndpointParametersResource() { + var p = new Parameters(); + p.addParameter().setResource(new Patient()); + var result = sendViaProducer(p); + // printAsXML(result); + + assertEquals(Bundle.BundleType.SEARCHSET, result.getType()); + assertEquals(ResourceType.Bundle, result.getResourceType()); + assertTrue(result.hasEntry()); + + // Check ATNA Audit + var sender = getAuditSender(); + assertEquals(2, sender.getMessages().size()); + + // Check the client-side audit + var event = sender.getMessages().get(1); + + // ActiveParticipant Source + var source = event.getActiveParticipants().get(0); + assertTrue(source.isUserIsRequestor()); + assertEquals(AuditUtils.getLocalIPAddress(), source.getNetworkAccessPointID()); + assertEquals(NetworkAccessPointTypeCode.IPAddress, source.getNetworkAccessPointTypeCode()); + + // ActiveParticipant Destination + var destination = event.getActiveParticipants().get(1); + assertFalse(destination.isUserIsRequestor()); + assertEquals("http://localhost:" + DEMO_APP_PORT + "/Patient", destination.getUserID()); + assertEquals("localhost", destination.getNetworkAccessPointID()); + assertEquals(NetworkAccessPointTypeCode.MachineName, destination.getNetworkAccessPointTypeCode()); + + // Query Parameters + var query = event.getParticipantObjectIdentifications().get(0); + assertEquals(ParticipantObjectTypeCode.System, query.getParticipantObjectTypeCode()); + assertEquals(ParticipantObjectTypeCodeRole.Query, query.getParticipantObjectTypeCodeRole()); + assertEquals("family=Test", + new String(query.getParticipantObjectQuery(), StandardCharsets.UTF_8)); + + // Audit Source + var sourceIdentificationType = event.getAuditSourceIdentification(); + assertEquals("IPF", sourceIdentificationType.getAuditSourceID()); + assertEquals("IPF", sourceIdentificationType.getAuditEnterpriseSiteID()); + } + + +} diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/resources/iti-119.xml b/platform-camel/ihe/fhir/r4/pixpdq/src/test/resources/iti-119.xml new file mode 100644 index 0000000000..d353574dc6 --- /dev/null +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/resources/iti-119.xml @@ -0,0 +1,28 @@ + + + + + + + + + \ No newline at end of file From e5d7277dc9158f193780c5714386335f6ad2381f Mon Sep 17 00:00:00 2001 From: Christian Ohr Date: Thu, 4 Jul 2024 09:05:43 +0200 Subject: [PATCH 2/4] #448: start with iti119 --- .../iti119/AdditionalResourceMetadataKeyEnum.java | 15 +++++++++++++++ .../ihe/fhir/iti119/Iti119AuditStrategy.java | 2 +- .../fhir/iti119/Iti119ClientAuditStrategy.java | 2 +- .../fhir/iti119/Iti119ClientRequestFactory.java | 2 +- .../commons/ihe/fhir/iti119/Iti119Constants.java | 2 +- .../ihe/fhir/iti119/Iti119ResourceProvider.java | 2 +- .../fhir/iti119/Iti119ServerAuditStrategy.java | 2 +- .../iti119/Iti119TransactionConfiguration.java | 2 +- .../camel/ihe/fhir/iti119/AbstractTestIti119.java | 2 +- .../camel/ihe/fhir/iti119/Iti119Responder.java | 15 +++++++++++++++ .../ihe/fhir/iti119/Iti119TestRouteBuilder.java | 2 +- .../camel/ihe/fhir/iti119/ResponseCase.java | 15 +++++++++++++++ .../camel/ihe/fhir/iti119/TestIti119Success.java | 2 +- .../fhir/r4/pixpdq/src/test/resources/iti-119.xml | 2 +- 14 files changed, 56 insertions(+), 11 deletions(-) diff --git a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/AdditionalResourceMetadataKeyEnum.java b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/AdditionalResourceMetadataKeyEnum.java index 5c26feff52..7514ea7ac4 100644 --- a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/AdditionalResourceMetadataKeyEnum.java +++ b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/AdditionalResourceMetadataKeyEnum.java @@ -1,3 +1,18 @@ +/* + * Copyright 2024 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.openehealth.ipf.commons.ihe.fhir.iti119; import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum; diff --git a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119AuditStrategy.java b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119AuditStrategy.java index 50d53d531c..420e81b7e5 100644 --- a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119AuditStrategy.java +++ b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119AuditStrategy.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ClientAuditStrategy.java b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ClientAuditStrategy.java index f3f9a4cccb..9401d32c6b 100644 --- a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ClientAuditStrategy.java +++ b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ClientAuditStrategy.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ClientRequestFactory.java b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ClientRequestFactory.java index 1e7ea5d837..3ca3eb8287 100644 --- a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ClientRequestFactory.java +++ b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ClientRequestFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119Constants.java b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119Constants.java index 4c811c43fb..035926993e 100644 --- a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119Constants.java +++ b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119Constants.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 the original author or authors. + * Copyright 2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ResourceProvider.java b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ResourceProvider.java index a94f65a911..400ddae228 100644 --- a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ResourceProvider.java +++ b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ResourceProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ServerAuditStrategy.java b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ServerAuditStrategy.java index bf01753548..814ff4cf1e 100644 --- a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ServerAuditStrategy.java +++ b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119ServerAuditStrategy.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119TransactionConfiguration.java b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119TransactionConfiguration.java index 60328c8cc4..0d3be67576 100644 --- a/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119TransactionConfiguration.java +++ b/commons/ihe/fhir/r4/pixpdq/src/main/java/org/openehealth/ipf/commons/ihe/fhir/iti119/Iti119TransactionConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 the original author or authors. + * Copyright 2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/AbstractTestIti119.java b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/AbstractTestIti119.java index ffebe2ae4f..3d2de299ba 100644 --- a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/AbstractTestIti119.java +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/AbstractTestIti119.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 the original author or authors. + * Copyright 2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119Responder.java b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119Responder.java index 789f42fc22..c3f3571a85 100644 --- a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119Responder.java +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119Responder.java @@ -1,3 +1,18 @@ +/* + * Copyright 2024 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.openehealth.ipf.platform.camel.ihe.fhir.iti119; import org.apache.camel.Exchange; diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119TestRouteBuilder.java b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119TestRouteBuilder.java index 92909a8966..7a26428bda 100644 --- a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119TestRouteBuilder.java +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/Iti119TestRouteBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 the original author or authors. + * Copyright 2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/ResponseCase.java b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/ResponseCase.java index 0e4448524f..1347b5413b 100644 --- a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/ResponseCase.java +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/ResponseCase.java @@ -1,3 +1,18 @@ +/* + * Copyright 2024 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.openehealth.ipf.platform.camel.ihe.fhir.iti119; import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum; diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/TestIti119Success.java b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/TestIti119Success.java index 79ef0b4a66..8243f0360d 100644 --- a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/TestIti119Success.java +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/TestIti119Success.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 the original author or authors. + * Copyright 2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/resources/iti-119.xml b/platform-camel/ihe/fhir/r4/pixpdq/src/test/resources/iti-119.xml index d353574dc6..e3f303f570 100644 --- a/platform-camel/ihe/fhir/r4/pixpdq/src/test/resources/iti-119.xml +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/resources/iti-119.xml @@ -1,5 +1,5 @@ -8yo`jGne#SR`2pI4P__Ou_0Htq^tw@(*wu z#-9ZD)M`wYTd2LgJCHu>v7u31==8*$#aUg0AKb5&HGY;tc>j(_o+L5@+0isu^}4*A z*`>fJw!tiRfhiujW4syw^wF>_m#Jy>wQ#{ zNt&r5Vv`j0u2&ZI^%jmueM{}N-BMd%cm>6aIm6{FuFf)WHncE9If*)iN^?}Bf_Zb= zrKMp%g5ltFEb*-3<7;wv?{w<4+lslspjOTPr31$Z2t<2xtI3?76ez`>hK5w$j z4-5TRH7_5UK}4!U9lY)-o)w?qx)=QR74pF=USIpNdl`)%0F4UkZ8TuWa&lzlJV!we zB%sGiwX*P}FlW@uXRtL4OkU+`Y05*f7mp~zxRZkQp^LmSP2BkX~gK8J1BQK zu6dh7Ro|S(vaJov1XNKd9at=hOL-JR*{`NBUJgB8rq1PpV3L=96c>7p`ulp64rGZE zdQi`$u1lMS;yA4GFjGq@_^|Oq@PEoBP!d9A3XpqxRCf4Y0rzb#b3UGk>{}H3D?5Vs zZGLwVnH{+Rf#{{5WJ0q_bKXr2eNK8Zm_ma+c=!aVJ{Qu^cLq`y9HPQlaSWiqa+D2W zC6<$nGFjP|m$*?id+sJ)Q9PtPe^+ufdk*q}O74%82n?W-drHw4BwTE1MCDq)hc-$v zk7ZJjxe;}AjbcYdO`4HQ^FxbwWoa@5FU7!aJ*n@D?lwcq}ckel51c1T^Xq4F8rh9Hhhb6k0gPHDDw%DtFIgNnl!Z~r?W_* zLohcGG}IN6Z9BMxZTaCkV3P=o4jD9VpqUEWMI<~uv&XGfb*~}zaji_A5$CWs2tj%} zI!#3x;J51LUM@xatDuMV>f@~EcSE-EbaeVA9K0Ux*bG`a+wNo|MOeuUGjmoCT981u z)QL<}mJ~;>*v3#dALN@zoNc<0R2hOq^qvIB=tjrmwt4T$nrP7_(IV2G(^=f_FZS1@ zs`P3o*uGWh>#f9*+4HP8nUF;D7i>s2eNMSoq3DJgiKQg$_Kv2mg9GhUZi*K z2nR@CNX1jYG?WFf$+Ha3{#9~sOz_5mN-or~A*_6SY$I+(=GQ(x4X_RCZ1NqbNr*4q zUQ)za{cjDcIpx9I*bS{jG@F4oNMw{T<)BzKCe}ICA`SJqXeD_6D7ot>BJ;Vx9oaQ- z5gs(AFs?XMAsVm-;1Lw4TIL_R2ARuD<>*)cAi1XHe(3w|nUblcPYBVX#tq6ZMgr@>Dra34 z-yru`%0YM1Bj1r+B7rIYs}7J|2ZwJ73+Owf|L6J zDvQSbw7j0geob-OI(4$&z9a6f_+P{l{K5ONzWe_%a;LQ_hkIerxq1G}$lU`Pxl4a$ zWBF%+v#|r&-e^d-Q@WBR*!^IyaAK_}Cbx{B0kE1X`cKSp$JxAeX<#27zS>1hWO6A` ze<4EjEoo5$E`j~m>`%dJp;JUvP zx!DwsQOUi}5x&9)yp2#lhPJ7_OP$g;{Mzl?hRT4)PxGjnfv71MrfN3|QQ+}&uxgJX zvzaMV$8ule@DGv82qbc~--+CoG!XuZbeQn!NsSk)J;QyBq2af!9LXnn0+f$3$>OFLQ-X0<528jQ4Aq=*qS^a}!cAds#E_TUYDd zrGMBjX)2{c$;cFq+KXU#KWZF8C|85L5>R1O6v`L*9^>Bo5!4oV1l{;TPg{8i{}o}D0`41dAt9}kCoViFyBu_Q>i0I;>fL%lGc}vO!1UUnr!snmu64_Pf#h7YDj_oKC3v$H;wsH*#yFwJLvN zRMZaujoi=r5kMoiMq2;f$elrr1RA*mwvo(Z<@Yg(e~jEa@M&q^V4#s(2Q+f+f!f~9 zUWdV60#=CqY@B}5tktqI0L@A!{!{+X1H%Ildx|#_L$3ikd0vpOoLl&Z%-e5V=3X~- zRU{L_zTblSf$v1%P+mlaY*=7$*CmA!lQ>`sn`z}|BooPuG!X-MEn%Glg;eYRs_n%-l4fnlP7g zY=GjMqL`b*yF z(@K`)rdthPTo!ARS^(0cD!Fi>QV5JA(+_m|v|0Ni$o?ePphxibuhLbR4th$`cP2xu z+_u8T`e^L5{+S5g&5J!qCj`&7*)EV+M(ub(iTs~@sEB?^H@Q@P%-Xjj@vV7(Y%qmB zrAZcfIvQ4KKas{T#v?o48vK+{G@|x248<34^yh*^j@qHjpga#b$O#)-sm98B1V6Em z8>2W`w4Gs*?|pIn9^|j2nfLL#FFhm!d+N5xyc}YF`tyiHrDbbtc~+nUcZTV-2%kg6 zOOoriAzb;NR6Z2zRo;x9FiSJVs+3oGbgdniEPQPZ@fc~dWB5cS0oV9hlrp%3Hk^;Z zAF271kQ-KOVH^uZ#Pouj)}Zn@gR2ZV$HO_(_SDNU5hy-FbD;>BHQOXK?l(Xi7cz8d z7#SDa;FX7+*@zC3^#oHrU>JFaTxP(3i3k}N!k(eI2m!1{*dO>IM8y7~9~NliEg)dgBT{mF3?lBeW0Vevf8e*9rM<)EsLNTVU1mC5AN zzSU>a=R`KmVM1$!v=%+y(!!1t7j>{2KE5sKBX(C;^|A=;mR|x^&CNl+CFAl-2(f~h z$xT+xOyp{s=&r64E+Iml=qOJ+Gd`~IU?EFXe}}WqbLz2Iu++lzL@Q;rl}-bxcx3Kk ziV?>}?%IbpTz=7FP;<8#d;1u;80rO7PV^z_p%y! z);3jJm-K4&)+jqs`+N04JG`2T&myJEO6F4f z2Yb`^eLxUt?>DuvO)?9u{>?hE7lD}AV5b<+mc3 zY-NldLazuKPYwEi)s@Wu)RpUOU|mT_MJBgeApy92+574iZW-mHwd+%a12_QH(d(PE zsR_2U7}j0C7Id5&PSMS7^d-IbUiR ziRo>t6EG^O(I}xj6O+iv<)kkDcuS4(hUBhHKyN8fKyTY(t6KZrTiS{K93-zd-q!-L zsGFZXcXN>Mf0VT7+G;!?XW;N}VyOcr7U2I6e-ev_OMicq@bP|LgZLKGvU~R6N{!#Z=NGeCKWKTIR8y7iq6_?|C3nc!pJp+ zAR(Q5^G5$BmeGF`%P}yqEQtCYfy{zir=m-A1Ge@lA6;KdC$f<7U|H;I3^8okzI9zX z1%$GPjHjA5M84R*sY+!)(i4Ab1S-ck-~LgK&%VY26(+MQ+-}p1{L~HWu6t;kP0R5D zaO<8w%5mi}4vz|b*%<_6>Z31gEn_4d{e929f6{~=oI}BQ2CUUxxTBa4>B`D2cLAb8 z8CHO=S@LfX$Y%3`ycrh;8yN+xOhhPY5IH%oTdeRqHV7%{IkI#k(6G_Ea}us>%8>3H z-P|IVLUCjSTjJ@%;+yupTY^@7G}I5<`av)j4;r0KnnKd^eU5Jye<&t4!Cox)%=G}S zU2|zQIXBEl2RL|FsXE<~K%m4#{auE+&QH|*%N)}Jnd5O^^#Zv58q@OJB1w&m@%E< z<}oOldNaG$omy(vw)kU;+TZ;1CwR?~8Abid-a^NOW%$4|P6^?(j}=UeAKJz2m7)d& zE#Xuk4T{#|ph`CN)t>@caD{`?xQdiP_n?1~V3~0NGYdpNFtf00)A>;Xh(d|6_m!CM zaomBKg@|?TZ)TCJ6!o5k`I}iBi?iZ^nZ?9??dVTt5!B`E*t0vRtnbeIC$qG`Uq1sg zi@Q?D!ipUhHYN1F=FEZpC$x&J$}c>O1{oJ^}M*#DbZ zRDhX95Ca8vW+d8QzSIqvS=@k`<&ox}%%Yi!En~J&T9XmZ`<_|!1nPtIcrk|+Njk^^ zTi-KFw6B;0i&!ATprPmgl7^Pq|N{?uHvyXoF zn0BQQ2i+dAIsz)2Z!4j$NLiOi z!o8`96nfg(o|aOYwpl`%QK49g)xoLdY!SF?gtEvP;@^6F1n$-qvB=9d1qudbbD6j( zAPX%L4n!}?j4SfRDfmxA^xYvfW3$)|K~jl8U>u$+l{Osw*Vm9rw4!#*k3Y?QRvFIj?c+H+fpuue($nW>E&%UrSGH0{Q=dv3oFj&C5?-%<$!M*R?H=wG z6k){@9v^JGEk`7mQdjq(z>-(D(!)6gpAR^}8QC@jHkWG>mvB^Kbpv%s(|Wg{8D#c- zOswoApu)ENg5!6}c1GDdq$hzWv07|wdIPWQn$aGlYXz$3wK|;q?D^GJtf9DAqR?OI z*%}2OPEX-TXJu|lo&39T`XGBKsCN{Vx`)T}>n+`U9%&K+Tr_dT&5nxs>;x=i_B;nr zJ8t;25ka#>RV>)RbHE7M@*}m^rjT7ss0UUmLP;N96hgCLI^FB6E}WoQFUFT?vZ!&0 z#$11oVy9JiBX{lALOh4{Y}LMHXZi!#B(3dk`+cD@fk8w>ZcW)c$Rr731q7K)X=R@5 zW>VdxwKlBm9=&%iu~k+y5JOUU{b_`2rM@<;^V(Mw0m zP!on$0D4Te{1s(JtZ=!%zhvlHZXtEN)e8`sPGnrW_WZe|Jy|Fplo|J*slF;HOVXzb ze2zk+XPOlURg~6N>!lO-`VEQ@z+lRS#ebg5))h2b5fgVRB^+*FSsA^PPX z8+W3d1S{-u*JXvFPb{n92;>t{y3x?;g`EPDUX?B_T-rX}zjaWH*$^6A&~~jvoUOMw zPX9N@#P%PKspk|u==i|5DmUDtYYO!BI*MCORbL1A7~y;#!TlHq%`szZ?IP%_KI@gr zHdq|QAd&nbCtRWGSM`qpbzVr#)+1!;bDxdG@976??>JLFDQ=KTBv*;uiSp5EbRgI+ z`lwAoy^xI@3pOjp%v|?!NGjF{dNTMvuB|N_!Q27?CiPOaW&9iu>sZ~p86H=2hWi$D4-ANrup+hUr&C`k4gJV7kpA1%bbR6*dEWYbmG*)x4!$yB`g(n+&8~w zaZXnyi09I9eX&ws-d>#+F@m$H6 zjb8K<%slWa5(vDCaDulBRGnMwH5MjfET_trS zse0#_od4mN=7Aj3z+a9D-swLaQ@3a9BGLNW zZ?v?8XA))sexj%D#gwM_#KYjh5Df+5f_}nZ0w6MGSuGu(&7NQEYGNJn3mk6^Af7uN z+Jmi)oJ=e8m_r_f+YL_~3|kgO0VyVSG<8?j)P-|bMP19cA1|PH+;yiF;rvc3(dGfJ zP2YjOqRhIMDxL5+C8)=}0N{%2#b)Pz6BK=6#@Yk%?3(H1B~EmE$K~|&{FK-2c6fOk zfd00&?p6J4>oTt20w%Io@g79auGK3#h~1Pu8YnJWE`$wKm0`@L(e zZ%(-D1K1R|MEfLh)FA!A)U)SfLoC6Tc)VromtyO5@?y|PFfKui)zwFv$38a!#NNFj z4rzimU>RTIC5y9sc)sY`^p0^};J_7l<-puJR@7ry>%1}PJMs`>6zbCAWcKdC%6&;8 z%YsVH9!EOo;z@Xz+{`}P0&o%8JqHj9VuLJXJ^HwLOrD?bb-XY-4tX=K_c;rJgZv`I zqb83?X6Lw+*d}017(rsKX}*qMU-g9P*p==ou*ONm=@a1eklR9-B@`4n>cSnsYJftO zLhh-w{_!&R+>=&^TAS+OdW7=Q^%4dbp>NeJ1LAGH)|I|fseK3=t9Fm5VZZ=B(;kq| zYLzRnBAy5JW*Nimj!gHY+pDDruS`HWq zfok-U{Vr}!uD0dh&r=1agl`YmFW1Mv>>+%3x_!<8?#%$C7l+67`vI50 z=Qf+X>l*^ECXQ$Bn2*of7trgQ-aeo{GMAe}5*!lGyCVpEo|l)WDG_61he#4L7tkRb z0kZ-R@-Eg}!iM3TAwYi&wp_|>?{fZY<->&m)k}rfAu7c)%kR` zrQT{k?4`KK13a7B5?;`=c=^^h-tHgHBV=rb;GX&}9WP(Mj$A(O5hiRMy4pM6$UjU) z+#YOicJayj+z)QPJ?&}iA-N00ym`Kvx4ynqKJ1M=eB0#pzFvH`>8Mj{8$xpN`ThG< zz#aOC&tgti2vAZpwW+V)1czX=5+a>K1>qux;@AM zwjM%ecV~JS@jN{q-wsl)7*jL(n_KYCcrVT+Qc@Cp2qFP*i!)bKU3Xu-G0%tOy|axr zi-%HHLoTfE*MD7Lc4cJ&xMjPZ-xe>dvtO=dZ;uyUe2|dxbuV95)p$xu7E>q|Mp=#MnXYJRqe)941LTSx7W4z!}17FU3vkkOC`@!NcXcB&aE9i7xK@# z*Ua4Qas&i?8$RriI9_=7J0&H6%v**S@7KGXWr5cMwTmvdb{DT=nfM-gkF$Xlj)z031n#av`KdaOI?(o;Il!|W~#`mX>dr&o8s z4nEm3eC-4rY&UKC5F&M4w{f>~EI-Zod4>{o7n-oU;KC@O-JQo^(yOUUroOW5xuK%(5o zAXXw0wQ^H#SCh+$Uw1L0y{;J~tSmr&?y{fOm%a}L@&pz?q!uO zVBH#8(B1-rV^k5{ro_(BQ}9B%WI1^*s?!Sb;-TR3>&oNY3xfIggLZCARM%ULIy?K$ zhIoYBtTwQqkbPA&^|2R1(JcC~yW!-C3_KKhsGRgf6YFJexeBsq(NaKhuJXAfLEiv= z5X6o3v19t$of9IpMXLx~uiE#tdp*FTqeoNSsvGC*mXj}N>*pUV`j~y(>>4)fgeM(yDFLP7DVf1PQ_P(B3F|0tDeY+_gIi8EA2!{$ z43uP+FoZ4-;Qv;;vB&yV&CTyf$*q~rbGK2$*na{}RbC^wg7?j!85WZ6b!=z_+odRV z3pbO#efx_&CX83*xXkOzm#a?sZvRfavilNXP;tppJNITxYg^z{`^M7ITp6RJHx(7K zvDKlA2Cvu7k~H8o>euff_uZX}kjK{W(Q`^9qt`nezcfMlCkbO;3J_hoZho$01ENa} zFbGgCWBh4j>-Zmm=#n4HdYHjI{5!gIeJp(6@*%lAGd`}YujY9e3J4t0Ay!p5JB?YM zS+5I5w5VY`U!uLZbd+sVWHFKS=!nM%nhiDh5_9#wqf43C6Ozs~I4S#*522)VMKfMx z+5e(TGLx$FPo~=cqD$2n@acciB{;W(36hI=9;xD@`KWYvoU1y z*dGMn8aJ40=41I`8FrqKOW9_>E@XW2=B82R06eyvItO>DBm*B;vFOjM^f(S!`(lC} zF1s8>r-q}>cGAxnWJgm`QhAv|qJ z&V+N`KW!O3Sv_xoFC!tcqYrr2A~(jZRM3!%mUMP7eRO;krI6KaQHDSnvxE=PzC?;$ zc$bq>u9k%5XP#^}cqwMi&mb2rHUhePR_)P}sndG9i@q*oQ=4G?G&_K&C4{6?VWreH zY|x}(_ADK)4jgR300URkD<7ABeMxXzl)%L5L^i%BVCiK;7=2l?ylhO#b2H|sIM(dE zD=KRhpXnSed>qP&)H1QB>pbND)pBxz-ab@0c5Lg?h`b-3s#>Etp6k3orvmcoW-(ZJ z9%HXk8Kjw(@|Ru8QPV)TSpS`pqRh5yJp&-UOm^C#Y|^+gOd}Ck>Ex^8 zRkm_~t-xKrRyg_Y_WkJ12anz5;w}?^?D#yw>S|0WH*!!4vQGSCRQY42$`5`r!k(w9 zK<&0qvQ81V%?mjKHsCQuU!#*bwAMazfXKb8OWMTjChu-i)6^jJg`Pq0o(`iyM%Oe#tX(iEdrtZz^Pq`-&Mii@R@m)%$66jXM_tPP?m3W zd`qZC|Iuut@(bHRA7!Y;@qRSJ#;R-e&6c9aq0nT0l(P=@AB$$&s(Yn z!({@^sZXTN|L{vmfB7ZPfB2S@GTx%c9RE^4pVX6M}&PPxva+`YOi0z6?|^x9CqGUGeb3Tn5BH_26L@nlwd-i}4z8O;TD{bB5LMwsIn6N$xun?BMD31^ zUQz`d+aJ8+4gAqOIXC4h+{xA)L5IC!)^=`U$a_ReNc}8_j3GVh zd(?2UVUfc+IMnW|k;n#<0Q^Ol4nHDpO{WxZf07GLj@P&7c}JI|M*bJNB+)yW5%!KQ zMdzBnO4lVxbgMdZm^5X_?6~w1wJr;)9v)sWm`V-Gf`xRAFqE6?dlfvbpi~ha^kq7I z1!24DH({-1h(rMk|4DRQ9(hym;dO_ZfhCLQ2ch|#^ zr8Kn}2Hw5<*dn4S{8kW=?waN*n@RPpPjg9;Z=G;~M91kYG9S|C8K5EIkY|7BxCPAY z;|Io0XOXF)IKg6Mq$1n66(>!uiFaKE<6D}38f-eRkO093vHxJ5Rl~Ez@*}&qg3_t* z5-<*T+bzU;%!xS*0|Sk{aT4-M6aWh4>i~~*$;ylS4TdcPLJ9aVL11fKG-;|--~ie$ zFMe9c$|s2aXEd!AuqWqVdogY*?0SBnvwCRiXZLRdW3SQ2!kq=J**-*mPY`=GMwvc{#u)361{EgejR!Q zOB=QfIneZVS2mualM=6G6$NJ{WDeypKjS7bkG8Yul%@=$LsSff`iV@!b|56ZYf9W_ zkNy0-ADP_6Va%`T3mL)xAJEddWQaipCZaa70!Nd5O!1A)w*@}y+U1Zb(jGU9H!s^% zj13e^E30ia42G-Bo1>Rs-KS05v|d(|p1GV&tFERM0c0P1i1yqwz8VvkX1&tbT%ubZ z=~+OHjLy0~0TNQyh!)POnnFC@^qv8=^=KY~DS0vD%rA2r>x^(k5q6%zxoD` zz`v&}+Bi{BsqX1^|9_Yz2&!Ztv-AX~Fa%_l%z2VD-kBxMzs!<7hWTG+Y487HmI~jQ zB@m#?DyANM6$v^c7+n8J+$3?U zc3&olgi)d8qwJQzGDH{ot+hf9H0m`4y~cOj`Z>aYap~jG;1~+AN1(HmC;<<$Jk^9) z919699^`r6oK)*&$SfVHkxJ(a!M(=~u-WCeJ!jB zYA!Y=KUsH$MJWzo7Gd}Xi9?@{*hg=32ruUW*D}jrYHh5;sy4Gv9DialZ{N9%EXWuQ zhIMiWeEB+LrW^RSf3%GC?|# zISCm}ELA=j=_U`TJ|a>)hmY;HZqAhm{F-`>azsizTWA6VbOX?h< zyv_;C3Bn0z1f;d?Pezs}ZXd9v7Dx*&1*O&vOlFfsm;u|{+ojdz3yoUy{~?x&-ials zLaQ|>7a*}z-vl(${}M~5{}M~Oj+14gdI7t6>Y8c&v096$Y1#@#_h4^Ql>@+6v^8_X zxS4UMIy?F>Y~sF_t|9&m$T3|PXv)CULBc{Cb zwtiNo2Hf}dxaI{d?y0lq488^B(S!;(7DQHu~ zRlk-pa=fYI$}{{}Lrq{$U2YVF61o{gGn9ZpSONbzp>Mj-K1c^8?uR{+@sv-P2llXI z7FZx8raZ_Gn0cR^S9>VYpFVJeZt*#as{1M2OAg6Ai=l1Gqef2Wne{whxoIMk1N{&Y zm@mgL$GC(apjVy12yO9HWmG>#LyqK79t7GJ2!C+o?vrE$;p^@L4*|nQ>?Bu&kF*tc z1rkfJ@tT+BcBI5;GMD&7Kw^pN53%IktrbjJPAcA%$o=c{(al;9nm`CyZk|~UP?3&6&q^LG~ zvZu3RaVu*lA2^MYe`P5!MTZNAhQ}r~v66nx(v625AgljkWFy-p4gcHj6J3L-s4qfD z7o0v_Pr3|6JLq|S$7ZiJwlj*+#Men)4wP&ww6wskc(?A4Dw0lH!8dCzewC?gW7!`R zb5#Sg(F%#+>pw!%Lv{ANBTN4OB1=MmPiKrKLGQ>CwF9^bC@c_Ja%+v22O>+CKxD~S zAJV`n9|5(jV6YdwN?m&9De@aeFeOQ;H(}e0T?16H)+%(ar+hDMd7jtKyRQ@g^p!T= zeWjKZ-u^=V{BL+hUvR$dxLro9kn)Yq;ad@xyCb?^z;)5=vC7r-6H%f_eceWZMUp^I z=uYI+B-s>W{Oc>_iCAk(La@crnYuKDowhta#_zS~c3b}7$Cc*9B6oXN?KdZW-z1FfmcTAVQnaZ@dBU@Ra*B^R#sObO6hlI}p~%C9 z0OCrY;Yq*1;y&7%v@2sBf4Y=Lol|TMK!BtbIC`k#{B6e(qM7*(?4wkyj^AlFbz1eq zw8#jA8S+Co6nQqjD``^>4^<*K-=RjSQ`^T+c&Kz-3A0DQH;0}1!}qbDP*gBp5iV;A ziMQk1IBvu0l~CQgZ@DPD;Il&r{dnA&taEW6t-(@T^VG1H5iZ60y?=jM`-E$QYde@9 zrwJ+ozVWEkwaGlZ%6fM3fclwvCA6*LQV z!Bm#poUZNV42N;s-H)H6lND=984XmT(qaU8`AOxDXS!&r)7txtSh-^ui7mj0arH)F z!^e;Cn)x(je%2(85vfGi5bvzeW6SOrm?sSYMr!m1PC^$7qmHbYLm47)j8@sX zwP=y*YuXZame-R2k+&?4k8mQZ88L@U@$DVXsqNQVic<(#1!<7RW;;9Oo+Z4-53!pk zL>VWIiu|b+{vO=H>Gz~E!4%2xSIl12ssRe3&nu<)H$O74#Tyn^CZGJ9)B5;Zq5@g> z+kUftU=UkHR|yIKJcC@j6P*G2>m8hV-xZOs5MdZKFxh80Pr@H*i230^?EGW~)``^^ zXMj;}?hDyy68=r)dk~8IOfI~<5O~j*_nSHPV`NR%`yKx7D_d1oC$-JcUg6& zzuk_U%0I`q`%UhHJ>V6j{ZS&xSByNeYOtjuD@VLF_#Cc+2HiT*St^ec_NyVaXwtoZ zx6=fit{CjME5ASJSx6y>V!yV86vnFVpnD4|zfvOEAG}G)^hGj;Pn?>i2{opXAF
    7^>*oXJXTxzxUqA4FRswGr(1X`*M|t0!y(dyT&Bbz>lF8$e!ef z$utHO2QLt1IbEJ$<-yId#6)=iwL}fy#o~Jb|2!H0>k{1IVFD`LNDWu+8yzH$kxm4!HNPd^xe2j)Il5Ryv`oI#V*+ zZ1`?Df#rp-r$A=JK>(@}b;*~iB>#U^m6HBPRf7Ifm8zu6x3K;IRHYXX3AcwTZ&Pqg z>i@V(4zhYovid3rMaH!b5So=t{HG3Z&FwMcSOXdh1}mj0kgM@0p_ZeQy`8$>+5&)3 zold;6Ir?kgqOOHx?DEWgr5IT$X)Bf5#_{rTgR+-tx0&)vI3adtQgAU!FTfS*z#Ai# zgELh{{;^76j&H+0PGPmL@Xno}PPqsPs|7C%R9=#Tn|4$Rqv-32s0N(|+EXnZ`of$% z)vnY4e1}I{mN8kJ^rKhxI@WgM)&O|-1QA6y^+09?Hr6^m=aiXo~K%Tg&F1;^{ z?wL ze{mD!R%>a|HvrX(X1vnH2vfKWEYQB4w%c}TI2lz9;V)TKc-Y9{$`!^D4t*&O4IWaw zm@8Yue5#+iI1!Ka0i`DzHfeM8r43|_>%x(S_aHt5RsxPm-}^$9u8DIL zY28FLVUBA5q-W?c7ec^1j|viwy?D*w)*3TAzvqS%=m=|CT)BZu-2}o)$>oZpoW&ES zA*zIpz;o1)BXahJT29_0FpLQesSmCO4oabQ1%KP$=1M)qFZ)g-nGRq44MKnjL>n?8 z@f@sS_x1CB#b~P6keVe~q=VA~=Lg?_+7H063 zgw0d(-7-zMDg1?m#ZCML^{*s-7xJ~kQz67nDox@t{n6f#&lK$YpStu6lqjz9A+dx}wW*^XnS--n7q%O>A#(Sh)0Z=P4z*jSnZs=oe>@p>A$tX(|3BIdUpXe%uLJc zQq9`>{w_MOC|y55_MiCs^QnlofLUlHi@;XmN#hbJfm&7wUUX)3L^282Nv(3Hn`N|Z z_=1INrYCvmEM#7e+-1w*1g}`H(iqn*NW3husn}+W7;G0WiF1c`JQI-2L9*8$;qJN`K>ymW_-x51(QKP+YGz35B%%)Ir3UHik?l`s1gm_x!d?)=DsyROfPHk{o;_=$MpZ6+D8~9FSyF>v) zIOz?JR-h@-8nAe-mbjqJbx{tiaXEJ{?O;9ybp*fh=nEeZEjaIN`&C?$MBL=-(t{dK{x1LjP$e!6O)iR6 z0ZZvGRB1LB%0=(i)k~H&s4OaBn1{}P1CfWln95S+o^L>GS4`)?DuwIq4OtOL={f`3 z(HJu#pn@v4mVS?-Xl>AbyL2;rrOHDYFQ#yVQAH>*k*8sjR|ZwA?Z%TYh0J8}Tz#73 zM{}^IOyr8M0gd03@k_fKm6hE5`V^P9+k?5*YQrjph)orBV)v3lJm?{L3>)>a8WZ?x zKa<+{Yb5LhMVP6gPFfq^jcHSXhHa+iZmzwiWc&=U=_*K;)@ynEt~>CTt8^$R$BXoV zQLtr2rBgXbsA;cAp9N$j*Cl8j?9x-MNBI!+pI z+Y}2~2}f6NlHSRqv-aR@z^4V~9DJ!&Wu;}GZz`fmJk`D`|3`%J*{Dss52U51 zIvo%ymmTPKRpH(aRKxE5Pzs^qE1Glxb2Fs}K?+nN;LiY5FBBa*>1aHzArAdkVh*{H zTCzyM4#6w?`Tw{|W!z@~S4nj1%T-Eu8-V(9m5wuKQh5noRaZgXKdC!+*e$V&K0t8CEu54?TQMFu~2JCe12_;|A$Db#4g)f%zYH4O#%GCdOKXZE(*WG@0sCIufE%Xe z$MN%gs4nO#)jI9A(|(+igaaV=Yue88EZZh3)~)x`w9a8xDFkl;OiD`DeCFpFv+1 z*nPiHi!&;3fYv-xkd7g{YBk=0bZvT-xMIER;BzQ)5VdbfgT<33!&%fBJ#S)5fwN!} zJgBpp$SS7-b~|&u4Qxsic4G7gQsNBK-wy>MYrJmmaz@%&P@B3BgofP1xF3p){9JPi4mt-O(R)Qhg8~J z$69YH5NL8@X4{4)NW8fhJn{MB&Am%zMRPdx# z;AWBYQ=M#z4V=R^t~y={br~Ur#p5WBwTMIwn`tzgIQeOoQ&3eRdrmsGkz`igvAj`G zSo}6E#=sdLWySaW!Gcd6J)q$1vYUn!I2^~B@WK*Ci9L6aYc31_Y zyD3ct)6?Qx9yoNdFg{at9%*R21K{giVU^KX4pqF#Rzt2+x-ONFvcrc)q)D)UUr0$wCRu(Mqe<#myk zXt0kS{K)eyut0OiTi?x(95S-Ci6RZ^+&21V73eRpwnhTGvA$F#qkpQ>13*=xaG?=} zUfNN=A$k>t`x#C5tSD4p1WAagD%jg0l-17E8;qzUn;8@J=o&}-B;m_s$3QFb_S3C!?UXq*J zW_K`1(4=4$y8g2o9u0iQ%#zHcXFACcE*;_QTS(dx&+-lJLE*9>2qO!=93~$%&`C!t z#0?hQBTy2LenR7AFJ)-fdd4jW?yc4jB$6#-#LYo zEP1Ulu)MZPawOyzg5MiRwWMW9t5`&F-Pl1`-imGSQH4nc(M{dHF8l_W-oV60wSp=o zfHg#O{Zf@OKiNQSu2A{ml+%AN%<0U~WLDbQ`^^dCv}j%x(#`6dwls*AWX?!uyAmwp z%@_AU+<-U+1N_aiJ)-L%um2(1n-RcpK14`WE115b1TuiHE*=uUeXvTCZBZ96k-0 zbsO$VE%T73L|@x=gH>0J$KZw)R}Jar0i{;U4#U-IjqLMq6DNV+h4<4hu0u+p78ypX zhZ=e}(C;Kub&X*&52N+G_0} zcn#Jgl^sf_7e*sA08t&+Y*T8lG7F+)iEa92<2!-%UM06(W|7T6j@f5r(IkDd&+^*! z2lrWyYW}Zvu?aP&Cn)UJ=8WX33w=~}8<&vR>AyDpTQ90VYh{~ww9fm~JZqQmD`)j9 zcvmbDo7V!+KbA$FUe5sKpC8RF$>&w~r20MQRjjbD))BPph7-*zFK`1$))7_mYlhMz zX=`#?%?rzwHq9<}eDW(zS8vJG-t?j@P4S`ZkpJ#gZ&TV0b_RGXQ-d79ll~i4jsccGphv*C$~ct& zcPpBeCYw^e5jGW&j;VBou_>;byqrVY#Bgw1OJkFDr}2l(^1I9*Vx=`AC~Miu%}0ym zXPlzs%dVOA08S1`T&U6HRdzL01Xo+1809jf(;#c!3N20|bI>)T{yK#1V|JLpd-c12 z6o2EtD%^wZ zd@jn5nXk^Phmt?%c*3T;ZL*BD$XAyobI^<({v53u3yD|KSXP>-gq;^R+UobzW}x_W zofjEoDap&#h@SLY zb!U*T=jlk*)EDV6hz9j!FQi6G53#a(N4wT0XFw8cK}A$n-r&Jrn^X-jX}k82a<)bP zLr*`F2;vNz#}qx9xsK>71Zkco2F+L4#GF#C0N=+s1b1#Vgi7vyM46kKD|HTz!qgpczQA{-~27Ul82 zs@I!Ut@4Ze_84rvyY-J}_s63YJJRCW)~mZ?Rcd*rFcaU~i1(BbadZy)BrgH~UB`?~ z5RJ*8VNKw$Lsi@`b7JI_P)y|cGy(v*n*h(U+Wer?llaIhnlbo0NB*@}wm#+W3G9=8EEm4EmC9q> zr-`>h6yBBX9qOB*I}7-Gj&WP~+8+!f9n-3bGH;8ersae6txWCI(NMa@Z+zk2X?hrt z4>2^hDs@O~Zr`Ad0n$>ME(E#yf21XCnx*m-xG!lb3Lq^xxWLN*q@`AXv}FFq$H&Rz zVO6}qUTZ~QVaOHIH4;C3E9bOmggM`dYO`SkF>%7RPZ50$Eb8>D=Xjf%;KY`cMK-&O za*2D80s-GH*r{ygOIljF6%tb?-RigvScSQ^45DZfU08^ZyrHI97cOXDf&Zo5oDh6o zcwIJUzxq-I-)pa^7wHdb$JaXr2SKM>69Ga8lz?Wi)YoC6U9gQ*0P{~;S}6`kr8=); zDO~LlYT?^HhSS9_dA$QQ^fVjTnVgwGc69Aqd-nU1mM|1eNmGhQQslq=la`*pq@_@1 zB^k{mtfTEapC!O$r($cJU74Ymmrt1PruB~8Xb;--AN=#yRV(wHVyZ83qX}lnG zG>A8R4z=nK4*`WLF1ndt$P-vRRdV%GZrG-@WZr3>VqAdT#8auqe!M7h)x7clBQ2F* ze@oMe21rZE0BK2?bbYfHF{mCKhZ3nhWU}-@Jr_AFr3w)rR7ARd2dN^d-kcMV=VZQ7 z*!o;2vZ3VgBMg}PisDeM&s-NEEd>^)zrQ(`TXHd7ggeY8>9bJjO+vU>G&0hUOZ5b! zYvKHPyeW1DXIv_6a~A?Ea$SO)(*Lob0vgzyr_ms5c~us{_Z$juLHF}#o|=Y_sV*w&>sOpWF>X3)9!bL+4-8(l>y#r1WS$gkbvyO*`^5mhl@kh<-ZUoVjK#lnr;T zS%ktrcKR)}IX%N#BqPfF)sT0YE#KySkm>KqTOzVeKT*19<5b(KSmSDFbCXdbTmIBI zB;ez#W}`mZ#O1tniZn;r zN}t&8nu;Wsr_a<|-={x>_^bghkaVU$KygtBe_^=yn9mSi-jx2@_xmmT72j@(Won<} z(Rdo}4}~s0yX9WR+NCOAf@vgVHlHgWSG%i1T`lM-kkf?xsa)vNO|%jY$~(kVJG1}au0t=bo8 zhwW|!rosQF3X7ZJTeM}f^Fp?g8nZMfVifQ-%W17A)@yuP=i$VFNM=gg6mBxB;<))r zxo?-5BjMd0{sn5A6=sIdBnIQ(WL`N)jaEDh*4!RWuPI$Y0BiRXl5EHaNK1Qi3~N76 zUcRIyis!a`k{~1cu=uY;P~ZekZ!Mwk>B6Mgf`8O4lhYI=YbCJS!f;$bV8@GDQHEQc z*vsQkvQL4EZL6RF4m&bl!*&9{3qA@l|z>h z%Gj?s1Dz9RwoS^IV5Vd0IHbSc|BW+1R>i#?NtG7e=5VN^!tNv?d-W)f=w9-*VQ=Yd z_qza=E08z*TsxPSe4V9TL3UFebYyS|*09U`h2`#z4o(WHOOf$il;SYALVYMt^~5}Z z#GBM|-!xwhunl7(7+n07VZMCZ+O|>jcm_Q$=AMo{v^m6&`Vg_krBT}BRb*KYA85YS3l~DAsizeaN94iwn95bk=nq+j^9snu0()z5nfNKRxzHJ=67oQDgtsJJgHEU}j3n!DUS&wV8evK*fgm%@ z)VbL4BB)#o+ZaU4Yo->=A(yuq#ElzTUvD%BMq2(UQ(!N>y`tvatR0)jqSjMqBAjh{ zHao#LaK2-1V{=Hwz`iH^AC#jCw2o#(e5f^Nr+@JSMcjAl-&O)WbzqF_L}& zyK#~rzEb^p%AU(U-n8pn%m3OK1+9wnMu^@ufDPh!PF+8=3??Kh3QUn#RH@5hS5mey z_rp1!j-)TUd?y05X;Ep|;X&A_{^^hecOf2U*oVu@ouhiEc6O)Zl(KDn&RWs{#|0kp zjR=SC8QW$|z7LUEtr}l6#o<}U&v21C!4_yx zm3U4wvo)<3yVl^XHm*GlL}Z|VkHD}O~ZSFEXvggY60OgT}e)jQ19RHvNpFui&7g~3M>s*h1bgm zrKeH-HUBYL)8<=2*@45-+d`%2SJlFFTackp1V534fuypFz6()0URUj+zn@>2 zcr=M%;@lrN?m=;;2F8Zl2#93BSmrg|$&^GT^%WeRP?RV!x=H!5Z%ZHMPa|rfIl}x4 z>l7D|Rk?3Bb-%3@eHF*qFBL{V{4sL??KwP`J%Gs8`qm?Uo#lx;6k<*JdBsd~(4(Re z3$IvP^kzf(x$4%rT=XW3uRrm!-Wtp8u!9~tnf%nENVGg-R3LOw(`xz-n!`s`*sEmS z=7WoB_@yF^V$xBsq$2&RDksg1gf7056%snE&3`uEeU?0O08S$0Pe2M>y(5~ewI&`y z(uhKnanf3-f9411Q0@Bt+Kkcs1FkU8cHM7Rno5n0{u__KNu%U??a12Fx+yw=UuAG6fCytF1aNzGRH{%k$n z$y}qAW4K{Sx7qkDdb)L3Nk!_Rj{*}q!kKO+dP2r@Yu0nSu>*mQ)ySEOjC>FxI&gj$ zUF~zwJhuL@aFFVx&iOnoVZqd?@-JPplUL3a6pazQcCr;`pR?9RTiF$Kq$fwp_L}r! zg2x|i8HOTv)(l(CiG<#)=morSj#J>B>P7`HL^JUt%mJEhvG0ryg|Rph=IAJHB5cbK zJ>fzp&P!tOMn6@M{C3vaPLLR!o=@%cY_3`B6|G7FUdELK+oYQvasR57cIDV->VO=D ze}L@ciPKrj#Y;lrV^;r#RAgJ}zV?U~`C+K4HY@H|WRJ#tx#fx!Rk%`~-Fe+?00imz zU=_=&ILVb63(US8PQ2}R<%s6p>AiT^4S_I3*tVhx%aPHb_tY*Zk|FFW%VH$v&EZo~ zXaVvY5!Hx%62Gd+GCLh2_MUP3EJuJoDP=~n=^0d zu8uHL?HB5dBjunW9V}JUQj9$vZYX}?4~!xD)@|=TQhIYyEMBr*;eM$83K!*{vZK-! zdqO$?F5md4yu;<>AlN2NUadGRIM|>K_*yI_%m`VvPdcuiEzQqPQC;kmL9EL7M-U|z zbF8|7dZ1fn(=Ae3W7)UEj6t)pC4Kn6auVP%b=vuv*35j@kdfYm{mabxP%qz=6*MEO z=GUJYLV*S=g(J9biorlL-L;7{;y6yJPNqyKr#uDyEiGNDhh_E>8tr-yR6|22caOc= zMG!;07J6~~pj5$=lcA(_L_>onv?lIs6l%T~9CkLt6AYW(#_z(@Yz$ZZfTf1*ro}J` zsCO++gdCr!EHyB-akAOMxKp4e>MgBJA~iJufh9f~&Z-|0yNxeDWVSHq#aJ|2gdd_qxkiEU?PILG|{*PRKA4RNpfUQ zu=kv>2~?Ep6}FdMemgex+}7Rn4Zm5ppm>3WJZVgRVmkigUZ%8dbIo4fJoBWixt%L&`!@E2d5Lg!LZ)u?V z_q<`?9maP+4v&w{X3Y!3niQ-y3liAUW;69{MRvzfi68H6y#E{6D#w1UAt`c()& z`inZUtKk2c+h_YPw+|GM+s722!JtwK$n87-Z*Cuo)4$w4VktmwpEh<^08RVqiPnj6@DJ;SIaAu^y%l*n34anAq+DPHG~Tw)cWy0o7+6ZBWJ6BB z*Aod4m>?lqGyY3OihEM6ye3Ls-AX?LtiobhmRnt2b{0C|uV|R2rZg$^LQxvg##0^B>Xb zRTYbfF_#Az`ucTalh}+v+=PKhWzGQ3l04g)<3LU&O=)RiVFTx4QXztIS<^;Q*@SlJ zdid_`P)4CvN*=k%@fhCIexwbn588NQ$hdDJ6JZgY1SP1_zte*bC<(?VtZy-*EBNf{ z)~10Lk;^&ubja5s-rx}Yfdn|;5ib3c8#d1B$7*JAIll#&QyZ-X{ID+nFcLyo0N9X` z`!<+H`qOLRYpLhNdnnt)G}4|^i=c^rpxmi%>0D9!M*|dc2boR`q5^*?j`lK$oM!x< z#)3E5U(IVa>0^)5=o=Nlg!yjBqmD(z1aCrS`z(| zmJG_UHOqHGNNwO-rlzn--CRL)0n*aS7=kiRu+5pGfg$36U!rwY#OPRibRsbA5eHMe zgW;aa&!iyM)om5wI31vfr|@_Lq@nAXDa)>QwgDsOrfgR%S@{DF(NPH=++-4|@N@Bj z>CNQMY4ksFb~)5v($e@tT-c@2sAzp1#lceJ0ChtS(TWv+tCW*`+PQdKIJ|WE&s+cL zP{?Brwq&;gLx8jdb66bY2Mpj7+Uf(R`}3pB=ws*+9ug@dheyy)xuQWZp@edYgtsY| ze>Alxhju|A|C5%KNdI5b64%~vE*G(bJiIT-0Fb~|Z*N1(nky+E@{`J16FSe7;WW;( zq@wJ?MDaxghS~V%yjH!x>R%Iv;#SCR^spSE=YSW&GS8D39Lz|7w50qcEmhgnNPdGg z^5~P;V-$io%>}zC0s&#eEq)KHUdR5cc%S6=0}@}xESbVB0XW5(XAX=>Z`{!XVFn%E`(B`r~%`62!;XA&WDSiatq9P>zS0Dn?}e2g01 z&oH&%%r=a5fU%6RFENnNXY4i~trpMEyP6&yXYRTM66J5qtIJW$8;JyMFc`w&21rYc z#_Q1DBP;G`T!VH=pJ{mdmc6FBjd@9-<%~+f7g|=|JRC4Xu~3gNH^2MgTy*I}6ERYD zjMZVsjHq_-_P+Bl$Vsc086nR+oNPnunbJe2`RZM+jLDwYP#vYKds`nd1 z>Keum_V<`hI{)i`V(cIiC#4}?7@ffpXLwN3Jq;CzO|{4xio2TLL5ygmkP+`=IO@H& z!UOYe^E<3#-Jqqb>-y{@8OyLNMI4K2XSaE_9ed{od~kur(8Q>iV5yUrwR zo1?j%%v`Z)P6)Fz>3LoW(2$>{&DQ0%UJE~wYha{v9+vAZwu@BsK=yfup3=pud7wid zo|Wd)8~FysQygc^RAY(NS!oPYyi#|vA~QcnJe|K^?iaO0=1snet~wZLqnae5FY=J< zDN4Kr{lXtIyjK#*6bI`{jdhLd{tYfa>DOj{$$IK(4-DA2b|ebaDLz`h$(yF%C(poV z<&u*O!+`6(oTUN=SYsZ_PZY1SQUxPd>O3OLUX#nwQWC-U=O?5mtQboPcg0>fF3UaT zTPqz|j)KEd3=$#7W%Ieq`E7Cf8*3>P^_x98Ac9a&loS|DXSOQo;Nl`6l`88P!&?ar zxqgQTgMB$363W83XICt#cJjF9M)?USv*jHHsmq1O;(cQZy?hSQS`Squ@?~eb;v#0v ziem3lPZ@h4kve9yHjVXYGGlTNv=bcT)06OiRsmJV{3s(VDL%w9>3sVHPCbs#P7*mE z_u^++-O>CvN4WKP9>%f|6=MR%2J1G8Bofh8Nj%bO(2&JwDshLYlDDy07`A{zA$c5n zOj@eijJj+%&>)$W(fAwlG0H@FDuzjjF>m(Z3Gu<=(#Sa^9fzsAxnW1X{Z_PyiO`&c zm}EmAI>1~tjFu`%{h(O>dHy9o26J2-$52vOp%ZIRF{b*mJ^q3B>G<>!oN|bBXmQGH z3iWIkmZ$rGcspCr7O<+mfP^}Z*0d=&V@%#rVxo|yGJ zRbhnTq&lheIAN)0}@CPZ`r^kE$i&yG?D>4e zEAP+G#kfC8d9758&^QSt-djpVxZy9Hr2MEUH9II+N+m%L57AW`tsrV*U&GZqi&RQ` zrA;sv2KS%9ZNTtks~hfNa#TJ2sqdkqhU*w=1%n%nOwo7v?K$Pe(J8^a7BfU_jnivf zDucr`4FGG+@h3ss#&*#lD1X4pdb5Lzg6Y0bXrNf`!6(*Ib0$Z?# zw6AhE;@#?d>!^}mE*kNzN{Nw^6;DDLUY#qG^yIun_8rmVfbUpKv}Pp5C{EBK;$%7eW?eN6qo23 z>+b^FD{yq!TT`0JqMBTYQ$rYew76#6@-J;Eji_^qM0)U{lBn3XBVLFLZj-u$R}p+b zT;Fdpu^|dJCE#Ch<$SHeRf!C&bPS+af6qS{E^78yg;4!iV*qwzhUj?8+sC zusUgcs0ahl342~s?PmC2Jz^QE^n`}ysZxDH<#0>FeC-HSXyTwPeMuEH(INTfJ)B9) z*ZNfS*qKsaBuwM|O`dC~{iCG8rw+nlv%_&QSOtBrNCe|Ys=XcQk%wJxTw*5q$f(lw zOONCFxv~8zYr(>y?$%N`IG_h6%A}Yr0t$y3tl8duKwgfpTW~bPRud6Ca zzMT4uRaT+O%QO?rq5)%}O)_;dwGubL3HOZ{DEX4(z=n6p1;)bUk+ZWIV#YgxFj;sg zvTwaPaQ=#gBNqE~G_Z9IZ*#dp&oZDT#G$-NOGLxx^Pakn}M-Z{dM>Groym;t#=I z#yX5L<0TjBH^oI%?#G2&Gp5JUD9q8JG2Spr{mQu@hDE4Dh6!!w&aNc`l%qNXCaQ5n z^P#$Lw2JaYF3E4aXk`qZFpQNSfYXLcsBNgd)eooaKv5kAnJe6v^7#^D7$g~4e4bIC(>^ z#MEfGicGqR;?ojyt#~x#Bqjo7?$~5E(HDmxaL8#DNK&gPI*nkOQuT0SM+Sd9@n@O%^@C9M-1l!15vaH%cbzi6MKWj~hD8m)?@D~Vt- zww=JO&6|*#B$J(EEc_7qD)eZD=m#k!bOpQ6MwJ|jjDv~M0op5SQLJgVrmEM&ZPo%$ z-KHbbAj0pmyhe5O!`1$-k=|!6A1(D%$!T*E#wxEC(zab0m-RO0XxGCF3KBA#*d3T9 z*6)p}cV#pjlI(rMSF_O6hg)q~-ApBkkdcb`QHSwQOk#O}NqH&XA~3falx>yHeIZM< zV(Ij`=&Zsoaj7;UkPz69^dxW;ATB-r6PIL98cs~5#(9{&XK@Vm^lsY}&h|$JHDl!{ zC%v%1tk60MEDTJzDg@*6usGe)-atP_lIlADqz-2tL10fW*YW<&-GSAC`uG#1nY=#X z&%yIHsBO7OsD^#20H#r;{a9u)H~NZpTtYa1?*m9z_OxFZdw;&X9w`}1WSQkE0%m1c7%eT&i)S)g-U$wc?m%u65k_9!0@_K z?-bF}V788ph7hy#<$y)H7_i{cABAscW({mKBIVxvhEf-9#$H(AJPsvNbB2FNP!_d$ z<)hCAjY?xrUNu>gLn=|7CxN%U(5DJ zCpQU&Ayz5eE}D3_9;p2=uGhQpGn@wAQiK<~&b-FO@NQAXD|hm%ib`IorGUSNI9->S zOW@o)$CP*3moL?5I~&QM{D4;^Hffc>rgN0G!#}TX0}&Y?jb&mgyt_<{BSKUXpneBI zBxDM78xyJ{G(nQU2D{O*pJ0M2L_--Tj0GIwKq!N{E&=KiE~H;#;hr z!g8ZOC=NYcIz*j`F*Ay%q*Oi$g6&Gqpu8$%%a^+Jrb;TE2&9-y-4@ch;|{lLYo-YM zfDb(f{<{QN(biNxI^B`^jYV`q6MEW&FwH(;+iO zb=%V8M42yh;%@)EPFm=bHl<_gl(M=}G^+6LXu|fB@`V>^?(#BwO2_c|bAYmc3t?hw zW0^FxN7?`BlUE1_-$O(gdRMPLC7@120Ewg>4RWxXd7t&PAZdrhCT(+3-0>BVFGD)v%chT01Zk&s8EE&*ky zClZ>{NN7AY)~7X7VK^|6k;p_wg7Pwnk?0WxHNS8QW&hJ#;3KJ|bnuCu@xw0Y+75pf z*Lp=VVLny|r{2!aJ=cpRg_Zj^O4o^h0_1lWZewK3Q0(XkaxY16b;%lzqo*_rsE&6Q z;ij%SUf?Y3tb1d0ygG^S4Vsy&OoHt(j2x_SmQ)y!`r1S|N%8Isv7&|qRS^pTGyxV^-`p{ zFW(}9pie*`xh?8o@&p*Si7RL*9i%MDbvO^V8oEI!@J!)g*7gKf{_9`JpVC7dcr!#qob%K!xEx zt4s)6MFFPrL2WK3PGZ%RX;s)8Jt^lfyKT}CfS8lTKfN3KA4mVgFEOV&Vp=b<9nuCZ z6F5-lfSHAR`&HpVu+hk|#8Yq&S6g}Zl`7+M(@OVKBIl#4DCm=aEB{|~-BXMxfwnH{ zwr$&X_iWpqZQHhO+qP}n?%B3&`}SIUpXBBw=ds=^snkFIF}|q_)rWu_g4*+bY}*SD zyRy<=Fm+_m65#Y}yZ$N$fNyYmvHnqW@JcPn{sIPKY-$rg)kduH+6#~-4xRW|)cvn=IkJPaqCB&t&DjJZWIaFvXdRUO!#(Rdc9zVm(d`N*g-Yt(k39uDX126kOFF17|K*oV z{+C};aHXe|iaY-=zogReamt8t0nJ82sW7O=aWAfvvm9~gw*E)>^9)qOV{{9m08kd> zebXr?HEUaY1Kx{B&`nLhZ{0hks#+z^;E5soC*V&d*?}Q!oEZ$y%yoZ|{d8w-)g{&K zNeRYnfJwJS2-vT~p^<9jad$$o&h7X22JmnHxb0uJrc|JNHZ%6mWS_?Up|LPgW> zu2LyU0+Z~RD%T}zX>T!wK9X-F5LTF1PDx5$n}n~b=h3H*J|=dLu09Ci|83idm_O5w z=P)82Z*nj)h+3>ZCto#0GW4%`uG)?E(j^HTT=Lwd=ZA?5Pt=xE7r#dG%5kJvcOq0E+OS?weZgpN@Q17rzqTmAie*~s{Qz;%oN4Z4PAZL1F z6{_h(isZkL$QAc>CJNr{}q@Xeg!52&ap=_u>yP^a>YfG0EiB+`4lUqLi$E;=5eac=*fm(v^zZ={)rus;z|jZx?o2vIupSKgBgEch zsXb4(0jLilP@yw6A>@1^nwrXi(Fr0Fy~H#b$lc{CUl<{Kn7}699u2SXhoO3bCs$8l z0CKF8pkncwIGvma1I_E6B$14i6c9Dxmtc~MJ(ohnaXGxTS1(>N%~v7%Qb|i)J?|dl&?W{nTIBOx4-_&){{*}nOHG36FjQ*m?z z9T>`IQAm33gaf{z5e~Lw8~biScBWD|h&I2b%PWL&Dq8Tg|G`lCxNOi`n3n?GUv-jj z49-%3^YLS|QS$~G3&?X6`%97<3q!Z`d%y^LakHkAM}BdPxOSI^h>#qBQzNn8fI+ei5eN zZUSoS5rEqe0Lipf)8zXctJR|rKJ|3!ni4bqhjJ>3;W0(Sb}8i4c7%t>JzVwyi!Bx| z*K$b2iV)MpXmv_FE&%|Pr4!o$`dr#)a-l^wwj>d&SeR#{PYGFP``xv0F;L1o#vM4J zdW`t2RJs>4`Ttdz%#8E@qc8zd3j{?H$kG79wB<+ZD`}96(IB%2xJ8B*A`~mv%UopO zaWKXbMgJ|xsiA0vfDlvC2s9=-6pvKLN%%u=$--kL^d!S}PV~PDlNqFliP@q!c{71p zZ3A)==t#K0m$gZ^pbp<_@Zd#0Ij(waJw#n1<3^Tu6mkbii1v)WD*0Tx%Hck@_;UxN z7B3!K_+=rXMfLP!{fLn-_q$>W8`hoU{X7uZ;qP*_8<3|0qB5uo2Y)_@$%;w-%x}on z%Fn6#H>|M&)xl$s7Fg}16$;B(C!d`p(*d-@w3un_(#i*x|2acxY2?2OQ{_BM)jh=j zC`{T&exaJ8Y?>z@S%^!=tUUX4V@Wq?^Nb=e4$V?0tZc`v%S0lECt-l!xPR+fTCuNQ ziTCE>Cqn!T$Ii2E*;btv1^r8xqLXGjv=MJI5pPlc5?sb$N()?5m)xfOE9sL`Cp1@d zi1KIiU#4g>(S5C2hlg1u9>N$^R69UzX1GUYtV#WKjlVJ!$z?uTtVD6n{fGYCUo!OP zpd1pmv_Y`4DQjTyfI;R>lXZ}?rci!amNPyiDZ9H$g!amDdP$0NMb7Vm#_rNeG_?0# zw*{~x>J$u2mNg2S0b@5d!yo96g9Mr@TIt-;=B-n=lFXEXii<8nu=t*Hvn)Gy%6cy3 z$e2xwN_6S1s24|Kd@W7h|DzeUKK@b!AvyU^#s-y|W)94sgtU@u7pb6IBet~*O@$T` zt7$e}n|FV1K;nrKUw}hZS@=p4aXv%ZztCa|I}dRcfoN%_l%?vtAKnBmWCK@0oh29h zh1kJQnp_~%k?&wixxhzw;h{p4kzDa#h^d1(HPJdf?XD?5M#iK?6D^4a-GdQNUh(`U zR1yDFIVV@kclb>^PWpnUZ9+cERi*(MxL3coWbF;N^=TGA&2U}ZW@xG=z9dVG6Wtp)95L3qN`X#7zbLhhfy*f~~Q=d&>*wq2o_ zl5o&T1!G3`>!089jo_y?!alR3aUp0~Ew3negJ<&AU9q93eQ)%3Ke8e5`E#e*Jj-|w z=c2<*m$16^h_c*>*NOPMPwLGY1uUvMp$$QcDTjHzCo8){$*dIf)91Li$j!46DUg5} zeUT$8fyS>pbgnK9@^Clg&?Vx0J8icqWy4a)V5)UV;b4di} z$#Mtm%LE}BkN1l)#W&M58odG|rH^ffy(^gexpjKJDd%OOzT zZ=Zo+tWhr&VwFGHXKhD!{u6*>2FPj8XSxn?P&j#LG(YzC*1>ALm3Gr%BYl*Q9^+n< z_bx(FDeZXIbd^6O&PjD1m+SboN1?JI*}^%Rwa;OPIFJM({$8bVF8u~YGe-y}D9MTq z!eDuy!NLJi4Q!3lO(@KTujI7ZINiQDVn3%@X~FvBI^Ywlr;=wIv9gy!MuSmnM~*=} z?|Lb)Or0{cx}AVZS-}L3OhuLaH^Kv+{~wp&Ka6V|Mlul^BOOGz;nKB*%q9xIO>?YW zj^EkKFtfDoiAyc`M$U?-S?54AMS`bbQx%32`EN$0O5~iNiVA>$EAyLCf&3?<0+K{M ztLM<}AxN~PlS zt~Zz-E$P&TgnRuw_opH8cp#M8Omn{>xy_1{PBVP+x!O1!DfNnQ|34a2+4Fdm=>!sm zF=P_>DDNZ^Me#rR6n;vnyd+Y2$+Mfz`0sB(QhDKDR9WNT&2I-C+X3wQ3c z>MmJXVYL>*&N%KjGdcXtOmJr2v82nG_s_(O&+eY_-z^{sqyDD^BHCT1N*EXH zP5NRcRy*tFgRNp)-QzCAuJj*}sWtTx_>GvIN7WPMeZyvFjqF@lr(2nmcRhTC+qTA` z6-w1q(_cHqP@|Hth{J6zeaa&~Eb^h3+MU09M%Y`qzjV2x zxPoBY);LAIsQ8q&b(p|}2oU?k_gne9bE!9ft0%}>*U3orDP9@lgUbfv zof7I3dq+XHa;24xy_)k!>PM@VZ*8?o(=s!*6^~DSV_i$P@%$na+cNgYcLFXG&0VCd`d7XYn9n&2_c#vKKdwG9dv(EiTz zg70pqGtcek=?T0f2u|$i(jAzDzvXNWPo;LD`ODw}{g3`sE!r@W(8GHuY2}sMHiEXd z&um+OzSwv&MUGn<;xxRC=F?vD)6I$VXD+B<&&C_%BYYeh(Mx2bb#*mt?UCRLUfZ@2 zHZ_W~AL*wNq6aP3i`DGa+eV*oDBpbFz^2sl^*!lhOplM)JOc%GD81T7%8AoKElK{I&xh#$7!X6c1fAgS=Z$M!~HLtvdbIgmhWFXEK&h6 z*F{mA)}rbzm-3kCN;*6+jw^6nO9SONo!M>hIz6+1igU^d7exaNlcg-5am4zAm}T zIZt<~+5MG)i|-er)?KQWS)Z$&4cU%eJs&ouZ_itVpJ;nK;2#HHBYGSqp{{JQy4ku~ zU7M$%H!d!t*@?5!iSHOTZrQ58)((9PyqH+(Q`;HO&QCR;*K@H;bMN=rk@3&FcH#HY z(se#|D0*%8Y-Wz{@$g5kYwk;KuNt4%Q`b(H1uwqNb#L>muJ5-|ueYzqpQ@MTRyx@o z-5hw$7VpngAcpA~)X&rO_ePxo%r7TJ|nI^Aa1ZEI;b4=(NA z2cs8{Pm8&y5b}$INS!a^Mno+wn4KFKpRWer+kNYg)AAjNRvj2Ix&6S%_3NWHeem9# zULGD#p72~=&o8I0r}NR>>5EC-uk5^|Zm;_i9|s3#d#~n~jZPbe&D!j4EEc!|%b#hz zi#%t{zNS&J{?|G45Zi(5=b1TP9H*J{+#Kf)xy$8SD;D?r`|3sf-t!?#ouBE|>TZwE z$9?-r_m_e@ugY%wyKB7#yxM54S^93#wgWzIhpn@f9kH7O(bbC^C#>jb{MeV5?I;a; zHu~q@EGz9=9zLH7F8YrP+h;6#SFF25kH#hU))kk6LcJHN^;O?ZH(r09_f^|qPx714 ztH`gF+S%M**OwiwpI5hP&tG&vPUnij@4Bcui14_pwKA3H`YJ4-)r^j*t0q72PF?x-#t%l^)AjG zI~=c%S-ym+o?pm(Pd$s>ezc z=hK0y_s3%Ab^o%N<0voh2B+ipg8Al4POffFv<|$B>)!2#PShx;8FN!j6=9Wl$f z(BgG^>BD$Y$m-f*{roJ>Oda&duEqZ#OWC%+$kM);D&>vd#(ki@S?Q>hkv;ZBBK;`s zO{~g?Lp7AJgE1DnWEmA(sgIBsf32i*4=Lq&w~5P53-AxTwNvH~tVNAU7bhZ8+lzT& zJyMS|7jd7(z7Gmn$;JB@QSbanlSIMK8pQ|rjY)mcLv`!izhaND!HFyu~qU_(n!11qA{l=4UDd5iDca*ko z{5+gZd{0G6HJ(ZglZ6S<`n3#iHxUwR|u@)FnSrXGWrZTgLl2mh}I zFfUUy0nJX&5XTq%JABWHTbZX`0tZY~r;4!Q&bqaoA4~ ztXF8T57InPT|^${$)|`X**_(wg&MU6O^LJfgdrV&Pa8ZxZF~*fHdBB_LBH_IOaJQ3K;5_S{}O5z&q*oxlzE=jW@A zaeTh#^B+6Pjz@gk%2$?2h|241P5W*cD_ql3f2g}B44Gacz2>dA9~q(BI_aTH(CYNK z?85;=ET;P2%8pjvVok1Qjbo~Z#hUoL3IqdB;OqCXKxD&4!9E=FFI*}p2|c2{=w^Zo z1}c)fGCl`Rm!*OnEd1}PObZG7XB5vf@We^YHS$NPQ>2|i16vV`rpy2u5fvHgBtwH! z@j`j#ih5U(;Pj8FDqgiwtuv|#m<9O^aFoS(At`T7OGAcR17(%4t#}823e6HgsFyD+ z8|o<5y5>VYkl~)z7hu!b80x&#u9idvp=C2e>)?Xrm9JuWx=0Dd#kkR&6!<_IQ0-xTWIIt@;f$IaUb9Mm_whdg4nE$8{L zan@`X$aPp>r3fojS{Rx*0nKw@5IDM}?d6n8bsMM=Qn>hl{D8E9umlkUU0AXoWB z0+eWO^&^!?hwC^3_5W)cf+DY%c#LHxfbMU@!F8STYEyzC<0SPo| zDSm)l{5?RfsC*yFp&ar8WZ1C;|Cn2sDj{eAtDpZsotaS%;~gnTNVzU&SHTI^Q<@tu zpY9?$0MV;|QZGs@gCAWmwF5ZagNC@EKzdwBe}ewfff~c$cO$Xkipwy7K0#}Mq8w1o z7*sehwwmP)VZ72-=*U~ zLA7MTqItf8II2fxLKnpJ5Qhv^0gIM(C3rAHv=Mvw*M^AjVm5T9lh5ab zN{c|;fn2cfmUiq2wpBe3M*(Ow^7`)2CBaT%GE+DPpR86U(w`R1zy4L(2C!>DNNMfW{SmBC1WP$b zK+RD;qDhihnf17k?PLC8Y)F2VXmN@>3o*EblzG?$N!T__MSm$3!aPcq@d+D{CK0(K zfEb`Xw)xRnp4sCxlK`eFP|y0`Fab=Uc{ZTjHu{E%%@A3_=EYX=mS^$?`z->PSQX0~ zQI2ec5y7zL>UO_gxn;tTx(oi<8?j&%JdS`9!Q=%)I9OR4UJl3M+>lJY&dL8Cyes*m zWEF@PrUZm6ZqWl6Ac!LRisB6u5vkEt0Z{`Bd_*}}NEkSf`Og2RE`|~6P&}1d@~n~U z(cQ�F}`mi5eql7txBa#i0iDuL7)4U>AQZgXBwW6B&}C;q`peaeRMG|`q(w<&UtxF>hcmsh zFpVE*ER}^JZC?yCxffhSpnmjF=9{Sl`itPDTVvs}pl30B#36&=SckVHB5!Qi_!N_zHm6R5&w;Y|*>q zoM+>*F?aQxNQTS#3#svpgj4ho^chfimr9%@j2}r~@-owFe0e?3D9rL*?D^uZ^Rpsf*Qz4*=^o+3Q>pJcw^#wif11U#6j<^t&O zI|3vR%uIk1G8sAH5#ofaE|g3GM~Fr&;4_Kd1n?Tja6E}5exCXyh;@u;>{7ji51&cA zVL*>`Gt3G!%uQ}XiC`V#;b3CIZo@Nj`hxni4~uPv>a9Nim?a=u;%iEL%C^t@&)ePl zfAxnt2H-g-R1ApA=AK~-}3L=Rb{$P~sEKrf4+d=(2V z7OEPF6uVpPtG^O76WIjy%BWF_O2Sc?3=wz&@c*-vfg-@1V>Pguuipt9gke2n{w+Cy z!Xs>z3u29cXb@YLkDr#HIvTvVKQthj>MxaGXM=p%2CDSgwuKiwKWhmY|9kxfL;Uv* z7xDK$iQrZg#&D6`{9XA`i`7;yPqyUVQzuk1Q)WwIx6i zgjyvhby zIrpyb9%l~|3LL4o18oGq!^65%=o@qYS$4(B1d=h308URQ(oeF;BJed?EXV#?3d6*0f*Y}w|8XRLlpjc6$R1?sN zdELj`=Oa~Ryf7UZc>SuyX;qu^bLv&;JcYHD#CI(>2-(c7&xPWWO=>95dUrw;#U`=h z^NWi))f)JpLKTB_Eq`3#8h{fjf#Q|fx|%48R&_zM(ShldM)R;N*@=Uvke2ie$=675 z@FySN47!IYmh%ej{*J?oUDIKcK9P_k@wNolLsR@qER3YmXOmDpz)&sT_kYJjCgbrf z2^G$$YF@!ejq338s=}goX*y}b^=Rx6M*}sd;-yi0xE9P7jP*C~`U*3|4`E6VY}24MZ##1wg{inRafk}a9o&T(k ziZmz}L&gL}+9vr?vpPDNVyIQgwAt~L||V~gYDSn%}+hkB(P zkLxZTT~%lSdGzw_kqAghO^XBKO960DBgIqijk`@C!W%jq!$LhuB+qW~iUy;GUfK-y zVoe)oIBB9Z4bRxUFN933{1C9xuN>%}E{&VQ)icaw%++thHca*Qu#v75?otUQ$U+G4wZH6t; zvCRB*Y~+oMDlg6w8F$L$Ml?*y;7W3INyf0^`uIuVbE9#9PeOV;x$FJiaP3vY8f;}Du4!w43V*MM%AJ+y}8A;?L0qaGDF1-|1ofGBt;j^UwZ6BtOdz@&d{;tfMdLw8ck8zn(38)xMZf!^yn@i=o0GI4Wu@Ti1!h81|pj4W)Ij(N#P{2r(g$B8vlyIJ*i^NB3OnF$| z5U8Q1Dk;k86l&Aa-g@7L5utV0%o_v>9f|^mKQ1`1))|9}}>?Q&kJqQnEq*C5dU029rW7+u$hF z9AIi12rd-WFm^U5s-FZN8ApaEAc5m*pD)f$E!MEPT)*5 zz1}~UeyaPSbI>^Vm{mT9O|0B&NdN$NG_oIKrHSH{qMMrZXRyx;C|80sAn62XS7EXs zV7o)NSTuA~XPj-ise5&vc@(46m?%s@{MutK1(dd!o?qy7hn|rmIjBEbCNW(rjrDW- zK!a&;!EA0CbH+k6;S=#zyD%aQmK@_P|@M$~dTL<@et?)hU~#est-0Doqn#2&a4 z6{do^;!4o#_2%ly)RJik2iF%QoZ8q0eJ-hfw*)4;4{(iSi0T!rq>)BQ6gb`y0HRaY zG>ZvyI*ktNYx!67oWty>A1BR!?5*h8WQHT?se^|_=0Rn+>r`0tw%J6`La=fQ#l6_JR zAfBN?eDuf-%q*5gAi)M&1}pCMM1z^@=cE?xYopKD9gcR_qO1rK-Rds!@0vU?qu}80 z2Hl->C2Ez~j?pf5x-dW0pk9~;J~ja+j=K3mNhbJ%?4DlSxu8cS+oTHmZHBQB`FTon zlxIl%-R;6Vvn6IL4Cja=L$9t};gS~sWu=<#%CJn5PXxXk%^2uB?t2L0UD4&VquQe> ztL)T2Rprs%^ zn7TC41iV3oI#$97lL;?{!-^=iO=^gWl%E7qo7ekm!(3AM6puJt6dZWO&v&^h$|{hM zrz^t%1-xv074>o4krhaqR&j{0ok^OQn|zW{s9Bxw{pR?y>RPK-+yZQ_+NxBmh>Lsh z_J?TQ9$MLQ6@H&UE@jEs8U-6;Rr{}SdjXsI`703M4MRHD`uFaSp0-|;#b|-6$Yq*z z6t7c##55d26oTv*zwu$*2|DlUXdbrJ9W|AFwM3M?0&$cU{0K^`4R#nHRavJz`UCm$ z_vBw%vI;MsBy?*5&_OeTcs$7Q+Fi}+6Nn7)ij=Nfx5W;Vl)H1 zW@<3l`dT>&3G(YOS)7|LO>e8}gbvvWNMPK}&^=O%oqdQ(1IytsY-?mON=Wm=Q_dJO z5Lv7NxZx%{G(Bn+bif5J>NWn(EP*5H4{H8Tb3=%JQ~}2U(V+ra65-4ndw(A_ZO>gG zO?(dVR|ZhM2awag~sCoqotyaxRu|$xFCLg+RFRbFJWl}QWpk0~HZX`+!&N5TB<(4L;%*?iT zu#Z6sh<-ZpJ!QbD(~-wgHpxNM8&9&#o3>)wklv+%YCj{1ougvR7vNK5?ZK!(iZ2V! zTnI_~9=m{raEJkd3P;d8U))3rWtB|fs>!B<6rE|LJ!hj3u0nW%h(j`{jOxogA4(ZA z&!$a^GX60N&qV3M!oW!exQfL5gVV5AEzG%8Bqvw>1fOD%WKbwyR3a{5}yG zUg&y!Sd5)R@09gEczDaP1&X9&a^Zsa+J2v#eS*gTAL&ah;P1$1Mf#vIs}I0Y)Ip@r z^Yd)?^Sc|s3XHn{4(Ru34X)S-ufs*pfeaNdro4m=CpxKKNGS_6kn=0*fD0$e9z{6) zYVy>Z=?W0nvYja+c(P)D`Y8lI8L6Hf%HvU%wc4sTIh)477x+_&yJ zsEe)aEY}FoQRMxuiX1(&V9G!IQ!l`w&I{h7GL9v{YEI<8)k2}SqBhHH(UiuH{4nYD z5{N6)uC@GsDMa(I0`a>(1!dNHp;o(_cHjx`cqQ!!Vj|GlDyzZq2JhCRi1_d_8!p$8 z`Ql~V;Gqy$rl@9mx6JPx-egenvjYc2cJ8ez%F#ct-4Um=KQmX4$$ySG^t|s+y~=7Z zGgZS`R43eg4U5`Y+9sXy+SB`u9s9(o>gTJ1n6%rbnwXef<{D;!1S=%yq`*&c-ZxqD zbOZp=m|KK`xy^k2;kw7`0-+Jbn!DxWkNyQx2?`C&kp%f&EC=~-U8{nyWTK6>uG_5Q z!E&hhGS+oc{$)ewi@ZT8SlH>xl(GlZG0GOPT2@?smb9W&B z(+wT;6&8P9yo1H(=eS&Vu3Cp=%7VLBHur?V;I=_dv#CO zDu>j}zK#g>e^Cv=rwy@_{9c9kM_PSzKg2U0Iv*9p4MvsggK#=DkS02lDG|OBt^PW{ zwUhC!h+OBSJId&n=sM=9Z)Eu-J$Wx?&@~fq5=U$)kxxc91PGDYV9bK%cbqgCw476> z4WF?ZeJ`Z$oS&Y*WgN`q*lj32w@s>%mTowg?GDn;^DA=jiJTC5bJdHLHykvOf}e2| z9sVI#1?0ah3rfS%pcsC^-IzSV+!^I^NR#)8>jJGDb}#}lMH<}UlLrYx{)#h$4zRI^ z&t!hEvpaiLhHms`#23MA)N9rKgDh)3z`1V?S2~x{2$&Tsj^zF1_+FzCvBg4^IEIMy z6HjNT2N!`T(d-&MN3g1u;}W)x|&z6RZ#~~ zO67Gb9Xx1s-aTku?1vonWyk*vt^5U3_{m-BLVefDpJt8~han;~1GjXl4t`O2jcBOK zt}HdhKRV)oRCW!ZAU+nj7Ak~&)Ncwwg{ivzhzE(+$w3LTx&wL@e&(oALhEhV;YFZH z=4@d)Z#o>@y$^1ixA`~0*nxH;DV@pK_|vFm$7|FOM-=+N4{hsshkBqMn9#Tr8w(AY}XQ;yf}&X-3Tmskm2279clHQkyNo`Lt}7NnC<+~lfOa7d+?wAlH1 z`$bW!EZHt2t2tAy*_T^d8ony=5KE!o+HIplgxt5}a40_Y$M5)P6ehiUPXM6_MWa$x z>1PgQ4FSkuN<}l&ARyQx+LpfK@3>>cv5qbhg+)G@xRAL2!e}m^ z2^oU$W!+}<2{b2;>2nInDx;20_Ny>|({M{Q3fLBC0TATH(4JP%N%(1l&=0-`%wgJ> zNjt>(gb*xoD$N8IiEy>h7Oni9YkHEe^FiqFM)30yZeb!w%)bzSi>ogZ3+I!t1_acm zekXb6KN}t%5Tuh9<+7)n`YT{|jye7;e=O&X9&cKwMU^0hS?FrbM_@HaiAx@@o6}mc zr9WhL!we_uuFz0#+reQ@_gYQ(Wcj$KMo=;RS>sOFkFQ!4I5L0f6u%MNfXW$Q!Cq{Q z`CVx6@Agrjjojh5oE@8LxlBdOVi-vR#m}6xl|3&6Tmq7Gn6|wzti0~HW6}&$KG?9C z8jZ3SHy(-+tDxs7sK`BjB6(44`WuPQH?yoL9&V(Z%p_jsc*UABv!W^HtenJZE#IG% z_tWSfgHqA%vD*0Bu&yk3bQJ*MdvX1>%Su05nH134<$`>%a4DmBsw0x}(bnN#@MqF+ z!}Rt@py0V}k)C-$@FxHjQZ*JW-*q%~knqk!2v_J%Zy~K}-byhSRvMZb*!Lb+ zK@q>Z$P%S>Ia0prz8S4;}L^*^0lFcA(uhY$Xa2!LF^x|mqzEyx5@@EM`gU5M-C>^pEH7n13 z#LJ3iJ||+1$=|VYi|PHKSuM9x(9Li-qQana32o=EoS1RzDzON+r56;>Q|2iuVGhuQ z63eM!86+eHrHtQrr&rG%gg$cF+ecFi%RaY$f=tI)<0mY?-(9u^z7K2}P%Hwmn-*ux zN8{W*UU9K<3tncO*Pu7l^jmq2vZg}8 zh{kET>|v5l;#OCS>^e9NYlNiC0*achst*K}&HrG1H1`7-ikG}av`h*wc7nC89`JT7 zkX_&wEnh2jg>(G3C1$3296Br$`^*+gm{1)9Nw2<`U02eL%`{P<0B!v_x<$2+_(i?x zEBNV`#ZE-?bK>;;Ha|?P9WFYE5NmquByG;hTpCEhOk?A>hMe93D)`)RdC~HP(yl&+ zvM(dSIQKkq>w+R~HnBY-ERKvs6F((i2_m?0$K;$3; zE*Gf0wGe7~NFdhu#~5oKGPK6BB{6L!sLUcA-6n+OoD8yB6vRq_5j%Tk;z>LmJK=y` zGPwJqRv&NX=&LAec)xfGihY({#_TN=xwexQp-qiWQdz>HJeZO|hQi=TB3^50oh^qh zper>_zuQ+PzdG8bB~IpCMR=D|OSh6k>eG@-Mo|o^ECGL)5EnKCG8tK)$@`fom_)$a zAhF<6{W_({npB%;Pk`CE$yyz4LXl6+llU3S6q0;Qnph07-a1x#DM#d^hl3JcfLcDY z1PT=+Wm+@=Jb zEM8j{!mA8S#;yV_Wky>aTKk85+gv|Rx-pK&YQ8-V|S`{oO)&B%Oh9|}U zq*zJ*zfZ=y?vz{J>r8i07#M_+vb$zV-77<7y(_gQ7!MCMJ}a}IbTnyb*g(*q!~xDb#5vq4Kdtn`fA*(3irA|Qlo>Q!KhOe zpdHc!C`u?1mVYJOCsN}AcLe~jfJ*msxI z+ur{RLjRNNoBU()jU8}r_>xsX+q>@7uFGTIgRQiL;tSN`9_jjT<@~97TBdU5XMt~p zeeW9C()!_U`GDL~GxNey#k>34=;5xn>OI@ny1y4O;^Y5n4U>wng=tySqgsI|!Q3L4 zyZ}Sl@+;nn50Z=&j{O@RGlf9$@jTYcy@PRC?p1 z`MS?di^y+c5abLxeu9@$*|_T>%<%ilu?O86|8H*??sMk<-y22+&DnSxKM$yB#A?^g zvbMCgcB4h_c5uwRC+$@(|PQEi}VO zavVpmvYvG8xRXn2Sb%24({ILg1B|lRbTvF7w;YikGqO3TmU->{910))N25hbI(|@Q zRS6%ESfvdTxq<~aSW85l59;K}nnbpHVqtseGUulSjf<^2e<@-$m2a%w?T~E`QVZxJ zfG_c9SRhs~uB=a4Lo7Iz*zrql`um8lx$S2*Gq(hjN(Ay>NIx5o!YofG`j?~WIfD3- z9t%PH>0D3A&W}vvA)GJ|do;e8A}Hf%J*Bcpdi9+*!<07Hr4n?h!==kUZ`P&9m!?;t zN=CA#=y>E=wx82yZYLtvaLvHsBMEYID#Y&cPYXB$W~WB}ejy0=$jai%6A;&Siy(|u z=Z-ChU0qxdh*>+z8EmfqjT1NzHPpr&nB!UN7GQ*pQ11(}MT%x7>dW-Z-C5iBMWoK0 zpRbrH`qx(^-e*goFPqK{o6lhGR%x@T_ouPx?fGugcZUM@%@P(l-*b)C2~O=z&xU!A zw<|=i$m>i0w_7hGM$Fk>cJ!j^2|7AGyGMU#_Llw0q2oajZwR)|$PL*&8W{Jb%b zjmPYZ?*)9Wce(aet*?jsTCdManXh}Z=jq7au;tA|$w{vJ-S^4X$=3<}GQ2L&?-)B{ zHZ=9a_Ud6Jmv7B>CszmVqWkH0L;EH5WH7}Vzqe!a!>e5-wg+U?le~F7(RF$dy7b!Z zs>XN0{h9O}59f#NQ733{@y_$(!JT{i^=VwF7P&@!jM~&+uv~@?uAW>#kJS*SlrD$A#CGyjHg*>-*?qdHAUI;z_5@w~o)k zXYJ;5)!qI1;Do+;CnqN>w|(o~@n_h061NpQS7#mFlCQ_dlRGN6GjS_W|EllD83Ue= zUF=3j$2Pcn@u_-J^(xyHJ27xucIAe9tsAcw%c*;B{Qb2+)pyMb1RZ_wg)30E_Y%L$ zZG+e2oPD4geQ-YUb+@3!^N-DHf9;8_+^mk=e(9_ZAFgfpJEPmf`@O0!xtTkCZdZA3 zmXIw;A`2g{@W>S6b7k<-yE@R4wB5t6Z*@ z>-*Eo{6`z&^E+3zsNuor!B;nX;d113PPf;GJ1zg z>D&3&$K~`1N=7#T*@3mG`4*p{%d1@)SCRZ(d2G`#1+?`l1 zSabCDaq9C(W9f6-8Fyu`Essr=cJ?(p9Ph`B{zvP!#MS%sMeBAXe(ZYTsA~7!Y9oD2 z&2Ovu{!)F_ImbFW=S#!ax#gwC`}64aQ`y$hv~mr*>q0b9=R?B!q~fLO#p>s7QN#0Q zdRN5ps5W{`?1Eej&*&rK6bWcCacv6>!thTB-ONV zC2&idx5{p=1&eX~V0zZIvoi%;WfvY85DJlTAcBEMoa>mBwEu$yY>Ev2aJ zC1b671MZWrDc$6oy{tXs?p#=Wce^xtMDlf+o9f5H;07s$lwEK8kbOObZTx1=++hQW z@V7tAKJ_oy{kK01feUES&R7=nKmFko@Bh;uE;{h9kry4J3d52&XE)$xU_S)@u28Q` zSb3#@lz#)H)!qWajfB%$8pFv#j)i2QV_5ySPo(>b;B$Ku&;I%GhWxpcZ4Z8SLw^AO z6xvTv_dz{{*3I`^SfKemm(syU!D4~vlTgL4+;(du+M=rohWiP0p(dCF6|Sa;Rl z(}?vV6vZ6GIu3ePhMRjN{AQQqxhtbvuYHrswe{BLqi&RJ0o|N4uw~wr$(CZQHhOo0ERu*|X2=seS64s`;`i>+@Pwt18d+yZ;lU8_zye>=?P^ zQ!*k*%m=GdP$(Q3@km2rFok@G(8`9z0OrqQD^A%a@xPLC>`~x8LA9V^ zW{;zz^A?z7#2G#Eaj%D_)Y}8I@QDLM96XEbC*}7j)%G{4hXd}*xGl~3Kh zWC9<5ICP?S=HfvAw%BjdD@i$=jc zyYx@cl&EM%F4%id9qM^{n1(z9YQ~$q3N`y4uat^^gJ>|kD$YwqG9Br}FNYdMw5|@h zhn~_f7!O&@K^NC)JWs*Pxb-f%r_ z*NsDSgY%GPB+?=wadNx*@oX4d@ML{|Q*o^^N(ov-gwSn9Qz6rBvSQLMd~8Es#L#+) zQW??zTo7bN285y)g!*w;49QC1X{mU&Al2-fiwkhviG|+mDz>{{DiS7rt*sX1dI=w0 zJh<6cJD~#Z71Aj7?AFoQ*`ltaqou>Ev$m|Qv9-CZUSVaibOxTuZt9{Mg0HX1TjpZP z{9$QqrfGDxZt~>eYq$mj3d9XyN&(et z7DniHHO%_$rV(+97-nc@e=1FVhB)#GY13T@AF^+7XzjP8nFq=?Vq}AXSxR>Vy9f`Rjz` zoeq093P)`J2X1KQKJAP%~z zcLAT9;6~P4mp;iEbSg;N=m>0ZZ|#h|(0g}Qha-+~+<}kE%TGJHe$ps)3Q0gOiU_N2 z4*M^u_{;y6iqmL@n4^gIa(3E(!0O^aHQE`BSQ6|A)DnLowdrPaSO>GTuW5c$a1lk+7PW-T&&uOKrj1&0LI$VjmtI zoj8?%#~D65l}w`TxykcC@Vb^HTm zWneIXh@1KUh{YES3%R0k*R;6mZ?IRINSWn%0P<1WDCIrt1p8B}T<}A*q2-vaBzbX8iWXcE zeMXoVTHAD27|kMN`rtldQ7%6Z$--GT`)0X1zY0RqAA?KFsa)wFwHg}M47 zBG!T{)&Op$sg^T|ZFF3MhZ&MGv$jy@8Q z-;1H&pHQB&D+e2}s=)-^aRVM$dLMxHWe4zpPp2xo)VtgB|G>({2K925AC_|vIzTN^ zT%ajhvrG%wX5_tTfo86*5gOrfTBy5N$p5O*w?FuhT~ zwA!EeZ%p3nB_jBax`m;zBGYsMYeAVC(m_z@l)wxl#nU*u|HnLtJSth(Dz?CnAiNz` zAwd7UIlk6ilh)ziqTHhE-=chc)ONXC1jX{w|C&V;8{{tXVFKIX6#8iG=A71jaBk^NK?b}`~yxv+4>R%p6Yi|f%CpeK@lniqbL*GAPylQJ+ZykAavb6OOwF@iUpms z?gd%4X;3M4o^B&b4Lz_sGI~T1`t3RM`+wW>J4zK}l<)YQ8BHrcw-Qmi|2>JtSGhuK zQ@Jou7}oMWZf>*Yd&VkcI5t^)3+ATxnD_ zA;oup4v7*&z#s}gd?%u0`Ns>WMHqr_m|6);25wR&A0csc`VTeoVmXf@{w^YSRY=!gW@ae6xp<%~bbk5}aBlS0csTpIkVh8Q zSpp5jHh&DI;9d>sm8*@hXKF{hJlk$7&vt8hv?Wn}-xQsN1K9g4n+d{>729Tk6h4tC zTg&PuEm{r+NL9C#Ju8+VXADyrK?da#7f7i)jWBIR#b*sc8V!qp$2Dl0R^U-3xc;(sy*(FcB*=g%ZVWi0EfL5 zaH%*y&isBPYQllM@+~uD!BIcPdS>D&R8*@TsmU2brt&eN6z9WRGd1@lQb;9YL=Y`h zwj6nDZt4o@D_z5BlCD)=`lS@*Dre6r!J;6jc>F5{2dt)CS)M4yS_evgQDi`kK*?FC zA?A@2xEW*y)qlq6UIOjZu~&qEEaGsWhw3u{{m$?Z9YTS8sE^eDB~UlXR42i0CM9+y z77#Bn<`56bj<6vxP4*SPe4}wg20J#$H7Hisx4sJ}L2->hMvL^nzuYw@!c6O|I)oYf zJh>Z8GWJO%8j2wTNz%#0!{svkveWG#wN>B2e%#2R4Rz(dZnQB^WY9bQFNOMME$CJH zY^7#P6JdL`NNIA#ER|EjoBpq%)@K^?d!>f+nc0kGE~5lsWh`n1MCamntCrMm7<%#3 zxK1(Mt^GDzP5)5GL$+W|rS(1R63hOvmmxG=IXH}85Y~`}m($r}zy$C&SQBmwaG(!b_hPU5(mj;L_?W<1Mq~ZAFdhmXP%^@qk#dZUL9KQK7N*05(38L(n z|HkUuKs{1SkVI1N)$^!S=&2PKw26DV3iL9VOdtM3I7K95fzk~bbEtQ81*O5hanG9MT9cJz#**PY#u$mt-fG3&680hyeuQvkO8)19J!sg2}g8$fq~N zr!D$3wFGGZnW1<|MmL8=mlDBq8XgrRSJw~{i+uM6A;+AS#vpt5s=udRVx)9~l;>ds zr5D+*Oc{aJt~HF~$VMp>X@s=`F3|e`I}DHgnR3C6l{i~g7K`Sfa+?Vg-Bs)1AAzv# zmcgct|L-U4G~l>nvng&j;W!JJ!b4ODDt1F-?FBTo5N`5q!7nT;Aajew>pq;4RLLR9 ze|~bup^$q4;^G-pA%09-VBHETGXc7Y>7(Rj+RL|O==%}ZF4c?#qA{)!$wh2T>#d#V zC@c=O<4DY#UDPlHdT$(T`uk!i@B6eN&4~^3xFDByA0NAVy%YiiM>M#CjI?Pmqje2iw^C1#_=qFk zj1KxkVH+UgzPe0orB9VdV3r-AHiZy-7 zdw-ky&?B=IsGl8(dy`3JR4DM}B};G;RCrb>YB8HcPvac62}h9WQy@~vRP zf6zee>Az?|kyJ26Z~PA%)VOALF7Qu?RkO*oSoCcR_t|~7AX;h49F<^;~7y!9K9y( z8qHG;Sctp$rC`f3REBqueuR_P@L?GO)~{2F=CUak%?=X<=>+5X@_=^iuU!18D;<|I zfr$UV$Op)Dc!z6)^DP?bO;y1DPe70j^ba6N;#!?c@ztpdOZJ_roE(>nE)!4Ql?o`l z_3SH=Ax^1EndbIbZSb)Fd8_9nrac5Ojd}`rQH^X@G(oOcz(3k^&t0lMu9{Q5Y77CLeB}LweXakVKIIO+aF|TCrz--7UXJ)y(jQ4JFu}*;J$b{>{Z$NN* z2v60o{@5q5CsF=kY09p(DI(DoZJBmH%}$=AHc(2e{Up=A$dc?@VR1V(@k-55m}rYi zGG}os6ux7A%Ot6zLVOIbu2+G2ariBLqmQ ze?VdgL!PCF9NTwRJ=%lRO5zw`2e{g98b(oBb6;~W1W^49KM{V6qS&|}Tr4(k(Ycse zRVWb}2jo}jKusRTT)Z<|h~54Q!AyftwLqD2u_D*hNsl6|EYIOOKsc-;``~bsF$}n= zUm_45*%krp?Py{BgbaX7{frt3C_vv5t~hFqKao)@kh%xyRQ0Vt(z?wmEr~)&(DYRR ztZJ|7ud`!vh(`qq-z&0Ui8wWE6XsNU*X$*5-_*HejCc&S8qi#s3-pGZa32$g7bjjiVJ}gp* z<~)7N0`Om*^!%6InnARpoQRCS`*JJ%(`1C z0Df?(ra#8WkbNWT<|ge~tn&hj)c{p+27c;QgbZ-#?vNd3nx!Orob{?P>t$})_`L+7 zitSr8<1w}WmJCo%J5pdlT3pv>j|HkCCJ?Q3V}$-@7<3^joYN}5UHjDMYWYf033uU; zFzxvvNyembG8Or0j*TzF_VKYXxx16xZPvrNuH z3h^hF9NPn&T8P5vrxWIGi-ZX78>Bsqau9fvKv()B-q54ooMQQNt-PuxvetAzkeL$D zsfB{RZt)I#sC~XjY@@+(O$IzFV#UWNF~okNqIyyH46EOEYT5T^O(HZCd$`$#dB1;o z60|vNhY(Rxfx<%Eq@(lwJWJFxiHrp2M*73^gI-2*mKDiexH0rB&g|R;EkOUqNe+~6 zQn`J3j$H+nf*^{p&tv!OCl|D7zO45BjF9*>!2nP%mAJ96jhK7ldnkrqv3k&P&r%6+ zv1^({2`#}?Rt_?^!ZtDHsF(jcm_bxu1ZDZUu5S4bmb3T0(h21HW`6$aYM8O_OY`TI zQ(%xrmS)YAov?E-Mv&l%z_``1n&%p146uwl4&(Q0#L{7U&goDE3GFt(q z4@?k55sCQ8RfC6&x}0EXqks{_yJ>ARbx#^xz)xQ4pap_TNG4T%_0g--0~)iXfAWR# zX#i0Ya0r=R#kscxe~3D+m%=8eB;lIVP{O&F7dSpi#jvWgQaP7;M}p6-^9xtXf>9aA zM65IUvm|gCkew&n_n)Y%{u<9(nW+Uoq{5!8;DAqoS0ZCUmW!b_!$2v>M5@dm0Cl9V z&ij#AI}$OD&la-1(+yDKKJeeNftu_f27na04;L+<*#7D!4%N-Eq(UJM`3P3@Kf;H6 z_T1qD0M*6mk3?PcT?(!G#u)&H7TNDh!IcfQO zB9GYzk0PtQ*^AK^`l+zW)S}V#!$JG(D#jO>XC#DeN$xsgV#%LG^OYI#3QQ2AASi$6 z+mw3_J2QOA(<=4}buuUta+1!{ay4u6ygqDftFN?cep!IcR$7*57jSS4-q{J&@1d41 zR^z>YoqL41%?&4By;Hch+-Z|-Xd?mw%+7se*7=<937}@1JYNnsnwJqth)7^FK7C$Y zQ7aY1Qm@&Hb&H=)vcjk;70A;VePr0}{*I*{%Swd(l@=&!82PvhmS+(t-u=&#=d>;1$zT;?Lqa*23)`#3J&`P-+~(s z-ehTp0Yv-{J{bDO2S_BOqt1WvK@1A?44;5&zN9C}mMPBfSt0obccXp(-X{w=S_@e? ziUbvS>U`&s2=Y9~foy`u1sZz$-N57inaQA2q_SV9928{f$J;E>baHQ)Dyqu-RFlm! zi+AJ&(IO&C^tlLZCczG@RPx>xs#=oKn`&b~7o^aXTWs3=gIO#B;ItIXWY|LGn?eHh zpSWnpK?@CFwABwje*RH_V!)rm_5NA=T-#N{r*4-dB%B51jwKO+dgE@%^uPpuI8A6A zfT4X>_}};d1I%RdM>CY-Qt%cN&_DR#5A+bfK(*Tog^4=51@kYYKzloh=s=ug5vpsP z4@WNR*KA)y-D{VuadvFtZXtt>+5_cJWQgFOYhR?douDh~_9+MW-EG=IqI@8XT@ZH~ zhfR_(+iEdQ&!DF{O2FAF`d*6N1|OmyBukLJC_@h-MC(ey)$cdGBo;K(pLIkuh#5EH#VJgD)GM^3GX7!(=X7fK-(+|4d zUoz~94T)bUOl`?xKZ?UwNSC5U9_rj%Jc$z+#62ZZV>x5?jbNcDV$O|}=R)#%V<0gT zM-bdRy_*G=_3&^kLZU#oaDzkRgtkl01Ih!Q`x%;yT1Y&jr@=8s6VK;i~j$p|jh5b(vBZHB-I%;9S#vV5k zslp|N9M+JWu(eD#h>2OsV|2?sdWP<+&MT;!#j{kxns-L_TJ6*4=FO5nUht5}JSy_B z!OCUqX_6M0jqVsy4#UHpq8KL(;@Tu-m{^fCl?fyAk+B|rk=4ksnJ%;-o{_D6T+}s7>0(gTnv_BEbVzY9N6+w&@^< z*O}P4mt6#2=y$7r48(3osnyD_06@>5)ACRFr=1CH9S{64BDwU>XhCrNRIM9Wj&xX3 zP%}@3{)HrH2y0G}y_&|$QYu4*`d$6g|9*2-%ifowoCHm9QzxWSbUY!|$|m7NozC8n z^b-TklC3273au7uvvATcC&DV@o1i8V@_F8VfBP$7#WU^0AHe z<)3nh`gJp*7IOIQ59CziV3_dqNn1@}|M~;aauKNH+39vQ2+?GfSvQ`2!fyJ4|L_Nd zKx@6!*6Kov1ZYeMa!vL`xLy*^bLn@yH1tdTcURHbX7W@WF$;?BE#0ph0N(4afW zo=dH?q(zh5b9z@Epg6>ISTdgOkQwZXltDD4s2D?D90(%sbjp zUq&l*AP5}^=^dxJ8u=lDqd+X(->PO+Y>eNI;-_Y>$gOLC~{rE^x1Aaw{#@6nT z0}L%vr|#z}+MZlKJ(ToY0psB`X*toRAzMIgI?T4G5aG1SgM!R~^0^@+0|dLkHgBx~ z^u4%^i2Q+8o;kcZtwh|K94Tc*e3fLdQXQLF;;2Sx_i45C<3RWUypA7C>TCgInl<5$ zU=bp0T-g(BQ^F6j;C}>y!3T83J6DjS#6JSTl!89AFg>f3r55mPY=?fR(v-3(841U1 zOhf09Y#2ZtfPU;e(wB)ZzbaJj+_oIUQ%V=A3MVrXz|1^RguG`v!7 z)w|?lWs-@j)Wnjd!s@*a_ty9@+*=k=iwEx&YnWT#?Pl6x7*9Q7z47A(7)zldt!ks+Ttk- zanWQz1V-a*ixV-gZ%9@v(lFyPZODG?;PLmZ4RY4wcpruRq$8yS&T#Y#i{0&fG?FL} zg#mH0ZYvnME)lIr5Lt^?rvxd8&wM=`md$Zkv=-d>ifIJJEVRagm#EOXKqI=k&S*xf zj!oHGkrvKeW$GBAnBS?F7wP3Y{OSVYwi3AHdX(kOmz3(D`a7xzp~9n9qWJ>Eg7Z!3 z(M)vmEu{By9_{l}TcngF0e&{cA=>(JFAf^ z(Ek(&s)(?CqlVE_adEkkDX<{GeE%sBYFuon&%~-?lFv#36)8%IpX6Dr0~3F~PgevF zIY<`LjT6Km*?ADKeCp37GR)v($Y5#-t7}w{Ds#ms^7=#hqm~si2-b~|HT+gE@1=F* zusa9%6HeGsPcMazwS70wLlKPb!33U%RzicihU*sZxUh=Xim-l=cS*a(*uuCc9}DoMDngRTQA5e2EXFhY80Oc$|qqnE2mDRsV-mqiXH)$cA)F38~zD( zf4h49qr!vdfMgH{9{iU(YQr0!`)`@*dT-crjHjix{<9e{*DFi>g(s`RdXBsYsgH+3@xtQY0zq^G^IITDaC!MY1F%~OseVqKoZBr8#8e99>4u6j{^2OBPsNzy zkH=tP?LH3C+yLZ%ygff_-TPM{M2I`a&rQ{$g}%x$Sb2(_i3RVO!0B2?7hq~SLjoVM z%~cUA4tiiAgEv{o)ln`$EoDUGyW|0I@U zg)v@$uNEFKS7f7FA~LWPi`*gya#PXi<4PZU3$aBFOJbnn;^Jk>KJY=RO8YAisDDZQ zGEIs2M<7VW65f=}Hr_bOjk*C~C?Bbyt*#myL9OIl3deH=oSC7BhIpN2n;eS)DBS|J z=a2kOmS-oBG`!L#W)z=JUd|`?ObjA1(fE}l<~%KlW1*24P&+@hsNJi*_dS%JLSd5+ zzxFt+c%f#08RmEU(*(qHPB8~icg36-Jx=OJRY)*mxME6KgD}*G-(kg9-jX9QTujm0;b{(WkKjTk`^h`0RTg?XN{++X zfn4I4XnkOLporh;kiNIcBdi}>#QY1I#c1sN8KW|{J*TtNiL|WUNy6s{yMv{4iGvlZ1yDq-w! z84?0OgKCM@X@@1^E5ysIEW_+;rOHHAli5Vy zYP%Pc@Qg&7noWZA!~6aKN8A$lc`$xD=}Wp*|BVlZ{^En0`pgUPzxW{aUleb)_* zk3~Om)fsfG8`Ch>2YcJHPOpQee{pbV`8xMTy*fKKys0LqpuVSKlKrPlHJXLNtVF*Zk^ zhX%3Q1x#kgtgM$a3Om;!X~jgoM-Xh=!D(T)fwr6joMw30a~4WX{4UIiaB}koRor&L z%V4R%O@`&%>%KGOtu}svex}qm8EGJ8C2$@Z{R%nb_D__nMe~cU ztXmq}PV=G|2Q6v(eI9U5l9%7S>Ltz@*4ddx6rRS}d)Igt7M2VPo`t0vR#cWbw@Yiy z!}CmF!>6&G-QJCt>RHp<$$J+t%KDe;*P+t^?_mOfkzUv1j|u`^()cih4Uw z#rvlY{Q{t=t~Vd}#1e0Xs>RS<;4#3B+bUgfp_o_5Zp~5mR?A*v15bPHr%iR_myxi~ zk)vlrYxb!M(NkHSg@rlv_y0k^S-$I@MY!DMkDGUtFGM2Za#J_UsV&d}hi57&>U8Ik zL8(sv%^8&|@>I|O>^r!{#sl_^XO+<9(*W?Hl13mpZ?%Y5%ky{B2~~)i@<+rbzt1?=cF=s1S24&EI9LDfyjM##B$#$=gR!sDwXQD}?n~bG2a{7V{!zT_7pht) zhwbk%^qtCivuq7NeLmA3v$xRCPdIfFC;W1S)(bdpNc;m%7GYEIDws~V!WOfj4D}uP z$aU%UptO$8Pohq_mGFEO`BI6MIB%hk9bA8rnj)?a?h}EFg4d!4uX6zE!OB{)Yb8M3 zy|RNdS05ZJ4T4<`t0yd297P3So|ytZu;>4rL{I*uw}z9A&3f{@EVowSv*k!KLQ4Rvh(s8nLJ2n$&0) z*mdQ(Y|{C4jrobX(*^e=`WDe+EtKKJBBPy=k=3<+4ua?CD4MZH7qRz%z;(@0CH)9D z8Kq5TMZ36H=v4h>9}|OUh#BLbCl(J^O>~a_t_IB zTBUZ8dbw@*JgVEPQ)p`Q-0o^NZpm}pyGnX|8Kkq?!h_iZa%y*D zE602Fg5KLnGQ8b6SWsT(aH)5=Debt^wR2xyJ9*70YE#Km@vCIz@?_$;s^~Ij@x8m- z8OrFv(|Ll^X}9WfIsAt;?3=hdYj1U+GoNoq)jg3FSqF+uk9x5#bC_!ZSD)Xc{k~r{3B3Ae7~PZmIKA@g zqkYc9v?;J?O1i72N@rw*Bug zx|{35NtIVP&tOFL($)zRW?C2a#Z`xdIvsA-l^6GB>na(%!#der6xv-Ty^uF=_q z@=>4mTF54FThh$oXWU>9`s6WE7s@4$7k1;+(^e-p=kxJpSKI5sh{)5aLl>`S!`88u zYmS*yY88)Xd$4ru%w$$oRHT!-Xqv~-^F|w8$A`)X&=D6q+c|3#opfZA<0dYPQ*V#i zkjy9UJgZw&S0if{Z=I;r(aY=5V%*^1!HDPHb=XzA<<|;lrA~+2+os#iSeoPQel07e z%i~L0nGQ=9j~A|E#*xOz9q*z}#-)cbo(DIF+k#tr-NHExkA0p^)kl4&-HO|$Tj$rl zT1Ur|<#le0oxSFl>!bP6+29i0RTs1dUaFkY$Fa-S=bPY@HI+;IAG{39434W4mP<0ySTJhEi0WNRTU<@X`<=fKR+3@ zPtj$&MA=i)M8k_7;ON*XgxXX=e6PHh_%x;brk4jQWNY!gj9&7+jBX=%p6ytmY$*{c zQgznX_DyPvYULBX{4~ojs-y#eaXnVe%j2zR%D+?;)~dF3?$ZI8baCdqrbp_<^FA+-qcIfCkUmw{L?a4nBFrGfe zfA_V|E!?3>R)H#p#iFX~>sIw|6_)U;OXR_7g=KI7zIr?@B=3%#txEA{|G@OTxemT-!rJDX zG2{1AyWC^aka3CFp`>I*@cg3{HEY!8J0pj>LoS00EgHhrbn!knunyEz5WkI8PTIaB zYLjT;{BCZi_iJ})i?PD<$CV3P?)eo~!|EVI)%wOZZBvDzc2-w?Z#&{Iw#*p6$*l|J zZHM1nN`24Ek@UjjjY`D|p-~sh1n!-F4@jO?{nez6!|tOEn8prWbariHrL%DcvkB9` ztlQk@7vHIJj+sjx{6EqKh5=&SUUsNU-i9lG>HeHz`0p-gk zQ-Z2uD2-X?bN0ue${%zh$@H25yG=Ejw2&C(nR>8R+6PGwTovsBRHOEbiT>ejth$E| zK`!t*TQ6~0EYD@`D;6=pnArmx494!NGaom8na_*F(!HT)`>|^^MuUh2a?(~!D18?8 zi}AytWvc&*ETw#UD+{FqR$bLew6M~o^w`-9Ev{K*Zq*5p!5FzX;CT_ThGws!SAI7^_A|2_>@kgK}y2Y4#3 zK>1vm4h{RyHARum*}$=V6eCC{frr61VY@ozSa=n~Up=Mwo`!Y!VYn-=vMpmNth z@dd)MOGoxQbu)7loQegBb(r-oN-%=*oFn5GR;$E0ZIA5VyGY$5I+2b!A(VOm;w8nAmO3N3wSl%w;9Bc z7-MDSBb4#Tv)^j|mtkE#Eayt#{C^l>Oq)~e6(^84c(*sW&f+5Drdeq{(q)4)G@_G%Dh>r~e?eGOI z?@zKlCo$Q_pV$$)+d2M0UgLI5p@oAp#@G>qGtQhw+a6nyH0?&3JU%crA83(3Bg#Ip4 z4>@x%ZI-FmwXE{Iu5|(QQg#bj>nXo}n69yDNae0^tJ%0sKP@;5zn{Mjl7=(RDb73- zK_y9us>23}>S4Lb=a?SX(Qw>1=dNtNa*UJ~IrC~i27!6rN}Id;{B(i)Z1npwZ{M(Z z5Ba{Zvyk<4L&xc-5=3@ph4nC_-C^@CaW(5WdHu8j$2swYr`@+j`2Mu>Y5W(+7T--C zj+E8i-6f@UZ1+uG7TdiS*tGNbf_($okYVFehUWI30~noO9nbLp5wdi2TM=h;GV0$#R>sq%_Tk~Q#O~H|&)RNpA*_s7 zgY#y~>;1;P&f~!SByy|Moc$v#s^Tt;7q{Zc_oMG4|HYx}PU7g`gifb(@yp%O-SO0M z3GN*YjmBx-^8I6$XY2Xk;w?|teLK<#F6cqG(QX(S2S!`6fQyp0qve?Ty{#jdk$y+WYNze%vo)+n{T` zT!Cr?RfPRW#kF#*-EsLeRP~6}Awg$>kDr=Z>cOD(~E>Tt0_h%jP=ZF7m2GjjCLu zoElR*dV(yOE*r8IooL;r+@_wgxXPNIHes}xoFXI7bfz*d+&7+I4?dD~&jcAy%kj9c z*1WuqaV<%roX+#+Din^mHwHbfw$FE&TsW6Elmx`djKL22ap5T+eH|HO`)8RFoKJpfkOc@!?W6!=1u z`8xjmG_>e=MEB%3Vt9{J$8A#qIxT*{pC!Xm-M1`+>us_g!5bm2mqu`RLFA`v!)Z%` zeFs!T5Ot~lJhpN8kb9WPtBaVph!9;%(^z<@xOi|dW{_0R#Ofgw;CzNHb20o&_e5_w zD;SG5o+$7=S<#`_*&MBn;R*jZPmMn6eAOXxX3oKa-a8qp|3s%HcjsUrw$K&Li&0m2 zzRSw^{kzRm(P_`CHDzg0<@4iZD}mw<=d?H;PUFs3h@3EMP4~CsbJ)DcSX>TS&EX7p z@jFpulPgq)z#ddx)Y`7lEa>WT%mqhZOm*0`P63S;Du+LWcVye~uDE(qGk!z3q=sH< z3KATOqD;gIfi0P@=A#c;CF?T1z)x%RwNyz>x0!G}AGWyLiQBuOF1Dp}1Y!@;P?!-) z54I2%56i9Gp-)=t0fvAY2jjHO{fNa8hO|B>8$Sg0%qbISiQ>nNqfjl0NizesJ4`@p zhLezp1iTokj;p}GygR0SAG4#wh7+j{2nO{dO1N=DDNE?DUWi8~#N@C*2bNAAx*!b- z>bP?O(RKg)y)-4G9?H>7tKI>twhlgduqA#hg3~lH1Sf5oR-boHfSPN!OB4`n8X^OT z@m{A8v~>S{dj^loGx94+4_)gL7WeVt0mf!nF4V24c==DZ9@ez^k0II4ag<0XXD-Oz zuu8OW<>=DZlQ+iPwnee^g{NJ#lXRUPw{jS)RzDLWZOg*GbS9m?mhF%O5pM@b(!uMU z&^i3u5_F@g7PtFVjyktF5iIVM7auMBo;-4#s~?{qJh6DJ4$~8kFv(K}p2qoUc~Y1- z#RbL$XqI+M96aoL|R|`5H01iH?WO_cUV=Pi< zIT|h#KZ2k5`AmL43=y-XC9mvsDSpoc;foEzhJ)(Yi=cURmwi9sgW>`a@foOOncQT$ zzUdC2QyU8N0+I4W@W7Vsn+S z0ejNaf0-O!pjG#0HFonLexP^z{_Bd*&bu}1sUJ=-8OZ6pslD##>uh&fSsCxgUXhMw z>c;6;VuvZYyw9MO-*tVfvc$?qSGkGBxp4zbmZ-qS>bawJ%3z8`im6i>mq6SP{{%0VH%DPvDUBBq*OU{g}-x8c=3X$c<5lvsbE+Y+n z>R&CJ-)8dROVpRv96w!R>s99Ao$h1$OH-yOT!oJ&|_mQ2==(p=} za<34%?6;$aDKl2DDBP(I(Z>dHsjW`?Y|ddNN2z0viAdpG(vL$QTw5NYfpW$VM}4=k zkMC1EX8ACzM&GL{5gj{l53$U+o}O?Q5lz+1GL~Lu@`0vJ*jAII!-Grenkz4Ziz6+e z{1yhw)dt|SJM?gmOphn9` zI0x4Ldz8lq@Sy@~Rdd2L7JuLtm6v~vNj-R*4g<*}69x7hiVU%IAK&DOe-bbd1GIuT zlqUMAluM(t)nf>^_vXBhm&+YP%*-|$e8CAmEZutBUXxQXORY{CXqsM^{AFXB1eSlV zugb5>dzFH?%bxmKNS$)}f{?83cSg4JgrbqMqA<%Jl z5^Pi`QLzUh44V(#g{ydUH(EQih;sqWvS;%$6E^r95q%zb5{(umvd>PuMi2aF9Q2Kb zyOBQ!JvM=pahx!SXxIk8aCv?N`E5-C2_6xrkc$uzeuVwmZ^)1(-O}huoF;kmE$?zD zAXGy}A;1jbhOf)!q^}C+S`l<)xo*RUPnP;N1i&9Ury^DSU7~M3vvupoOc>DH{lz+k z#RuiQeS-74Z1w{jK5N?im-9a+XsSXBFLY9_5TbM~l{XV4Cp=l@j2i^KI zF1Q7PhmDsVIdH#TZi1s1$-GbZ7@()>8cNOb_9VS&C-8|cWrAGs*|0PIl5ZU|V$lIG z$S#B-?$*ZkCuItNR&8DbHZg|WETNx)=&y}lZBR@+xhfWTTG`|6TYsTy(uT$e@d_zi zdhG@GJ1+^X&nl}we50SGHelwGDW=4nY()gRxX!Bq7^T}FY&RTza%M&QCp0$P#1dn8 z^!tkeL6Th2L+8xzajIb(kg;rbq@j^3-v@!F_io0)Ujitvc3rHA3f_ty*UQz~4KHqY zW*ca0iL+UgrK2w*&gnDJxN`ZiP~Ib%ZTC7!{JC9t4&Y6dp)ycv*y^OimU%TijdMI^b6=pw8i<}g6Ns-HJ^LA;ES6qK# z_~OCkQe^~!sjY?JvFXA&J=zt5@zYy9e7RayGlVL~qZKq%t&y$6=e3`8f`g?!i*qgc z?Aa`1sPpZ7KeNMc!&GusB6C>Wn-Tb$`uv6A-HSP3LQ@*R@HT4(%JlEEqr%ldy)MvgF}#vufIDSB%KBkg$(Lp5mA1nDdk&izs{ z*bqQb5Enz=d&$IPmN~V?)tO!9pI{9TSeHulq9pV1QS(2NbIEdP=aX$%oExbPEuhbG;O2UTCO(wrg#P?N%Hd9Jy zLAyBGs7v%HQo8(@o{Qd?mEC@L4!-P6TD*L!d;n4`hlj?*Gf1XHftj`xK3GinPp)L> z3ubo(_5s{xv6H-nw*CqebuZ*VT)X)j<4-!~5@q-ChIAvW7_7cu$$^8GY5WeGZtZy@ z|8^PSe0(mE5PLs#wETRQB`Y5|t8L*VGWF4@?2sfWUUxlWQc|()ykHm)_-dDw4rVXp z63#{{!ga^Q#}y8uhw31*NkiOqFxG=Hv4lTgNEu#Jh>eCBgmVo>R^_fO&W==nH*txy zL=Q&e1(i30S7{v@EW|e3F>H>bc&MYGx|U;IeB}En5}3hr=*IZq+OTP~YDgklGn6AG z|BrOK8i!`iphPQg!ScB6$mlvl*(kzzypTbVbGm}_Zz`JBJ_h>*-L<$4!#Tg=r$Tu` zPbxLJnj#dOmhni6c&@=t`f7efd!$kuL8%Jz6{u3f;?184_}8laoW~heOHPZl%Oy<8 zE>m?!hD+dKkX~K9({G`APasw5ID}6pML(*4d?l%}eUhtjChffy)`XmtE2gbN-3Rp` z9hG4CV$6|H$7ClyH!@9YGU*!lWJ8*t?Td0WxUtV@6UV(fp1&*&k49AE?Y-4i#JX90 zS_}b{MG9)efOE!M0XQurFtCuAz;2J`7Noz(qKfUGN-xHrLrhR;UOmG-N3jF_As2a2 z%w_6_kIEwSpWV1R%2jdRpM2LLr3fNQF?~g55m0on&}ze=qjJztPj9Ig81|dAl)DFj zG=J3865i7I2uao*ZaJoBiR{mRrne^!K^j1zGgQS&%Py&ngRrm`I5Fl?{wSEo3LGQ& zX#q-_B#9sY>PGNg)t|^=DJ~iipbMX7n%Dn_IBM$<`$-%HKCS&YMKaEX0yy6kEHhW$ zrTx3)zv0I=D0^*uZ{A%=75@j@MV(Z^w9~B1K7?Q%1!`VhWumY)_mp_uJaw|<1lb)u z6UMdk-_Bdp$Ts4rnEqw0xBa{Nv4RW|`|XL_zih(gHR<}4q3W|aLH?*K*-u(#>jIfs zhCL1UQag~X7`YI2-^vv*iR@yVWXsr+_Y2yFJ2G^2*`MQ}Cl~eukM%9NQR+Xd`%{my zAz?n`6n6a}O`JN6)pd0VdUrS)@kc4*kBD*a7dwbPg7$RRgEspx{PyxhlB^4Y+_Sf% z7F*tq8eZFvxGQ9g>Y8y0y{1HMExY{P^pkhQ8t584z>D1IH$H#IUTgOX4jHuK_{vLh z;TExgC({d;DexfYND60<<{vg#nPlzs1qV`3liU}ZAg&|9dGs%$f<>>YcpMqs>rUe{jUezpR7dzV9a4dt6LpKWje7( zw-qXE=pI{}MhOqrAKUPxI1G#ZJ{wpznYKu67kKw@(-IvDB*25>B-K`;`%dGmT*A_5 zK@lNm<`m3{*+HAthSE%HnnLwFhk^kK4T!WCx={EhOM?IDo?Hr&{^1+_65VFVy)l>_ z!D_rw6GKWTsdC49Yz7Jk+>Y{2{{_3jlHKBWtdOAWBYt3jJ%OC8NcoiUxz3%fCG-9=OLx))8}Y;%qkJz$SvWA~V8>#BVj z9Jw#tZ#9Ix4^5{P8eeY7)vauvSS+CEMaeIV+>JoMTa{=H zFz1ZAP{UyAj6XTgq6@I8T|wQ6bEEQn8xQrEYw1-z^M|)h6GCxAPYBn&NT>0+rS+b` zTV-OFfUy!F4EGxcdY!TPF{5??&O`{kS-v63M6hCJ_^x|eLV|xaL%9RwzU&X-RIzZV zUqi^H#DuHg;K)^NYQn4mH2#9I%YfkUKZ%%J9U`;{8=PIdLR($m%Bu}xjy0LOgEPBu zHh%UQ8~J@RjrGhZ9$tJw{{7H((mN7bTr{VMD)F!p>6G}cR1o5HR6feK`mc2*HD#BP z$c9RhEH(S2f0|8xzay7X0GWN@Swm4!fESk38YH}=6@Z5s=C4+A)$c}yB!3J)%%QCn z!juF|fg0zv49e1Qw@1P=@^S1Zf~wvrBsC5#BDr#PZW8~);)&A08CVxf+0aun3Apc7 z$;@N$04fE1=N#4Y7!#37l9eg9EK-W1^hle~f;7i!qy=SQc=Hqk{`}dvF^Yz`A}hEI z*se1dWVg%Olab0TmqT>h^jhE-y273^ov#Mfq|~{XA`VhgbvS#3qard>2W96Ft;o$# zDG&zg6gTZX85e%7B`2-O-g1L z-hY~#%^HcHE?jH$<*nNASDNv9bk;OWMhW|9-{YSu`PEWi1cJ2?15{YDme}okavxpTO%GAPlS;Q%Y_=`LLR1EI+#C9jQxR2oI;tRSR!PKi9?JBdKm1car%4>v zoAC7F1Qw~lipQni*7B!zB~GPek0h9*Mz4KN^j`VT^Mw~R%-9t8H9ddmlxP(Mw>5u@ zOck$7MTYJ8^U{bM^cj6avqC3W9;vx!VZ_i=&i4yNA->}lvF(j?P=+OD9p zOl_1Aw#l@+&IGKT1*3nle(a6tVu9tQ(^ic5V*-n{w;gxw7ViLgxNJx;O6g|?g z+ps-;lSiAsA30z0R&u&VeyTN zr?(l3m6})h9$!W5Mf8d>kiOC~J=Cj0{SVntW#s!q0uvx)c+&sn&C1nye$u<@X!XK5 zaY9OJi7ccNsd5eKP;Wb5`}1aH=xALutold!(%Zb#F&^$c)l#Wi@jUtO zi2Nu^lUM$i)vH0Eo0CekF~b##Ik-09t|UF1jiCBD8vRk%iFJhNm`bA}PTyUJte+0y zvPMaxy(z-H=8u}uoIA98kyh_J1~BpzWtaTfdH0r)cPqK3`Yg(NX4YEFT$lRGQKuB1tW$>y8Wsw!t&R2( z9uDDvER$t+2plu3eASAX2TU#^nE8 zk6iXW^Cd>?bGL}JTbas#B6M18JE4JF@in26`|T=bDL)~ACy6x7d~;=i3$%vP#g311^y5l2ogd|kRsl=|q< z3N4Hm!M@t9I@ah#)Yc8a-WT0?!&|MZPk@Y{))qM$WsSln6g2ajRe)d1LG$EG10SKi z=t1&KWPB?L==}<08PQo+Toh4D{P|2GT-oQC1us4fS~CJ3D;GF^ypdu+F#erY@f>Bd zh0hJ3v^0m4RM|+_2Wvv&S#~)lEgFSo(1S{0>tg4hyO<2x8!19IcXaRb7SL!h+ zS=N-wQoM@|e{-xn$R4}U*$-5<5qu zkmI8C5_(`+}0V`0JnaH^DPEB`LRQ;0b+TLXMHVd*;D8T z__#>2WAuxSPE~TzohBZoy$+wTW8>5(8(j(kRp>N~C!NbMT_);rX&jQQL#?{q!oNJKyJQv^oiZJ^sjam6wFzW3 z*H11KDrbF9VO<$1vD7Lfm&oQ364%%{aS=XGrBfbWnCGuH z6i)F)vxHtgGv~(ca5iqgICbB~ z2P2@yR(=ba;-C3eN?PHab;`%($pXLs5yv}|Eaj{AQn@S2o{y;tW@ZU4W>GDzcEhjS z797Sn4JMw(`~h_KP)$(EERxi4LC2<6qp!X1$;cFi%1zTy7*(5PM2A@+;!;#S=QO60 zEuu=#<7MR<^(>d07EqFg&{Ih0#4a8A$}$VjLOH!u?J$^5g7wP>Vf8uBH{s<6STm|H z`39~*qrAz%p9y5v2`sU zzSzyB%4IbGGwMDr)NV(2T*G2bbsSGa3TWE7+z96gy_NAg7jIWW@B z-)ysfS-i(RN&9y0N~NYdj@lWgpQN<#Oe9-Gpa@!J+}B z%rkDX4(-0;LubC;4~G;iRvVg~|D2VJh#9x?)jVx*O`iI7Q|u+~u_7e6WJF^^r{f6) zFjM#_5~!hR5jw+p^Env;02BAm=_@wxJg!!Y3V$cx+0$h!aKmgJh}mx&VK(O~DcuLS z#nM*JC1Sh|Ob-BuiOOf1i}9O(4Rv5<4}Up(7p}@wQ0~hd2^0jjGtjYyuO1Yt2VMRK zwUSKf6J>&3qGxJMSuIt

    YC}70OU++UtcJFT9Y>PZK|B8P1!o;QZ zBPb~S`;h7O-ltCO1%Kv|WLfz}d_4Cyd*SW$!XFW?nZ_t=$g-h1YDq?ZF#SjVnxCxH z67}z49H?~xBZ}9n3X~Y1$HP;FbXsEw#gCK`gaz_f0<~;o9-l6ID+65A_A{M-;rZfP zvWs>WsPWmjF_O**y6m198!r`e*I?u>|9ut9WyxmCOn_qNbx`?K`FSU z^+gDhgy8X<)?uM{eYiEsH|(L$L2+3&*h{hFHD@LSjnEnrKZHg3 zA#Xlps@F54(sT+8^q3glre5e@{2DeG*|8NkKlvbEa(Tz7;z#4Gz5~7IoV!W6t+(Mr zkVavW!iS^*oGl3NYKBVY%Y6l0l|_^0XHe>onUcyt(XDOc-r{z~wFZ*CSpp-xZ#CjD z6D?~$MFUlL3X{=%y>l}bWu><{6oX#>+IcCmsDZL%y?KhOem%~4A@ z0N*vZGpnHpIYshkqZXYjSp^9u6UuV`OgA86s#1!<(MgL6kcEKGceYq5V?cD{8gZP% zKpSC=lUOMS`0>3`frAk%C&eWn2T{)Gb5kV&CX;GdA;eGaqIZxHtMZK@ScH~lw%tau zFQ3PYaSc-*1_hd*wLt!;lzJrXUJ$$`wM|JDvB#%=2#JHFvV)NPzN4>& zr(VQ-6sjI3z1rW`w}mWaEzLQhcN z9#mrtk84{gy{trJ?T@*WZO;LAhxLAQZ^h{d)KTOKLf=NP-EJyY3F6*g=e`=VbZa((G#ayTp|93&{hH7XJg%q^?nIBp~?H@0{+B!akDfHrvH2pc$=l#r7>j`;TZ&l;VRkvK!t^WZ`dne1hAP>@= zo1h?JO3k>juFAy>bP@1bQgCS_6)#+sxbiYoWNGv85L-Nd?Y!xj8_ zQkZo>Z_xHF(o8_1rGwUNJ{ErwXLNu^q8v2*XZ#A`bdXv)Mr8G2O!WewjKz@S?Yb?c z(|0T8z5G6l9tmc58u;0~KeD+siuj#3-&!@DOgrL2Pe}vu*^)_ zz`!r24RBz9jQ2gm`^U-z7cYoJn|fL%icOKS__#5hmJ!I9ZKGr(dPMvxtz^T9T~Z6M zVY1CjFr2Qn-Of%h%m4tuhCufm#zGq;yY~gKVFp3ot0C}fPHl&=@O9i52L$d9_b;}g8 zX~#@K;G&)kLEzrz&sYZkP=?XL=^M=|;~J8IR^b^Mjb)`FuqcP5BeE#Rd`98;#TOPY zwZdal^VOZOP9BKzqsYBIpGyb58zq|}=d&!Mw9S+TA)Dot#&!jlPDEz`m(KsP0*Q>$ zKGHTdFs8gVH7bNm-#=UIXDDkO*~U+6ASO6WY2~Z5j$mBrG_n&5U$A|A-hA~V* z_o{?UnX~)CGJBuLOxGKU_>*UY^hT(eA2M`0cY8Ri%=2>&GOzzL9a8_B8-O#q+>0^R z{_T!k5XXNHTs!81a^b6Xj3d!C_x~lxz!;xh$csy$kF-6zSn3k=9?rx9Bi>JShePe0R*D9Tp7RF~z?&85CSh6YWt}1}-D;H| zwd7OO?mN|!?h5)W>{YDnTO83fIdSXrtTM8rJO90)pXUZYM#(v}{tck4sslT(mVgmtW2Fp$89jYu6#{9kufEb-MI3mAXrON7WB}2{Rrj zm~8oshGk0Pzky=elke`An7u%u>`7QlC{b0mxZb%_)v!I# zaRf(4ElDOZ_$Y>>hcaox!c!XX6N8RF3iCZj=CSv*hf>9cNjq;!2N;NuwW|YU0tN%w zvTK!XF0{6#&%$e!pT1mbaW<{!RB`Fns_53y#!qoa*Qu1%6)@`1rnq6s>ZjuT3|BxA zZC7I;Y6g5orlL`#g}+g?j$gUY=&?tkT?ys&<T!`T@t41PUJwXB}f_|WxZc9#wCE7&&LbBdViR4%o(9N-? zo>N>80VlNZV`6v#M;J9`^~(+C z9m~0FnW)1;;|SNvli0D0FG5(uFlHQeAYStXh0!4QhjLy%7v+))9UdWV@C@!u=5I09 zt+9d*`#7LbJS`PBD#_jVsL>90u)nKo?JW$a4kMTJ6*G7-P&EQ`rZ9_PY z=+Do)x=R$98Yu38tNv}h;*xV-4&-+dMN3S4+@qfo&4q9ZDQRQEps(_!QIhKiBfExlGnn$c!3a{*algSQLb*dRp_jRJEC-mxb zd5W|@8#m(9X3UAkuGj)&4o_!wQa?^#wF|U_T6w{^?I>NX7)Ij66BNf~4^ML{(h`rAPLMqiQzX41Bt1f6p zS5o;t6&-v+25QHY@*YX-4Ecv!hVbSeO8oSt4&}EDxwjaaBqBRFr&^tNvYVX74^l~N z+5`M{ksDn89VkjJJC9j3)bB`%s|x^=D=aZKZN(9trI*DO_rHXc7KczJ@Il_KE0u-4eI- zFHi2T%que=j2$t$zNXF{N+xua~YRI2v8U*mozCZ=2r!@5Jw`$4pAfNJP5 z&kFFUSDILOWkRhJ?&8mpbqbvtBYPd|JC|ayse7=src6Cg9)WOAaeJiqr4fL)IDI3a z@+Q9hkxnd+Y2zlwhoO>H136rS*E%qI5KM^azhQMppwZ57?#pS+n3z*kT7-~XfWyy^ z6KAZX#>`5#+=W9*kph-3;R+gTxG zF+T5!^2XA1$#z1St;i<>VwtV`c$@L%Kh&5m5z<-G?X&jI7%p&&o!&`H6q`xG7XKO8 zVz|i7^>Taegvhib4r5L}vkYsA2+yGCm&O&cxhfyCtRSVm=&SQ zPLk7vl3psI;LR;s>HCh)mT{|w<45VFKdm#FWpUtTyHJ-%(;aA)y3NyaoTT;(x#W&W z0Jvqco&hR#-);VamiTzFM^caXJP|!~bpr+GECNKebj7?1Btw64K7JplgX?2>l@5r1 z`MT^dZD-kITgMj@csH~b7C1vc9$JRg*S~H5y#((&)f_^I= zzD{+4`rs3?V5UJV3TaVb)!0M(nP8f6dD3Rik`>OE%d8Gnro^!j?hSvM^wAz1s%tcB z$2~Nr<6`PX3Z%yqrm(`>(mc2uOe}F-?sZ!gdG_}A(KhKZeVR^aL{oV!MbQfMSuzj$ zxMx#=P*-0?)a<@yos7M8WUWb9_9@647I*yMT&*w zM!OuCK>tRLS8GU{wY1i0ji!hmHZH~CC{x@A5BBkA(=u6?U8ZDzI#Nc&ZrvmGCRH!TqZLUC6Mf1X&Z(A`nhUZK<9pm9^4;gACdyN644Y3zIfwJtVhy52lE`LRZ z=O+W&5N3+b*_C_8pgK5#WHFR&ahqeduoHO-IV88r(g;f80>uHbDPeC4mrTv7`WK_Wlui zS$FySiK*aS0m|Pm_=;K7RMy2`E_XalYOZ4QM@huFIOS`Zbrvj&r^;P^&GbqpIj%OQ zp&o_!E35IdfOv*x*03=#&NkmNoTv#%-&LAWaR~(=C$-N|DC6J}Dv0&d&5t=N(AK7g z4+owA0z@$zoqeUcIyka_xe6s^|4}L#VGlZ}!J{p)bcP^v6a!$&c!N@IqdN6v!^lEl zrBrB1_*S4~e&8rRjmOKw+Dks2)0oCV1Wm=TlhpKNaOM2C>zF(!sIZn$t|R<+{#@m5 zGHY43*9*$^pR(^{;7%@&fOgG|Cb@AU4G%o7dcxD)hCpke1=KrJ?@D+%F}Ay7cxwbi z#z@eZmQu$(O8f5^xO~I-;g2ujEl-Zvbcz#-T%wK#W?Cj;aS4jkkr2wj#whPDxkS%2 zAY=Aek+p%thb*!uTagu8GCtNj1$%Kq7!p8iF{x(ytMV-==$a~^M=gNislMi-kvBH_ zlCCT+Vb2c*q*~}&IK!9<{nUz;{)Ofjfr%CLo$M$?i_z*OpG83{8*3((-zS#uN1U%R z&1S!(g(!L#ffp4Xm%6pIheKyOoe|FHwS$ibOD`_XFO=ogyzR?jkJAvc&89uQyZ2l) zn*acoVLExz6*ur8tOgpW#X&=lmEQ#lEl0v-8KChb$JlR^24R-V8gVd{sTual)7 ztomDvbBqjcLu}{fe{XkY7^So*c$Xv@J-AOtT`rSVUOEwX%|ve03QM&#f5N(`a&#e{ zd~F#vq5}juSi@rAkSr)BGMZD%K+gAS0r)uAoj;CVZ_22O)e8sJ`D~fiF zcYoL?u;k3mXgIK_p(tJM1`FrRnuDXq*dEPkh@>$kJT5O~cACKpiBzp$&Jq@m@}}|d zi`VMUb2}@WS2?W>lSf?#@ZOp{ae1a1bf$v*;Ka07mnn)!v;Lcll>`ALVlGIKKza zT==m|8GQPz)S0Pxe7ifM^MO1Zfg&?pdCy<_R=s>!rFPu>0Fk-6yC>y37M&|-O*b|u z8BHLbDjEIL)MNGq{;LQR&4`xDx6nvLP5?$EV!$3KVmOLGCGIoi&09#hLStv73#eX% zX1@OW9z>#g@$XNUcZ#O4ixtb(IOyHQ7C}h4YGwmWRM8_jSBwmin`FxosF zz|6_iB>dHp&v5%|PVeT<1X(0h@<$L?W;2))Qc^5ojfDgvMbvg6I)%cs!fnc6E4kx+ z-*I7lbASh&y4aWVV^eL0d8P7w!&%KO@1!vmvnyYTA2)H4Fc*-ZG$j`2iP@s?Nsi>0 zwQ0fC;mBhhKI;m+jVDaX#k%o9qIj00{M_-$CV2eO4 z8$jnCo2YSYBk8+N1w$>17AE?g%Ydr$`RTEf9L$b^1#9;(?$x%uy;dX}lJ5FO3{>d! zf2-}bM-Qc_C_QLOkP;bivHWGYG@b_$qn8|~k}qO>*{PvMx*C^gEl%#2#lIRI+F4iV zslorr?uqg|bv|BQWz7r{w<IDUvEmORYxO9@SmLF9u#qK%2!>e-ICUAV&SY(f3MC^s zyCba4FnMOp2Wpc9p1S#SNILEJK^*PESK!d4O z!>FEr8vHqTs?OXt2f4O1QB>!!%u?mWP$3zk5-h!BKrn8N_t$o7n15sJL{9ZQnTz%X zWS96Mck1+`_Q}y*D^*aHi(_7dodTu-MB~W&x+DdiH+=3{N@Gz)pZ2ZH-`t%+F^>pt zWRyBRz=%2H^!yP6x)h&*kxZQ?4xt<4EKVEK;sEY;^XncqB^VhQTTiURJ2bl-XL?Qs z8fmp5XD*djvYdORC?tmQfhnl7;f?L?)E3~r(K<@dK|(rOt7&AKaUGp0zjO-uGZ>u! zneA)A-Le^7XqVjJzWIh3%PZqo?tPmmc1^Z>h4aQbqg*4`^_-3GO8kop94!14{hAI3 z1~S=4v_T-fyzpjCUAa0AxhiX>JVtwNjAn2h!oGyVsTh}osh|pf{B1^K9B+fLCezut zXS_E^_0Om|=DP&E@oXH%qal!@f`GZF>%j&C3Zo5;_9Bj77Qy|*V=NpOOJ0+%KaZs< znDz7j?BqG!e22HRd(`f}3@WO&^}z)En*D_Z)CR~njm)Sjs;DZUNL=1`r^FSPv}US` zlLip#?zr7@)&VWcPb2NB=wsMjq(qRJnQ-P5^q7rWjb)&#m(4ETigZ&HMN&p5X!O$+ z@~g!s*}>QuhdpoQr;sax%q+2fWzH@ZC7+Q>5pnhSxPsc&K)b0Pu5}ORaAlPUsrC4j ziV|*>s>B(Zwj;yI=miQ2lpCgH{iYQ~$b$`$Rqb&)UG+|x;X91qDh#pZW zd!2g*ty%|<5b~QGHVVwZ;cM9%yD2qplUGr)d=%|F`>Yl;V0aBE zIKEu8N`jIZmznQ}-+gc0ZZaF2GgAJS{ZH?J6;W+$DOVm3TE|sJ*9KtIg=L;n>@tW&x(EsOw5li=Y|P^^zi2JLqrbSgBs4}=AtAh&7dnqpi*ObHVmw^e zdQ{B6K@Z_XR&L8XNTZ#P<03kskWNh@Pixag%{PhSER-)3$gpv(Nb$d-FEjDpbLJ3{ zM9v@|2o;HC1c5Rw_w6#Qm&&axOQk?{kI(1sgDAt6)oA9qOxI$_olsB)s*+(!#%pxK zEnoZzaMj@lxwzpaHwZihENL6Fp8zK-`MZV(+iwK65F3W_5!@#w>RT3AS zDMvj^402l%DykA-)gh~E_Ikz>+~*++VtXkyA4xgNWn~dmcXI{88+z9^Qymx{R56(1 zZZ1j6`avUwmV4%vAV!f>TBo4Wi4eIj&WZR?sY;Zxhy+L98z(}Y4tX5RSXD#0$b4nY zt!2rO8C{uVd9n^_KV&h)t3$lN^|-2Ra&igmA%e>AK$vMieUwljNP~h+n#LqA$i#E5 z$EFh%Lea92&aZ1v#Jour!l*au9}2zh@tsF6Uw0|dn5A3DZ>T`2s?T_qxn;Djmt zSx29RLAH~;YEMDjgNDrF=vY>Q6%%c#M-A=kEG^GSpHr$~b|6)#==fP#tGpX`nQ(A? zN4K#G7id*V&%c+soT3|mGnJ(Vmu3aQ`2PhzsI>B5oZV!JEuyY$8!8c&Nvnf(|m zugn}Tly7BPqx;$mo_YnQe1C8Qsbdx6I=O(NHDk6H;=m)0dXI{6g&ki@l)@I@a6a3= z6WuZg)GW$DV=K^EI|u>H4{W~J;F(B`O04PVSY9nh*|c!WxD`Jw;X`MJc)QrC9N68g zmcZ0sChm=sAn7s-6J*t27>!ddjFK&RyE#~!7Y7FN^y5=yD70Y^us@=IZS`vOZ59#+?SepS)D zqI){h>822gF9}PK9Epd6WNWKV#M~lsxv3zuit{oOdH@&JZ450GZS=K#RZ%Zn04wY* zz*$@~KbLka>6$wB_Ao2a`b+v$y=!c)t+;B7{wMx^Qp~wUpFSE>^`kdH+HMb0C?%P8 zr)HfU2}pGcj2;Rz3-fOhDQj!7Kl~rj!2zk_k4N;k6zWW57|Mk-$~zpV3cW3bF|%X@ z&~8K#bY8}OO#-yAY$Gi6sdbTui&l|LcQu?uh9y*~8^zsKKgblZ1R=K z3!-3WNwppdW7c8z+bFVoIq<9?S`rmIM479CL=89q;NrUF^O;2!cqmk#DMp@$Bl!7r|Jawxmk>cCHsnxWXhI4rF>bTwP zl$mZhRjPM5$w}BXqTtM!w4sBya>`z^_!zJ-wNu7<5iG-N8EW!-5?9a+!ve8hLwbcj z1eSDX(VkyYVTn}iOXH(>8?=g=L2BY^J64$^&C)`MOR}`f4OATG{#&^`jmAhDJ_}_f zoeh6K-=`d&Z5OC+S`}sdg2F73v<%+i`4MhCZ=%rbP<{uV-Q7m?9G$dfX-H<2DfhRCR zWb<8A<(Ss`5i$)QzuiUyYW~5P?Eo^D|$}AettQ=$rZ!XFDebXE^allKK)jLs&b1_gz-T}T4ee#4F4zc z{hxD#I>#`{mM(p*q$b8fjM7iU$5!gH@hd$k>6NhQopepbuvhwDly{tDKho~Y!w9`s z#?6j9n&^INhUg(Dy~Bf41kETs%G?T1(7CCsy%8~I;KtT;O4DC=uWnBrBG(|q0}mCcAw|7lZ3j) zE&HYNl$=JhB(Te`=fq)SKcyvHQ3qzR;#XlwYWf<<$6pRnc2rDhnmjn%+cLlwWS)Q( zn9SLXboO|@h!U#daM@BTk5|yTmVIKHBhG2XelFjFWu2vLXr#Tzc-!=er~jlKe%j7p z-O!5};r#Vt++@;UucJz%<->Bp5Bb;1f$b2kZIY*e!j`M?`yfG-rQ)ah_J-#iM}T6i zeIR1UFJu(YW^^C`o^6Erf~1DMCvKzux_&WY(+a&k&s;P%@sWbCoSx`5$3>QkiBS$wpzE4L>Q?OZxNUXQm){OQk}_d7j7$p_^GsA+{{Y zq3b)y!e6S2ZDNZ5=%g6pSd$L|)ycLi-ghDc59c5Y%c6q`uTe==cQj4#Y(;`?ZAb%6 z7R4$>CZW^`%kdKw?HFiY`7bD%@n29>tML;Qt*71P*-#s~>^SoryoJnT{?(XCeabX$MJ2#&=Lz-M#bzn%i*EbXe?4LuA{&GqEMjX zRcH0J)Wr~eCxjUs(&J6v{wYn6DHQs6HqWJMV&jnd1seigym5DhT0 zLZbNjZ0K!fqk_iLoo7K+>{35i;I>-zBGOuRBqNF;71OS zOvs~HQU)|j2i{pgP9!h>EmG#h1AjY@g~N5)%Ihx3rvEIRy!?oFlwHuT28()9%e#q} zJ3v1=WV?;AA+eL(b;M4xN%_;1<=F5j`~5#yD8;)98i_`aIeQEyx@AuDP50=_ zAFS^aAA2SKk6mQg)gu)3Ir!}e=`1~schipMG2At0;xdX(2mG@E!+*FEuTP-hDCs0Q z0>YbXv^4m>!qR1=N8?E4@r|Y~GiKDKV5cH+mDQ-z*Gf}(e^Rz6kgeZzDm(U_GOOA> zC&O}dyhs*QRj@4`=g@RrjGnR72|Mv@fWu2#Y;7jF(d7SuM3GL)cB#j$vma}9e4yK8 z<*3q|?f(mm)*h@%E@19uah`sR%D^GSkkqTmHwgvQSRi|>5Tc|$45=b;ms6Z~de)C6T*pb6u77dhs64vON|)@TE1->k z4o6E6!jRG?*U=Ke*XLPmiWD;9Me)YlMLZRiy6qyzMu;`O_#qq+D?E&VIQRwq{-Xis zEmYN)rdA12ZnWT=bb+JH04>&^9T+YnJ4rcN7HdpRw6U5EtwMXvw9p2_xGq*b^!Y0@ z^c1n%KMTIFrw1D3<#uC)6ZeOB0Zd$7Jxpz7i%&;4jQpj|@t!Soz}#T1?Aq zEV_D=bVq9B4+_JDr&_Yb_!zzlE(!biPaFE+(;s%4(NE2Mn;B=P6-CQP_LP#bAD=Q3 zvoNF9O+1S5Hp9k3^cBFJ37RFIc%DJlT!4UT)x8~FJMScuDo81_VTq>xZILTlQLm?A zk_mR1Addf*eaJrHRUxLL$}p!VROW)S>l7X!4$%l>ub>#rbNLvo;&&G*pl-x07mT%B zw&GoBc&uZ{XDBYaks*Vrsd@6{0-~JugKGRWUb$F6B6vSyt>Gc=@^s=!^>#oe|Bpm5 zE$s(XGHzKPFIix<;n|87U4Gn*E`sa^mTo(Yq0%?h^HWRBw6)B^M8W| z6YkL$M4Fv||N788EREl-FzU~U)2Y20DKerHRGblIXS{gIl}X9j(MV83?$p5u{6D_# zDj=>k+ZHhH?hq_Egy8P(?i!rn7TlfS?(Xh|y9Srw?(Q0b-XeSV?(Tcey)UcQQ$5tf zs;V*OKR;GIhmWjq_2lD+{ZaK5LN{KEqCzneVA4NfW0e!AYWZ= z=Cc3pnLO*o)8!z~?Wwj?!VO+kuv{ zd(`|`lx-X?lvx)nOIb0Qv((uTM0U#5Lj5Gj=!b?GpL9gz!YMI1bYkOsi1a;T-FZKN zqbrxNa~Dnf?MTDt>-P!8FmHx%BYJB%pZ1w+VdlhNIv5K*K0Jg&_&1i^N4W`+(QU7A z_&R%GZ-OPJN`UkcbTYd%t93^(KIrqksMCm7aTI-VUTGs7DtVb zSk9EM-P?ef?f5xMj*C>%7;l<2Au;+)4jL(F-S53Pz!=>kDbK8tiHmjn2*Fn=UGdAKL;zc`C_tH`)G0u0oS9#Fqrs9o?#QhLGEb8vK>V}B zb{q;4uv;%f-0SF`*OIoOEQ;+w;+3sQxlVXS+x@g%^d-ykkvdf zX%E~M?o{7HqZUjlBX2_C(;1{XcgAWkyoklny?g?A&Tr_~?eA!8d#7zfeJX11k;P>9 zl^zYs2B$ytW6WGFc$XWIY&?5Bnsr;lBYgv4L&$`)j7L5Y(Ni z*Dxj{qzMjWDc3MA@~_&<*D#MSEJ3I;2~RFCGA!h%GGlF_rp$~NE;>;RiVCCHH#T7( zQ(#=tL2XGkBggbfHf15&Lw(unHsXf7fAN8>CkVQ3l5MRg3JzshDueVeLZX~Q*BC6> zBNl=9Z^4i1f(Ujee7*Efw1N!;1Z=|`V=F&)C-5<7K>m5vnEwgw@1DL54Ta^v-O26N zE%O^39Foz7035QV%`nX#nidp8qz)bU#@+k~&wbtegv}ZHn?z8r2Af1;>&%zY+I~I~ z<~K;m0vcoT51G=$67sR7zWOx8I^|&g-hu~K4vkl%AqPj=aHADwl!ytfRV*p0dBC(=JUJ$2-@~8LBUHL&Lt-Zb(_f z$y&aIxif_1U;k4G)tqCApZA11;-D(nCc+-dAi z>qI&b=A`V`s~J3g(s;l%<52ZjVGQ@z{KiI`RGAl4;Ukh}u5a=bp zD<>SE9CwKWCPcWt7+VrLc$FzDlimWX*|(vHP_@zSyRWv1RJGl>eSy~KrqP3%obpak zm#YSidNF|6SmkYYlzgt-6uyNw2kvbC$}uiz9UoGcvLe~~gsR+A2wbKsL~0`goOtQe z^fSl>wt(?S|DPXBERakmF<&Al=F5~%<~9@Hj8GWHd5DO8%bD;jL}6#*Ab>55VGe|T zVR3Y8u7;i+v1I6<7Dn;Ch1ogUMY$@*raB^!C;biuY+=4Bqv~$opTD;-sJ)|b=xXQn zj<$*Zz!t{w4gRkdMj(%IHghe2dWXiN>aP|C=hEM_Ln{hudzLDZZuqu0o7DUU#HIsU z1`@kV_R@?#zC}BK?Xud69_u$ob*ddzZ!(pwYr(CmDu>KxcB|1-qr!9(Gn^#cnE4V% zJK8j203?{Bedv9|LPyd};^T#i}d6jErfa>;cZ3EQ#QA-mg^PJNW z*gNTJld97tFwR{X7=?u9k+?b*kKcZ*bw8{M6+MlWj82+Af~2umNsM=r*L?+yaj?rF zM#N?`dYQLXkPHROFLP*4nSRGtowI~G^`znYcj3$+4d^&d`nxnPc1WV2A`I{+G`wDNfwveYs|jbmY=cbU&s$6xcq;nN2PYxRq&KOJY39uc#r zaiFoDV6e{<#GJ)POHIOS32?+|KQ#i9%8M7w^a5Y4=kNW8YHp&6FVk8t zA0I8YXG&e+2JmD~KMc0$9+-L`A%O@Z#5og@BXSmeP&eK+JXF}z)ySfOygpqPMiq3# z3uqP{)O3w_?b9d};~NYPG>UN%RG~a3O{L_<#qy;17>`9x3X0iV_H&_F{LTa`$44{a)rczn3|vlCs!Lz(remrh8~OOyfa1)|>;MT4K_!$RKxEJR{Zx z)pXp|{9LixF@CCUeIZeCWX##5Y)$%|>UfVTHdvb*C=O1yoLVeZU;>d~5(3nGEfp8> zIpi`lPgPPPhp_jUMo7pE4>Kyn<=Mo!Cwl7?q!o(48&Nu`TF#6*!N)`h2a0*fAqNJ6 zQp8QyjOT zJZ}H5E+_I&mvajTAa>S@2G#cmA(J_)S8|hwb#B;-UXU7?!;me>D2sCrXTcklO>4f5 zq@oXYS%qn%nmJxApb*((=1I32Q@UD&1rt!o?vlKP%Kms?tgOt&mLO^sjc{-LEGh3~ zzqwQ^-a&Q6xPc^Wz(~SLzp|+)EV{RxY-;Lc9cD(E2(Fk2A*~5vZvneGf;WOAR_RF5 z&E!N1V|&E_tEh$9Xg=2qj=i5Ofk_rCuU?=H5lDJm(8Gl4P%uD?bd;8!B{OPWlJzy8 zj!E9=!S57ya1JeOY^pU@&e2=HV??f;)=m&-cEgm7YWF3e%g&WIqJZRt5et+mRjV~V z+FphqwvXOz+yV(g)6h*1;*$Nf-3n=F*Am!VCiStHU5DAXp?l7og(BK5iN72w$6o_5s|~#M+j9`HGT8NL&ja>w_?jbMFc8fs94K zQ|VIhP;qj1o2BnP2am@ULe-Zp!tH4L?piKDoW}e6i_Zw8^EV)z|DE0SsCQ8#emdn+eMAlDcX#7U z7vI`1cnUincdHMfMwu5iYfw{2xLzqli0Cn>67SoDr@<0S)i%4W&WSoP?DoKjV zDX`PUV9l2{Dzl!%%d1?*Y^=(i5BtIvL)nZR?8$A`Y{$pztX!BqRWL zXQ4`~m6$d%l_=<7L7e=}0e8%GNdc46a+UQ7Xe4#u=rI6~-o^Y0@0wqOZ`z1uKH*h3 z3=F0RpUxuZq_&tl@eymjUD*S(yPc8Zleve$zq31t`f6&kWN1%V)m3zFsKWzW73v1G z6Q1^*2=sxP>@H2Ekok%Zm_wI<+)pPTU?lZHn4H7v1uO>c*cpRYoP1CAX^RzmM1Z@W z42QJCm2F6ljO+TZRZC7w0>~>)KwQqk4cRuu6qO))AzMD(V0Vg8goAE#gZ39cPKd$h zRC9@i_`4UnUAGu{*mp(B^&3T^%)PWN?z71LxCiRs&2^C|F5|jkk}c@RkPjhwE015=Ops6CwMPDcz{F^VX>i&}e!ynHj9kcOQL^ z0i*p??L8QF0$Zq4rnl{EEnANLS)2ZV7#QH?{^0ox{Dpt)v!$d*ZIrW_B11gHTB!9N z;2r6=7QNL}9kD)GZ%K6pc9QSWnbsG^2t)6s5^&wFTyqF@>OLQ~%fk~?=_m+1gyrF< z#MClaFI?>)s{zxyPtHqEm>6peO}c`u1BDYXj8&S&!t2D71D4l9NM|S$v`J{6uJ62u z*GO@QUSy)MRrP)9q9cz;zZE|XsU&s8j`>v_(g)U!ur$d7GcN@xaVW~`Z&myxOguz8Oat>&5 zBZUDh)Res_r#v9a!HkqOkT*)zk#`8rAxI&BdscUOP0XpzSv6xt647KzN}Qrl?~(*& zJ%R>IT$=|{FluA!Nbtkt>kHZK#RW~WiqwRE*g#71^xZm{{&E+%Z{HAJ!PE%{>--UD zGSJ}mo_dipQMS;WKuk~X{!o?^&_mw?D>SAj3a>wgM|+jhECbF0HZr@2K{>v}@oMk^ zrkzFjiOw?A1fF2HZmVC|t10}|q*yz&b^|AvTD9VfodjN;9s)a^Zp=Jhe^sPt-#fUC0m}fqmoZ6%~nW#Gu zhc?~qHy&=N$1)bZ&=OjyltPnpdBLTT;9Qc`4TIoHFHbsLdsr`J0K$VBHCK&OGF**) z2UD!e=PDK78WKwMufD&EMSUAqlTy$ImOvvX@bt7WA)he8GGHB=X9ST(33u$4)mcNh zVClsvWTS`qugsy18SN_=NOp)i5nmd1+CZR7#%>=zOk8Gi_BEiH175_}K~@b!M}2On zJoP*=<(Y)VL^BKuzxO0CPhncnh=iO3<-_^X;(zK8!+6mjyjiL7kY_uH5F!YnI(708 zUFUb(Ec$9oncH=CpK0AoaebtEbV-H%<)%WjP;o}&ELjj<`Z?UwT3Q-)WuWzW4gi-4 zGez|%@xhmW-NxfQ;br@SgI9hLQ6*Nh?gCMkOfjJafhUC6kX4yWf zj(L&zwl~V`b;uk4mAmyUas_|Io03yPKapTKJm>zT69lx!(Ajeyo|OWks}R9`p7*LJ zI~C8~_`wrvyGFif^)#8~@lH4-?K%W&fJ1tWT=O$UJK3n2hO16s0z17g3wyXH$5E+K z$Qj@LK>Ss~4f)8mtu)b)mt$y?r?#L0-x#~P{ZX6xa!U&d@kTuqWJdBIvF`JmtyvR2 z2zJ67&$oycRxOOz5trf3ljX@>< zqRxiidJ?~j-^Q~6+xreek8^$73|QoD-&!?xP_YCmAXoy9IfU%D~l z-SfTjHkpdhBSmHc*+%=M@6!np^vQz{)}gq~fs4YLz--uR^+aPsEn_saztr5?MsE1-u(cIm*v145v zD80DgX4lDm_M2|>(=S`EFz}q9Cx$i!=&ZHy^9!jCh($aya3+WjK=t9pTaGH)-9cuA zPtLegg`jJqGp=SF$bYeP@qbvlE0Jnt!UGG3q6FU*Zy(rPM)oni&k0FZUterJK*DR& z=dp@0A^vUB<*uCkXnH~f5+a|%T}&pyU;i=bJfpipW5Hc^6O-Ip}(I zZ(Zti=yd#1o!yl2I`B0Adq59)-lOMr%lqeZ>&EZOo9Ejmdc6}Leoj7ar?wO5*ZS}z zZVPrk{-#NGZ;zLIGaRDkowYs#;EHrh9ON#Rc$dlQ#@_kifXZ;}vrL!toxXLsg$thb z4!jN=$BwP5fN3||7q@!UjBMnM3xwClR-cDc>!&&NE>s)d4;0ZmeK(Ki10@E~KA9c7 zoL;<9**sn^#(=x+rp@t_@UG{~oIPHjXVaI5hwJAlBHT`BielJEdd@=Rc^qzTx z6B1vOXg$dMWI1L}^mBkq@cpRZf#b`~jNGrZiN=kS@ha{d{8sV@-w^i2nj9#QEX2WSLy6} z?oafO&=YPBc8j)zdKvh(XYG7e=YavqQQ4mFARY2MNXJ(T1nG_*pXT%b4boY?t-XVE zZZGp5_bcVj*N11D;=Af53akj@qe(p~%k>C87?pQ}8Y6M0r^qve|9GMgOnesu)YhtKTZ z>APSfb)5~kRs=Zbgx8}hoIZN7#ChqIz6}#cM5{3jh99y;1VYwCCgQ6*O^T!oG zPeiLxn;5NJ2Pm3-J&>+xjwIMr|Hq>vZeff3P*@VyG}HW%?|*o7qW{yQD|=N}&aTwg zD;Nji;?@*xT?bKA-~i|2M4FCFHM9&t9r#U ztxPg<%Ht3hy(RvJ)iTVFM7Z;|hQp7#LsOg82zS7{KSFwrtXG7 zZPRFnji;dxU7g}x(0Nwx%RUcF(1#?i#9Tj1*;8)2#I}n3RiY>o<^m6!U;C^%Ugn!m zRd6u~NdA>*KIuh}<}P^Fhgz$gUd zvF?#m0182;FC(2gkYHATD;nxxgxwr%ao`{$UuFi5DVhr7|H9{>8L^_IGgD$8?k2}{ z`F-zJi3IN_BekrJQq|9G7?M}in5rkgXc>HgEF=cfb6J1UbM5G;XTrtIzv0A@bHq8%k1*#`hf0XeFyS8|*%t({v|RMZU*hzv-vZA5-r z`&jmHMdLgD08-Khc@~Y|7NS8=x}xS;MP`N&)`5lH5>xP}NCSJ@JdKv7ylQ z0smcFk$c%8#ZGZ6tIyEjIAo;ls$WfW`gQ2uNNI0(i(XQu&YMn-bM$mG!oj23M1wEe zZT@d8b&a%?nCIW}FI5*4O*V`mvOF3C>bBbHu1LG`AK@o%)4$vq>W6?zY`IUv>khrH z#a%YEbYAK22!5<{;$90`3+b8^)j!pYf}Qe}nPa$8l1>|$do58>}+h{5sWJ-cP zac;?CID}sgn78OeSi%eDrhS@U)9vgmFi6-)FWIFkI)A5RRnXTA2n$gsxf(-QWAN4QcZ3NaWu59;0txL!w zKj=!Jko$o^+?Lg~T7Gb9XzDhObbe$7y`u5X=K#Jz*>#dbAIiw%ue8^UZ38e<29ME9 zIuuV8)5TRElFV<3NoI@WWXEaA>8^fEF1HI$69{nD(X1X$2XF>HUL1z@2D{CI{uI%} z3mTzPX&QYJA&5;)tO5{fh~>5xv-K6;S-z<3$xax5wVNP!c>%78bmS^37}iy^O)h=h zk83!`RFhjAVEt`s9@MVMv~QLZs5#mS>yG=ythrTVtYz?E%p{@PAA z-d6o9Rf%DAXx|&K|5d7ows$uwlL0Ow+FsD+*JajkoGxLLI*+Zd2;j(&JkLg1*@~+c z&k=)@X3r5#!r-<~&Q@ETJB_ebA)=f=AMh?B)_-5Vrl@s+=d&*tT`}S5&bZ?G1ST_@ zc{wlJCz=@LM*%6gl$Jc=C0huT@M8dvuhVFcG4-w`uD-{UtIVqiL1b4~H!L3+p43j(`+B0T;j;3hwLxIFx>`H0~3ZHn|tB^U~rb%9k16*-cPT)hRy39HBR2wuiI9Ob!Yk5*dBUx zZ1efmJ=5#<9j_0%H+wDh=dNc}KC5nztjC0eFTA%|L4EPl9#5m1Jj>4~SN6|ixIEq+ zPAJWp^Y!b=2eyNE2b7hSmBo}@yvvX7cZ-~E_4dszSKCW-8Nn+ttt~9r|x}{N~Z2;|kP^Q{{1!#CE55WTeFwgYu-gOlB!`GN5JiMH`81KZ*g7s87#kzWv6*DoJ> z4%?ev+m~P_CPOY%Bca-Mk%Je*J2*VOXus?!;k1%K!8>u76VFgxX#AquPI3 zx)`?;)@7Mn_-QZaTkGp@^WvvP8$|i|tDOVe%-2Iv%Js`fTQQrLfqcq?XswC1uaN>e6AnLX7qfBI-)-qRCmpov#|MaFK>9n1G0E|Hs0LZof_=z zZs%RHei5}VS@LX{_sh?xS5CBbG@^F^{fPYW7xBmd#;HTncUQQJ2ye;9E2()e~xuu#3;?tQ}hbf(Jf=D74BlIQ7pZq7D6I-3u% zZDOW!_ek%AUhda=Lv$x$X2&7#>XOAh)J5xb^Mbd|M$0Mh8Sk3UZNd7w2ea$^DkoQ! z53fhvjnmFaa+6+grOS9pz4tA^*2jB+cU6k;d{MkuyLdvIEAnZ*XKBFv+P$W&JTOjf z3TY&imssT#^2|7=n*|!1no__w;Ei~;JDcFw^<<)tx|%?Y?vmOfD?&h3xMAucZMg))(SV5z=Z#{Whc$f$yPd_JTtWYcE#6NnM6X}Toq3805DqWKYV{d( zWFPEy#g@yW#7G-*E)V#*d%B%pO3nx09GR;ttDm1{x;`lnI&XgTa$F2}`y_@L9lEEx z8(wu&BwsTqH;c4pFt#F1wk49Pbs-R1ORG1|-6G}Vb0mUlwf1hoHCUnu|FPhj=Y1<} z|EC29trVNnbRu}}`=m9RK0a-BYt z^V)zyRII~CKV*mafH>r^i|&KK;f(DshdBzvMll1%d#bI&<7+?+E(n{EC`kto ztkJ)DGQaJTezL=k2d4*X8y6u8X6F};+NV&1;!=DO7RO}<7?hMBzhse+wGVFKdLN#9 zs9tQUSjk3 z8nIZlMizCfeHHFFR=vqMAB?!x13;x`pD~b2qxYk8HEcoE&-4#v^yJuL`QA=5xMX=w z*a4V0T?b5yMVor-W23lY6z&jocWsDW?-U`mE>(f@I6--XdfggjNc{p|fL&WoRQ-~tJFX!uI*mr$& zKzcS+#)9`NyDL-RlR8chq>LVi@cwA*Oz_@7Oad7`R4n?m3_#v`NF2mekd&0T0m?bV zPl7K?-gl%UnG6V8%S5YEJSpk5-g=$4lsTnol*I-Aeix8mAUJr>fxe$T|;kPCO6l zcB9pX;`W^3ShPOBx;{NRZ}#eOIMN0P-ht9FR7egLoCF&9Ue3!yvC(~r*NiV<4-|~! zmjH4s0535`H{pR^G1SR-39dY!*{vEf0$00M!a3YyS10$8fZF2U5}e&h;)8_i0*wGm z zZ}LD}OfQR0N?j+*`x?nMp_+jhL9NGB586CNDE(T%?Sw!dSU2;G4 z$J{j+uCDGR=lP46dJhNQfkj^iTe2_)@w5%}GL{H#~zf03bkHZM|4bX$@Bb731DCEo#$zNsg%SmTXSgV zOeePOoZlV^v9-#~D8~WtQ6CrYhcWfR`cWoImVMp~7EV~w5whTN^bwR%4#?0xC3vI>WRn{A>q`^H)>2^=@k_JpkbX-44RWjuD{rp8f2 zpCM5a2RvK}%?XcViUWwFY7|&6zqa~)cu(K~v%3`Hk~#ktje)a+cs zS8tjLm1ESaaNV{Q%K;II+=cWCW>FmT{Ihlw-MmzwDLmuU-^qWQRT;V7Q0kFK$`Yxh zKxNmCVYeeFWV8GSF_UkY&(UQGhyOC=Pha$hpH;~au%10P`hnuh{%0WpvVDFGylBi} zc1u4Cg-~%yR^fs#vyH!RY;%*&hWZ7r=E_20;(vCACa#ZT%iA>i1pgNW2OcBV>ckM# zf5Jdh@a;z>#tJ*}Nw06v5`side#!kC*ZJO?GLI%W6eOIhc1IWDuQeEu?&Q{K>8Xop z@0?p&b}m^c@En}GQH+L+yRXgPxe$sgH7My~4jGrqHTAL4p29)T{uFg$ zDGoCDz)A1Ymd}Wg^F(H7gr@DXxF0D%|e8Llg4k0Sf99g(sfdc;aB zx0n4U*AaSq)=Xmo7Qc#QL}uj2a8HRbq~mbZyaNhTUV-TSNK`^=PzM4FpHMX$2sV|Y zovRR7g=D3*k&$xwxaxC63(uBE03baxigD_@02<4Xp zh1q3lH#cc~S*YJ1rBJO`6 zxc$`%RUib%WPhZEt%){;E`wq0LFy54>raLUQ0%$TAZ0(-7FvwIr4CW3*ZQv3zde?R zRqNAiW5^E=@Ik>X`%qul8GN8=9Er9KNsGSyw*%Mmmjl-fCFq~AU13u>vht4uN0|Y1 z;0Q+CPJNu3d|t4(9-Q=b$e6vs{YWk#*Riwpk(UiQ#@0ScHiAB R4dryLkTfZOQ^ zeU{`U?dA=Rl8arFvS=scG7%$dCCH8SMbE?EY8ir&WZ^pV@~^bh?A_Fy5(6uRGlyt~ z;^#*QU^^%BO%vM#>7e=mGbEZaDLWy*hmo|vFeZ>=E$(Ux^RB>&{!4*F{YQaQY)2Kv z;e1!%c5VQ~N>t%YA!tRjXeB@e4*y+&>$cbUT$^S`EAcAA_#@;4xloQJx|l!cA?SZ7 zaDmMJU#EZM5SKz!!xfL^YWQD(FwTZM#loxCAwPiH9_5up;poO5=dcz{)^i&@ZmATeQyGS&lEZtrYmgaU*cer%1K9?pT(py`FX<$=$CTCdB80svX7wbmO8S`e6qQDsWn#*H6T3y+BB^#wTUf=37J+&6nJ!kD zdq8+m6GtaZ;utPE#*HI|0X8BuUv#?-W^iz6xLZrwQ6dsPR^TrKj?{yOuaksxa+Ki% zOEN50SIrfYF=lusU_RwTYSKJ5dLO&RSI@BKC)XMb&H4n4BNdfF!JD$C;l@>&hG z&Nd<2vOG7DZyO;)Ik9ZWP(hG`1_LDEVCbw{%zCycM+aonxeTJs2;?#~EYjM3b}*Uf zyZI2nbkH>MYPF!IQ~B(Fx~&gif+1%M64zqM!TkYz{2>(j*pL(1&!SLBJN=wXk>j~o z0bI~*lYcJ_@)XgD;n_u~W#1mp0F-W)?orEK)@Kw6x~L|ev5FEH#`g|R#EJ!77&3oq zm*~?o=^pnrdF`2{8WTwETz0_^7DvGY-#rC$R{jQM!1CiQM~e7Fx;y6Q1wOehiZL}< z2{_S(yDO^fkM9vg>dRRt;rbr|5e+1`(iDlnQ#fO2wP6U4Ujzvbz7WW z*|hr)*1-pF%mX=9a=IUDPSnX;%j1zqGNbocm_b?G_J|#dK)|+qe&BNP$z_bA7JOeR zkopwLUjBi4DnuH*Jj^Eo^&Nl%qv3wsEFrG>O+w}@fXt|HOTZ5BS9GSU#nSrF5ReSv7#V>z7sG*Fm7{N*!@cvTs)FI>x6*}C0SzH20kx58 z$Jqn|aH#0BfQ6I}QN~t$#s2dip}7hYeX*&$3-zSWXrX6c0#Qc8{h@T7B2qHb2JI9ZGbUG*?Nk@kkV1ZVa$Y{|m3iaP_7sS^*ck0V+&H|q zq3TcxxlJ=+hsknHc-UmihtSol^RJovmvUB<3tw`@Ivtcax9736d)`@us`k zrvQ99US%~-)V{;}ot(TvG=$eaFFljv2o(yGK>v+@HoD8(cLsG(5p!~(3|rrsKKLL1 zjp=c@*mA(o*!(~IH zEyEdb^EBAHNbrgaLJwtKkp4i6w+UK#NCKV6 zIY`dM&sm`<``I!wm0#>066ZevxHsbQC(;}s0H<*)X8bPzjzvW7{{g^>!wE!=#-KDH zaaKz|*YT!$saIKJ%LzdJ4ZykVzv`Qo{sX}E2NZMJwqoCan3(lCSEm)DZGF~n&L&Rw zNtXOEyUk&Fnoc8OzMIaWTN~`pZRk6%&E0v0JYL!_HgkDQyJj=&q8dK_MUe zU0@u0CdzR!Zz}#50LS?k0N3ybfI}&mu}mSOg$cF#aSn2TL>Z2@&e;+h-#f?g7P=_X zChsl%02z>CZ>a+Fkw#3(w$9KLlm-aEy~fwV&eveqJP9kxp}zJi6XFFcqDE7-EMigz zvOvZ!H> z=64rp{dfPZ58PD$FaM3UP6ezoLp`IplK+Mo^xc00nREdoJlm8m{p%1(NxuW>o8d>j(U>nv{RHNJW3j3@=|ctFqI%#G0~8Eo0I7 z-fLzhmcW>YK#SA`KslZzU!xL(RC1ueFOLso!Y;sB(Jx;q$zlW~5(JNXnlFCFjV~z~ z!@#!+@>{!NP)%MxfLXwq@0EVhgoax2V6OvJP3_ za~NnDH>ipg`uNT}|E72hCEw5Phu?Ljr^9?|15R+!jZo5ed!NHmBc&Us@JlTiX{lGs z1QN#&N6vIJv-Sv|Fu5(UNLz-7C)JUb5EB))F(L-gmjn-w66J#p8e-0dg(RanLb6{< z&^{d*35+;=Z!#kUGggQVKG}_Bw$i zJ>5m>M6T&XLGmXvaU^ncwhzk&{_D-DqntTN+9V;qwr3S!sY#4Z%CrA*Bk6Jaid!^a z24i@q_Ghch(jFDheI3}>t)2xs8fxg`A|Ys8XK^j^NfMCn2R!k-zhonN74HNY#uHSs z;l!22L4UAry-?+DP9@L+j%VFj5i;DJoUOb#I2YFzb$o6mXK^%k4oeA(YWC|WjLI&U zWKHvWQ_FS<4p5{AFi&9YX-WKpooGlALIXsSq#oj?weo0SgQ5n}nfduwbjuY$+J5Z2 ze`z{auNuWA=ZKvutWXSNKjS?7KyXhzqFeoM08Y$eX&dAN%s&7eSOEfI;txz7@9-UQ zu6&_Om^hpXgIac)jv`4!42U>?fds%x)QrJ!k!9ODnKuioNn!sExi%k?HbL1LVe_;R`?7QM3WcuVa3o7%bh1 zjFL-H4AHBRj|qg!6h8r+>;RIV0PX}J0H;a}BQ_9dCqic}+eYJ7GPBp!>E2*7Ti%xY zg&=hNi$a&yu7a+(7aEJJ^dtI-WOWANmHk5j+I5NsRiWO*;2!{Pk)lf4b47ZA1AWW5 z@GE07^CBWaEbUyXry5TpVv?2u>#!UE0!_qRkmTF7Z9+@($9DkEIfP@H=^cP`Fn$N% zEZzaQ*nX|Fb=HxLq8H|3uHzA~AxI0GSFA#`f{gPL4?+{_#wp^QjdnaGAOJ`8gEagd zfNKu^zW_LuX`x*p0N3J?+95cp*4*1O6v~J*jRZ95Xap8H+`UdfDUfoN--~&G&sihMPY~ zRG0WKVe3SM9AR6oxXbM;(%4j*X&YmKUEN>f?_t6Dq0xj z*VDWSZ(Ve{FW^!Br0$Dji(D3e%lC;<7MsH#2tP79>ZoL7waEoAd%`B~_xOmZwd(6E zWAja^yI5k*mtgtfiMIRKUmvmxYKW`)*Ey*^1f^XR>>;p&EKoPBARBN=e0_MW`TBIO z9!rb^x#kMdN_Qy-ZAqe7MC=28mOEsla)P)!yM3!|?F8If>xh%F1K6z^>HUQJOnt;r zZjH^55t3Z*wCz0|X_ zOl)w>8dDRaa*l~rfMkxkDPo)&|)#ye?|J#2{_{V>nefQs#UK`YWbV7OJ z|MB0P-u<`7cmFL7G_>#Cf1`#7i@>jLGc5?Pl!oT~AYot+?O6`PG9~qa=A=Q*{P)kIEdFe8IDrvwX5pyCfz!=8IZ}B zlglXv9Cl{&pi@Vc;yjTUMzIcOm)WVQvrGl_JT(V-hDxFRyMhjX;e~gq^%AGrE7E6x zE=4KL4cF<^)aG>tw{nKl?F$ln)FM>_{fB?E*t(t&_-wCjU>6svk%2Jm0 zd989;15L`{oqq#KlSr+QNFe0M8)L5{rOCuRQqy)m&P@~k9>r&Khld)~8+%O29k~`Z z=lfP=f`>F>Upi|$;gyzTi_8G4E!JQN1EFwSckkAg{LzP6H1N*9eP1rt zz)KvEoqlQ-$>G@{E5?5MD7&gRpW0s z{maioIfm;ClMtmaDFxR7r77}v-S|_#_BZtQteWA0#);6n5c2N z(nbX3c|c%bg&MleK}xw1-G)Cil}A`~=??oVCI*$*#tBbrw~@G(#28rgnPUGK$;{3p z5j>BeptamVO0SC=A8yihrNP#Xu{oUkqqE?0W;}xZL~$*C3ELjQf{04mDS|))FKq+| zfzqB6Ii&}Nj*!qtzsxjcJ`{zv*pI9OMvWq2e4=?wmdnQ9_e2m!Ii!UlDq=9KDSiLN zzs(mPeIw;08(c7`X`Ec7zE+19M|EIp{ZMmLvT{@I*QF*nnJjb*Hk7pVFaAwThNe#5 zBbQXm>oH185aDw%nMy8<8BX;=X(Db52Ql8#R%5M2%11u$jPS_fQZJopKDhN~dvYS$ zUaPXch?pnMrDZm`3R>?-1a%0;wu3kyd6^!=o=k|lF(GvoZQe-jpD3xihU}_k1clOe zyxP$P#_`{82uR_oL9^z|_P_Sju-A0~6xNZpIp^3|rdlXQCVZtfvf`}MTPntK9B

      Mw-E(&q0g!2tSi^+5j(f82!cFaJ#)(#31ERJrG( z-pXy6_jjO65_uj=2A|LQPj_)m<*ZT0XZ#GbU!2Rn>q-V25jfRxpR=eO_5$xL)8w=B z{sQ2tnp3BIe!E`_sHbd%&6}Nh`!1aw?*9e$+bH|*L>_zo-yrv z`CkCs1RHUGY$zH=qaSY?BQ+3!yZ;M-vo)NSc?aMW{|&&AEl>2L+idon{a9YB~N`nCG`Lslk#g|dxB*MTdYnCLLUp!U?u@98G* zwc^;{psw3EGZMeq%QAn5%pJ{N+G0S7Nfw1h&=rUtfHx=Yo9WAx}pj;{Uv{%5h;Zu%~$9kss6bLaunQGZK; z_leB>n9yht1E#S9(UBE08ohH!meSC4x2&yG?X*Jz;0ga|c zUd$gn?Ixj5(75vBNXG;r3h*?V{X!@Y!3_)yfiwd$>7UFp{%P=R5d#GFpNa7IL%*0Pr>i4Yo+cKlbrFV)oZfl0?jP{^eCd49g5R{PkQx zs&q>f2kHM|>#oA$XxeoF1Hs)1F2UX1T?TgzZo!@4?!gJ}?oM!b2{5<>cMBRkdq}?T zU;nz+KAWoUo~vi7PrB-@=Qe!*&1#iDFz5?FYz)W9twul#&ndGwbMJvsCX7~JjQ_xm zR^wW$tu;JM1p#Sj)9 ziJ|C-Af#eBVpJPWFfoO`fJO;5k^ps|IXqzF>$oc=l14}rGH$g@LkGb4q2 z{u`#Fi?Gwd`b_PlLK{&@5MrQ3EDNs|gG&XjaNjTSh3Q@tVht$c!E7?J>8iw(?ioK? z#Zwlj$$mTKa(;potR`cj0Ty|>eSZ|~NqZo(HKqW+^%995_`->%7<;`@oQveU-C`vB z@R_&#BrPCu4~cR5v-A!p0zVBrd+N%W%@3M`>xAO-I6d5Frx!dd4T+R^s|d9oNZ%oaZL4(95gGGJRk1f1<30xktaz%dk@ z+jqYaaOzgR3LTvV@&(nvceKDa0xpN|KLngV8*P?)_u2xJ&y6PW9A~q&A`!&yA}1$j z4*zmt_Z(5BkoUdmS;6lL^?XfC^!=lUsVFOfg5vp3nwdtc_Opm%;s!4+9&sEJqR~}# zGJn|8#c0U(QWOpKUtKT(N`-z2?>T)VC%u_R}c&=A4T;t5HM? zst8%xIJ+h5OgLp%kNAfl9BKXcMPI4#l&{c%C8Lm}=_KM9!5-ZqkQl+1fvEDRAj=DY zy3GJdDyw|0(DX^CbZVoe=~JNc%yUY2qddxJk;O+lSxZy!s)wl_%Fl_$@@m6Qu!rmw z7iV31%FUHAF}E>N8I5wk2vbuwfYvKw>l=4U==Abmseu$@E)lGHeJ&A?o^9eXHe8eW zcDdSfq7ZFX*k$p?K=@JY}^s?LKN4RF6C3%W1l1Ah75{B5vSJ`CAimeFEbfne~ zFdoHpq(DsD5s4YEbQ-eCAEpgi1swqRKm(K>V^3g>DfG4cKm#XPoRf4!W%ekO=Bx6? zfDQVp&~EiLCbz{mtDI0MR9Mm7Hb@AjHmkJ!(2!jY^_x0ZK}h=ua4#zYkzh;uv{Dbn zqe*2Trj6A>zJ^A1y_eiB{rC^l7Tmp8ac-!iz*D>uRCZ@r{>HSac`?ru0h<0YZNGq; zUd&k~fCCz!=dqw+_Ypq_(h~smc=(U8=RU&qqXOQQ6R-Ho4yL6GsuiQmH`;Q#+WRUj zarl(_4hgE!m&n6hCfg9xx;{bplo}+c4m9Sm+Li+F%gv0q#_SM-G-Py2BYVw#1p;}_ z0$j(=*~{DVg3WqvbY6pgCm#FfB3^~vew<~}!tjHv!c@AkkJvN`&Gdgizt$D>sMqPa zP)W?Sfdt=O`QY6hiu0)kgNk6$GJzw4zxZU~%w>Ihl1;w_khyO=FbjLk3i_y53|GhO znC7lAz*_x4O#GF`BjTvdY@1o0pg5wxV?#7BqMzL{l@b{U>qUut&AAOy!mQftUN)iod|R5F`Yq>@eLas3v^=8S6HzrEa1M{TZRpswolKV2qm zc4?>66h}u51E5ahKb;Fcf_Xxq)7dZ6{<*9v(|RH6sEwj$z-9gIUKbgFt|!B8>*$82 zpzHrR$yHZ&J?pfM0)z4IaSQGm&`(udag|#Mm4Cb9(}TxvTetNwl`hcjmGgLqA?g8L z$JN}KBQlEH`t=WPDYxt&%K1{Ob-(->@KkFQNz1nBI{{Bi>t|F`cNcUf;k zS+Z}llkXS&(*oU=Zyz({-}_2%EdKXTSZ7+|038~t)`f5zzgutCtn%<}Kn^XiWbCGl)u-IoCWkhV3|KVg zQpT!Z4)|KWT0g!v%BY@MZ1hd@9Nt1Kb8?BI6Eh8H`Pgkl#z4rlH;W&^(U`H;Ig&QTWG_c{CGxWCK&&@Zcl& z{s)3fgVJfl-{-D%7h|6jy>>9F%AwD$fP^MHwB9wej?AJIJ88A9rTp6i%C^_8RmFj#Ek7$_@YD{8 z2eRN`8qBumS(UA?i%ZCHk2JL!!-jT^zy5SgQ@|@u9Ez3fmpExj0qghlVPQq?SO(+b zc+c(CNe$2a4v-I90smui2M;RDQvKU@{kzE_PVG!3>)2M(+gGgeTW~3hpI2Iwo%Z2p zS;%3kLQE1PM^K+EU{cJuiuJ_P;`Oi-^n4v|7!&sc_xjC=m>H&|S?}DtIbH|j`lQW=TAKhXxf%%8b4!Jg>2Z$BY-qG{DYSMOm6ju`+A=E zwx`9@&7mBny2hMLZ2{%`?Z$AW-u6%j&!yTpe+Ok zA<6)qidJIp-ixw}%OL;|@P$ore{M78^wzt8v#b2s;DN1d*kkj^+U6z#{atViflpgL2e*g~YoSVfmx{Qf zlFKT|dAKZ{a^H6-t9DAvsWM~nsQ_&>9rBjpLSMaRCO%uBt?_*wfgU4ibvZ55Fcy6c zjQSp3OWI*9ANEUKO&d59-b-GGxOZ2?%9XlSwRU-on1ILTr{K>MFgqxvkoJGlQz9RQ zWkvMjW;(Awh)^nd;!!GI(k^TVp1WLM>I%iN_44jc&y-2&=qYAozgt6Rwbqr5QYO$X zskBwmruXGkjgbl@pDJRWJr_=aKF?J-=V8SYhw5yl6`pdR2E03f?Nz)*Z00F0z*+I# zUe4R5V{LvHQ2jw!rRGqqVfY(H^qu}U-!~CX_O+5)W@`x{e>V_jFWrBXpqo~dY)p&- zSEQQKI^{@7rdIlWYb2g4B*IuR2l~)AXRh*iGX8l8fPOorOE#vs3m{1Gbxs@huvNcA z!0vmf$O~mMIaIg$kyNAp-BqStxk}msVX-i;{T;JJ5pdasN&s&*mq|jj@@elgJ7QO^ zF_fC^1fd}#R>02mP`T;Pgt*g_I@(7Kuzx@}nEwLdnhd2jlmCKnoo^uAgF0psq6Y|s z!^}$!{NEs4gpSn&EE7I9fo;F^BGelQC;Gb*)~D31l^@{O|DcbWjfJGagLzw=rxQFC z(BmxbDM!9Kee5k<|GKjinch2`tjLl65~vi@JNRv+y<;TG@Rmbj{Xv+C^sfh3`+WoC z!J+Sfa#UPyjK6)~pf3|0f2M{2Z3j4%mHM*z{4UN()f)<(4w+h^L9w3Wpdc^;P-kr% z?i@wvq#QWNj%FK{`9(dC+ZrBN^KPPvDROHgCchBYdpwvzk-kIb!-F>1z1qgICHS2B z@S&1YP2;S9qUuO2hp5`G3u8gM<30iPD|v0^f8tZHgDrWtMF3#W&G{OWFpTqZL*WU#UH~#-_`g=tTu5l zTv9~9Phx3>2>uko#x4uyheF-<8&%)II*Y!+rdUie9t>sF6VBZk^KevfU@rX(B+6wS z0qbVStQRiTRhcrr|d z>%S@z@?aHQTnfktbrk=L+xPse2>x&0wwpl zse;tz>Yk|y|9Egbz3OQaBR+tm z%cOVHi{h;wB--9!G;+r#i?!lqMXa7z?vne?F9|X`I#taDS*l9+0s6DupaSM}U~r+Z zHMuB_BkRGg?Fm=fjcsCAr^k=1+*}pyHK}BhcI?QG3f7G0no>#2gELHRGVwYP3_Fj*&kD3Ve{y;qrxmlqhu7 zY&O268Mqy}lRU!~QA0Kn1b1Fbqh%9pg*0|$h(q!Yf;1OiN--u-A@Y*ODewxgPVvw8M4yER(;48mgkeWCQ`!QGLnj&1yglY3yo#5NVh1km`Y zj`{HtF}c$CWx=G@zfv;pYUp|3lCe>|%BzK6UZziKJ8?{a$IZOy(5qSyF6GmR~v9 zAZJu)uI~o24h?azE`_`7!sss`O1IWLwlqyAlHX%35(;tXR@w=T>)YC!#)W@6jjjn`P$%oOv}guTYBsTt!Mp2NzIGXr=5 zI9V8e|5t=7U}LPqOiuD)9+L=`_!C7+37ozm;y!B*k(+!^h>(b3{7y=g<`TZb&zN1> zz&XJ<`LNFAEsE6Kx$=b3=HOVc_d{(ohl6(Y9we~J;h=beiuwF+6scmlr!z}$>b|;N znGEH-tL9L-57jHAb=XeDFaC>zoc{6oS~|4YL4{vqKo8<43A`(v8=z&uDg2ttTU z2-R9^0wh?ZIo%c@rv8&fS{-3N@h6MaGQH=vKe!H*MY^EFqbTuC+Fk37gp+WRMT8M9 zR}BZ2Ji@eGAMK3M^KKg8@sy`?PO9*RvErE;ZsSJ|^)VOMFLA9Rca1V~a($BRrU3>r z$?4v3<=3c}EL4CO5jm%s8fJSM2&2`GC6wMC%HboKLYMRhB={$*kO+is`+zGauyP=V zMo5ueH?~V>Qyr5+3o|LH@T>eQ!r>ZjL;exrP`3g?;OKI6+PYdmsPzbs3%FvXnq%&4ZmqXRxQU}9^;b5glbe`@+=p2hA!-gK5kBWdHuaEo=3rhz|_F zBE901#JL-1rx#BelP9L`Y2;asxz+FqMZ$8%3Xu#47qqSI5yd1K@8P{J(if3^D95bQ z*xl??Q?2{7V1Q0iG^QGCg{*xJ(fL!Vxw8vRqsXW486^jS zy)_dPA|&`>1PWR*!IQSz1rDn#FJSE?eT3O2QH0q9!kg?{Ou~l3Pm*mj5nbYzC^vi< zDe-f`q++gHwAPx80i-~^k>pg>js%1OGvC#+tKEQ*0Ge67oSX{?nSli?rn1b@ zl9e=P1>+2=>gdR3QYaVWq<4iQfE4XFi{;G8u_6m>a3+q>k?&yKlm^p9$Ro*w`$A}Sn zepPfGOw$tJ_b?`M10I)k^sX(=P!Fhj$*K zNI`H%&<(rNgRFnRQ&AURJ?0ol@!`@&i%eN%$yaT;^`!4p+0QSdPgFYB^@XW*KD*mb-*(BCwF$GEhg?{$W8iZ&(}Nh*tXw1IEEjk%ODRff4?{+0K5}yr}awM!U#A7JdipF z^P0t!yxu`}C6vO(ffeofFAok0a@oFjDgZFu6ct;SKaR!)_c=$`QIzAz55s$oFn=e z^hg3a8jFWDA^$+g=F4`IXlr91&W&CD$Ai;iRf3}UNsWbCyUctRtG+R%HCfJtG)Mc> zkhej+Hv{oo;SQWU$uB71Y=x*UGZ6zV!31!OYNe_*GxzMRsByyixbsU~O$SE8={T6- z%2E&Dk_VFA5JlNIbN#w|lax?!;^nAb@YgabwKcMo5B^ycCKhO4X)BXD6TgS%DGLzSS>#`iFmg-aTurQTp z?Q8&(5Ngb;%Td;d#f5r|!TPjIP2_Jl(v0!^CH`9O5Vbq`)xynx6z;@xCS8L}Ek+!# zt)|McbW)$h7{J|qhz>XBaE2=fTPCwCA3JHuUcP(=K6@?9$Dr&pf))>5+dZF`2$d41 zvA$xjL99kRC7Np9fDPS~IU^r#_>MT@_mogz_OQY+L%Cw^FAhg)3+Wsbu`BQhQ5xeO z5f9D5;}Hc+%?ym9vJqDB@Bib$F=Ng-GunRS08mAJh*S%76~FohN2NmlGN;KCz#Jy3 zkF++juqMwR4f5cg|E~uJr26Z@1?HhMCV)J+(&{%4j@3XC6+Wfnz<&>RU=IM}+4$t8 zH6}N5_|E^Y2N&&|M-2r@MSTBx_s*O3;xWk%lkJZO_syU#6Qr64xkr9CI|y_s1jY~Q z@QR`Aym@d>)|J*(5JG~PhNtg7zZ{tshYomBSQ-ZAc{Gl>iB(DlIS%r$qVo{ES4QO} zSkJbAn_UWaIOEC6zN%Gp!kUC;6xGt|*sM80uVX3cqZn9J11?&MFfsDU$tL%F_nYa% zC8rS9ld-`^;UpGZVP*DdVD1!Qe)Hf+sx0w^^a7h#)zJgP7h@|6_KAL6of5q23CJo7 zuz?A7a-!^P(5p%ML6nJ*IR%A~LCj&u4!FQz{_DYcfIK+BzaCuWVm8QwYyWQ#E)P`I zJ$ckR1H4{(oD3Aoo>0%vw8Oa;WhBi1j846FP;lMx2fY%Fvo*RmE}!IHIwOUTGK}Cw)&oTwBmFcs zg%mG^@J}!R%)@S26dcqD5a)T=?qrWk@&AHwt8XA2oY+_tg!!~GehzJo zE5}y!af1$O@PKxKe78&xapy<_jf~z{EFZWx$t<}YmffLE<$pjp<7;Uxg?`7V@e$A# zW17PF2e>O1>GU_+t^uoa&J_=u+7)$&QF(qvOK*cp(|p4}A{@(3xFc#Si>UrpmrN zp|%nHEHfx&BZB!B%TB7a@t9^MK1ttD2=WPCziekKCQ^yfEa|c1NUGdA&E!MOMZcJS zQyNK)p~sC);SSkOghy-;k-b=Pc?e&^OpZsK!CIUkvb8x7`yyxLD09zqIg`JfBe$&4 zI;4SxrfvMevim&Q(R;6$jV`|*eL(i(7o%yvE=CkJo*p$0 z(w*3|9gVuxlh%)?P|WxtAX{OrJ%1320uj+z+st9zKOh`$4sq?m5Zz3@+ste(FLcsA)?DK!=o-{TiW(2OGNpj8qx8igX`49Wu(auV zW+zyJbXI|Uw{X!ztqw*(1dS%cSGo8Sd$hdL4|n#Sof`K$P?;kP3l7eWvU} z@~JMA_OA!m@W+GOm8#TZ{J;wK$Ae@3tTJusfR}Vtk|H7Y{fzg_(TkJ(n5#(rsZAl- zcYr_2Ap6~Z9m_m$K4$J@K0^Qy@IDK{H2%f3&?T~IQ7<;M7e|eLBBPG^YgZs%X%r2= zviOP}wX-kBFH>ZX46BszGi@;dxVr@W5wi=^*_{?AqGIVhl=efYcRN+!RVki7Hpqj6 z<1>{*kad&=*Q$z?s8CTQWHCkJ<%k;>U``T4OHBQsOm>(qTxH)Va*~5pg)-0hHSE-$ zyBk5YDZiK2U9QV&Ndb7$bPD3&P^1_9y!DjX?!R3feU@)AGINM`_l(EsJ^K{d6BW=E zTp{LU{~hf0Ii@@$WPr~pjt(foa&usx9UgUp8Tewy>|#b15eExR@=~mYu&c558*lu- zG`KQo4Uh&$W<-9%rA0PV>3t@s70Te3D24QerOK#(6(@hCTRxB~3 zIbHf-kvf+n=`)q`>c#Twi0^kq;>4}9bboP@k5Iy1*0F z9qCQKvHgCT_!&dS?}XHm7f^5QDH27NK+%Hbt9>@^0FCt$Mr|ekT+GAt&A_~FT`yQ9 zTt+FiBOHXmsemvz?1cCjOi}Is!r*BCVsPSzmb#^Z^l_J}i3_1M@+o6u6z_CYCLM*T zSQvuKKr81hRu3TC!swH-IUYU39__fR_WhPc)d!_s{u{3Wt;z(!zoFLx&JeOr9D z=UE;7pp=WAi>06rAv&bjZc4s{Qk6io%i{CtV!U|!2=Ok>fQbd|IAt^hZSf>A7VBnA zs&nd6p#}Qre>FJioL}CS?SamYDTm|) zOH?e{L-%AE)Zr4!D|2%_Gi3$U z7?&&dd&TeCn(U7T7hJzdlclPx+C7Rn%O1ksU6qoWTdZ=+hH%a?NGo3_t6DjW`A37J z0cmi9|E0lY$0JJ7HPCwFW&F&p$gb5B0>j|Qj9 zx%@|i!%&`i)8Muho+YAh5nA{i!MwNp-!!Rg%e0%zrev&wn+z>5xaW zWc-!QpzWV;8XSB884E~*EBRj<+(R$H+{@VNEgeXM>*$q9Nu`31_4q=Vubz-l`x$Ow z9fUc6G&nbfIw4hftMd%AMGHSC2OX+rUF5)}EkTZ?JKBDJU1={p?vH!+707HyxG~~? zG&ns+$@RMdTq!61f7kkyiBp=Rcbd!BeUh^AzI z70l?Amrbi_l%`U+WMcOCMAKMnoW~ITJx#%<9Da$zS-1f>j$$Z^k}|pG9pl|6U>k)~ zWEY`DL9N%WuJTZqd%C@nCB0!)CqT+aLz{yrxT#wNix$NT$c=KWa){@7%Od{<$|Cpk z{}nZRvP_Vgs?xd45`#?eQRh7rK6YRxobNYaFUmO4lS8^2)SqeSBtg(LwD2_c`j0w= z@aU*}PUKv|4XAIzX6EGnTgV$}e0p?SlB>U$pN$Ma8k{?yGqsb87X@*q8~oUZL;qpb z0-(b6GI=mNq=;5olsTQ+JiE9~+mD9lZE-yD0Z(OPmBPHt=+&f9@OI7n3MRH8GuNC6 zB=TNKIF44wZ~jtLmQqe)3_nB1Wvk24V-CGv6KL_i(uSh{J~FjFkRZ89{kanObRd(4u{)X zET!oG=E1?CuxybIjhgg{rKpIrO$AWEq8ORiD~X50L9yhKxCiQ|zkzV6N~jp{#-bu1 z4bGylGlv^9*i0VsLVLUDTeTjE#BF`?EuoUxPQF!gb7P_8Hj|Y_(%g3>NLfU6WM-=| z9i|-$Oya9f-mlVdeJ%{GAvasBl8!A6rC46Eg@=I~CG!oh(1{$0CK1G+kY`_NqT zYhcI>T)xO1xiD9m+&wy)L8DIBV|TATF05MT+kwT2z2AR~`fCRs89BTYK*a9f{&dTH zuR*_1u~>-#$lS{gU`E17 z>3eaN!lPuiOVxlYR`1iFlJ1<;fb$jwBtoiE^{~q@%cFO-%JdlvG62c9&Z9hAmdQmT z?TZCO)9zr42;hnZ`qmSFr!)%$`U=XMKql_J5~5?s%Rwey+tn`vrk)7DegI(4UF~&b zn8Q-O`(fIXf#~spEfvut5!{{?RBq5hUcaH318%=UvgRy(f3!kkdbq+a>;QNdobv(X z!R_Dy-a+=`q_l$v!m4KXB52ezpw7ZzN-1@xF2EGu21KYcSD^q-g3N4vNTyfWg_w;< zTXxzLA7HD{jQV87I#C>XCsy8;-m zj&xhZDk~lR45--G7`_MCu(PVBydE;2|OEy)bLE zxxwQ27sf(hM8+g>l31$ocOGBV(_0#4Go zk#UxobF>>1Jos-`HY!0PQ9YGdtPkvTQIa}-$a&19u0p#PV^!Mkf+L)@9*a2+bz}PQ z*w<1u3vM`cH7?|JwA-NUZ>A+@gVSz!lOlVuF4R#9i1xlI^(WWviE1a5- zQGM|)uuzqlhe2*Y-dJ8kNhBc4;U5w%f9@X=F6<8prwqy4;}X^$@!upI4rEkcw2ciF zwBDq(X;(GI^nM&JMpa6{$@d?$GsXdQp>V5|6GSl$PT7&rap$!wOwu}$yGi#*hH53$ z#frBmb_c-WWNnw87cM6?4%_r17bG*Pk)8prr05VM07IR9GmhRWA}1HZ+cJzZvz#Vq z8K&ybGEDM6B3v$*rWyNOI(jh!9BUA;R~W8Gwk(!Ntgg%de?+(yeez+9J=A+3LekBb zIoNz~M##rCHOa5so$bxU_mH95k|^(x<_e5B5MW7N;GNytewl47(M!9E$Ed zkU^VSNaKB&mbavg#NB(8|pJRyGwyJ*fx;7 zRxLPpE-5&*wWC>j1NwoM)pW{w)xn1-BL$VoXlB7qeMQq?v#J*MWUq;}j9tlXFZi)& zkyZ1~CV&8B0#eKBnaOCUcRu&vEt@pYQVX({)w!;rf=%LU7MgFMFSF^GXX2MY4@oPm zb~Wm2pqZ+&_U0B55Sk8+0c2e_<%O4!Rmm}(jX9v916sm&Rc%>NSG~0zw5;6=d&}G{ zQv`d{IPygCWy>H&P^KlORh__MW79%4#Z)+LC<3H^lZ2DPQOL92S$~#5NG4&Q>$Pai z%ClLgm+)PO8~>g82#w`ZoSDEMsb;RTwi-q(hZ84k;P5%VHm!aZG0ZngJh3dZ#u<0_ zm)Lh~!eEzl%I~lz20E2$DOAc+#h8?)y5@uVj|#q;w+%CcA@U|WTFk&jEZ39;RexgD>3lfyhGYqt9EAVc7gFHg_dcLO$a5JjiF<8VsRJR}Nd4#pSn$Z|-~WX` zkWqcb2isbr@FPdet*TBN=W+mH|6r*H?|pI_53K3VNFUrucx{usH)a#_3Ct25+WAic z-P51DU=Ss6e&7)AR=8%P6mBR)`EobXYQqbQ5pY3SS;`GgaENL9qSeir+sS&;lO73y zj(CES7bJ9y0u{pi2nO&+6cAb%X_r!zst(j8wv{&>?X^Kk50Q!% z2$aBx_W37K8R~txU&?GW)Xic(LSvCOLSj+3!v3&EEP+~~quJ|s*6Q{hC4b2_N2!Ez zI<>L@aaLW%IsX@Cy?UOc6ys@_`DZ8{RKBWVFlG@j^x`}1vW^nS_LZN*pNh7vBPrDs z)MeTw@M88T<@FvVpZ)HBxK`NG>tdd72n>0`*p`21EZxLk6jtA}c}JNl{0$>PRuXAB z!4^uJwaqZMJ^S?OQef6IgzZ2Nhhen74h~gSyZYQv?xbr!{TIi`qd3xz?ScgxO`6TJiEgP5l|0{qhfuHIF-2}@WyVvVCY!qzK&5HjTYy$IF4mk5<$9Qj^5%^*3$7+4hvNt|dX=AH8iyoVtujn#LkZg<~PqBj~K zMPK~Y)(q&2G@3*?sZWU@ItNY3?lwsR$3Gf`#zKK8HC>)0S0L35uC^15B0lXclY=9| z#;UsMb5LOJizTwNj}wv+OGEPA^qXg&$%8O^Ro~i&k~>OMK&mIULvUamXcN&#p6y_|h;Bcx))CE$6)B&+3!L(|ucK_A7M+3cC=7c43qmnaZr925ovh zV)l>99X#$XY&;XZ?o}EPk+Uyuz3&Q~Q+HI@mU=q^4ECXEUk;RqT&K4L5M{EFgPjsG z7_Sm$CxZLA;` zEzDt{u9<_^JJ?1j%N&tO4z9bPRMYTAh!nX=wrO{y*_# z-fbtgmjxMDQc2o3nC0xve2J;sC2&rGW)89M#C}Xa*ReO?a-?j&4?3$8A!{I^F^gM| z);1vOmStDEgnV&nDDnqX(*Pr9SHQ4O;#Jr_v6`pM*_}!v51FCZ3v9HXJvvek(^z>~ zPF$(8c6?hE?yjn~b^Ho}NXJBMGH{z(tv5!c+`wHj5QSa#m5ut5ez$tqM#~$vXYTie zs1HSOK&FYx7ZQ|R>xWR^etDQIj+b^bd8WRGhz~F5cZ7)-#-?uc6M1BN@wmKm#@hU% z&H9-x3&kPOn%GMItC4+(tfXc}3DrAK#FaPVO*C#R*I2t)-?;Qe>IY4-(8%-(6vC)U zrUucpNxjU$EU?8Q_Le`_u$pmi6%3nt#Dm|#TrVB+voi6 z*}c}1XR)UuDzkTPx265DU|jdpBX@e_VO8i!MjMPP*t8j$V_`H=XJZ0Z|bx5`3j{V5wmbuhseMy7j8TmIx8bW*eTHRJm%|2#DuD*@nI^G&=<+l zE`>=q{GRMH_wO#;^JHNcx_xF3b)NNS``Q#LRIMc2ASTXq9z#~R0gmm93fb4#Uc31N zy?cB)Rf?~&C0U*<{JA?ZX+e9jl*eBVFMEeZ`K5`wB)Y8+E?_b>hGai;jKXzN1!w9= z!^8tcc8Q3L!o+5^jCP&Ij(^(ndS@VS6!*9I*c*t3*=G#>w9PaGB$1hk6K2s!SjeXF zUX`&GSyqc!$j+pxxD;bfzI47nzknG@>U$V@V%#i_fDQ#${&CJ+eZ*q<&S!u82;DJkMTlhx)fn(~S!M98FoJTV_rA@lvRA?4D7nyDBh3o6uuZPMd5>>+_DO~d_*a;8#Ha(e;&DzXWTB*2J zTZ#+Vd>qNSk74UxogRvGNsi%b28$Nr554cWp6}cUJWdpb4XD<{IXfW;iLCl6auyKg zteup-HtY?<{d_;JDpiNu8tc7^qKACpv)q-Rg&ZKR;?lPm@vVbM!yVgBNZ$|&mG7H; z?`nNWtwldrCq){i$Q}8ul{sb4sxVHx(Njam0p82U^XUq%GF8ZbaHZ%X+E=l zI4LP~2v`O6jUDwJI@;QS7keRtvSxe4k`FQ#Q$j4|gRjc3`(5>kUcq?+!v`B|0q8+Q zmyaYQxe!QbW7Ho0tOKcJDd7{;$m%Z?4_jb#or2f+&n$Lr)i|%O+J^DI-5*bx(634> ztE!Uil;mGM_b2V?Cv<|I>+?JwuA^rf^;^QsRcosFMR2NjW!|s1d9-J$>v4^B;_sB4 zvA$aP_v~tQ2hziIXdbRDpGX$Xwr`>6m@hioFS5`iL1Er#20=g<x(mQTU-w{^4@TvzJJ zy*1qH_ut!n`I;acZd!u;wuPG(cnB6X_zSr;SrRcp9gTu?MYu#?v<~SNd!^1KZ>9-z zDM`Hi2XY#CaC4Kx+0qLt8{1YDo8?b6xSNc&?a@NyLjvuf4cYyS4O!)bVci_>SW7!a z0MlIar{;cQ_o6#+Th|>%tI)ei{Kr>}Ds&WS`w~QGdF&;;CGEUYG!}Tn)C_Y&Ea$KF z7h1|N3T~~>0{b47(2TLHBD@&V!kMo-5TdsR-F~e~V`qFj-II*;L+0oP7Z6ias9d|VVIIfFKdjf)A z;}<`gUueC5@>p{J`vV+^M0YmGL2>khK&KAB^dz?G>7QWk) zN4JamyIy{QwnuB`xwp0!@BuCCfNVeYRW>#VHtv+{;e!+7(m zjc3@xivH3H-~E#F26X4nE7kQe`!Q3Ou0ZsUmG$|8WZR88Jo{BmzJr#ctev5;v6ah; zz2x=`^{4xe`WCHaAFu1WIy4`jUv{>2o+clg>|)*U+zzf(cTTU?MO)7n@2nkPs?9s= z-4qP;*OLXi1o;IVb@ps8&dmCcxGFxnPc)2G6rjL#TCTRPubm{{b+~tyx~s=Bx!Gw1 z4qf(*?b$i+7+<>8bk1B=&QE5%+O_Q6A>%w+oLwn&9_M7;3fj7Ctk2*5@U`snJ5vuz zZt3*kSmC3yHMpxN{(XMae>pm1d-M71(ACfESF)e4%fr;_PyF+#W6y`5KOavwKcDPK zj9<*lQnjxi8+hzwxoh6xeHEnly7_T&v3k47zhr55Gx1XGs`A=q-lQ=pc|qQ#zy4t8 z{@AXe=E!&8Q_|S}{Akl^^s%GLu7(}wJL8>Q#*6I6N|#GTZ|JYjw?oHCLLoW%*3;)U zTJy)-6+tTto@*ZME*kB8daY$P#NIzov!?nUG+ZqT@H!b6@fQX)fXEw98H-!SwykYG z2+VD#9D!B+ik90-JVT)R_mwkye;ib)=w))1i*Zp~*69$q!7LLK~qddu7^750$pKC4mPZgNp)MeY0BE1w!Zwk(e2 z;Em6Z-8xpax$iAMO~#(}&rUwf!2CL^_%-SA(6)ZjzQ6pGp&3>2>66H~fo{a&k7Ren zX2x_FcbJm)v!a;f&+T3_@b;^d^Rq*)UR9kMy1x3>c3JKl3tY&^a_%KHT<5gzn#9$g zW1>D=CZjCy?k`3y{E+QvG$P8Z%v>TqWM5c21CA%&m$tXUg>ATe;9u|sYA!E>tDSlf zs%iOT({vh16FFiI-xg7i?5RraoOq|WzsDlsoPW$_-_z7+5_acaK>B_GWB$1#7<-Y0 z;@M`-;kOMt6P<)`f^&bVa-e!0cN4xLNHQM0Y$mU{O<3sw-gF8T88|!>4d}!i@*1IQ zo%BnZkh^?Rx$KU6@5u8YYtYY1DFn+bzkTR842Y5?4RWSj_!XL;*Uk~sKjuIt7}#@#0ON|}!s?@yllQvp(jdn+%j-(Kw2J*!@fpOp+UkpulFKlR@l=+`_kimnXJ0E zP5v!X&ugRU$qY;iR-SWnC%a@CSF+xAvaSoFDAinJTDqd}bGD(#BwVozN|87r#GZ`F zFy#&(a+X;(;E5&GdmJPEbE+XEG-QmSQ|;MmDS?jteKkj+Sf9wr(EX--FXR7y= zVFq@)wGHR-=FgsGuLvn%<5A;4u`B%QBYi;@F%kCPaD!UbzZGFVAo53$j4wsxtd>epM{0bpnI@(7QWszO72vrL8c5j@~Kkkj0012F1qF|=wjJ?8sw>$l4_MK zp45Kc1_e`z9=PMKfbs2(3-G*!9zbp8K|A3-OFCuF1xd3EKcjVBv1U*jbBMVrrVO&z zZ9gw{C=&!v@B?=2pJ8)&5z*fu?vglxZdvYhdV*tkC&6Me8Rt#&2Hw-V;PX%Nt%aW< z?VF8{>Et@@Q!un&_p-jUS7v`*h}7COK21HUN9w=r3s0Buo+$AIycYa!40(IAd|~2F zKZx64E6RDV@Q*EPkE;W77xRJw{6;jUJS02w945POegZT7zJF?!-u>&xvbmW?^%fqz z;Q`6Xot(A>%tn3<;aM!y=Q>=Q5=CaUE^L=V;|ImgDF*XAZH8W$=PD>p}V~ z(s#x>qZ%zVvb>P}=f-1fQ_Kj?cg{AVXD)t*4D=(}8{?mY7^23XaIv$)k;Pc_2VtYq zELnV#VLUjl2a`mCle!vyPrG40tbqU zs8!}(#+7OO%+07cda1y@D*vco;Mn%rX;f^K^eb~q4s+Xm9kr~dSLU8BS}i6So6ULU zYBuI&_b^2H)}mvUq<5*{V=+>whA}}33f!5t>MtS z^RW{5I(NaO9_yBw;plWTIc`kSz8!W%_D%fCeNO zkPf^1lYj|DOj* z$~Vjj`}c!-+1^;2w<(MzT^e$0FkO;SY($*TpmMNpt?8$%jGkk2|E*ljw6-erSK1L! zs9l%KLUZwwcgsJ)lQNWH3zRYYE@sCGBKd02nff%TQPQ^{?Fg?CuH{lnK~xC)K`*m4 z0j4li$tD@FuvBRMG6x9b8M2R5!Q`hOFg@r31{BHYP|(n2DML@={qOry1zin#bixUG zn+`b$Xfdt&{2{|y0ho~auH zV9*hcBYBb=;=g?LYY0ET7VbMs4?;-E-xnlZwKLx?CiEYK*INn_*STmu{@$v2uyz+F zO`a0+`UJ4H44Cac615azT#kl2#?oaHLCoM4;0f@VQ(pFf9t*FF zt0pJA#b^aUt~M-I91LdEo~t~O?Okq>F}qx%cg+-9g1j~@n-Z#JiPb&^EH4@J)@$h& zH$`4Sr>4M3VMxm0Ko=aXHag!2827W^5cq}G-n^kCAe>{5FI#}83TZ$4mgL%PYWF7} z)yV;4c0l@7uP99PVD*<_g+Wmjz(9tu&`1R8ixp5rm?$w*E zP)@ArE3KHKtQ|212=|5q^N?+Of87b;2G&Rsy7`C~66&}u1DpUu?-aTIna46=RN3*G zfMkprxDRr_pusIKddu3`eXq3{&|#`QaWo-@-Uh@l1BXTPPW>Krh=uiP9kCb&dpOr@ zM6Y6qn}aMsl)Y>bc5I?&{Ed(0pM zHlKntD%pK+HFuZ$9Kj>_U*TNPU16|&;bmeb)#&(R!N_4UV7mIhg#mPxBaneIt@hhQ zT`;@k(?^i6D6%jk^hE|C^wSg;dmmvJ!!OG7INm;%#8?2H%DuiqJX|o$tAe}Wx8*^0 z&bOWC9biz$U}ds(GL96nk$3!;r*H1p0@?63COo#56`}x4!jS@u++ihVqV;R-M##F% zdw19z_WL6^Dm{CRrnY~}n!hLfxGs9b4mj3AQeo4`F43jxvFU>)M3wrf&q+6wMp8ph+}NtYA#+7 z7ZJ=W9EP;Y{)7z)Mn@#4#00V-oe{>;M0@A0fS;8{e1J>H1~>`)p?#fDq+^6V>jP{M zY0VWG6yk*&X`$-DezxJjpvwzBd!L2JMHKrEu`yj$WR4lCG7Mj5!9rtVP{>0AIfk+* z#|)_uh7`7PsIHYkfNQaAgWLV7j_UrYj*6!jb0fTW5a$dPSVPnb1SxV2EjfZDi23KwO3s0Yx!2tm%b7i-G4LC(+`? zcWVpy4BBKpOv)ca%2r-4LQ}9>ALZKx^M;Ja?d;{!{SY8LP`C~bPa!1;&WDhE>moUX z4@+|ZFcMm))bS;M$E0Y*B={rh%>t8p%ozoM4Y$K-AS;l`OzsWS6*V6r)~VSPC86fy zWRqn`lyF-?RNZCCyYYxnZ8&vHW(Pn$?(b|yW3<;V89mjKBTb&1mgsRD*U(ibVB}E^ z3sgb4-VaPK5t)N@b~`DAYzag45d`Gj9G(Gtpa(Ao@>|otB0d9j(ugeriUkK=nfb=8$YlbKsY%NTLe)ChxOc?~kTX?T8#p&~3^bZ# zw;^pY)d!|knUuQ?kN>dULQp_6+A3f?v^XE(NTvi@Vw*OUnf&U=%iu{nrBM(N4KYWT zyH(n1FDX|7@!l&6BJTml0Ub6wUEfvjCoFTUcXE#xo+bef|V}a0)Nv7GZ z&-pkjAE$^*7vEE*rI*{!tp(j=AMKv*x}+oaGEp96NF`BLn@SfG;i{--=|n4_n3t1d z|F$ee{w5cOnFTI@wV1f+OL(Q07xpNR<|V!+A+uQIU^0OSBd^P1BM<;(g{RV_GNwFM zf=(+coG?m|aWIQfI7MinpF#zO*|%`8+keUczj|CxY-Y#5n&GQCJLtr%kjPTia6>NeCgHkhL5Bvu(a>)`fjYASrc(0oVYUsfmz zghj}`C8W$AXlsOSh#;LxrW&&(R~!}FF(4|2KonpU&3h&=K&yUO5{d)WQN31Xcg)%o zdqYe?rYUBZBI#)Gq@8Cg>wFl(h0=znQ3fI+IR7ICk(wvpcCZf(4?P4t)b|9-~=U%G3JUieT zrm5s8nTZ(5iW~rklAc100K$3@IEcx0TEkKNeLzQWO<*9_f-SYo60i8AK6_SxMDKG- z4=_bBc(r}qr_vIKu{;)G#5Oi4Z}Da0KcydJuRK@PRZf%y2Nw;cPa@IjnXy8gNnD0N zT16~m1oStA)Y%2pv7thV%+T)l7{%HIiWo6v)*XRC>?7MMz~vvzIed?$H`dSu?N*vu z!pPQ3C^sQ9 z`P2UQ-G>M7_yIH zcdsdW6?kmi-fMa*|LQEG9A*W+B2%M3b<)H*u`c&FQA+M4*Ng|A3Oe(}&@7m{q<8zgtfHy^kPeJL9qdi4fnYRN-qfPN}==f;`%L?qqp0 z+}g8Y5YErrLv~IFC_p0N4cjS8y1hP~Kq$}fP$#!cPg7Lp@@w=K-JbXs>}l+5lYobG z&+fBzGXQy7v$&YK6;(xQ-7Lb62%o0}G_&JL1-P9dmxCs`$P&;yaxpgOXf`b#qSLDxs~#i!G-VspwudP;ragO%#l55 zz5qcIya=aiKIMbD(!6MUQ;T6V@fy=y^&Glu=sXB&R+jUMrHks4G-ZpM;6WrMWyz5O z$yhdQZE^2Pu(?TC_#qXNSE2hfww(PqgOk~rT0B6_3Odi?1*Rpd4pwtF0L!?ZkOX-q z#TUgPkMO5Wk+qxFCTmE*IF(rEOd_2U|BK+X_ zcW)?Gr58X9y5gFSv{j1?N2%Q*%4zF4TjHJO-EesdSTpe63&9g%uI$S-N)L8e6{n4L zf0cRA!USSkyGyP@L>R`Ib5O&i1<%{mkBM__!bF6{}ko#~BiBmT`h_MbR z&23-_Ufoj&e>F(TB13yJ+;WKfje|S_A1j$Fl<)!2TFV%S z;xI*QpPZUSt0WTJ)cWH1K&pjJla;eOd|rF zbzwk^MZ_w?2Pd*^&x*|2{3eq%gQwibi9$5eTqW5ngSkouuP!n@06Z6IW$BwcvQ63~ z!`7kcPmEsdZ!vAK1|AwhHecF}URAls#cg};b+;M3{3O#^VNXFCJ@C=QkOm68dxzda9~}ahNsx5Ufg{;LP1}wd=S(Z7Lu0OL}bF@&=){>nh{I|c@Z=V z`SlNgV*NV45m^#L_d>L8(m@_}|6dfTR8aaMZyqL|s z1y0WS0TqK}C+}2nwn8LD2|n;sSO~#Cv%Ygw*icjO>@NoK-I5)8kwa%VkeeLiwgq_BL+yB zM7gj*SwlF(Z0tiZRpJB9mQTADCKD4-Hk~OnZdke|idIX#6&l432~0JCRl&}oh0yjdD*j?UoI;aktZAW1OG%nWh!W7BSExl3NwMh#4iv?4jq$h zh>pie#6~*sJw=3~6>LqEWsfE%#bgxo(-E7P?V9ef*wY~+iTMT(=SKst*s>4#PYomU4B^gc@)`82l}Tc zRA@Nh`Fxm5L0fdd$&(Byv4;ba%V_zc(qUGk!(YBEWQ{npc;bUd=nKV(e0f+kLOz&_>*4sM+=C{7JLmEhfq1oWMWy(n&cRw-3DFFWYf{&iX2 zjMtQT5oKMg-gcd;yDj`n2wYG^%Hi-rMzgJr)*l#FrK%xYgYb4Pxh@2IkcS1e?R0x8 zyOiuenzxhUm>2>`)?0 z)k`W%Ms$pv2@2+n3#RhHK&ItE31LN>X)^~^O zd`hdI54%xp6lqp?VO`#1$32g-5mzMTi3t`7!Hvi4&SZK44C7_%iS#3!UiDzC>^uJ< zbB!yc#`iExJSzrhw`r5`o7>LMYazzFJ5_tH1S+N1{d6(KTd2qxgiP~8UdSX{BI%|u zepE+*_vwVANQsq>iv7g zG?Bqo{bb8n`fODLn5yEeoMQ6<3og4&Cs5gJ5I$UqnX$!e&5tH5G*uB);z74E>qY#^ ziU4lMcL$>KStukA1&ZSG3v&xDk4-(|k1VK5r=ynd=OfBoU8M%H;<5|sl#i-VJ}LX6 z&cEKNhFo+?Boxtb8D+&~77!O)23e+OEvj%8LujcN=q>0acOD!wX}w_ z?}CiuN7UBk#FLwBnviqcmC3gkBiLQ{Wpmsgz{#aA?wwW#jPV-Q>C>9RwOz1oa{+Ig z(2JgpyxHi7Q4THP#jg4|{$M;pUk3iP;rh=8>=C#l%RnctFYyTEVtQZ<-+N~>kda&B zg9SM`38?m=tBPyp83|~QzmXu%^BCx?h3Tu-|A3~b9$sGJxy(G>aBdo zzYmjHI}FDuwk#0LLU;Ekm_?SIcJMiWx?1i*bf=TZ4P7qQZ*%?=f&-8KeWB5VMT<}f zRp4x1i=85M6UuLqp*!+NmtA18US{SKwMWDvha$aZ;dxn*<>pHY7#fVLg2#+}QC$2v zfgPr!WC{=Cf*_`)P+!t#7EVB{0ZMk~$xsDF>sZ}*Q0jI_XGC54*6$k~eVJ8woz#GR zGJmaoNHIfDV(l+Qn5L`z@b~sr? zs^*IQ0gp187M-TxiA1_Db%wn!wP+5$z0Y}j>)io^c|nVABkp$_bu+ws6*e=a>rPj} z4gVY!r|z|EX$Pl*%az^?+Z?_SSGl1d!=x;8U1YoT+OO(zVDe6#Z#-w7X)bDo_z^$} zf#QEKIMy9X4o==Np$f#XzZ;kRMmAEa7~E0<#ysubv@7gIuEY-OIj5E^+MGg3s- zjg|&^a;>((g2?0fm}XmNMEENY>pe^#A6?Gfjt-mjJzg8nRkt2~PRkWJ&3hYQ-_>}w zYW({<%NO%n;5{}jzg}V|#Fv!(s#JKrm%7=ml)bw>>J|Sw)Wh!xeg09uSgG97%cHWV z!Mn-L&AFm!`HG5}>UMQk<)wMq3$eb!TWOhrdp>wcJ1W1nTj6u_wEk6cvEILuGci3S z+U(uh*?uF^x0c}5eCSDTr_#B;d2Q39ySlS=y;ys(@n>Qk{NeHRyy|Ul;m)*nQ%{4F z``g81-8%ia@A_zY$+QG#`wd(>tYrRN)aUOc-G*J`5w4c?FGK5_UE>)a?8n%TyveGC z@}5__Cx)LhtH-Ie_>5R}+3H_q@1(lLVpCIFkJP5BU)!l&9XyP08=1abO^pnTJw9!9 zHV+-g_$+nsu3N6=OvuMHPW*yCYSG`Q8hYx?d>UWp^l)`me}8?yeH^s>!D_8(uw^^d zzFUklRJE~uIFE(4CvMKQ>gx~NPlem6yxptqnvhr{(9~(2Q!!CP8-Jd~CK}b)?cY1M zQa8ADPV<^4xSuNh+?GF@=6rssZ+LwaynQ#T!>VmR?=M;0R5y97)n@TSD(jA zP9?65J7=5M%avEw><%(j-5+NQrtUZ|?0nbwICd;>Xxz_xZ*QudEgNesGy7M6Xnh^^X(M#8+QH{cxm<%as18J z+HLlOqYJm5n@sbcOQNl*`3*|zWlO5(rM}I()?tCSiJN`hlE$WXeswKM-DS(JE{(l% z)%>hw`{r8F?z-)xy~Dvlvz61m-Bz`!>(h45N_SqM%BOLWu1~M!MSV9P>fzAfWaO8> zpyAvqPcOe;bbU;Qys{p=1&OJ^insZnv@t8uQY8U;{t8n#FbQf+8|(as1N+B@QnHoFT(V=!LEO68Vk*^dVVgw4QQ4_ZfG|8MpCGV|L|`@|MG8)|KZ=9{^8#O|KZ;v|Lxy) zfBf5Ve4^jK{M+G=e-jfD5lg_Mlu5{i@e_zb1Q18I;sw=}ipHy}Wl>5jLppe2&`PO% z{dp$X`Cpc2%SG@s)FLOBUX~#1$XH7*F^m-3@sY*~eT1xe{!Dy*Mp?)*XLwAJSYV3` zcf={}@ZkRhaEKW{04~rg-2nO@0FEfWl*tEMRr~^Wr#aL`;?;6%6m)JA${dfKa0Z(} z1K$2uBJ8g%;y-T>4IuOyd^GfQ^6>n#4zf4*5$&)>5V;DYCC`6dM(ZCa2X%&>7Yn{l z&|JWE7|xe_+Y-_3!KD4rLl3|alO~4t=@&Y!21Xy6lJ;*%j*bzw644w+$}EoXLyOyE z&G|_sCuXP0h_i@3bvG<|LyGAThkuc095zE5oI?JMO#o3$UN(AN*xejIpp2)c*O19g zhHL!TnZ^5Hy6WZhJO~wCkU-o?5Tf-YEI?+P;9(PqK1ynw1SqxMz*CXJFs7}ImEB4! z9V~upExi5*eG5r@5zia{ta=U4z>~gy_+!)W;iA9E13-YPKa&4f<#8s9zuDwdVN)OQ z{%g|ZV-2=v%*W2~HDv@az|0M1g7IiYc5?U;`C@uYJB?JMr6}xmJh%Zs{8YC%;4K_zX@v5DyZxn{5_+(MOzjjSlyN}x(s4{4)# z33o=Y?!})D)ap3PBPg((bLCd{c<2szz(xTCZ-aw-djTu*ZtS%m-b^vA1K3v8566h2 zUk|3ah8)zX`f|UdrN!F%BhJ*^HpqN-%6e(W>OSl&;~@bygMPcI?z>^mfhA*Aru_Q6-Gu~MXC7!|ST&*_Mk}dgb_gfw}C09T$*9>ba>Arg}+}In6mdeWUtpwqO zk`)~&~7BvTA{9I3@RDEj1t zvr?|KBK)x3euL?S^r9Glk0(swjWBmR&wh5r;Y&4n=kpl1&XjtbQP5MDaFiHF{B$XE zoWG{CCzd<`*cG6^t`JOW^I%#r0|D}18UU#*!1@%Oyco$C{%!&W*Nb{Pa75vs4x!w7 zk22EuCd&kgh^HaHY$wB``o1F6iJFgGX0U)AfG;+5caaOoBN>P`c#q*|0M`W5f=Y)6 z0)a92SoMw9&z(Lia(+L}=Hn`x`89E7{155zMt}yy97KooC|BVt6>POzd!*CT7rjM* zHd!sb2^!vX)Fwcg9jp6zS+2tWJ1t&veBx6JYfNxzk{A_I^ZRwksJ#tDo+p(BgIY1C z7-|MKvOMkxfweAPu;gbgyr6GTn>LMlNX(&a= z!}O2N@a3@MfUA%O`?lcMV!7AvUYMc9XywkeJBsGRe6Rc;2Be)#zgvzmV15{R9_6a-EG|iQK7?c7ST@>FjN$;WxK} z34LRL$(yptupuYtWg(lF-W=>GhG}9HHKKWmMs63V`ZTz@QBymltzZ2}`kQ8wi#v2` zZr_Mt`O_G>Kp3JWe|MVIl5-h%gU!*B_3Nc)l!2^VX!1pG-|DWfX|vX#NBeApO{~yv zKxALfilHTm#a?_!LNiQDj|>cU66wI9uwbVrBN(QZL7r$1CB^s)jnYt@d4YG3d^6r` zmT3X9&9t+5K+9&pBEtU@b;ytTw&RTcgLDLR9Y`6yCQ#ax`VddD0NlLc(_Ahie>^6H3?j%}Rl|jgtJ&^e`6oivta>rI{u-5yr_@DuQ zJiY!GEM6L{k#1;dP;6aLjAUcS8_@0M`tp#I1cQ2laI^+7_ z3J6&O)aF|aSbyEbWDOMgLZiOiFdJ+4{nf?;-U#p`HVkl#fGFrsk}-j>N$>N2qK%Qq zb%9K9|GpOnq_l-2H#O40w4)6OV~Efdwm?Q0IIXK9nWK2o7Q-SD)M3~{*i?v9)b&1A zK$2gU7a3ks1V`r}3fHb*qUle%>j#8+i0POeH2LYJx^mc(^eF%n)u)IUn+`}wYgg1b6 z*D!Q?tl;lmztMVwX(Pj5;=}(U8v_5GY-}?SLojW1dqmwb`R8$@k?%5NBik`)>_ss{ zX}x~$b=-X=vw-XCuZM&AZ==-ZA;iHAz_=m2j`Fzd*F;oly6OUxIwx$Sr&7WVDKdVC z;qv0o;Ep~7#JpWyW#P$0JplW!pS5gV;-qGx4w;=q%I+=_yMKaBXT36lFWJA^Xm0$q z{QdVnZ<>p&E6lM079an*{rUkLVDao(r|e8*gpuL%?UX@T$lnI_RybILt`{9FoYbHC z9k*=FP(xZk9{(0k7*`D~xoWLEr~(br?n8oDyZhqZ2ZXf%JaIJU|3+-w{ZGY4a7rCA zCNwH1&PL^?-D=~WL7O*H>4h-AiwMRWdVh+c_!J9TZ73ntriI36uYivhLOOMRff-6E z94YjOgob_w0glar18(m@ot8K2o(6$_^rg_@UaS*LKtFL42&_Vg!eKZ#AILEh6p)yE z=mJe9jDTpX#bs}3Z-vn~+Xom1^<|N9(CIp(Kn(>08jgAc@GG#VB_TZ)xKR>9-sb$H zOq7vCgJ`yR4mJcCBDLubLo`vCA(rjN0EEmeQ8jKjB*jF(P5>ee7QTa=M3X1qr33IA zc)Rr|xnL5h3iLi+v%k`U*fVgL9+1fhU7g$tpTa0dGB@EQI*<@VWPI|Bw9vPMJ0v&( zS#eJP(XYb10H-WLfxVK@fq5QtM1z4nZt!YI3FqVBxPV`ZTyqxeQErH1mGZH+%rYcM ze5%2yD>l9K&@byO9bGKhC#8@ELlVq8$Z#m5>&{;-hGZG%^t?UrSG{)_CLnDxy;$&= zG_JNu$tQJYD3vg3$$%%58iV~INf=qS+-Y(Y^rR1y_@*9)0fYA%*dR*6O(EcV@hIG+ z^LrUT|1B_7p35|VZ)rjuYr%;FmuY%cMkj&H7_&q`v0|gdf;Ige4mYsgtP-cjw8dxKeAs3 zL&(;am`J8Q(!jo>!-3iEKxTZ98<5+Mat%7j$>w?vXR}~yvh}Uoy_-J!-e!t0sst0@ zRiM)zh+PP>E9{0n{abobbFdmrl6UECq@0-r14|8V0RtoB#{$)z_i!YSI2spW_ zm-SpE9xdJb=B(PO%?hEFm_)bHRP=FNI!PUuDsiMr$Edht!~@aooElUVv|uO(Fi{+7 zP97t-%>%=Iem|c)7bDFxQiKoJXTLnIi&+k5*Z*5v*Ik)#5l42E_=q-f_xl-(P$WbT`Ai(Yl9l1=IgO3W5QaYW^( zr4_FE+rn}Og}CfQ8Oz~flKwZuUbKiIAZUW-ia0nTkA34%yT^e!R_~0n{_$~eJo`so zX3&9W7n!A!$5j0q+}SrFL23CUeoc|2PJgIHH8UuXw&~Zd$P7TM5@?Odv2DSGZj6ba9^^0oL+7#I)8nbUtOiaTBdiG7S*(AwgFFZ;&_jxs zGhu3H8QSwgjq6oD4di2{Ib{|{}XPr*J0gZIX5;0F4L3YxOW8ghw)CRWGe zfvP92tJfntG)O}`H7IXw47djCDlJK5AV#nv#=x&8<`d(9vm6FQV{%^AaOU64=nJUu z_eWc>raRfc`1Qt~Qdz<(g-1_8fk-umSTo^K- z!!q5U9!;t=MKjZ`K;gwxh1UO#ijpdEH+FgyMV2PUN@!nTC99&LuR?u`XPG(`8{;cd z*E_~WvhZ=~^ZX2+_kh^V&v9htiWR=N*J{CeXqRY@a)bB2MkFr$W|DejJP`T+h-n1= zn`wysn`s2b%(efEX?TYEnEoQ2cQ&I4yD{o;)FL+%J9|f@9N+6rh>g^i!GiFTK_{0v z%e8fORBCQ7^wZt_l^r_pcm{L920s1DreZS$h-d-|Tf`e0aE5=ToZ*}p+HrJ8WOI7i zF$D0xU>dBl{|D26`46T6{hyhJ?c{%F8X4UGW*VZ}Gt80;pv-*#bQ(@C|8yEi*aoJ- z{Z@>^Ft%^PTTC&jM1Z)rMqCW z4jR}xXm^`00adq);Iso}sx zTY}evtR<&}MaHOjbiilJL8Zb09=%qia7N08o~D?OP(&Bw_Yx?MK^SFu|yE)7Oc{9W0m zkPpY^uzqFuG%Xb0;utN^sC@7s%={;^(y!?V!Wn_t*~;n;Vo~UB9zP^C#b}^HvmElO%r2p_@N$QV%O0BrXDXJ|8J>>`W1@$KdHw>A0C~NC+9v>+B7oN9RjhB zop%~$40#Wxi)nOreb=AMm&?d1CCLw+uPFnm4;{jB2unO{vT52b@eeO$G{*)C22r;xKFRNjL6Y zC-4@6nRwO*(aty?;>&G&Q;D?2V=!C0SGJ+};4;T6xOP-LgyN7-a&V)j#d&Y|I1VX2 zK$C%VPgZz_G)Er|7c^Tak9sQH-y5@~@#r(S78&kZvV@8Lpis!XXhX`>qXcOf zJZeWC$FTPoZZ(Xr)w|&a=u=?rrAoc4f_cp{Bqlnpp*6&$KxELD<->h8hI|-k{*0D_ z4B9*{d(FS$lJ_Z+LU1!r*F{Y zfQy;?exIFiKF7j9&NGpGRV*xCL}w5syC#L=iS=qe8gUpsf)eoF%C2TJxUEtT-Uweop#h`VcE*HAh_)2CVT*!UB`9%1>li_}0@-XEq3uIi`Rf?r{o! z_e%IDR1z-a0q2nzMGS^7&ngWbArm0d=EITL$Mr^7y87#i3{b*lbR33h4hxkuLIbC= zDUia(AmkA#W{CFU>ogiM@sZ&pjT>Uh196Lv41+QgcS3XaZIY{$qcT$%mu2HmjpScQ41HY|8aFEDJ zWf7F1RBuKWX-?BcR7<{V_0xr9Me%?>t^!uw%B1lZ3o8TsX}gJHoz@*DZ#E404p(ww(g->2^$m209&nW z7$kxsxq&B7jnckOOP&=qD+MEds)7fBDloDW11d|C9TMQ{>B?Woh&mHAa&Xmk%fFe1=JqOz)VmaEgIZ!db;!u z;q(`guCA%=m(97=8a*<=O4LhUb1nW#Z2%U)|7u$k92RCds{@fF?XV4fx6#Q3;xxC- zS9{0!R(u0@Z;c^Sj6BkGu|!)?m(`Iz)nZ8({4QY zAWU(vO}e=?0LGD@Y1}B&&3ld+EH-wHP>?>=1b$BxsVD5J-lK)mf+G|La~`!Vxm9&~ zQmj-%GRbZOQNl02FX=#vC`(8ibOD_l4DpYAhByS)G{dPb+g!LQY9&@Ks$2Gt)OwLb zlgz}dcrg^G=xiSKavI8sfb1EObIFqGwzj9e2_dq zEMvT*kd7$Dy`b*A-sXm#9!xi;#CJ^4*broP&P^S@0Rj{FOE{Yf6n5N^9MI@FKR_d7 z_$!Zg#Ky}PgLBFlTNxt&z!ayLK{o(|@|--a+Npxe#eg4Wh^7~4$8yQfU%!vV4EgGJ z{1LK$&Tr4wgVGjEoLTq8C@gI;Xok2l0A+R~rt=&CNhajnZM`^Y8^!Y7jCefSe!v} zQP!kK$pFS54uA#2Xcvqkbkt#qd~Doli5+@(ID2VGd#>t)=cASG&-JvwqRt-cX?`8v zZ=|ksdoeEV#JJlMVeCJ46VASP0Q>A#Ec0t&FD7?Al`2CX_t?TEop@;QN24T`DI9)F z7{-Bp^}A>ko&+=E=1OG2cgF>ahf&U##!xCxS>T4S*><_x2~M;u*saG0!%UB~vBaUG zvXF_Dblu@|BsCiI=c7I5?6v^9fEf@R_AcRYIYb>FGxo5;kWbjW$spzJLtRh-q>`k>x_T&=+tQ+V1iqM6kV zOTCulTKQ+g4Vlc!9^cHOurSIe5Ah9u7L|h&zwMy9?qrBhL=`ci%qUtZP*HZEtoWlp zNYk_sH#WO~MzC2!mo=|XoM`rWYMXKvz$*_H=UT~)BoHVGEQ-O<-$oT0bZX*$P#yZ> zCHn{AyOa8xbx|H{F!hgz4PV&==#Rd(Cv2ln8_Jb;rBlKvp(-%A9PoQYrYg@Xt<8HC z4Npu!Q4JgA)}{jm5Qrqfg;%@Sa1i4)f!g#=%KGAcDWK3`%MXl2>Zl`_qF9~#e?ZE% zH;I2iO1W!re*sScg=ndI4M_|=)4nxUS2uK>s~{4G4m!Z{X>;F?-tDTO1|z(feCSsU zFn~lbG5imLTB>{MTLx92HIIShR&?W;#yN+`FfG_hf^FwF*`rSn>oGXA7~CFtMEljM zcztQ~mA~A*MV)7oPtL<+12V<^BnBG6}Lr=s@nUkHsaEn=ldO)Nb$Q?s%p`ZB}|gY9TU zSFBKm67|1kYy)zt184aO%~BCXhK7_23JV&fWLnb~yDU9h2!UMdLy;FDU~qNYm5t(1 z1|eGXw22Zn{@A7p$T_vXe0wa|Iw2l(k3>RB@Z<#w65iSMezFYmNQ+Ds&qG4` z=P77ZYSDr5AvnZh1%g4626xt|FrxbtQzA^}9CF+{2R77Wx=!BW=fz4|z|omm;9DXEh`wqWuIg z8FR4V6>IFlmSAzgb-9kjYF!9cwRg8Ydxlh5tmTkACORRIEPi~?8q>#$ypq6?DEuB5 z(hTjDQ+`CUJGq}F+AUn6I@#;2JA@0LFO)@ui3nUKFuM1@4wKs;9;y{*tRN0OJb|4M zS>(50{YgUv_qjh~Y77dm5*k_Btp@@jEqmo|Z5bNCNZMFp4DA;TW9CYUh`i&or^Ybo ztwKu|L&U9R*f#-tcJ~H>VL)D`xwae)Gz?pX8}i!Cq!3xEv28B-I|Q(=(tNPVnN*Me ze^!=`Cobujrb>^r(?cc&=)(fLiA7a3G<3AJ7ARkB6dghonTte42u;DZ*=+)=a?(!V zJc-s8IE$@yqZ`bx++Ohpk1D_#Ue|n|a@1e27PzZ~BlsKA0;#FtTW3lVWbWg^@*{zb zisu8EAyPVoBah{lBDIS@^XVSE1gOWA3|0F$V4UMVoaTRP>?_0KXtu3MAh^2^F2UUy zEVu;;1a}Dp55Wfu5S%1HAZYO5?hNkk!6iU&_nGOB_ndp~bMC*de(c^=_3WzZ-rdzw ztJi)T=tX<|w~Vq9`|k3=3}eKlp4a58UZaXnVU{wGTywI!?vpUepBK>u>GqqIuA;Pd zQ8r$%rb1O;cLizm{*d;(5hUU^B8~DtT%!2D7M&G|>+nA@8v2_@E2&D1Mt>F8L;E)x z^HPR<`ORmFhaPOOkOhIke!<^xAAIP@YHc#x_Q5C8X-&+JR5SQ|5!iiP=v;!+Br7&l zqgy3g{rwaZXtht|F?Le{w%%WVKC?B>;xNu`q2TApR(zSj%0ITX?t5pC1C)G2Q?`u| zRa5>IJ)`8(E@{J@s;*G1t7reg->WD@Pgj!gCFu6(191;56_iZAI7B%|233jVbf$NTx8B5}N}b)7ojpOR6Gch~z`vEKz| zSv^^a$NlV3JV5x|{+*R)Z#_7rd)oL7M&897ecLhNZe1uc-_y;Y{BuS}Z?>mD>r0X? zRcYnHA-iWVdrwkCvd_SsndJUb#(}Xwz%_JpbGBml*~RD}G9Tp?X!noGc>-Fy;1ZEd~CaMT?c~y2?GDBLA|twgMWvSs~RPb@8A+aq#eE6I`9P(vVk6%cDHhn2&(# z#}mGx_N$xui!2VRN@MkO&Oob#vS)ZP!?R2*f#eD*2Uq2Z$x-jLXej*2^XEYFCIJ?1 z@vON1=lI%>{c5oF`5mwI9DfDV?h*W>BBPCno`(hS)t3XAB;bLS&Z3Rr#vef)Kw zO&(|m{5Mx2fPer16mTRL2uQV`k4yV!37l6TLF-(HK(d?gjKhP$rYDxd-AwF90qvZ| zRWBDC8O&$6237po1cS{O#S3{PGITNS241CASu*yH6}rV=f*vq`?}M~TOf`1jAmU5D+p&xxn;9IdIpyc-R)(hoU zD_Sn_G@4T_`ORKdjo5RHbw?scF?v?THal_Rgs%FHdZNblj@Y6Gl5u2^poL{uY2Y@t z=;Uo&oEB_)8N=B6k1=?WttT zuHTOgyDTie5tZ;ggI$}|XME_D{B;W01_tahxatVK6ddzW)&!b^v^&ln zM>~snp$%-oM=|bHGOpZx4)OVnrQq1MR+q$SF<<$mFr!AY)f!%oLsZ=~Cg$$HDfF5x z9QLJS5o5SVmhY^h998uA!kJ|{9%3MmYR_ft7k_zmIO>aQqDNhk($sFOA5C}eet(6# zaZOgOo;zu}!!?(^b=>J^+UNb?Zr2rW+2Bq7>4KlolNZxjwAn|OFdBJA9noXCg09c{ zEH{w0UM7v?+hN#(DvMdB?{(&JpQ+DnER=25<&IAy#bKFcftjK*2Y^~H$-W+$fpJ|^~JjXC%;SWJ^_Yq%yAenkIqkei3 zV{MR~u5op|Ij(W2I3UcmLEf>TIjoPoUpzu>tVDw{+CYXQfd<>@jWNODd8Pj0-Lt&k zz67n#EC%UHF^r8&6PDuDMdmfAjb#ajgt_IQ8n%n;JnP89)0Uz4NREPu>?j~I6^n-# zIsrIat4SPD4X|ZP-c+s=XYLD~+OYeBn zskq@h@r>}=Di%Bv1kneng@}0izj+N1nQ6Rj+7|igZVm41%i(FIXMg&e>~nAQ8w}Wa z0x66ZpO~b%Vrer6M*9qo`k#Hg#(u@vP*9KSc#vO@t5xt}V-Mb?ibfokESs#I#hj-2 zHcP=Oql7;qyOpg53zv<6rz}DhtT>%yQp}mnNv+V!j4_0{i@h+YFugam!@luiGsl>q zKzhIOy}c;2E$IM85n*BBq1PV7Y8@T$_GPUzsD(1EQv=5%EG@Yt zmt#z_wcg4ygI zD(EG1ho0rW4CkyY^|LQ(7#&BK2D?M%m$#ZP277cznIz`7G#uji)*!f#$>~F*a?Js! zDU5W_|HcJN{t|*OOQX!K)P7lizjx`P9eB9QN*EnVtnSz9@Z+hJB zUGC&n8jF+*?vgrA&!N&fo;nMOtxa;iHwMvvuRime68c9e+uNi6GQyc&vy1z#%xdAPwh=q5ymduAhea%leG;8NF5C+v0B?6xx z^LW)-e29GX)93Fnn|dE&xy#-**JrlAS0*$9br^#nFtZJ@ijW zA;ctd$Qv;?5L3S1NHiI%wwo7p8ZgQjD!^^N^~3$Tqo# z?Ib<~?y`90eWGxf;Vsrr*qL&33CeaHBX{3`Ws&W<7k)F&`&tq5#TSzFQh$DaUR8wY z`QEAeCUEUB91`yMS^ z8OMa7>~Qsdfve_$O7a7NeK&hD;p$b=A=$K$thDyDVQ!&Kme$UE0=rqQ@@&sEU9Oyx zaN?inz7?YCZKDYGU!I`%1-#cm?^|#Wa=Y6`tNY7leg?g@F+TN9 zwc8WhhOYiySdY6H{Sor<@XH_JF{GTC{8qLq5-=VyoMOm14JYjbXTJ$ynB5GI?H(8r z`pxJt_%*1C_ve-vQD1Z{QRo!?*X_=CY(MoIVKfV;1oo?9;xLGUaAq~V9lKZ1{l-`7bBX2`pucM`wqNV!oUsm@8-SKVX z#Ck5-bmF|&AGGh8is!tblPt0`{q`eKlDdOLB`wkg{c%jx`R=}*x#P;7|32GP(8u{6 z^1<K)kW*V3j)%E&$Nx|B?b+qry#7HAes=#KHxDWmpaU3gbzY zPXZ##Ra6n#KKJ$0^tYEd7hov8N97%We-ClD)E@yR&ZjP*DM0<|Dwm3c|kYdv*^1@m2Y^+5g`dDqo$S!tPP;fvF=v>;l-D4ov~F zxAXoPx6?oE8ntCmp6j?yesi5%_uT)VJ%R?4%>2_i=vbfu##8g!MO1e7_w%WZ?@Iaz zyGMwvZ*E31V8HQ!0BQs3VBjPe9%~2)g$oW=e%LD&VaX*(QyP#t!wE?xhH+=(D4o^} zt`oMd18L;IdgTet-Ad$>@msj7t-Ir^ZD8-t0R|w!EBoOypB}SK_at=kti1Ip!@)|$ zxf{nH3nZ<#0Y=H5m5WA<9Ey(v?(l+%!25O5lvMsZhfQVzIqdQ!# z=Q(ZH-Mgl1FfGA~M3h|AW^4Zn!fiW^! zmVP(9_M!rJ2V);9MQ?*#r=u>n^!_z)R9=odyXn;FrqtA75o-qC0DyMhl=|$X3y4v} zia|zXW7)?2%K!}DxXcJiJiLan%e`&F?nQ7yXLG1&sDa=K&h@e#MGl;=Y z0KGLKBA?f5DT_vumX0kh9+@bG=*C1>KmMGxCpC_2@?FFbI25RL9d((gSNmL1Y_U$P z4*T$T#f$I3JeOioh6K~}1b!}b)n5HTKK8^NN%n^0EyC4Sb{z;vnSk1(*n-=Se+wK6 zL^lUM1vuFll5#`p+vxova0p~=I!}*2fO-=?4N}x7Sx)UQzM6nD;GS zxLF0B9~f`fF**_MP2|(@m-ONO7F&LtSAG0hcN(hTW^2%61KZtz#(IrbvB|z)wf1|( zfd-6DEJid%GS+raBMGt0fAPNwM9sT#BayzQ?rv?siNfl)lyx6zj$nm$f%;JZgfG+f z{XeAg?IKX2wKkIX#k$I5iVs6Vs1To1+11^m*()*Lbr^;il znbN(Uf*&@>^<4i*g+A9>YI8;lHp!(oOtDzK8#1aLxjCp*oTy7=HWzv0Cjx!WNKr@Q zx@y=B!U0!lHyiJ-lIP;Va?WR*M#=u@8?`2Ks)Kn6B;n1$D*scnqd+G=I1Ik0v} zVVnnI5D$hb7(Ox%`wTVnXytrdwh-#{pOV$=S#&YRW^GmRu`PMeBaD(%GY&rp-<8Rd zNJ8zJ6>5|0Q$XrFx$A$Z8X zSQ)05W19P`Em@+o(n?j^CgLJ63yCq-XdAcWdY?MvoQ~=hs+_FA9!I>p+LDD)%&yws zx_%{doE7Vw;@Xn5Wc*!AbI+k?B+%Ve3RbQRYyD z=^9T1lh>DK(+O*wuPrYc?3>w|*0cC3!biShlE`Y6;|i9$?4MecyoXb=FReA!-?Ai^ zQdMN2Q!V@1MSAlZh&ir?3m04${;n^OuMW^Ioo0t;a;kZ}S-rZDcABbuA0slzRqT-Q zLnF+{Sp0FvroX~Fm}q29+&mR7zv`{w`11Khi;Y;&l#N?2}g(JgqRF-mRBq74x%^I&2NyH+TlrZ zq#D}1{CTaxAl^A9L8}|3_bCW!Eqsq6W~E}qVY{rVP26LcBtOT%_|2+zU|(xG`AR;LEXa4N@x?mcDDGSnELu<_xbap0_l0L zG$`iLwNlyZMgqhh{YQYoyuST;V*1On3cH&qYwv;bw7v_?8EmN@^1(Ut(hYgD%HJLm zRxr^Y(-$CJszLtiwkHPry@s7*Y?!W%P-81s>2h=(SD3W#VECbROI2BF^nQE$X!xC{ z(n$dyIk!t7YNUGMYELcpcXOE8U%KCgzYEYJQ^!5A>JiCkt*im zQqt!2+prXEYM7FUc>lYz?9Xtpm@V0PHj@JZY+wSdvP;xSUAE)H>v5b=-Ptzd!HDKSk{n^`$ zKFa{zmAcAo#)T?W4jq%8Ej$PRA7zzS+rhC4udyT$A?MB^wpiptV+nFhS3*QsN)rSK z_hemIgf;a2IV2iTR6s!|pi>COe`W+SLIO6iCBQJEIAE~(^Bt%r^iGS=3j?NvUSYEV z>cBL&zKXoPc?bo=;0o2Cr?X5JY~@M90FHvuU4#wd{YTMa7}UaA+zs_AM~ySgzkYP- zz=~!}f}#9UeF`qr8~9yo>1)0DCtncVbeJ+8gH+VjKgvY8l3%E*WblPT+~&JP8Ys_N z-VcIlS!Fc(%pc0`XW8!N<{Gd@6&RYC5{wnY2n9I5>^eZoA$o(G1)SgBQp(97a1Dh} ziTl0PqJjQeMYg~FGO`9()6N9r_c3y>8H9+(Aopsdw}mpYtOhtQEC)pt!g&8sMFhyl zqG{dI?S_5FvyyH^zkDk$T>F7S=Cg5kM@=smXxGz&h7W{&5FxvIri`}*jsoboWUw~C zYG8oT-kWtCD1O@u`I4iy0WOsWwl8}sPwzqIu9ZA@Uq|n=@v~a5?m>@v;6&7OP%i`@ zkcFZBuQGABK>_OZ$3K;ALp!JK^`C!!+7%{+eneLl=B2@giqJJVy96iQC8Vd_A++A4 z-~%e5q@9rHyZdaWXE|Hx5O`4(2xu;7(mErm8rqU3>a&(?!oWx0?y{6@G7dwsloaia zo+sewu9b_Tq4y47oO)WWYU}91*rv`Ku)GqDrHzb?#`l*y!l*9Vc^v>_y*bbRd*}M( zc2^1vDDV}XD<0U`gAgh}=C7}`2*8N{b+G5x%(MUTcot!|uH3)<_a8?Ne8&H`*Glun z&a(}yt=*ozs}`aDXq^eqB@O{>EUj`7Ae!B}{{D@J^Kjem>ecrU)JK+85ilYS zFW;$1GJW9oN^4>Jii~Xo%}@`piuLhi5YVQOv2NTzeot8Ws3=cG*^E6^pQJdgFkWH- zNrMj1=1mk7Sl)#2l&=`S$WrQ28Rk&gy} zYF?=f=Z(C2HuUmhQI$Hqt4?J0jsKg}^od{1!+mQ-GmR6;GmSgv`^(;~=iU$>zi(1b zY}5CSjjOKd{*`O(<+obvHU-14+AF1`D1@@T`FZAgJmJTewKHGG{U6l*J(nUSZ#LGN z=2s81Ny`(GYY*-wM?2RIwhvzK{`51^$K~M%m6Dx3A|Xhzpbe^-9`Nf+)@x*TV~L=- zxoqiXQGGKt)^~ef5m(nw0i71e;%X7iH@o_{7k7GM{z{i$UfLJ9Uzc6&pOuM41Z;k^ zG=b~g)f@R-v3&}rdG6g9X0-`9mk0QwpO~E9Vs1cGHIoPcwNTP-;0?vY1lCBI{Uq2N zRLOYP_@E7;R~H6fu@cfxjyitRWoV@zZDcQpkcio%G#Av7sK$y}wp>5Jk>$Zgou^x^Roo}F zy}7TG4~H52bp;R!>Mms40E-;a1$Yptf#v%US_#vOk5v&t1k$xxjhba>k8Vvw>>|c>OP}sV_o?Y!@yYPKAt?Iyr=0FN447(rWamdL?hR< zA7&22Pd;W4+9!7_RlNe$cRD2DL%9SETyJz$E8u8d$0sOr`TcF}JbX(u+N zxjL3`PSO4h>b`22$!`mQjvQa=atZ@Vqz;4UZQ~)u_t`iVKyqwL%sGTGcVrCGh33SJ z+>jyHzUKOP{53>O2{B3%#Fejd1tU}Z!;Brw24t5N%fg|hM_Vwh(A{ic=8i6H2=DO6 zer>i^Z;gvqcMBG0WMoR6wX{Jl-;4S0f#Nf)thdul(c<*4Z#Y;B*colY0V^9||K3`fil+!tc=-4~s8sj{@0Ua7iSER-CcPY0!r z3>lU7wb$pK1TotGG2%*SHBWf}L2|@|X~|yhgb|j^XU$<;n|)20niKCQWjA^}TQj?n zHTp91OF?+ByEUfOpQ59rL25B=h7U9ym9jK^u#~`#R$g8!mDfv6*phse;WvwQq_lSP zgGgD8X8x=OQ_FHOHm$-bK>_=uE)F_*qVt*Ura7x8(C8rre>l-!?J%9Dft9R_ zbIk@+KYMl)lHbWKUalUEhuJpAit^GmY zqC5g^i#zgD(cD%DL(*QoU$epuM`g@%{u>|Jo5T7gES-wPjBomSHRok-xISgFw$@Fj z+YV?g7;V!B{(e_KT3GVB^0&_1Vv0XfCwu8wqw6I6h2XMG_Ea&YMm(QHJDO{)wN#z{ z6ZMp_+i$UrNrA)p!_9g{Bhs--AkEyJKHQ3$km(_%?uZ0(`ZlxP~wgn*({bB7CQ(LUVTGNliXAzwA|(W4nrqWYwWIB-ir z4v*eu-IUvwFKpY?CH94m1mz#9dM-hFavPeE>HOfJr@l-1PXN_$t0hP%-sH1Rt|wZJ z=YB{P$!JK5D5gk!4z%|Zw?Wh2kuyEz*P$D?yB{%?HlZHeO^At?6yJc)+SK>pA9&iV z!J5US!+q16en%LjumAAW%GCGh>W!{F(%TFn6uBl7mbH~=uSpSC5=JwVD%(~iNg49< z>lmlL4UBDyFQvvks>$N2gaan{8;Y%M`rKdY-iQ`Zku}A)X$oopRG^u_&2Q~qD1&V9 zO4JEpuobf(q8{<{3Oa%&BK-Uh<}A#!bd^zQ%zI&0$z(!+{h-+QRe|MV@)72&S1vNm zO4y0Tv!_4QTQ|8pl(UuCb?3kA8O^*)+?!M_-WKRNqC{S5p?$xqSgy0;)wV=b*_heb z3VTmhQ}tCQZ)GoXCyXre#V&V;wDgIHt;chY`?tf=8>2LM13_994mk#VGaWx8O1F_t z{)P~@R}mYt&qJ?x4lVDxBEwtWKlXRld5KHO%m^fBeZ5PX+t=K6)W;&7#by75IgrE_ znU4GAh^yRQc)d3MGaF6>pGCG?9-~9n;tb2iOask~>#({-tUn{E40Qzd`_Cg^%7I1= z^0b7Js2fR@*Ly&Lvo=sVToL{N#&|fUrDqqu+4r>O%?A3~<;5O?!O_&vKxbA62P~{t{#GWNSG076WhK?44 zTMG?cGxoz?wG$55`B09);knaEPx{T>r{6R7`J{7Cn#0QJ$JmM~Dx4l#-LeoDyYFv= zFcU!(dF%->{hg9~=Daxmuo|-p(u32%m}!X`%iF8n-4il%#D3rH$5Yfv| E4_+_N>i_@% literal 0 HcmV?d00001 diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/AbstractTestIti119.java b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/AbstractTestIti119.java index 3d2de299ba..3b7004ddad 100644 --- a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/AbstractTestIti119.java +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/AbstractTestIti119.java @@ -22,6 +22,7 @@ import org.hl7.fhir.r4.model.Patient; import org.openehealth.ipf.commons.ihe.fhir.IpfFhirServlet; import org.openehealth.ipf.commons.ihe.fhir.iti119.Iti119Constants; +import org.openehealth.ipf.commons.ihe.fhir.iti119.MatchGradeEnumInterceptor; import org.openehealth.ipf.platform.camel.ihe.fhir.test.FhirTestContainer; /** @@ -31,6 +32,7 @@ abstract class AbstractTestIti119 extends FhirTestContainer { public static void startServer(String contextDescriptor, boolean secure) { var servlet = new IpfFhirServlet(FhirVersionEnum.R4); + servlet.registerInterceptor(new MatchGradeEnumInterceptor()); startServer(servlet, contextDescriptor, secure, FhirTestContainer.DEMO_APP_PORT, "FhirServlet"); } diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/ResponseCase.java b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/ResponseCase.java index 1347b5413b..2cebefa566 100644 --- a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/ResponseCase.java +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/ResponseCase.java @@ -15,14 +15,19 @@ */ package org.openehealth.ipf.platform.camel.ihe.fhir.iti119; -import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum; -import ca.uhn.fhir.model.valueset.BundleEntrySearchModeEnum; import org.hl7.fhir.r4.model.HumanName; import org.hl7.fhir.r4.model.Parameters; import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.codesystems.MatchGrade; +import java.math.BigDecimal; import java.util.List; +import static ca.uhn.fhir.model.api.ResourceMetadataKeyEnum.ENTRY_SEARCH_MODE; +import static ca.uhn.fhir.model.api.ResourceMetadataKeyEnum.ENTRY_SEARCH_SCORE; +import static ca.uhn.fhir.model.valueset.BundleEntrySearchModeEnum.MATCH; +import static org.openehealth.ipf.commons.ihe.fhir.iti119.AdditionalResourceMetadataKeyEnum.ENTRY_MATCH_GRADE; + public enum ResponseCase { OK; @@ -30,7 +35,10 @@ public enum ResponseCase { public List populateResponse(Parameters request) { var patient = new Patient() .addName(new HumanName().setFamily("Test")); - ResourceMetadataKeyEnum.ENTRY_SEARCH_MODE.put(patient, BundleEntrySearchModeEnum.MATCH); + patient.setId("Patient/4711"); + ENTRY_SEARCH_MODE.put(patient, MATCH); + ENTRY_SEARCH_SCORE.put(patient, new BigDecimal(String.valueOf(0.95d))); + ENTRY_MATCH_GRADE.put(patient, MatchGrade.PROBABLE); return List.of(patient); } } diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/TestIti119Success.java b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/TestIti119Success.java index 8243f0360d..f0d9466a4c 100644 --- a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/TestIti119Success.java +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/TestIti119Success.java @@ -16,22 +16,20 @@ package org.openehealth.ipf.platform.camel.ihe.fhir.iti119; -import org.hl7.fhir.r4.model.Bundle; -import org.hl7.fhir.r4.model.Parameters; -import org.hl7.fhir.r4.model.Patient; -import org.hl7.fhir.r4.model.ResourceType; +import org.hl7.fhir.r4.model.*; +import org.hl7.fhir.r4.model.codesystems.MatchGrade; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.openehealth.ipf.commons.audit.codes.*; import org.openehealth.ipf.commons.audit.utils.AuditUtils; import org.openehealth.ipf.commons.ihe.fhir.audit.codes.FhirEventTypeCode; import org.openehealth.ipf.commons.ihe.fhir.audit.codes.FhirParticipantObjectIdTypeCode; -import org.openehealth.ipf.commons.ihe.fhir.iti78.PdqPatient; import org.openehealth.ipf.commons.ihe.fhir.support.audit.marshal.BalpJsonSerializationStrategy; -import java.nio.charset.StandardCharsets; - import static org.junit.jupiter.api.Assertions.*; +import static org.openehealth.ipf.commons.ihe.fhir.iti119.Iti119Constants.COUNT; +import static org.openehealth.ipf.commons.ihe.fhir.iti119.Iti119Constants.RESOURCE; +import static org.openehealth.ipf.commons.ihe.fhir.iti119.MatchGradeEnumInterceptor.MATCH_GRADE_EXTENSION_URL; /** * @@ -55,7 +53,12 @@ public void testGetConformance() { public void testSendManualPdqmMatch() { var p = new Parameters(); - p.addParameter().setResource(new Patient()); + p.addParameter() + .setName(RESOURCE) + .setResource(new Patient().addName(new HumanName().setFamily("Test"))); + p.addParameter() + .setName(COUNT) + .setValue(new IntegerType(1)); var result = sendManually(p); // printAsXML(result); @@ -63,11 +66,13 @@ public void testSendManualPdqmMatch() { assertEquals(Bundle.BundleType.SEARCHSET, result.getType()); assertEquals(ResourceType.Bundle, result.getResourceType()); assertTrue(result.hasEntry()); - + var entry = result.getEntryFirstRep(); + assertEquals(Bundle.SearchEntryMode.MATCH, entry.getSearch().getMode()); + assertEquals(MatchGrade.PROBABLE.toCode(), ((Coding)entry.getSearch().getExtensionByUrl(MATCH_GRADE_EXTENSION_URL).getValue()).getCode()); var patient = (Patient)result.getEntry().get(0).getResource(); assertEquals("Test", patient.getName().get(0).getFamily()); - assertEquals("http://localhost:8999/Patient/4711", p.getId()); + assertEquals("http://localhost:8999/Patient/4711", patient.getId()); // Check ATNA Audit @@ -84,7 +89,7 @@ public void testSendManualPdqmMatch() { EventActionCode.Execute, event.getEventIdentification().getEventActionCode()); assertEquals(EventIdCode.Query, event.getEventIdentification().getEventID()); - assertEquals(FhirEventTypeCode.MobilePatientDemographicsQuery, event.getEventIdentification().getEventTypeCode().get(0)); + assertEquals(FhirEventTypeCode.PatientDemographicsMatch, event.getEventIdentification().getEventTypeCode().get(0)); // ActiveParticipant Source var source = event.getActiveParticipants().get(0); @@ -95,7 +100,7 @@ public void testSendManualPdqmMatch() { // ActiveParticipant Destination var destination = event.getActiveParticipants().get(1); assertFalse(destination.isUserIsRequestor()); - assertEquals("http://localhost:" + DEMO_APP_PORT + "/Patient", destination.getUserID()); + assertEquals("http://localhost:" + DEMO_APP_PORT + "/Patient/$match", destination.getUserID()); assertEquals(AuditUtils.getLocalIPAddress(), destination.getNetworkAccessPointID()); // Audit Source @@ -107,8 +112,6 @@ public void testSendManualPdqmMatch() { var query = event.getParticipantObjectIdentifications().get(0); assertEquals(ParticipantObjectTypeCode.System, query.getParticipantObjectTypeCode()); assertEquals(ParticipantObjectTypeCodeRole.Query, query.getParticipantObjectTypeCodeRole()); - assertEquals("family=Test&_format=xml", - new String(query.getParticipantObjectQuery(), StandardCharsets.UTF_8)); assertEquals(FhirParticipantObjectIdTypeCode.PatientDemographicsMatch, query.getParticipantObjectIDTypeCode()); @@ -120,7 +123,12 @@ public void testSendManualPdqmMatch() { @Test public void testSendEndpointParametersResource() { var p = new Parameters(); - p.addParameter().setResource(new Patient()); + p.addParameter() + .setName(RESOURCE) + .setResource(new Patient().addName(new HumanName().setFamily("Test"))); + p.addParameter() + .setName(COUNT) + .setValue(new IntegerType(1)); var result = sendViaProducer(p); // printAsXML(result); @@ -144,7 +152,7 @@ public void testSendEndpointParametersResource() { // ActiveParticipant Destination var destination = event.getActiveParticipants().get(1); assertFalse(destination.isUserIsRequestor()); - assertEquals("http://localhost:" + DEMO_APP_PORT + "/Patient", destination.getUserID()); + assertEquals("http://localhost:" + DEMO_APP_PORT + "/Patient/$match", destination.getUserID()); assertEquals("localhost", destination.getNetworkAccessPointID()); assertEquals(NetworkAccessPointTypeCode.MachineName, destination.getNetworkAccessPointTypeCode()); @@ -152,8 +160,6 @@ public void testSendEndpointParametersResource() { var query = event.getParticipantObjectIdentifications().get(0); assertEquals(ParticipantObjectTypeCode.System, query.getParticipantObjectTypeCode()); assertEquals(ParticipantObjectTypeCodeRole.Query, query.getParticipantObjectTypeCodeRole()); - assertEquals("family=Test", - new String(query.getParticipantObjectQuery(), StandardCharsets.UTF_8)); // Audit Source var sourceIdentificationType = event.getAuditSourceIdentification(); diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti83/TestIti83Success.java b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti83/TestIti83Success.java index 89ac46440c..f066f1e589 100644 --- a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti83/TestIti83Success.java +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti83/TestIti83Success.java @@ -18,7 +18,6 @@ import org.hl7.fhir.r4.model.CapabilityStatement; import org.hl7.fhir.r4.model.Identifier; -import org.hl7.fhir.r4.model.Parameters; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.openehealth.ipf.commons.audit.codes.*; From 61c969411f1bbeeca1d0779f4f802b88ad0986ce Mon Sep 17 00:00:00 2001 From: Christian Ohr Date: Wed, 18 Dec 2024 09:33:46 +0100 Subject: [PATCH 4/4] #448: small fixes --- .../ipf/boot/fhir/IpfFhirAutoConfiguration.java | 9 ++------- .../camel/ihe/fhir/iti119/TestIti119Success.java | 6 +++--- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/boot/ipf-fhir-r4-spring-boot-starter/src/main/java/org/openehealth/ipf/boot/fhir/IpfFhirAutoConfiguration.java b/boot/ipf-fhir-r4-spring-boot-starter/src/main/java/org/openehealth/ipf/boot/fhir/IpfFhirAutoConfiguration.java index 1ba90a9209..e1c7bf4934 100644 --- a/boot/ipf-fhir-r4-spring-boot-starter/src/main/java/org/openehealth/ipf/boot/fhir/IpfFhirAutoConfiguration.java +++ b/boot/ipf-fhir-r4-spring-boot-starter/src/main/java/org/openehealth/ipf/boot/fhir/IpfFhirAutoConfiguration.java @@ -19,11 +19,8 @@ import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.narrative.INarrativeGenerator; import ca.uhn.fhir.narrative2.NullNarrativeGenerator; -import ca.uhn.fhir.rest.server.ApacheProxyAddressStrategy; -import ca.uhn.fhir.rest.server.IPagingProvider; -import ca.uhn.fhir.rest.server.IServerAddressStrategy; -import ca.uhn.fhir.rest.server.IServerConformanceProvider; -import ca.uhn.fhir.rest.server.RestfulServer; +import ca.uhn.fhir.rest.server.*; +import jakarta.servlet.Filter; import org.hl7.fhir.instance.model.api.IBaseConformance; import org.openehealth.ipf.boot.atna.IpfAtnaAutoConfiguration; import org.openehealth.ipf.commons.ihe.fhir.IpfFhirServlet; @@ -44,10 +41,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.filter.CorsFilter; -import jakarta.servlet.Filter; import java.io.IOException; import java.io.InputStreamReader; -import java.lang.reflect.InvocationTargetException; import java.nio.charset.StandardCharsets; diff --git a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/TestIti119Success.java b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/TestIti119Success.java index f0d9466a4c..5a22404d02 100644 --- a/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/TestIti119Success.java +++ b/platform-camel/ihe/fhir/r4/pixpdq/src/test/java/org/openehealth/ipf/platform/camel/ihe/fhir/iti119/TestIti119Success.java @@ -45,12 +45,12 @@ public static void setUpClass() { } @Test - public void testGetConformance() { + public void getConformance() { assertConformance("Patient"); } @Test - public void testSendManualPdqmMatch() { + public void sendManualPdqmMatch() { var p = new Parameters(); p.addParameter() @@ -121,7 +121,7 @@ public void testSendManualPdqmMatch() { } @Test - public void testSendEndpointParametersResource() { + public void sendEndpointParametersResource() { var p = new Parameters(); p.addParameter() .setName(RESOURCE)